2010-06-02 5 views
4

Je veux détecter lorsque la touche de tabulation est enfoncée dans une zone de texte et mettre en surbrillance la zone de texte suivante dans le panneau.Comment détecter la touche de tabulation en appuyant sur C#?

J'ai essayé la méthode keyPressed et la méthode keyDown. Mais quand j'exécute le programme et débogue ces méthodes n'appellent pas quand la touche de tabulation est pressée. Voici mon code.

private void textBoxName_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Tab) 
    { 
     textBoxUsername.Focus(); 
    } 
} 

private void textBoxName_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar==(char)Keys.Tab) 
    { 
     textBoxUsername.Focus(); 
    } 
} 

Corrigez-moi s'il vous plaît.Merci.

+1

NOOON !!! Ne fais pas ça comme ça! Jetez un oeil à: http://stackoverflow.com/questions/2942617/how-to-set-up-winform-textbox-field-focus-so-a-user-can-go-through-them-by-clicki/2942756 # 2942756 – Oliver

Répondre

6

aller aux propriétés de zone de texte et assignez ordre de tabindex

+2

Cette réponse ne répond pas à ce que demande l'OP. C'est une de ces situations difficiles où nous devons répondre à ce qu'ils ont demandé ou ce qui est mieux. –

10

Pourquoi avez-vous besoin de cette complication? WinForms le fait pour vous automatiquement. Vous avez juste besoin de définir l'ordre de tabulation correct.

+0

Comment puis-je mettre la bonne commande de tabulation? Il est placé automatiquement dans le mauvais ordre, c'est pourquoi je voulais le faire manuellement. – Dinu

+2

Utilisez la propriété TabIndex sur le contrôle.Vous pouvez le définir par programme ou vous pouvez utiliser View -> Tab Order dans le concepteur. – Eltariel

1

Vous voulez l'événement "quitter". Je viens de le jeter dans l'application par défaut C# WinForms:

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     /* 
       ... misc housekeeping ... 
     */ 

     private void OnLeave(object sender, EventArgs e) 
     { 
      lblMsg.Text = "left field 1"; 
     } 

     private void OnLeave2(object sender, EventArgs e) 
     { 
      lblMsg.Text = "left field 2"; 
     } 
    } 
} 

Cela fonctionne comme vous l'attendez. Évidemment, vous pouvez faire tout ce que vous voulez dans le gestionnaire Leave(), y compris en forçant la mise au point ailleurs, mais attention à ne pas confondre l'utilisateur ...

0

Si textBoxName a un focus tout en appuyant sur la touche TAB, alors seulement le "KeyDown" déclencheurs d'événement. Il vous suffit de définir l'ordre de tabulation correct.

0

Si vous faites affaire avec les zones de texte à l'intérieur d'un panneau, réglage de l'index de tabulation correct devrait faire le travail parfaitement. Mais, si vous faites affaire avec d'autres zone de texte d'un autre panneau dit:

panel1 a textbox1

panel2 a TextBox2

panel3 a TextBox3

Voici ce que vous devez faire:

  1. Définissez le TabStop = Falseproperty de toutes les zones de texte. Par défaut, il est défini sur True.

  2. Définissez le bon TabIndex pour chaque panneau, par ex.

    panel1 TabIndex = 0; panel2 TabIndex = 1; panel3 TabIndex = 2;

  3. Ensuite, essayez ce code

    private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode.Equals(Keys.Tab)) this.textBox3.Focus(); }

Questions connexes