J'essaie d'utiliser la touche Entrée pour passer à la colonne suivante (non-lecture seule) dans un DataGridView. Dans des circonstances normales, je gère l'événement KeyDown et tout fonctionne très bien.DataGridView navigation sur Entrée/Retour
Cependant, quand je suis édition un champ, la touche Entrée complète toujours le modifier, puis se déplace vers la prochaine ligne .
Assez étrangement, je reçois la séquence suivante d'événements dans mon lit d'essai. (Les nombres entre parenthèses sont (rowIndex, columnIndex) de l'événement arg).
Sans navigation alternative:
Appuyez sur Entrée (sans modifier le champ):
PreviewKeyDown key = Return
KeyDown key = Return
CellLeave (0, 0)
RowLeave (0, 0)
CellValidating (0, 0)
CellValidated (0, 0)
RowEnter (1, 0)
CurrentCellChanged
CellEnter (1, 0)
SelectionChanged
KeyUp key = Return
Appuyez sur Entrée (tout en modifiant le champ):
CellClick (0, 0)
CellBeginEdit (0, 0)
EditingControlShowing
(I press Enter now)
CellLeave (0, 0)
RowLeave (0, 0)
CellValidating (0, 0)
CellValidated (0, 0)
CellEndEdit (0, 0)
RowEnter (1, 0)
CurrentCellChanged
CellEnter (1, 0)
SelectionChanged
KeyUp key = Return
-à-dire que je n'obtenir un L'événement PreviewKeyDown ou KeyDown lorsque j'appuie sur Entrée lors de la modification d'un champ.
J'ai essayé de pirater une autre navigation dans les gestionnaires d'événements. À des fins de test, je modifie toujours (r0, c0) et "navigue" en définissant l'explicité de la propriété CurrentCell à (r0, c1).
Lorsque je définis CurrentCell dans CellEndEdit, je me retrouve à (r1, c1). Quand je mets le CurrentCell dans KeyUp, je finis par (r0, c1), ce qui est bien, mais seulement après qu'il sélectionne visiblement (r1, c0). Je suppose que je pourrais désactiver les mises à jour sur le contrôle lors de la navigation, mais cette solution semble inélégante.
Un conseil? Est-ce que je manque quelque chose?