Как вызвать программно сгенерированное событие для wxRadioButton в wxWidgets? - PullRequest
4 голосов
/ 30 марта 2010

Я пытаюсь программно изменить значение wxRadioButton так, как это сделал бы пользователь. Изменение значения не вызывает событие, соответствующее кнопке, и это имеет смысл, поскольку в документации ясно сказано:

wxRadioButton::SetValue
void SetValue(const bool value)
Sets the radio button to selected or deselected status.
This does not cause a wxEVT_COMMAND_RADIOBUTTON_SELECTED event to get emitted.

Итак, вопрос в том, как я могу вызвать программно сгенерированное событие для wxRadioButton?

Полагаю, это как-то связано:

wxWindow window->AddPendingEvent(wxEvent *event )

Простой пример был бы очень признателен.

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

Вы можете использовать AddPendingEvent или ProcessEvent (обрабатывать немедленно).

 bttn->SetValue(true);
 wxCommandEvent ev(wxEVT_COMMAND_RADIOBUTTON_SELECTED, id_button);
 bttn->GetEventHandler()->ProcessEvent(ev);

Также должно быть возможно использовать wxControl :: Command , но мне кажется, что SetValue следует вызывать после этого (?).

1 голос
/ 09 апреля 2010

Хотя вышеперечисленное может работать в этом случае, не гарантируется, что оно будет работать для всех элементов управления (и на самом деле не работает со многими элементами управления), и поэтому рекомендуемый способ сделать то, что вы хотите, то есть, я полагаю, вызвать свой собственный Обработчик этого события заключается в извлечении кода обработчика события в отдельную функцию, которую вы можете просто вызвать. Например

class MyFrame {
...
    void DoHandleRadioButton() { /* your code here */ }

    void OnRadioButton(wxCommandEvent& event) { DoHandleRadioButton(); }
};

, а затем просто позвоните DoHandleRadioButton().

...