如何在功能上设置多个事件

How to set multiple events on function

本文关键字:事件 设置 功能上      更新时间:2023-10-16

如何调用一个已经附加了事件的函数?

我希望能够像这样调用函数:

statsDialog::statsDialog(..) : wxDialog(..) {
    updateStats();
}

或者,如何绑定多个事件处理程序到一个函数?例如,使用wxEVT_SET_FOCUS事件调用updateStats,当UPDATE_STATS_BUTTON被按下时。我怎么能做到这一点,而不重复代码(复制updateStats函数只是将其更改为wxFocusEventHandler)?

BEGIN_EVENT_TABLE(statsDialog, wxDialog)
EVT_BUTTON(UPDATE_STATS_BUTTON, statsDialog::updateStats)
END_EVENT_TABLE()
statsDialog::statsDialog(..) : wxDialog(..) {    
    // layout stuff
}
void
statsDialog::updateStats(wxCommandEvent& event) {
    // do stuff on dialog focus AND when UPDATE_STATS_BUTTON is pressed
}

只需从焦点和按钮事件处理程序调用一个名为DoUpdateStats()的函数。当使用带有Bind():

的c++ 11时,这一点尤其微不足道。
Bind(wxEVT_SET_FOCUS, [](wxFocusEvent& e) { e.Skip(); DoUpdateStats(); });
btn->Bind(wxEVT_BUTTON, [](wxCommandEvent&) { DoUpdateStats(); });