代码之家  ›  专栏  ›  技术社区  ›  Coder

在不触发事件的情况下更新用户界面状态的模式

  •  1
  • Coder  · 技术社区  · 14 年前

    大多数图形用户界面应用程序都有多种自动处理选项,比如编辑框触发自动完成、列表框更改图标和产品描述、RadioButton触发文本更新等。

    不幸的是,经常需要以编程方式更改其中一些控件的状态,同时阻止链接控件、ListBox OnSelectedItemChange、RadioBox OnSelectedItemChange等的自动触发器。

    你是不是有一个模式来实现这个目标?我想可以在每个控件上添加一个“m-bdisableventtrigger”变量,并在用户界面更新之前和之后设置它,但是也许有更好的方法可以用更少的额外丑陋代码实现相同的事情。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Sunscreen    14 年前

    您可以使用以下方法禁用所需的控件(例如IDC_YourControl):

    getdlgitem(idc_YourControl)->启用窗口(false);

    使用此功能,不会触发YOR控制的相关触发器。完成后,您可以启用控件。

        2
  •  0
  •   valdo    14 年前

    imho如果不深入了解具体的实现细节,就不可能回答这样的问题。 显然,这种模式存在。阻止某些“自动”行为的“主”或“每个控件”标志的存在仅由用于这些“自动”调整的框架决定。

        3
  •  0
  •   David Heffernan    14 年前

    我在Delphi应用程序中执行此操作。发生的情况是,每当进行可能影响控件状态的更改时,都会向该更改发送一条消息。当应用程序空闲时,即在任何预先存在的消息完成其处理后,将处理该消息。

    然后处理此消息为所有控件设置UI状态,并完成作业。当然,在Delphi中这很容易,因为VCL非常方便地包装了底层的win32 api。