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 取决于其他几个控件的值。
我想做的是为按钮添加一个切换条件,如果条件不满足按钮什么都不做。我首先尝试使用普通的 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 取决于其他几个控件的值。