Я хотел бы добавить условие для переключения кнопки, если условие не выполняется, кнопка ничего не делает. Сначала я попытался создать эту настройку с помощью обычной кнопки 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 вызовет определенный обработчик событий после любого изменения в пользовательском интерфейсе и автоматически обновит состояние кнопки.
Это предпочтительнее, чем управление состоянием кнопки вручную, так как ее очень легко забыть обновить, особенно если условие сложное и / или зависит от значений нескольких других элементов управления.