@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)
{
}
}
そして、ユーザーがフィールドを離れるまで待つのではなく、クリックされたときに編集が完了したことをチェックボックスに伝えるコード:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
編集:DoubleClickイベントはMouseUpイベントとは別に扱われます。DoubleClickイベントが検出された場合、アプリケーションは最初のMouseUpイベントを完全に無視します。このロジックは、MouseUpイベントに加えてCellDoubleClickイベントに追加する必要があります。
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
イベントをチェックしましたか?