Comment passer le nom d'un controle comme parametre ?

Le
Fabien
Bonjour,
Voilà étant un peu faineant je cherche a eviter de retaper x fois le
même code pour traiter des controles dont la seule difference est le nom.
Est il possible de passer a une procédure le nom d'un controle et que
cette procedure puisse manipuler ce controle ?
ex :

sub test()
dim I as Integer
for i = 1 to 10
Modifie "moncontrole" & i
next i
end sub

Sub modifie (uncontrole as ????)
me.uncontrole.visible = false
end sub

Merci
Fabien
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Matthieu Napoli \(MadMatt\)
Le #15412751
Bonjour,

Pourquoi n'as tu pas utilisé un tableau de controles (avec index) ?
Y'a t'il une raison précise, ou alors tu ne connais peut etre pas ?
Car ça parait la solution la plus appropriée, tu aurais des controles du
style Moncontrole[i]
et tu n'aura plus qu'à faire un :
For i=1 to 10
Modifie( Moncontrole[i] )
Next i
Driss HANIB
Le #15412741
bonjour

dans VB 6 il est possible de mettre des controles indicés( donc
obligatoirement de même type) qui te permettront de faire ce que tu veux

for i = 0 to MonControl.count
MonControl(I).visibleúlse ' par exemple
MonControle.text = vbnullstring ' si c'st un textbox..
Next I

Driss
"Fabien" news:46125e0c$0$25910$
Bonjour,
Voilà étant un peu faineant je cherche a eviter de retaper x fois le
même code pour traiter des controles dont la seule difference est le nom.
Est il possible de passer a une procédure le nom d'un controle et que
cette procedure puisse manipuler ce controle ?
ex :

sub test()
dim I as Integer
for i = 1 to 10
Modifie "moncontrole" & i
next i
end sub

Sub modifie (uncontrole as ????)
me.uncontrole.visible = false
end sub

Merci
Fabien


Fabien
Le #15412711
Driss HANIB a écrit :
bonjour

dans VB 6 il est possible de mettre des controles indicés( donc
obligatoirement de même type) qui te permettront de faire ce que tu veux

for i = 0 to MonControl.count
MonControl(I).visibleúlse ' par exemple
MonControle.text = vbnullstring ' si c'st un textbox..
Next I

Driss
"Fabien" news:46125e0c$0$25910$
Bonjour,
Voilà étant un peu faineant je cherche a eviter de retaper x fois le
même code pour traiter des controles dont la seule difference est le nom.
Est il possible de passer a une procédure le nom d'un controle et que
cette procedure puisse manipuler ce controle ?
ex :

sub test()
dim I as Integer
for i = 1 to 10
Modifie "moncontrole" & i
next i
end sub

Sub modifie (uncontrole as ????)
me.uncontrole.visible = false
end sub

Merci
Fabien






Merci pour vos réponses.
Honte a moi je n'avais pas précisé que je travaillais avec visual basic
express 2005.
Deplus cette notion de controle indexé m'est etrangère :_-(
Patrick Philippot
Le #15412661
Bonjour,

Fabien wrote:
Honte a moi je n'avais pas précisé que je travaillais avec visual
basic express 2005.



Dans ce cas, revoyez la gestion des événements. Dans VB .Net, vous pouvez
affecter dynamiquement un gestionnaire d'événements à un événement
particulier en utilisant la fonction AddHandler. Il suffit donc de faire
pointer avec AddHandler l'événement d'un type donné pour chaque contrôle
considéré vers une routine de traitement unique. La différenciation se
faisant par l'argument sender qui est la référence sur le contrôle qui a
généré l'événement:

AddHandler Button1.Click, AddressOf myClickHandler
AddHandler Button2.Click, AddressOf myClickHandler
AddHandler Button3.Click, AddressOf myClickHandler

Private Sub myClickHandler(ByVal sender As System.Object, ByVal e As
System.EventArgs)
MsgBox("Event Handled!")
End Sub

Dans cet exemple, tous les événements Click pour les 3 boutons sont traités
par la même routine. Vous savez de quel bouton il s'agit en regardant
l'argument sender.

Vous pouvez "débrancher" un événement d'une routine en utilisant
RemoveHandler.

Avec ce mécanisme, les control arrays de VB6 dont on a parlé plus haut ne
servent plus à rien.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Fred
Le #15412651
Dans : news:,
Patrick Philippot disait :
Bonjour,

