Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Comment passer le nom d'un controle comme parametre ?

5 views
Skip to first unread message

Fabien

unread,
Apr 3, 2007, 10:00:47 AM4/3/07
to
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

Matthieu Napoli (MadMatt)

unread,
Apr 3, 2007, 10:07:57 AM4/3/07
to
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

unread,
Apr 3, 2007, 10:09:58 AM4/3/07
to
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=false ' par exemple
MonControle.text = vbnullstring ' si c'st un textbox..
Next I

Driss
"Fabien" <Urbania...@Neuf.fr> a écrit dans le message de
news:46125e0c$0$25910$ba4a...@news.orange.fr...

Fabien

unread,
Apr 3, 2007, 10:47:39 AM4/3/07
to
Driss HANIB a écrit :
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

unread,
Apr 3, 2007, 12:25:19 PM4/3/07
to
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

unread,
Apr 3, 2007, 12:39:00 PM4/3/07
to
Dans : news:uiSJtygd...@TK2MSFTNGP05.phx.gbl,
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

unread,
Apr 4, 2007, 2:13:40 AM4/4/07
to
Fred a écrit :
Ok merci, La solution de Fred me va bien.
Merci a tout les deux du temps passé ;-)
@+
Fabien

Fred

unread,
Apr 5, 2007, 1:55:50 AM4/5/07
to
Dans : news:46134214$0$25949$ba4a...@news.orange.fr,
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)

0 new messages