La cellule en mode édition ne déclenche pas l’événement OnKeyDown en C #

J’ai créé mon propre contrôle datagridview qui annule l’événement OnKeyDown:

public partial class PMGrid : DataGridView { protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.SuppressKeyPress = true; //suppress ENTER //SendKeys.Send("{Tab}"); //Next column (or row) base.OnKeyDown(e); } else if (e.KeyCode == Keys.Tab) { base.OnKeyDown(e); this.BeginEdit(false); } else { base.OnKeyDown(e); } } } 

Lorsque je clique sur datagridview et que j’appuie sur Entrée, cela fonctionne parfaitement car la ligne n’est pas modifiée et l’événement KeyUp est déclenché. Mais lorsque j’appuie sur Tab, la cellule suivante est sélectionnée et elle est remplacée par EditMode. Et lorsque j’appuie sur Entrée dans cette cellule, l’événement KeyUp n’est pas déclenché et KeyPress aussi. J’essaie de faire que l’utilisateur puisse passer d’une cellule à la suivante, puis que l’utilisateur puisse écrire quelque chose dans cette cellule puis, lorsque l’utilisateur appuie sur Entrer, cette valeur est enregistrée dans la firebase database. Mais lorsque la cellule est en mode édition, je ne peux pas détecter cet utilisateur. Appuyez sur Entrée.

Merci

Vous devez appeler l’événement KeyPress ou KeyUp dans l’événement EditingControlShowing du datagridview. Quelque chose comme ça devrait marcher:

 private void dtgrd1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { var txtEdit = (TextBox)e.Control; txtEdit.KeyPress += EditKeyPress; //where EditKeyPress is your keypress event } private void EditKeyPress(object sender, KeyPressEventArgs e) { if (e.KeyCode == Keys.Enter) { e.SuppressKeyPress = true; //suppress ENTER //SendKeys.Send("{Tab}"); //Next column (or row) base.OnKeyDown(e); } else if (e.KeyCode == Keys.Tab) { base.OnKeyDown(e); this.BeginEdit(false); } else { base.OnKeyDown(e); } } 

Faites-moi savoir si vous avez des doutes lors de la mise en œuvre de ce code.

MODIFIER

Pour éviter d’aller à la ligne suivante lors de la saisie, veuillez vérifier la question résolue: Comment éviter d’aller à la ligne suivante après avoir modifié DataGridViewTextBoxColumn et appuyé sur EnterKey?