我正在尝试以用户执行的方式以编程方式更改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 )
非常感谢一个简单的例子。
答案 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()
。