在 DataGridView 中手动触发按钮单击事件
Manually fire button click event in DataGridView
我有一个 DataGridView
,包括一个 DataGridViewButtonColumn
。用户应该可以直接使用按钮,所以我将 EditMode
设置为 EditOnEnter
。但是,第一次点击没有触发 Click
事件 - 似乎第一次点击 selects/focus row/column?
所以我尝试使用 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
.
有什么想法吗?
我认为单击 DataGridViewButtonColumn
单元格时没有可处理的特定事件。 DataGridView
的 Cell_Clicked
和 CellContentClicked
事件被触发。
我无法获得单击 DataGridView
一次的延迟,然后必须再次单击才能触发按钮。当我单击 DataGridView
按钮单元格时,立即触发了 Cell_Clicked
事件。更改 DataGridView
的 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);
}
}
我有一个 DataGridView
,包括一个 DataGridViewButtonColumn
。用户应该可以直接使用按钮,所以我将 EditMode
设置为 EditOnEnter
。但是,第一次点击没有触发 Click
事件 - 似乎第一次点击 selects/focus row/column?
所以我尝试使用 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
.
有什么想法吗?
我认为单击 DataGridViewButtonColumn
单元格时没有可处理的特定事件。 DataGridView
的 Cell_Clicked
和 CellContentClicked
事件被触发。
我无法获得单击 DataGridView
一次的延迟,然后必须再次单击才能触发按钮。当我单击 DataGridView
按钮单元格时,立即触发了 Cell_Clicked
事件。更改 DataGridView
的 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);
}
}