Но, если клавиша Enter нажата на недопустимом элементе, то выдается wxMessageBox
с кнопкой OK. Если этот диалог закрыть клавишей Enter, то возникает событие, которое
опять обрабатывается FolderViewListCtrl::OnKeyUp( wxKeyEvent& event ).
Получается зацикливание.
Вопрос: как проигнорировать Enter от wxMessageBox или определить, что событие пришло от wxMessageBox?
Code: Select all
BEGIN_EVENT_TABLE( FolderViewListCtrl, wxListCtrl )
EVT_KEY_UP( FolderViewListCtrl::OnKeyUp )
END_EVENT_TABLE()
void FolderViewListCtrl::OnKeyUp( wxKeyEvent& event )
{
////@begin wxEVT_KEY_UP event handler for ID_LISTCTRL in FolderViewListCtrl.
event.Skip();
////@end wxEVT_KEY_UP event handler for ID_LISTCTRL in FolderViewListCtrl.
// Игнорируем события от других дочерних окон
if( event.GetId() != ID_LISTCTRL ) return; // ***Здесь мы никогда не получаем неравенства
int keycode = event.GetKeyCode();
switch(keycode)
{
case WXK_RETURN:
long item = -1;
item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
if(item==2) // Здесь условие другое (типа допустимо ли для данного элемента WXK_RETURN)
{
////SetEvtHandlerEnabled(false); // ***Не работает
wxMessageBox(wxT("WXK_RETURN не допустимо"), wxT("Предупреждение"), wxOK,::wxGetTopLevelParent(this));
////SetEvtHandlerEnabled(true); // ***Не работает
}
event.Skip(false);
break;
}
}