Fabien wrote:
Honte a moi je n'avais pas précisé que je travaillais avec visual
basic express 2005.



Dans ce cas, revoyez la gestion des événements. Dans VB .Net, vous
pouvez affecter dynamiquement un gestionnaire d'événements à un
événement particulier en utilisant la fonction AddHandler. Il suffit
donc de faire pointer avec AddHandler l'événement d'un type donné
pour chaque contrôle considéré vers une routine de traitement unique.
La différenciation se faisant par l'argument sender qui est la
référence sur le contrôle qui a généré l'événement:

AddHandler Button1.Click, AddressOf myClickHandler
AddHandler Button2.Click, AddressOf myClickHandler
AddHandler Button3.Click, AddressOf myClickHandler

Private Sub myClickHandler(ByVal sender As System.Object, ByVal e As
System.EventArgs)
MsgBox("Event Handled!")
End Sub



Ou bien

Private Sub myClickHandler(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click, Button2.Click, Button3.Click

Si les boutons ne sont pas créés dynamiquement.

Mais je ne suis pas sûr que c'est exactement le problème de Fabien.

Pour récupérer un contrôle par son nom, il peut aussi écrire :

Conteneur.Controls("Button1")

En supposant que Conteneur est l'objet contenant les boutons.
La Form par exemple ce qui donne : Me.Controls("Button1")
Le conteneur peut-être aussi un GroupBox ou un Panel :
Me.Panel1.Controls("Button1")

Syntaxe par ailleurs utilisable aussi en VB6 si mes souvenirs sont bons.

Si les propriétés à modifier ne sont pas communes à tous les contrôles,
il faudra peut-être faire un cast :

Dim b as Button = Me.Controls("Button1")
b.UnePropriétéSpécifiqueDuBouton



--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Fabien
Le #15412591
Fred a écrit :
Dans : news:,
Patrick Philippot disait :
Bonjour,

Fabien wrote:
Honte a moi je n'avais pas précisé que je travaillais avec visual
basic express 2005.



Dans ce cas, revoyez la gestion des événements. Dans VB .Net, vous
pouvez affecter dynamiquement un gestionnaire d'événements à un
événement particulier en utilisant la fonction AddHandler. Il suffit
donc de faire pointer avec AddHandler l'événement d'un type donné
pour chaque contrôle considéré vers une routine de traitement unique.
La différenciation se faisant par l'argument sender qui est la
référence sur le contrôle qui a généré l'événement:

AddHandler Button1.Click, AddressOf myClickHandler
AddHandler Button2.Click, AddressOf myClickHandler
AddHandler Button3.Click, AddressOf myClickHandler

Private Sub myClickHandler(ByVal sender As System.Object, ByVal e As
System.EventArgs)
MsgBox("Event Handled!")
End Sub



Ou bien

Private Sub myClickHandler(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click, Button2.Click, Button3.Click

Si les boutons ne sont pas créés dynamiquement.

Mais je ne suis pas sûr que c'est exactement le problème de Fabien.

Pour récupérer un contrôle par son nom, il peut aussi écrire :

Conteneur.Controls("Button1")

En supposant que Conteneur est l'objet contenant les boutons.
La Form par exemple ce qui donne : Me.Controls("Button1")
Le conteneur peut-être aussi un GroupBox ou un Panel :
Me.Panel1.Controls("Button1")

Syntaxe par ailleurs utilisable aussi en VB6 si mes souvenirs sont bons.

Si les propriétés à modifier ne sont pas communes à tous les contrôles,
il faudra peut-être faire un cast :

Dim b as Button = Me.Controls("Button1")
b.UnePropriétéSpécifiqueDuBouton





Ok merci, La solution de Fred me va bien.
Merci a tout les deux du temps passé ;-)
@+
Fabien
Fred
Le #15412411
Dans : news:46134214$0$25949$,
Fabien disait :

Merci a tout les deux du temps passé ;-)



Merci pour le retour.
J'en profite pour compléter mon message précédent.

Pour vb 2005 il est préférable d'aller sur :

microsoft.public.fr.dotnet.vb
(Le langage vb.NET)

microsoft.public.fr.dotnet
(Le framework)

microsoft.public.fr.dotnet.adonet
(Accès aux données)

microsoft.public.fr.dotnet.visualstudio
(L'environnement de développement)

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Publicité
Poster une réponse
Anonyme