2016-07-26 14 views
0

Was ich tun möchte, ist eine Bedingung für die Schaltfläche hinzufügen, wenn die Bedingung nicht erfüllt ist, tut die Schaltfläche nichts. Ich habe versucht, diese Einstellung zuerst mit einem normalen wxwidgets-Button zu erstellen, konnte aber keine einfache Möglichkeit finden, den Stil der Schaltfläche zu ändern, nachdem meine Bedingung erfüllt wurde.WxWidgets - ToggleButton mit conditon

+2

wxWindow :: Aktivieren (bool aktiviert) –

+0

@JonTrauntvein Aus der Dokumentation scheint es nicht zu tun, was ich will. Momentan prüfe ich die Bedingung für das Umschalten im Event-Handler "wxEVT_COMMAND_TOGGLEBUTTON_CLICKED", wenn ich das toggle-button deaktivieren wollte, konnte ich die Bedingung dafür nicht mehr überprüfen. –

+0

Haben Sie die Vererbung versucht und den Event-Handler überschrieben? –

Antwort

0

Während nicht schön ich es durch Setzen des ToggleButton Wert durch die SetValue (Bool) -Funktion festgelegt und es auf false setzen un-drücken Sie die Taste, wenn die Bedingung fehlgeschlagen:

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

Die einfachste und eleganteste Lösung für diese Art von Problemen ist es, einen wxEVT_UPDATE_UI Handler für die Schaltfläche zu definieren, der es deaktivieren würde, wenn eine Bedingung erfüllt ist. Zum Beispiel, können Sie unter der Annahme verwenden C++ 11:

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

WxWidgets wird die definierte Ereignishandler nach jeder Änderung in der Benutzeroberfläche aufrufen und den Zustand der Taste automatisch aktualisiert.

Dies ist vorzuziehen, um den Knopfzustand manuell zu verwalten, da es sehr leicht ist zu vergessen, ihn zu aktualisieren, besonders wenn die Bedingung kompliziert ist und/oder von den Werten mehrerer anderer Steuerungen abhängt.