Byref Optional

BozzoDodo Messages postés 185 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 10 janvier 2008 - 30 nov. 2004 à 18:00
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 1 déc. 2004 à 19:10
Bonjour,
j'ai une fonction:
f1(Optional Byref Cancel)

Si Cancel est spécifié alors dans la fonction si on écrit: Cancel=True, la variable à laquelle fait référence Cancel sera True, ce qui est normal.

Mais si Cancel n'est pas spécifié (après tout c'est optionnel donc... lol), Si j'écris Cancel=True, à quelle variable Cancel fait-il référence? Une variable non déclaré?!

J'espère que vous aurez compris mon problème. Merci!

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
30 nov. 2004 à 18:51
Hein ? Si tu écris Cancel = True dans la sub, alors le "Cancel" correspond à la variable passée par paramètre.

En dehors de la sub, ca correspond à une variable "Cancel" déclaré dans l'espace de nom où tu te trouve. Si celle-ci n'est pas déclarée, alors elle ne correspond à aucune variable, et soit VB te signale une erreur (avec le Option Explicit), soit te déclare une nouvelle variable locale à l'espace de nom actuel.
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
BozzoDodo Messages postés 185 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 10 janvier 2008
30 nov. 2004 à 21:47
Euh pas trop compris....
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 déc. 2004 à 07:21
Un espace de nom correspond à l'endroit du code où se trouve ta ligne : s'il est à l'intérieur d'une procédure, ton espace de nom correspond à cette procédure.
Si tu te trouve à l'extérieur d'une procédure, mais à l'intérieur d'une form, ton espace de nom correspond à ta form. etc.
Mais pourquoi veux-tu faire Cancel = True si Cancel n'est pas déclarée ? Ca ne sert à rien !
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
1 déc. 2004 à 09:55
Dark Sidious < JE crois que ce qu'il veut savoir, c'est que devient un parametre optionnel non spécifié lors de l'appel à une sub quand cette sub se termine.
Du genre ..
Sub F1(optional byref Cancel As Boolean)
Cancel = True
End Sub

Et un appel du genre "Call F1()" <- Possible car Cancel est "Optional" !!
Et bien en fait, dans ce cas précis, le Cancel dont tu as modifié la valeur dans le corps de F1 est perdu, et n'est plus exploitable juste après l'appel à "F1()" !!!!
C'est logique, Tu ne lui à transmis aucune variable, donc F1 ne peut pas te retourner de valeur !! Et l'idée d'une varaible non déclarée est totalement incocevable en VB !!!

C'est un peut comme si tu avait :
Sub F2(ByRef L As Long)
L = 10
End sub

Et un appel du genre "Call F2(5)"
Cet appel est correct, mais la valeur 10 affecté au parametre L (pourtant byref) est perdu après l'appel à F2, car on a transmis à la fonction une constante, et non une L-Value.

Christophe R.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BozzoDodo Messages postés 185 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 10 janvier 2008
1 déc. 2004 à 18:01
En fait c'est pas exactement ce que je voulais. Parfois j'ai besoin de spécifier le paramètre optionel qui est en fait STOP. C'est à dire que je lance la procédure en faisant référence à une variable et par exemple au bout de 5s, cette valeur change. Du coup dans la SUB, il suffit de tester STOP, et de quitter si cette valeur est True. Parfois je n'est pas besoin de faire arréter la fonction, donc je ne met pas le paramètre. Euh... vous avez compris?! =D
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 déc. 2004 à 19:10
Ok, à ce moment là, mets une valeurs par défaut :

Byval Optional Cancel = False

Et à ce moment là, tu es sûr que Cancel = False si l'appel à ta fonction n'a pas mentionné de valeur !
_______________________________________

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
0
Rejoignez-nous