Valeur du Focus [Résolu]

Signaler
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011
-
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
-
Bonjour tout le monde !
J'ai encore un gros problème de débutant et après plusieurs recherches sur le forum et google je n'ai toujours pas trouvé de solution.

Donc voilà, j'ai une form avec plusieurs CommandButton nommer "Button1", "Button2", "Button3" ...

J'ai un Textbox nommer "Text1", et donc j'aimerai que le texte de mon textbox (text1.text=) récupere le focus actif. C'est à dire si le focus se trouve sur le Button2 j'aimerai l'affichage dans mon text1 de : "Button2".

Merci beaucoup pour votre aide.

Fabien

12 réponses

Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Salut et Salut Jmfmarques,

Tu ne veux pas saisir 50 fois le même code...Je comprend...L'astuce..?? Utilise un Timer, règle l'intervale = 100

Private Sub Timer1_Timer()


   Dim MyControl As Control
  
   For Each MyControl In Me
       If TypeOf MyControl Is CommandButton Then
          Text1.Text = ActiveControl.Name
       End If
   Next MyControl


End Sub
 


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
non...non...Il pauser sur ta form un contrôle Timer, tu doubleclick sur le contrôle et tu ajoutes le code donné...Dans ses propriétés du définit Interval = 100

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour,

intréresse-toi à l'évènement Gotfocus et à la propriété Name de ActiveControl

tous les mots en gras dans ma réponse ===>> lecture de ton aide en ligne sur ces mots
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

J'ai bien lu l'aide, mais je reste bloquer, en faite j'en suis arriver à ce code :

Text1.Text = Me.ActiveControl.Name

et donc message d'erreur : "Object variable or With block variable not set"
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
1) dans quel évènement as_tu mis ce code ? (on ne le voit pas  !)


2) es-tu bien certain d'être sous VB6 et non sous VBA ?

ceci martche parfaitement sous VB6, dans la mesure (bien évidemment ) où esxiste une textbox nommée Text1 et un bouton de commande nommé command1

Private Sub Command1_GotFocus()
  Text1.Text = ActiveControl.Name
End Sub
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Je suis bien sur VB6 mais j'ai encore des sales manies de VBA dans la tête... (parfois ça marche bien ;-)

J'ai bien comrpis ta ligne de commande avec le GotFocus et effectivement elle marche mais j'ai du mal formuler ma question.
Car par la suite sur la même form je vais avoir 50 CommandButton, et avec ce code je vais donc devoir taper 50 private sub Command"x"_GotFocus.

Je cherche en faite un code qui permet de recuperer ActiveControl.Name à n'importe quel moment dans mon textbox et que mon textbox ce mette automatiquement à jour lors d'un changement de focus.

J'espère avoir été un peu plus clair.
En tout cas merci.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Utilise alors un groupe de Commandbuttons indexé et envoie dans ta textbox activecontrol.name & "(" & index & ")"
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Salut exploreur...

Pas vraiment besoin d'un timer dès lors qu'il s'agit d'un bouton ayant le focus (et donc étant forcément passé par l'évènement GotFocus qui, lui, met à jour la textbox)

Si maintenant le fait d'avoir quelquechose du genre "toto(3)" dans la textbox n'est pas très "parlant", rien n'interdit alors d'utiliser la propriété tag pour y mettre du "plus parlant" et de l'utiliser ainsi :

Private Sub Command1_GotFocus(Index As Integer)
    text1.text = activecontrol.tag
End Sub
ou même du plus complet (les 2) :

text1.text = activecontrol.name & "(" & index & ")" & "    (" & activecontrol.tag & ")"
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Salut Jmfmarques,

Je suis tout à fait d'accord avec toi , c'était pour qu'il ne tape pas 50 fois : text1.text = activecontrol.tag, si ses boutons ne sont pas indéxés....

Personnelement, l'avantage que j'ai trouvé au timer, c'est qui ne se souçi de rien au niveau du code...Au pire, dans son apllication il enclenche le timer ou pas...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Salut Exploreur, Re Jmfmarques

Exploreur t'as bien compris ce que je voulais, ne pas retaper 50 fois text1.text...


Ton idée semble beaucoup me plaire, mais malheureusement ça marche toujours pas
et donc toujours le même message d'erreur : "Object
variable or With block variable not set"

Mon problème de débutant : Quand dois je
lancer ta sub "Private Sub Timer1_Timer()" ?
Pour l'instant je l'ai lancer au Load de <st1:personname productid="la Form" w:st="on">la Form</st1:personname> ... ("Private Sub Form_Load()")


@+ et Merci bcp

Fabien
Messages postés
61
Date d'inscription
samedi 10 novembre 2007
Statut
Membre
Dernière intervention
5 mars 2011

Désolé pour mon dernier post, il est inutile car je ne connaissait pas le timer.
J'ai lu, j'ai compris, j'ai vaicu.

Merci exploreur ça marche à merveille !
++
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
De rien...Au plaisir

A+
Exploreur

 Linux a un noyau, Windows un pépin