Saya menemukan solusi @ Killercam untuk bekerja tetapi agak cerdik jika pengguna mengklik dua kali terlalu cepat. Tidak yakin apakah orang lain juga menemukan kasus itu. Saya menemukan solusi lain di sini .
Ini menggunakan datagrid CellValueChangeddan CellMouseUp. Changhong menjelaskan itu
"Alasannya adalah peristiwa OnCellvalueChanged tidak akan diaktifkan sampai DataGridView mengira Anda telah menyelesaikan pengeditan. Hal ini masuk akal untuk Kolom TextBox, karena OnCellvalueChanged tidak akan [repot] untuk mengaktifkan setiap pemogokan kunci, tetapi tidak [ masuk akal] untuk Kotak Centang. "
Ini dia tindakan dari contohnya:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
Dan kode untuk memberi tahu kotak centang itu selesai mengedit saat diklik, alih-alih menunggu sampai pengguna meninggalkan bidang:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
Edit: Peristiwa DoubleClick diperlakukan terpisah dari peristiwa MouseUp. Jika peristiwa DoubleClick terdeteksi, aplikasi akan mengabaikan sepenuhnya peristiwa MouseUp pertama. Logika ini perlu ditambahkan ke acara CellDoubleClick selain acara MouseUp:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChangedAcara?