【问题标题】:Popup menu doesn't refresh imediatly in DelphiDelphi中的弹出菜单不会立即刷新
【发布时间】:2014-09-26 16:20:04
【问题描述】:

我有一个弹出菜单,当单击 StringGrid 时,它会在右键单击事件中打开。在此菜单中,我有一个为列着色的选项。假设我有一个选项可以将选定的列着色为蓝色。当我单击蓝色时,列颜色设置为蓝色,并且我有一个布尔值表示列已着色。

我的问题是,如果列不是 colorod 列,我想禁用将列着色为蓝色的选项。我有一个数组,我在其中存储了网格中的所有数据,并且我在数组中标题名称的末尾添加了一个#colored 标记。

现在我正在这样做:

在弹出菜单的我的着色选项中。我们只能用蓝色为一列着色。

if Pos('#',sourceData[0,grid.col]) <> 0 then
   SourceData[0,grid.col] := COPY(SourceData[0,grid.col],0, Pos('#', SourceData[0,grid.col])-1);

columnColored := true;

还有一些其他代码可以为列着色,但在这里并不重要。

然后在字符串网格中mousedownevent:

if Button = mbRight then
  begin
    if columnColored then
      begin
        if Pos('#colored',SourceData[0,grid.col]) <> 0 then
            pmColorBlue.enabled := true
        else
            pmColorBlue.enabled := false;
      end;
  end;

问题

这是工作的问题是它有一个潜伏期。当我右键单击已着色的列时,我希望能够重新单击它并再次设置默认的 oclor。但是,如果该列与着色的列不同,则该选项应保持禁用状态。

问题是,当我单击彩色列时,然后在我单击另一个非彩色列之后。我的弹出菜单中的蓝色选项仍然可用,如果我再次单击同一列,蓝色选项将被禁用。所以我基本上必须在一个列上单击两次才能从我的 opup 菜单中禁用颜色选项。

我该如何解决它,所以当我单击彩色列时,该选项被启用,但是当我单击另一个选项时,该选项应该被禁用。现在要禁用该选项,我必须单击两次右键,因为第一次该选项仍然可用。如果我首先单击非彩色列然后单击我的彩色列,这也是同样的问题。首先该选项被禁用,然后我单击我的彩色列,该选项仍然处于禁用状态,我重新单击我的彩色列并启用该选项。

我不知道为什么会这样。你能帮帮我吗?

【问题讨论】:

    标签: delphi popupmenu


    【解决方案1】:

    将 StringGridMouseDown 事件中的代码移动到弹出菜单的 OnPopup 事件中。 这些事件可能以(对于您的情况)错误的顺序触发。

    【讨论】:

    • 哦,我又一次不知道这一点。谢谢你。顺便说一句,它是 OnPopup。成功了,谢谢\o/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2020-08-14
    • 2021-05-30
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多