У меня есть еще один вопрос wxWidgets относительно событий и фокуса.wxWidgets event focus textcontrol
Я уже посмотрел на учебниках и этот старый вопрос здесь, но я до сих пор работаю с проблемами C++ Event (Focus) Handling
В принципе у меня есть диалог с двумя элементами wxTextCtrl и Баттоном. То, что я хотел бы достичь, заключается в том, что, когда я нажимаю на кнопку, мне нужно сказать, какой из двух элементов ранее имел фокус.
В конструкторе моего диалога, я создал все элементы, а затем соединили их к EventHandler, как это: Ttop->Connect(TOP,wxEVT_KILL_FOCUS,(wxObjectEventFunction)&UI_ADDENTRY::hasfocus); Tbottom->Connect(BOTTOM,wxEVT_KILL_FOCUS,(wxObjectEventFunction)&UI_ADDENTRY::hasfocus);
то есть EventHandler, что сейфы ид в фокусе
void UI_ADDENTRY::hasfocus(wxFocusEvent& event){
focus= event.GetId();
event.Skip();}
однако когда я пытаюсь получить доступ к фокусу в функции Button, которую он всегда говорит мне: 0 вместо TOP или BOTTOM/идентификаторы, которые я дал текстовым управлениям
void UI_ADDENTRY::OnRecord(wxCommandEvent &event){
wxString tmp;
tmp << this->focus;
wxMessageBox(tmp);}
Что я делаю неправильно? есть ли другой способ узнать, какой из двух текстовых полей был в центре внимания?
Спасибо
Не могли бы вы просто проверить 'Ttop-> HasFocus()' и 'Tbottom-> HasFocus()' в вашем обработчике кликов? –
Я пробовал это изначально ... как это правильно, если (Ttop-> HasFocus()) { wxMessageBox ("TOP"); }, но, похоже, не все верно. –
Нажав кнопку, вы удалите фокус с wxTextCtrl. Если он устанавливает условие гонки, которое может дать основание для этого лишь иногда возвращать true. –