2012-11-26 1 views
0

J'ai un point d'arrêt sur la première ligne d'une fonction d'événement TextBox1.GotFocus.Pourquoi GotFocus ne s'exécute-t-il pas lorsque SetFocus est appelé?

Lorsque j'appelle TextBox1.SetFocus ailleurs, le point d'arrêt GotFocus n'est jamais atteint. Pourquoi?

code

en fonction d'appel: Text1.SetFocus

Private Sub Text1_GotFocus() 

    // code here 

End Sub 
+0

peut-être votre zone de texte a déjà le focus? (Pourriez-vous poster le code de l'événement gotfocus et où setfocus est appelé, essayez également de définir un point d'arrêt sur l'appel setfocus pour voir s'il est réellement appelé) – Hrqls

+0

voir edit. J'ai parcouru le code pour voir que l'appel setfocus est en cours. Il passe directement à la ligne suivante sans entrer dans gotfocus. – CJ7

+0

êtes-vous sûr que text1 n'a pas déjà le focus? essayez de définir le focus sur autre chose avant de le mettre en text1 – Hrqls

Répondre

0

un petit programme pour montrer ce que je veux dire.

exécuter le programme et cliquez sur le formulaire (la légende reste 1), cliquez sur Texte2 pour lui donner la mise au point et cliquez à nouveau le formulaire (modifications de légende à 2)

puis faire la même chose en Text2.SetFocus est décommenté dans Form_Click

voici le code:

'1 form with 
' textbox : name=Text1 tabindex=0 
' textbox : name=Text2 tabindex=1 
Option Explicit 

Private Sub Form_Click() 
    'uncomment the following line to make it work 
' Text2.SetFocus 
    'with just the following call this wont work 
    Text1.SetFocus 
End Sub 

Private Sub Text1_GotFocus() 
    'increase the number in the form caption to show text1 got the focus again 
    Caption = CStr(Val(Caption) + 1) 
End Sub 

lorsque le programme démarre Texte1 obtient le focus (tabindex = 0), de sorte que les modifications sous forme de sous-titres à 1 lorsque vous cliquez sur le rien formulaire change parce que Text1 déjà h comme le focus et ne pas "obtenir" lorsque vous cliquez d'abord sur Text2, puis cliquez sur le formulaire la légende du formulaire augmente

en décommentant la ligne avec Text2.SetFocus vous laissez le programme déplacer toujours le focus sur Text2 (si ce n'est pas déjà là), avant de déplacer le focus sur Text1, Text1 va toujours "obtenir" le focus à nouveau

attention cependant! En donnant la priorité à un autre contrôle, il se peut que d'autres événements surgissent et que vous ne souhaitiez pas!

Questions connexes