Как поймать KeyEvents при показе редактора wxGrid

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

Мой подход:

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

Другие решения

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

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

1

По вопросам рекламы [email protected]