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 CellValueChanged
dan 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();
}
}
CurrentCellDirtyStateChanged
Acara?