2009-06-30 7 views
7

J'ai créé un formulaire avec une étiquette, une zone de texte et un bouton. Dans l'événement de chargement de formulaire, j'ai appelé la fonction focus() pour la zone de texte. Mais quand je cours mon code le curseur ne vient pas à la zone de texte. J'ai besoin du curseur pour aller à la zone de texte dès que le formulaire est chargé. Comment faire?focus sur la zone de texte

Répondre

7

Si vous devez simplement vous assurer un certain contrôle se concentrer lorsque vous chargez un formulaire, puis modifier les TabOrder propriétés de toutes vos commandes (dans le concepteur) afin que le contrôle en question est « 0 » , et les autres éléments vont de là, '1', '2', etc.

Si vous avez besoin de sélectionner dynamiquement un contrôle différent lorsque vous affichez un formulaire en fonction de certaines conditions, utilisez le code suivant:

private void Form1_Load(object sender, EventArgs e) { 
    // You need to show the form otherwise setting focus does nothing 
    // (there are no controls to set focus to yet!) 
    this.Show() 
    if (someCondition == true) 
     control.Focus(); 
    else 
     control2.Focus(); 
} 
+0

Focus 'peut être réglé sur l'événement Form Shown. –

+1

+1: définissez l'ordre de tabulation correct des contrôles et laissez l'ossature faire le travail. –

+4

Ils peuvent souhaiter un ordre de tabulation spécifique mais ne souhaitent pas commencer par la propriété d'ordre de tabulation 0. –

3

Gérez l'événement Shown à la place. Ce code devrait fonctionner.

private void Form1_Shown(object sender, EventArgs e) 
{ 
    textBox2.Focus(); 
} 
+0

+1 J'ai essayé, ça marche. –

+0

Cela pose le même problème que la solution Activé en ce sens que si vous masquez/affichez la même forme, le focus sera toujours réinitialisé. Cela peut ou peut ne pas être une bonne chose. –

1

Ne pas appeler Focus dans la charge un événement. Appelez-le dans l'événement Activate. Cela fonctionnerait

+0

Cela entraînera également la mise au point de la zone de texte à chaque fois que le formulaire est activé, ce qui peut ne pas être souhaitable. –

+0

oh oui. J'ai manqué ce détail – Sahas

+0

Alors, quel sera le meilleur moyen? Activer l'événement ou définir TabOrder? – Vicky

1

Vous pouvez définir la propriété TabIndex de zone de texte à 0 si vous souhaitez toujours le focus sur la zone de texte lors du chargement de formulaire. (Cette propriété est toujours définie dans form.designer.cs et vous n'aurez pas à écrire de code supplémentaire dans votre formulaire.cs.)

Questions connexes