J'ai trouvé que la solution de @ Killercam fonctionnait, mais j'étais un peu douteuse si l'utilisateur double-cliquait trop rapidement. Je ne sais pas si d'autres ont trouvé le cas non plus. J'ai trouvé une autre solution ici .
Il utilise les datagrid CellValueChanged
et CellMouseUp
. Changhong explique que
"La raison en est que l'événement OnCellvalueChanged ne se déclenchera pas tant que DataGridView n'aura pas pensé que vous avez terminé l'édition. Cela rend sens pour une colonne TextBox, car OnCellvalueChanged ne [dérangerait] pas de se déclencher pour chaque frappe de touche, mais il ne le fait pas [ fait sens] pour un CheckBox. "
Le voici en action d'après son exemple:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
Et le code pour indiquer à la case à cocher qu'il est terminé de modifier quand il est cliqué, au lieu d'attendre que l'utilisateur quitte le champ:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
Modifier: un événement DoubleClick est traité séparément d'un événement MouseUp. Si un événement DoubleClick est détecté, l'application ignorera entièrement le premier événement MouseUp. Cette logique doit être ajoutée à l'événement CellDoubleClick en plus de l'événement MouseUp:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
événement?