OVH Cloud OVH Cloud

ParamArray

6 réponses
Avatar
Loic BERTHOLLET
b'jou
soit ceci

private sub MyFunc(state as boolean, ParamArray Args() As Variant
Dim u as Long, ctl as contro
For u = LBound(Args) To UBound(Args
Set ctl = Args(u
ctl.Enabled = bEn
Nex
Set ctl = Nothin
su

Que j'appele comme cela : MyFunc(True, TextBox1, TextBox2, ComboBox1, CheckBox1)..

Je peux donc passer un nombre d'argument variable, mais connu quand j'écris le code..
Comment faire si jeux constituer une liste de controle à l'exécution (sachant que Array() ne fonctionne pas)

PS: je n'aipas écrit la fonction avec le ParamArray et elle est appelé des dizaines de fois. Il est donc obligatoire d'avoir une compatibilité ascendante...

6 réponses

Avatar
François Picalausa
Hello,

Tu éventuellement appeler la fonction en question via callbyname qui permet
d'avoir un array contenant les arguments.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Loic BERTHOLLET" a écrit dans le
message de news:
b'jour
soit ceci :

private sub MyFunc(state as boolean, ParamArray Args() As Variant)
Dim u as Long, ctl as control
For u = LBound(Args) To UBound(Args)
Set ctl = Args(u)
ctl.Enabled = bEnb
Next
Set ctl = Nothing
sub

Que j'appele comme cela : MyFunc(True, TextBox1, TextBox2, ComboBox1,
CheckBox1)...

Je peux donc passer un nombre d'argument variable, mais connu quand
j'écris le code...
Comment faire si jeux constituer une liste de controle à l'exécution
(sachant que Array() ne fonctionne pas) ?

PS: je n'aipas écrit la fonction avec le ParamArray et elle est
appelé des dizaines de fois. Il est donc obligatoire d'avoir une
compatibilité ascendante...


Avatar
Loi
salut
Excuse moi, mais je ne comprends pas ta réponse

Moi, ce que je voudrais c'est detterminer à l'exécution une liste, un tableau, une collection de controle que je puisse passer à cett fonction. Mais quand j'écris mon code je ne connais pas le nombre de contrôles que je veux passer (c'est l'utilisateur qui le définit)

----- François Picalausa a écrit : ----

Hello

Tu éventuellement appeler la fonction en question via callbyname qui perme
d'avoir un array contenant les arguments

--
François Picalausa (MVP VB
http://faq.vb.free.fr --- http://msdn.microsoft.co
http://apisvb.europe.webmatrixhosting.ne

"Loic BERTHOLLET" a écrit dans l
message de news:
> b'jou
> soit ceci
>> private sub MyFunc(state as boolean, ParamArray Args() As Variant
> Dim u as Long, ctl as contro
> For u = LBound(Args) To UBound(Args
> Set ctl = Args(u
> ctl.Enabled = bEn
> Nex
> Set ctl = Nothin
> su
>> Que j'appele comme cela : MyFunc(True, TextBox1, TextBox2, ComboBox1
> CheckBox1)..
>> Je peux donc passer un nombre d'argument variable, mais connu quan
> j'écris le code..
> Comment faire si jeux constituer une liste de controle à l'exécutio
> (sachant que Array() ne fonctionne pas)
>> PS: je n'aipas écrit la fonction avec le ParamArray et elle es
> appelé des dizaines de fois. Il est donc obligatoire d'avoir un
> compatibilité ascendante..
Avatar
François Picalausa
Hello,

Désolé, je croyais que CallByName demandait un tableau d'arguments, mais ce
n'est pas le cas.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Loi" a écrit dans le message de
news:
salut.
Excuse moi, mais je ne comprends pas ta réponse.

Moi, ce que je voudrais c'est detterminer à l'exécution une liste, un
tableau, une collection de controle que je puisse passer à cett
fonction. Mais quand j'écris mon code je ne connais pas le nombre de
contrôles que je veux passer (c'est l'utilisateur qui le définit).


Avatar
Vincent Guichard
Loic BERTHOLLET a écrit :
b'jour
soit ceci :

private sub MyFunc(state as boolean, ParamArray Args() As Variant)
Dim u as Long, ctl as control
For u = LBound(Args) To UBound(Args)
Set ctl = Args(u)
ctl.Enabled = bEnb
Next
Set ctl = Nothing
sub

Que j'appele comme cela : MyFunc(True, TextBox1, TextBox2, ComboBox1, CheckBox1)...

Je peux donc passer un nombre d'argument variable, mais connu quand j'écris le code...
Comment faire si jeux constituer une liste de controle à l'exécution (sachant que Array() ne fonctionne pas) ?

PS: je n'aipas écrit la fonction avec le ParamArray et elle est appelé des dizaines de fois. Il est donc obligatoire d'avoir une compatibilité ascendante...



Est-il envisageable que tu réécrive la fonction MyFunc? Auquel cas la
fontion suivante peux marchera aussi bien pour un appel "ancienne methode":
MyFunc(True, TextBox1, TextBox2, ComboBox1, CheckBox1)
que pour un appel "Passage par tableau":
MyFunc(True, Array(TextBox1, TextBox2, ComboBox1, CheckBox1))


Private Sub MyFunc(state As Boolean, ParamArray Args() As Variant)
On Error Resume Next
Dim u
For Each u In Args
If IsObject(u) Then
u.Enabled = state
ElseIf IsArray(u) Then
Dim c
For Each c In u
c.Enabled = state
Next c
End If
Next u
End Sub

Vincent Guichard
Avatar
Loic BERTHOLLET
salu
Le nombre et le nom des controles étaient un exemples; c'est l'utilisateur qui les choisit; je ne sais donc pas quand j'écris mon code quels sont les controles que je doit envoyer à la fonction

Mais, j'y ai plus réfléchi: Quand j'appelle ma fct avec, par exemple, un tableau qui contient un nombre aléatoire de controle, je recois dans ma fct un tableau à 2 dimensions. Il faudrait donc que j'use de récursivité pour résoudre ce problème

merci quand mêm

----- Vincent Guichard a écrit : ----

Loic BERTHOLLET a écrit
> b'jou
> soit ceci
>> private sub MyFunc(state as boolean, ParamArray Args() As Variant
> Dim u as Long, ctl as contro
> For u = LBound(Args) To UBound(Args
> Set ctl = Args(u
> ctl.Enabled = bEn
> Nex
> Set ctl = Nothin
> su
>> Que j'appele comme cela : MyFunc(True, TextBox1, TextBox2, ComboBox1, CheckBox1)..
>> Je peux donc passer un nombre d'argument variable, mais connu quand j'écris le code..
> Comment faire si jeux constituer une liste de controle à l'exécution (sachant que Array() ne fonctionne pas)
>> PS: je n'aipas écrit la fonction avec le ParamArray et elle est appelé des dizaines de fois. Il est donc obligatoire d'avoir une compatibilité ascendante..

Est-il envisageable que tu réécrive la fonction MyFunc? Auquel cas la
fontion suivante peux marchera aussi bien pour un appel "ancienne methode"
MyFunc(True, TextBox1, TextBox2, ComboBox1, CheckBox1
que pour un appel "Passage par tableau"
MyFunc(True, Array(TextBox1, TextBox2, ComboBox1, CheckBox1)


Private Sub MyFunc(state As Boolean, ParamArray Args() As Variant
On Error Resume Nex
Dim
For Each u In Arg
If IsObject(u) The
u.Enabled = stat
ElseIf IsArray(u) The
Dim
For Each c In
c.Enabled = stat
Next
End I
Next
End Su

Vincent Guichar
Avatar
Vincent Guichard
Loic BERTHOLLET a écrit :
salut
Le nombre et le nom des controles étaient un exemples; c'est l'utilisateur qui les choisit; je ne sais donc pas quand j'écris mon code quels sont les controles que je doit envoyer à la fonction.

Mais, j'y ai plus réfléchi: Quand j'appelle ma fct avec, par exemple, un tableau qui contient un nombre aléatoire de controle, je recois dans ma fct un tableau à 2 dimensions. Il faudrait donc que j'use de récursivité pour résoudre ce problème.



N'était-ce pas exactement ce que je proposais?

Vincent Guichard