2010-11-26 8 views
-2

m obtenir une erreur lors de l'utilisation Text1.SetFocus l'erreur est appel de procédure non valide ou argument deappel de procédure non valide ou un argument

+0

Retirez cette ligne et régler le TabIndex de Text1 à 0. – Mudassir

+0

Pouvez-vous éditer votre question et poster un code pour que nous puissions l'examiner, afin que nous puissions le voir en contexte? Est-ce vb6? –

Répondre

1

Si vous appelez cela à partir d'un module, ie non à partir du code de formulaire, vous besoin de référencer l'objet de formulaire où text1 réside. L'autre chose que vous devez faire est de prendre des pilules de persistance, frappez F1 plus souvent et utilisez des mots en abondance lorsque vous demandez de l'aide.

+1

"Je reçois une erreur, pouvez-vous m'aider?" –

+0

Vous devez d'abord prendre les pilules, mais c'est le bon libellé. La réponse serait "Oui, je peux, Bye". – jpinto3912

0

Vous devez faire référence à Text1.SetFocus de Form_Activate et pas de Form_Load -

http://www.vb6.us/tutorials/understanding-forms-vb6-tutorial

Form_Load contre Form_Activate

En cas Form_Load, vous devez généralement effectuer des tâches de type d'initialisation, comme vous devriez. Toutefois, certains types d'actions ne peuvent pas être effectuées dans l'événement Load, car le formulaire est entièrement chargé uniquement après la fin de l'événement Load. D'une part, l'impression sur le formulaire ne fonctionnera pas dans l'événement Load. En outre, si vous essayez de définir le focus sur un contrôle particulier sur le formulaire lors de l'événement Load, vous obtiendrez le message Erreur d'exécution '5': Appel ou argument de procédure non valide. Par exemple, supposons que vous avez une zone de texte appelée Text1 sur le formulaire. Le code suivant entraînerait cette erreur:

Private Sub Form_Load() 

' other initialization stuff 

Text1.SetFocus ' causes an error 

End Sub 

La raison de l'erreur est que, puisque la forme est pas complètement chargé, ne sont l'un des contrôles sur elle â € « et vous ne pouvez pas mettre l'accent à un contrôle qui n'est pas encore disponible. Pour résoudre ce problème, vous devez utiliser l'un des autres événements Form, tels que l'événement Activate. (Lorsque VB charge un formulaire, il parcourt un certain nombre d'événements, tels que: Initialiser, Charger, Redimensionner, Activer, GotFocus et Paint, parmi lesquels Charger et Activer sont probablement les plus utilisés.) Placer le code de mettre l'accent sur un contrôle fonctionnera en cas Form_Activate:

Private Sub Form_Activate() 

' other statements 

Text1.SetFocus ' no problem here 

End Sub 

une mise en garde au sujet de l'événement activate: il se déclenche chaque fois que votre application passe à ce formulaire. Par exemple, si vous basculez entre Form1 et Form2, sachez que tout code que vous pourriez avoir dans les événements Activate pour ces formulaires sera exécuté lorsque vous basculez vers ce formulaire. Par conséquent, si vous avez du code dans l'événement Activate que vous souhaitez uniquement exécuter "la première fois", vous devrez contrôler l'exécution avec un commutateur booléen. Par exemple, dans les déclarations générales de votre formulaire, vous pouvez définir la variable suivante:

Private mblnFormActivated As Boolean ' will be initialized to False by default 

Vous pouvez ensuite utiliser ce commutateur dans l'événement Activate comme suit:

Private Sub Form_Activate() 

If mblnFormActivated Then Exit Sub 

' statements you only want to execute once, including the following 
' statement to turn the switch on: 

mblnFormActivated = True 

End Sub 
Questions connexes