Проверка элементов радио во всплывающем меню

StackOverflow https://stackoverflow.com/questions/631580

  •  08-07-2019
  •  | 
  •  

Вопрос

Я использую всплывающее меню с wxTaskBarIcon для окон (wxWidgets-2.8.9). Если я заполняю всплывающее меню радио-пунктами, они не меняют состояние при нажатии Первый пункт в списке всплывающего меню помечается как выбранный. Но выбор любого другого элемента не меняет этого.

В настоящее время нет обработчика события щелчка элемента (приложение больше похоже на прототип пользовательского интерфейса). Должен ли я вручную обновлять статус проверки элемента в этом обработчике, или это все еще является обязанностью фреймворка?

Это было полезно?

Решение

Вы должны использовать EVT_UPDATE_UI (yourCommandID, yourEventHandler) для проверки / снятия отметки и включения / выключения пунктов меню. В вашем обработчике события UpdateUI вы должны указать случаи, когда ваш элемент включен Например. у вас есть группа радиокнопок с командами ID_RADIO_1 и ID_RADIO_2, и они должны быть проверены в зависимости от условия bool m_SomeConditionVariable , затем вы должны создать для них 2 обработчика событий, например

void OnRadio1UpdateUI(wxUpdateUIEvent & event)
{
    event.Checked(m_SomeConditionVariable == true);
}

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    event.Checked(m_SomeConditionVariable == false);
}

и в этом случае первый радиоэлемент будет проверяться, только если переменная равна false, а второй будет проверяться, когда переменная равна true.

Вы также можете использовать вычисленное условие для хранения переменной, например.

void OnRadio2UpdateUI(wxUpdateUIEvent & event)
{
    // Item will be enabled only when text control has non-empty value
    event.Enabled(!m_SomeTextCtrl->GetValue().Trim().IsEmpty());
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top