Comment passer le nom d'un controle comme parametre ?
7 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Matthieu Napoli \(MadMatt\)
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
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
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
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" a écrit dans le message de 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
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" <UrbaniakFabien@Neuf.fr> a écrit dans le message de
news:46125e0c$0$25910$ba4acef3@news.orange.fr...
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
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" a écrit dans le message de 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
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" a écrit dans le message de 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 :_-(
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" <UrbaniakFabien@Neuf.fr> a écrit dans le message de
news:46125e0c$0$25910$ba4acef3@news.orange.fr...
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 :_-(
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" a écrit dans le message de 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
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:
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
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:
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
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:
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
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:
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)
Dans : news:uiSJtygdHHA.1388@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:
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)
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:
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
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:
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 a écrit :
Dans : news:uiSJtygdHHA.1388@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:
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
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:
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
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)
Dans : news:46134214$0$25949$ba4acef3@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)
--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)