Vb.net 在DataGridView中手动触发按钮单击事件

Vb.net 在DataGridView中手动触发按钮单击事件,vb.net,datagridview,click,datagridviewbuttoncolumn,Vb.net,Datagridview,Click,Datagridviewbuttoncolumn,我有一个DataGridView包括一个DataGridView按钮列。用户应该能够直接使用按钮,因此我将EditMode设置为editonener。但是,第一次单击并没有触发click事件-似乎是第一次单击选择/聚焦了行/列 因此,我尝试使用CellClick事件: Private Sub dgv_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellClick Dim validClick

我有一个
DataGridView
包括一个
DataGridView按钮列
。用户应该能够直接使用按钮,因此我将
EditMode
设置为
editonener
。但是,第一次单击并没有触发
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
Private子dgv_CellClick(发送者作为对象,e作为DataGridViewCellEventArgs)处理dgv.CellClick
Dim validClick=(e.RowIndex-1和e.ColumnIndex-1)
如果(dgv.Columns的类型(例如ColumnIndex)是DataGridViewButtonColumn和validClick),则
dgv.BeginEdit(真)
CType(dgv.EditingControl,按钮).PerformClick()
如果结束
端接头
但是这个解决方案也不起作用
EditingControl
始终抛出
NullReferenceException


有什么想法吗?

我认为在单击
DataGridViewButtonColumn
单元格时,没有可以处理的特定事件。
DataGridView
Cell\u单击
CellContentClicked
事件被触发

我无法获得一次点击
DataGridView
的延迟,然后不得不再次点击以启动按钮。当我单击
DataGridView
按钮单元格时,立即触发
cell\u clicked
事件。更改
DataGridView
EditMode
没有任何区别。下面的代码简单地标识了从
cell\u 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);
  }
}

看看答案。这是一个c#问题,但答案转换为VB.NET,因此您应该能够从中选择位。谢谢,我看到了这个问题。问题不在于运行任何函数/方法/事件-问题在于,即使DataGridView EditMode是Editonner,第一次单击始终聚焦行,并且没有触发CellClick/CellContentClick事件。有什么解决办法吗?每当用户单击DataGridViewButtonColumn时,DataGridViewButtonColumn后面的代码就会触发。。。