2017-01-16 23 views
0

DataGridViewにはDataGridViewButtonColumnが含まれています。ユーザーはボタンを直接使用できるはずですので、EditModeEditOnEnterに設定します。しかし、最初のクリックはClickイベントを発生させませんでした - 最初のクリックが行/列を選択/フォーカスするようですか?DataGridViewで手動でボタンのクリックイベントを発生させます

だから私は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

は[こちら](http://stackoverflow.com/questions/3577297/how-to-handle-click-event-in-button-column-in-datagridview)の回答を見てください。あなたがビットを選ぶことができるはずですので、答えはVB.NETに変換されますが、C#の質問です。 – Bugs

+0

ありがとう、私はこの質問を見ました。この問題は、関数/メソッド/イベントを実行することではなく、**最初のクリックで常に行がフォーカスされ、DataGridView EditModeがEditOnEnter **であってもCellClick/CellContentClickイベントが発生しないという問題があります。回避策はありますか?ユーザーがDataGridViewButtonColumnをクリックするたびにDataGridViewButtonColumnの背後にあるコードが起動するはずです... – tmieruch

答えて

1

DataGridViewButtonColumnセルをクリックしたときに処理できる特定のイベントはありません。 DataGridViewCell_ClickedCellContentClickedイベントが発生します。

DataGridViewにクリックしてからもう一度クリックしてボタンを放つのを遅らせることができませんでした。 DataGridViewボタンセルをクリックすると、すぐにCell_Clickedイベントが発生しました。 DataGridViewEditModeを変更しても違いはありません。以下のコードは、単にCell_ClickedイベントからクリックされたWHICHセルを示しています。クリックされたセルがボタン列(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); 
    } 
} 
関連する問題