WxWidgets - 带条件的切换按钮

WxWidgets - ToggleButton with condition

我想做的是为按钮添加一个切换条件,如果条件不满足按钮什么都不做。我首先尝试使用普通的 wxwidgets 按钮创建此设置,但在满足我的条件后找不到更改按钮样式的简单方法。

虽然不太好,但我通过 SetValue(bool) 函数设置切换按钮值来修复它,并将其设置为 false 以在条件失败时取消切换按钮:

void MyButton::onPressed(wxCommandEvent& event) {
    if (CONDITION) {
        SetValue(false);
    }
}

解决此类问题的最简单、最优雅的解决方案是为按钮定义一个 wxEVT_UPDATE_UI 处理程序,如果某些条件为真,该处理程序将禁用它。例如,假设您可以使用 C++11:

myButton->Bind(wxEVT_UPDATE_UI, [=](wxUpdateUIEvent& event) {
    event.Enable( some-condition-for-the-button-to-make-sense );
});

wxWidgets 将在 UI 发生任何变化后调用定义的事件处理程序并自动更新按钮的状态。

这比手动管理按钮状态更可取,因为很容易忘记更新它,尤其是在条件复杂的情况下and/or 取决于其他几个控件的值。