Как создать событие Checkbox Change для ячейки wxGrid

Я создал 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);
}

Что я делаю неправильно?

2

Решение

У меня была похожая проблема. Я обошел его, установив столбец флажка только для чтения, а элемент управления wxGrid вручную обработал событие click, чтобы переключить состояние флажка (вам также нужно управлять двойным щелчком). Этот метод не самый ортодоксальный, потому что теперь каждый щелчок по ячейке, а не по флажку, будет менять состояние. На мой взгляд, однако, это также может быть желательным поведением. Кроме того, это позволяет пользователю изменять флажок с помощью клавиатуры (путем захвата событий KeyPress).

0

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

Других решений пока нет …

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