![](/img/trans.png)
[英]Button.Click event doesn't fire if datagridview is in editmode
[英]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
單元格時可以處理特定事件。 觸發DataGridView
的Cell_Clicked
和CellContentClicked
事件。
我無法獲得一次單擊進入DataGridView
的延遲,然后不得不再次單擊以觸發該按鈕。 當我單擊DataGridView
按鈕單元格時,立即觸發了Cell_Clicked
事件。 更改DataGridView
的EditMode
沒什么區別。 下面的代碼僅標識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.