OVH Cloud OVH Cloud

Reflexion et controles ?

7 réponses
Avatar
Pyroa
Bonsoir,

Bon j'ai presque honte de poser cette question mais je la pose ...
J'aimerais pouvoir utiliser un control sur une form quelconque ne
connaissant que son nom ...
de facon dynamique et sous forme de string ... je m'explique :

J'ai dans un fichier le nom d'un control présent sur ma form exemple
"MonBouton1"

je récupère donc ce nom sous forme de string ... et j'aimerais pouvoir
utiliser ce control
directement sans avoir à parcourir la collection controls de ma form

du genre ( je schématise)

au lieu de faire :

Dim Control as control
for each controle in controls
If controle.name = "MonBouton1" Then
Controle.text="Trouvé"
Exit For
End If
Next

faire un truc comme ceci ( je sais la méthode n'existe pas)

Form1.controls("MonButon1").text="Trouvé"

faut - il utiliser la réflexion pour ca ? il me semble que non car la
reflexion est utilisée sur les assembly :'(

peut - on faire kkechose du meme genre ?
des liens des solutions ?

Merci d'avance pour vos réponses !

Pyroa

7 réponses

Avatar
Laulau
Bonsoir,

Je pense que tu devrais regarder du côté de la méhtode FindControl de ta
form ce qui devrait te donner un truc du genre :
monBouton = maForm.FindControl("MonBouton1")

A +

Laulau

"Pyroa" <##> a écrit dans le message de
news: %
Bonsoir,

Bon j'ai presque honte de poser cette question mais je la pose ...
J'aimerais pouvoir utiliser un control sur une form quelconque ne
connaissant que son nom ...
de facon dynamique et sous forme de string ... je m'explique :

J'ai dans un fichier le nom d'un control présent sur ma form exemple
"MonBouton1"

je récupère donc ce nom sous forme de string ... et j'aimerais pouvoir
utiliser ce control
directement sans avoir à parcourir la collection controls de ma form

du genre ( je schématise)

au lieu de faire :

Dim Control as control
for each controle in controls
If controle.name = "MonBouton1" Then
Controle.text="Trouvé"
Exit For
End If
Next

faire un truc comme ceci ( je sais la méthode n'existe pas)

Form1.controls("MonButon1").text="Trouvé"

faut - il utiliser la réflexion pour ca ? il me semble que non car la
reflexion est utilisée sur les assembly :'(

peut - on faire kkechose du meme genre ?
des liens des solutions ?

Merci d'avance pour vos réponses !

Pyroa



Avatar
Zoury
> Je pense que tu devrais regarder du côté de la méhtode FindControl de ta
form ce qui devrait te donner un truc du genre :
monBouton = maForm.FindControl("MonBouton1")



Je pense que **tu** devrais regarde de ce côté... ;O)
Cette méthode n'existe pas.


Pyroa : je ne connais pas d'autre façon. Regarde cette implementation, elle
cherche les contrôles récursivement afin de retrouver celui que tu cherches
même s'il se trouve dans un GroupBox par exemple..
http://groups.google.com/groups?threadm=%23TJJGawSDHA.1036%40TK2MSFTNGP10.phx.gbl


--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Pyroa
Le problème c'est que tous les controles présent sur la form ne sont pas
forcément présent dans la collection controls ....

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Je pense que tu devrais regarder du côté de la méhtode FindControl de ta
form ce qui devrait te donner un truc du genre :
monBouton = maForm.FindControl("MonBouton1")



Je pense que **tu** devrais regarde de ce côté... ;O)
Cette méthode n'existe pas.


Pyroa : je ne connais pas d'autre façon. Regarde cette implementation,
elle
cherche les contrôles récursivement afin de retrouver celui que tu
cherches
même s'il se trouve dans un GroupBox par exemple..
http://groups.google.com/groups?threadm=%23TJJGawSDHA.1036%40TK2MSFTNGP10.phx.gbl


--
Cordialement
Yanick
MVP pour Visual Basic




Avatar
Zoury
> Le problème c'est que tous les controles présent sur la form ne sont pas
forcément présent dans la collection controls ....



euhm... quoi ?! :Oo

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Pyroa
Oui j'ai fait un parcour de la collection avec un for each :

For each Controles as control in Form1.Controls
(...)
Next

E tles controles comme MenuItem et StatusBar n'y etait pas ... alors qu'ils
se trouvaient sur la form !! ( il y en a peut etre d'autres )

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: %
Le problème c'est que tous les controles présent sur la form ne sont pas
forcément présent dans la collection controls ....



euhm... quoi ?! :Oo

--
Cordialement
Yanick
MVP pour Visual Basic




Avatar
Zoury
ah oui! j'avais apperçu ton message à ce sujet mais je l'ai jamais
retrouvé.. j'vais jeter un oeil là dessus demain.. ;O)

--
Cordialement
Yanick
MVP pour Visual Basic
"Pyroa" <##> a écrit dans le message de
news:uOm%
Oui j'ai fait un parcour de la collection avec un for each :

For each Controles as control in Form1.Controls
(...)
Next

E tles controles comme MenuItem et StatusBar n'y etait pas ... alors


qu'ils
se trouvaient sur la form !! ( il y en a peut etre d'autres )

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: %
>> Le problème c'est que tous les controles présent sur la form ne sont


pas
>> forcément présent dans la collection controls ....
>
> euhm... quoi ?! :Oo
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
>
>




Avatar
Zoury
ok j'ai fait un test.. J'ai créer un formulaire vide, je lui ai ajouté un
MainMenu (avec quelques items dedans), une StatusBar, un Bouton et un
TextBox.

voici une section du code généré par Windows (le bout qui nous intéresse) :
'***
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(576, 374)
Me.Controls.Add(Me.StatusBar1)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Button1)
Me.Menu = Me.MainMenu1
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
'***

on voit que tous les contrôles sauf les menus se retrouvent dans la
collection de contrôles.
Tu pourrais donc une fonction semblable à celle d'Herfried qui te
permettrait de boucler la collection de MenuItem du MainMenu si le nom
demandé n'a pas été trouver dans la collection de contrôle.

--
Cordialement
Yanick
MVP pour Visual Basic
"Pyroa" <##> a écrit dans le message de
news:uOm%
Oui j'ai fait un parcour de la collection avec un for each :

For each Controles as control in Form1.Controls
(...)
Next

E tles controles comme MenuItem et StatusBar n'y etait pas ... alors


qu'ils
se trouvaient sur la form !! ( il y en a peut etre d'autres )

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: %
>> Le problème c'est que tous les controles présent sur la form ne sont


pas
>> forcément présent dans la collection controls ....
>
> euhm... quoi ?! :Oo
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
>
>