Controlli delle voci radio del menu a comparsa
-
08-07-2019 - |
Domanda
Sto usando un menu popup con wxTaskBarIcon su Windows (wxWidgets-2.8.9). Se riempio il menu popup con elementi radio, questi non cambiano stato quando si fa clic. Il primo elemento nell'elenco del menu a comparsa è contrassegnato come selezionato. Ma selezionare qualsiasi altro elemento non cambia questo.
Attualmente non esiste un gestore di eventi clic elemento (l'applicazione è più simile al prototipo dell'interfaccia utente). Devo aggiornare manualmente lo stato di verifica degli articoli in questo gestore o è ancora un dovere del framework?
Soluzione
Dovresti usare EVT_UPDATE_UI (yourCommandID, yourEventHandler)
per controllare / deselezionare e abilitare / disabilitare le voci di menu.
Nel gestore eventi UpdateUI è necessario specificare i casi in cui l'elemento è abilitato
Per esempio. hai un gruppo di pulsanti radio con i comandi ID_RADIO_1 e ID_RADIO_2 e dovrebbero essere controllati in base alla condizione bool m_SomeConditionVariable
, quindi dovresti creare 2 gestori di eventi per loro come
void OnRadio1UpdateUI(wxUpdateUIEvent & event)
{
event.Checked(m_SomeConditionVariable == true);
}
void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
event.Checked(m_SomeConditionVariable == false);
}
e in questo caso la prima voce radio verrà controllata solo quando la variabile è falsa e la seconda verrà controllata quando la variabile è vera.
Puoi anche utilizzare una condizione calcolata instabile per l'archiviazione della variabile, ad esempio
void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
// Item will be enabled only when text control has non-empty value
event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}