Вручную запустить событие нажатия кнопки в DataGridView
У меня есть DataGridView
в том числе DataGridViewButtonColumn
, Пользователь должен иметь возможность использовать кнопку напрямую, поэтому я установил EditMode
в EditOnEnter
, Но первый щелчок не Click
событие - кажется, что первый щелчок выбирает / фокусирует строку / столбец?
Поэтому я попытался использовать CellClick
Событие:
Private Sub dgv_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellClick
Dim validClick = (e.RowIndex <> -1 And e.ColumnIndex <> -1)
If (TypeOf dgv.Columns(e.ColumnIndex) Is DataGridViewButtonColumn And validClick) Then
dgv.BeginEdit(True)
CType(dgv.EditingControl, Button).PerformClick()
End If
End Sub
Но и это решение не сработало. EditingControl
всегда бросает NullReferenceException
,
Есть идеи?
1 ответ
Я не думаю, что есть конкретное событие, доступное для обработки, когда DataGridViewButtonColumn
ячейка нажата. DataGridView
"s Cell_Clicked
а также CellContentClicked
события начинаются.
Я не смог получить задержку щелчка в DataGridView
затем снова нужно нажать, чтобы запустить кнопку. Когда я нажал на DataGridView
клетка кнопки, Cell_Clicked
Событие было немедленно запущено. Изменение DataGridView
"s EditMode
не имеет значения. Код ниже просто определяет, какая ячейка была нажата из Cell_Clicked
событие. Если ячейка, по которой щелкнули, была столбцом кнопки (1 или 2), то я вызываю созданный метод ButtonHandler
обрабатывать, какая кнопка была нажата, и перейти к правильному методу кнопки. Надеюсь это поможет.
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == 1 || e.ColumnIndex == 2) {
// one of the button columns was clicked
ButtonHandler(sender, e);
}
}
private void ButtonHandler(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == 1) {
MessageBox.Show("Column 1 button clicked at row: " + e.RowIndex + " Col: " + e.ColumnIndex + " clicked");
// call method to handle column 1 button clicked
// MethodToHandleCol1ButtonClicked(e.RowIndex);
}
else {
MessageBox.Show("Column 2 button clicked at row: " + e.RowIndex + " Col: " + e.ColumnIndex + " clicked");
// call method to handle column 2 button clicked
// MethodToHandleCol2ButtonClicked(e.RowIndex);
}
}