文章 "图形界面 X: 高级列表和表格管理。代码优化 (集成构建 7)" - 页 6

 
Anatoli Kazharski:

嗯,你不习惯 "来回重新设计"。)

下周可能会有一篇新文章。我将介绍多行输入框 的第一个版本。在随后的文章中,我将逐步添加私下和论坛上讨论的所有内容。

我将添加方法 ItemsSelectedTotal(); ItemsUnselectedTotal(); 以及 ItemsTotal();
 
Artyom Trishkin:
我想添加方法 ItemsSelectedTotal(); ItemsUnselectedTotal(); 以及 ItemsTotal();

添加到CListView CCheckBoxList 中?

我会的,但不是在下一篇文章中。因此,这将是一篇相当大的文章。

 
Anatoli Kazharski:

CListView CCheckBoxList

我会添加,但不是在下一篇文章中。这是一篇相当大的文章。

是的,在其中。好的,谢谢。
 

Tol,我怎样才能通过编程找出列表项中哪个复选框已打勾。而不需要点击它。

我需要数组列表中所有打勾的项目。

我被难住了。请告诉我应该从哪个方向查找。

 
Artyom Trishkin:

Tol,我怎样才能通过编程找出列表项中哪个复选框已打勾。而不需要点击它。

我需要数组列表中所有打勾的项目。

我被难住了。请告诉我应该从哪个方向查找。

CCheckBoxList::GetItemState()
 
Anatoli Kazharski:
CCheckBoxList::GetItemState()

谢谢。我就是这么做的。我是从 0 循环到 ItemsTotal()。是我的错,所以才会出现故障。

能告诉我切换时间框架时复选框的状态是否会重置吗?

如果是,有什么方法可以避开这个不愉快的时刻?(我的复选框状态是重置的,也许我做错了什么)。

 
Artyom Trishkin:

谢谢。我就是这么做的。我是从 0 循环到 ItemsTotal()。是我的错,所以才会出现故障。

请问切换时间框架时,复选框的状态是否会重置?

如果是,有什么方法可以避开这个不愉快的时刻?(我重置了它们,也许我做错了什么)。

您需要写入一个文件。安装图形用户界面时要读取文件。这是未来文章的主题,还有很长的路要走。

 
Anatoli Kazharski:

你必须写入一个文件。并在安装图形用户界面时读取它。这是未来文章的主题,还有很长的路要走。

我已经在做了。没等你快速回复;)
 

Anatol,我正试图将写入第 0 列表格行中字符的 Bid 价格写入计时器中的表格:

//+------------------------------------------------------------------+
//| 定时器|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
  {
   CWndEvents::OnTimerEvent();
   //--- 在更新列表和表格之间暂停
   if(m_counter1.CheckTimeCounter()) {
      uint sz=m_table_main_symbol_list.RowsTotal();
      for(uint i=1; i<sz; i++) {
         string sy=m_table_main_symbol_list.GetValue(0,i);
         MqlTick tick;
         if(sy!=NULL && sy!="") {
            if(SymbolInfoTick(sy,tick)) {
               int dg=(int)SymbolInfoInteger(sy,SYMBOL_DIGITS);
               m_table_main_symbol_list.SetValue(1,i,DoubleToString(tick.bid,dg),dg);
               m_table_main_symbol_list.TextColor(1,i,clrDimGray);
               //m_table_main_symbol_list.UpdateTable();
               }
            }
         }
      //--- 重绘图形
      m_chart.Redraw();
      }
//--- 在状态栏更新之间暂停
   if(m_counter2.CheckTimeCounter()) {

      //--- 重绘图形
      m_chart.Redraw();
      }
  }
//+------------------------------------------------------------------+

如果不使用 UpdateTable(),表格单元格 中就不会出现数据。如果每次获得新的刻度线时都更新表格,则无法使用表格 - 它会闪烁,突出显示的行会闪烁,等等....。

如何摆脱这种情况?

 
Artyom Trishkin:

阿纳托尔,我正试图在一个计时器的表格中,在索引为 1 的列中写入在表格第 0 列的行中输入的字符的买入价:

...

如果不使用 UpdateTable(),表格单元格中不会出现任何数据。如果每次收到新的勾选都更新表格,那么就无法使用表格 - 它会闪烁,选中的行也会闪烁,等等....。

如何摆脱这种情况?

没有足够的数据来重现。请附上一个完整的示例,以便我自己复制。