2010-03-30 2 views
4

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

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

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

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

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

+0

Спасибо. Оно работает. Я собирался вставить свой код, но кажется, что в комментарии нет этой приятной функции просмотра кода. Якуб –

1

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

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

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

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

Смежные вопросы