@Killercamのソリューションが機能することがわかりましたが、ユーザーがダブルクリックするのが速すぎると少し危険でした. 他の人がそのケースを発見したかどうかはわかりません。ここで別の解決策を見つけました。
データグリッドのCellValueChanged
とを使用しCellMouseUp
ます。Changhong は次のように説明しています。
「その理由は、DataGridView が編集が完了したと判断するまで、OnCellvalueChanged イベントが発生しないためです。OnCellvalueChanged はキー ストライクごとに発生しないため、TextBox 列には意味がありますが、そうではありません [理にかなっている] CheckBoxの。」
これが彼の例からの実際の動作です。
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
// Handle checkbox state change here
}
}
そして、ユーザーがフィールドを離れるまで待つのではなく、クリックされたときに編集が完了したことをチェックボックスに伝えるコード:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
// End of edition on each click on column of checkbox
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
編集: DoubleClick イベントは、MouseUp イベントとは別に扱われます。DoubleClick イベントが検出された場合、アプリケーションは最初の MouseUp イベントを完全に無視します。このロジックは、MouseUp イベントに加えて、CellDoubleClick イベントに追加する必要があります。
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
// End of edition on each click on column of checkbox
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}