Я знайшов рішення @ Killercam для роботи, але був трохи хитрим, якщо користувач двічі клацнув занадто швидко. Не впевнений, чи знайшли це інші. Я знайшов інше рішення тут .
Він використовує сітку даних CellValueChanged
та CellMouseUp
. Чанхун пояснює це
"Причиною цього є подія OnCellvalueChanged, яка не запускатиметься, поки DataGridView не вважатиме, що ви завершили редагування. Це має сенс для стовпця TextBox, оскільки OnCellvalueChanged не буде [заважати] спрацьовувати для кожного натискання клавіші, але це не [ мати сенс] для 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. Цю логіку потрібно додати до події CellDoubleClick на додаток до події MouseUp:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
подію?