Я создал wxGrid, заполнил его данными, создал столбец, содержащий флажки, и сделал их редактируемыми. Пока все хорошо.
co_Grid->SetReadOnly(at_RowCount, 24, false);
co_Grid->SetCellRenderer(at_RowCount, 24, new wxGridCellBoolRenderer);
co_Grid->SetCellEditor(at_RowCount, 24, new wxGridCellBoolEditor);
Теперь я хочу добавить обработчик событий для события переключения флажка.
Я пытался использовать OnCellValueChanged
событие для сетки, но оно срабатывает только после того, как пользователь покидает ячейку, потому что до этого редактор все еще открыт (а ячейка еще не изменилась)
Я уверен, что мне нужно создать обработчик событий для wxGridCellBoolEditor
но вот где я борюсь.
Я пытался подключить событие в OnEditorShown
событие, но это не сработало (необработанное исключение, когда я нажимаю на ячейку, чтобы открыть редактор):
void cTeamGrid::OnEditorShown( wxGridEvent& ev )
{
int row = ev.GetRow(),
col = ev.GetCol();
co_Grid->GetCellEditor(row, col)->GetControl()->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED,
wxCommandEventHandler(cTeamGrid::OnGridCheckChange), NULL, this);
}
Что я делаю неправильно?
У меня была похожая проблема. Я обошел его, установив столбец флажка только для чтения, а элемент управления wxGrid вручную обработал событие click, чтобы переключить состояние флажка (вам также нужно управлять двойным щелчком). Этот метод не самый ортодоксальный, потому что теперь каждый щелчок по ячейке, а не по флажку, будет менять состояние. На мой взгляд, однако, это также может быть желательным поведением. Кроме того, это позволяет пользователю изменять флажок с помощью клавиатуры (путем захвата событий KeyPress).
Других решений пока нет …