2016-11-27 9 views
0

При вводе в ячейку в wxGrid клавиши со стрелками работают для возврата назад и вперед между символами. Однако, в зависимости от позиции каретки, я хотел бы переместить курсор в следующую ячейку при нажатии клавиши со стрелкой. В настоящее время wxGrid настроен на захват клавиши Enter, что заставляет курсор двигаться вниз (в ячейку ниже). Мой вопрос: как я могу захватить KeyEvent, когда редактор все еще отображается.Как поймать KeyEvents, когда отображается редактор wxGrid

Мой подход:

void Grid::OnGridCmdEditorShown(wxGridEvent& event) 
{ 
    m_IsEditorShown=true; 
    //Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(Grid::OnKeyDown),NULL, this); //This approach did not help either 
    event.Skip(); 
} 

void Grid::OnKeyDown(wxKeyEvent& event) 
{ 
    if(m_IsEditorShown) wxMessageBox("You are keying"); 

    event.Skip(); 
} 

Когда редактор показан и сказать, что я типа abc к текущей ячейке, то MessageBox появляется только тогда, когда я нажимаю войти. Как можно поймать KeyEvents, когда редактор все еще отображается, например, пользовательские типы a для текущей ячейки и MessageBox.

ответ

0

Один из способов, который работал для меня было подключить обработчик каждого редактора сетки после того, как он был создан, добавляя это Grid конструктор:

Bind(wxEVT_GRID_EDITOR_CREATED, [=](wxGridEditorCreatedEvent& event) { 
     event.GetControl()->Bind(wxEVT_KEY_DOWN, &Grid::OnKeyDown, this); 
    }); 

Это не обрабатывать начальное нажатие клавиши, которая приводит к показу редактора в первую очередь, но из того, что я понимаю, здесь не нужно.

+0

Работал очень хорошо, спасибо! – macroland

1

Вам необходимо использовать специальный редактор (возможно, только исходя из стандарта wxGridCellTextEditor) и связать с событием wxEVT_CHAR элемента управления редактирования, созданного в его Create().

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

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

  • Нет связанных вопросов^_^