@ Killercam'in çözümünün işe yaradığını buldum, ancak kullanıcı çok hızlı çift tıklarsa biraz tehlikeliydi. Başkalarının da davayı bulup bulmadığından emin değilim. Burada başka bir çözüm buldum .
Datagrid'in CellValueChanged
ve CellMouseUp
. Changhong bunu açıklıyor
"Bunun nedeni, DataGridView düzenlemeyi tamamladığınızı düşünene kadar OnCellvalueChanged olayının tetiklenmemesidir. Bu, OnCellvalueChanged her tuş vuruşu için tetiklenmeyeceğinden, bir TextBox Sütunu için anlamlar yaratır, ancak [ bir CheckBox için mantıklı. "
İşte onun örneğinden hareket halinde:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
Ve onay kutusuna, kullanıcının alandan çıkmasını beklemek yerine, tıklandığında düzenlemenin bittiğini söyleyen kod:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
Düzenleme: Bir DoubleClick etkinliği, MouseUp etkinliğinden ayrı olarak ele alınır. Bir DoubleClick etkinliği tespit edilirse, uygulama ilk MouseUp olayını tamamen yok sayar. Bu mantığın, MouseUp olayına ek olarak CellDoubleClick olayına eklenmesi gerekir:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
Etkinliği kontrol ettiniz mi?