簡體   English   中英

在DataGridView中手動觸發按鈕單擊事件

[英]Manually fire button click event in 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

有任何想法嗎?

我不認為單擊DataGridViewButtonColumn單元格時可以處理特定事件。 觸發DataGridViewCell_ClickedCellContentClicked事件。

我無法獲得一次單擊進入DataGridView的延遲,然后不得不再次單擊以觸發該按鈕。 當我單擊DataGridView按鈕單元格時,立即觸發了Cell_Clicked事件。 更改DataGridViewEditMode沒什么區別。 下面的代碼僅標識WHICH單元是從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);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM