如何在wxWidgets中为wxRadioButton调用以编程方式生成的事件?

时间:2010-03-30 15:13:16

标签: c++ events wxwidgets

我正在尝试以用户执行的方式以编程方式更改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 )

非常感谢一个简单的例子。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

class MyFrame {
...
    void DoHandleRadioButton() { /* your code here */ }

    void OnRadioButton(wxCommandEvent& event) { DoHandleRadioButton(); }
};

然后只需致电DoHandleRadioButton()