2017-10-17 3 views
0

En application C de fenêtres # pour naviguer tout contrôle d'un formulaire (à l'aide touche Entrée) Je suis en utilisant le code ci-dessous:au contrôle de mise sélectionnés en appuyant sur touche Entrée

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == System.Windows.Forms.Keys.Enter) 
    { 
     SendKeys.Send("{TAB}"); 
    } 
} 

NB: Formulaire propriété KeyPreview = True;

Le code ci-dessus fonctionne bien, mais quand je vais naviguer entre deux dateTimePicker (dateTimePicker1, dateTimePicker2) en appuyant sur la touche Entrée. Lorsque Formulaire ouvert Mettre au point sur dateTimePicker1 et appuyez sur la touche Entrée, puis sur dateTimePicker2 de mise au point et appuyez sur Entrée Key Focus dateTimePicker1.

Le code ci-dessous fonctionne correctement sans le code ci-dessus. Quel est le meilleur moyen de naviguer entre les deux dateTimePicker en utilisant le code ci-dessus ou d'une autre manière?

private void dateTimePicker1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) { 
     dateTimePicker2.Focus(); 
    } 
} 

private void dateTimePicker2_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) { 
     dateTimePicker1.Focus(); 
    } 
} 

Quelqu'un s'il vous plaît aidez-moi.

+0

Il suffit d'utiliser la première solution pour naviguer entre tous les contrôles. Quel est le problème? –

+0

Je ne vois pas non plus de question. C'est une mauvaise habitude à prendre, la touche Entrée joue juste un rôle très différent dans une interface graphique. Il est utilisé pour utiliser le bouton par défaut d'une fenêtre, celui sélectionné par la propriété Form.AcceptButton. Et pour ajouter des lignes à un RichTextBox et un TextBox multiligne. Très occasionnellement pour résoudre un problème UX, la boîte d'adresse d'un navigateur par exemple. Les utilisateurs se contentent d'utiliser la touche de tabulation et les touches de curseur pour naviguer. –

Répondre

1

Vous pouvez vous inscrire vos deux DateTimePickers au même gestionnaire d'événements au lieu d'utiliser deux événements, et utiliser l'objet sender:

private void dateTimePicker_KeyDown(object sender, KeyEventArgs e) 
{ 
    var dtp = sender as DateTimePicker; 
    if (e.KeyCode == Keys.Enter) 
    { 
     if (dtp?.Name[dtp.Name.Length - 1] == '1') 
      dateTimePicker2.Focus(); 
     else dateTimePicker1.Focus(); 
    } 
} 

Il suffit de ne pas oublier de changer la valeur de l'événement KeyDown dans les propriétés fenêtre des deux DateTimePickrs pour pointer vers cet événement.