【问题标题】:How to call an programmatically generated event for wxRadioButton in wxWidgets?如何在 wxWidgets 中为 wxRadioButton 调用以编程方式生成的事件?
【发布时间】:2011-02-02 12:44:41
【问题描述】:

我正在尝试以用户愿意的方式以编程方式更改 wxRadioButton 的值。值更改不会调用与按钮对应的事件,这是有道理的,因为文档清楚地说明了这一点:

wxRadioButton::SetValue
void SetValue(const bool value)
Sets the radio button to selected or deselected status.
This does not cause a wxEVT_COMMAND_RADIOBUTTON_SELECTED event to get emitted.

所以问题是如何为 wxRadioButton 调用以编程方式生成的事件?

我猜这与:

wxWindow window->AddPendingEvent(wxEvent *event )

一个简单的例子将不胜感激。

【问题讨论】:

    标签: c++ events wxwidgets


    【解决方案1】:

    您可以使用 AddPendingEvent 或ProcessEvent(立即处理)。

     bttn->SetValue(true);
     wxCommandEvent ev(wxEVT_COMMAND_RADIOBUTTON_SELECTED, id_button);
     bttn->GetEventHandler()->ProcessEvent(ev);
    

    也应该可以使用wxControl::Command,但在我看来应该在那之后调用 SetValue(?)。

    【讨论】:

    • 谢谢。有用。我打算粘贴我的代码,但评论似乎没有代码查看这个不错的功能。雅库布
    【解决方案2】:

    虽然上述方法在这种情况下可能有效,但不能保证适用于所有控件(并且确实不适用于许多控件),因此推荐的方式来做你想做的事,即,我猜,调用你自己的这个事件的处理程序,是将事件处理程序代码提取到一个单独的函数中,您可以简单地调用它。例如

    class MyFrame {
    ...
        void DoHandleRadioButton() { /* your code here */ }
    
        void OnRadioButton(wxCommandEvent& event) { DoHandleRadioButton(); }
    };
    

    然后只需拨打DoHandleRadioButton()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2012-07-08
      • 1970-01-01
      • 2013-08-12
      相关资源
      最近更新 更多