OVH Cloud OVH Cloud

ENUM

4 réponses
Avatar
PR
Bonjour,

Lorsque que dans les paramètres d'une fonction il y a un paramètre
de type enum

le tableau des constantes énumérées apparait
lors de la frappe de la virgule puis de 'and' puis espace
ou 'or' puis espace

dans VB6 la touche '+' faisait apparaitre ce tableau
apparemment pas dans vb.net

Y a t il un moyen d'y remédier?

merci

PR

4 réponses

Avatar
Zoury
Salut PR !

dans VB6 la touche '+' faisait apparaitre ce tableau
apparemment pas dans vb.net
Y a t il un moyen d'y remédier?



Nope.. et c'est pour un bonne raison... en fait, c'est VB6 qui n'aurait
jamais dû agir de la sorte.

Dans quel contexte voudrais-tu **additionner** des membres d'énumérations ?

Il ne faut pas confondre *combiner* et *additionner* des membres
d'énumération. On doit employé l'opérateur Or pour combiner des valeurs de
type <Flags()>

Lit mes deux messages dans ce thread, ça pourrait t'éclairer sur la
différence fondamentale existante entre les deux opérations :
http://groups.google.com/group/microsoft.public.fr.vb/browse_frm/thread/add2c7a07fc4bbdf/af6ff365e2f675b5#af6ff365e2f675b5


--
Cordialement
Yanick
MVP pour Visual Basic

"PR" a écrit dans le message de news:

Bonjour,

Lorsque que dans les paramètres d'une fonction il y a un paramètre
de type enum

le tableau des constantes énumérées apparait
lors de la frappe de la virgule puis de 'and' puis espace
ou 'or' puis espace



merci

PR



Avatar
PR
je vous remercie de votre réponse.
mais je ferai qqs remarques:
1/si vb6 le faisait ce ne devait pas etre aussi horrible
que ça.
D'autre part quel mal peut il y avoir à
additionner des constantes.
Il me suffira de remplacer le and par +
mais a la main.
2/N'étant pas pro de l'informatique je n'aime
pas trop les and et les or
et j'avais bricolé qqchose pour y remédier
dans cette occurrence:
la 1ère constante vaut 1 à 9
la 2ème vaut 10 à 90
la 3ème 100 a 900
etc...
ensuite je fais la somme (d'où ma question)
je transforme le long en string
et chaque caractère vaut de 1 à 9 (le 0 étant le defaut)
avec un long 32bits j'ai 9 variations de la meme
particularité de la voiture et non pas
2 (presence ou absence)

encore merci de votre reponse.
PR


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut PR !

dans VB6 la touche '+' faisait apparaitre ce tableau
apparemment pas dans vb.net
Y a t il un moyen d'y remédier?



Nope.. et c'est pour un bonne raison... en fait, c'est VB6 qui n'aurait
jamais dû agir de la sorte.

Dans quel contexte voudrais-tu **additionner** des membres d'énumérations
?

Il ne faut pas confondre *combiner* et *additionner* des membres
d'énumération. On doit employé l'opérateur Or pour combiner des valeurs de
type <Flags()>

Lit mes deux messages dans ce thread, ça pourrait t'éclairer sur la
différence fondamentale existante entre les deux opérations :
http://groups.google.com/group/microsoft.public.fr.vb/browse_frm/thread/add2c7a07fc4bbdf/af6ff365e2f675b5#af6ff365e2f675b5


--
Cordialement
Yanick
MVP pour Visual Basic

"PR" a écrit dans le message de news:

Bonjour,

Lorsque que dans les paramètres d'une fonction il y a un paramètre
de type enum

le tableau des constantes énumérées apparait
lors de la frappe de la virgule puis de 'and' puis espace
ou 'or' puis espace



merci

PR







Avatar
Patrice
Il est toujours possible de commencer à taper le nom de l'énumération ce qui
déclenchera l'affichage (quelques touches de plus à frapper mais bon...)

ATTENTION le Or et + ne sont pas équivalents (+ produira toujours un
résultat différent, Or ne produira pas un résultat différent si la valeur
est déjà positionnée).

Voir par exemple énumération :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemiofileattributesclasstopic.asp
(en français)

et comparer les valeurs a et b produites par :

Dim a As FileAttribute
Dim b As FileAttribute
For i As Integer = 1 To 5
a = a + FileAttribute.ReadOnly ' DANGEREUX !
b = b Or FileAttribute.ReadOnly
Debug.WriteLine(a & vbTab & b)
Next

et par exemple à un moment donné A vaut 4 c'est à dire la valeur pour les
fichiers Système !!! Donc si + est utilisé, on risque tôt ou tard d'avoir
systématique à voir quel est la valeur actuelle pour ne la modifier que si
nécessaire ce dont le Or s'affranchit totalement.

(La méthode ci-dessus est plutôt un moyen de stocker de façon compacte un
ensemble de caractéristiques vrai/faux, je ne suis pas sûr de ce que tu veux
faire...)
















--

"PR" a écrit dans le message de
news:%
je vous remercie de votre réponse.
mais je ferai qqs remarques:
1/si vb6 le faisait ce ne devait pas etre aussi horrible
que ça.
D'autre part quel mal peut il y avoir à
additionner des constantes.
Il me suffira de remplacer le and par +
mais a la main.
2/N'étant pas pro de l'informatique je n'aime
pas trop les and et les or
et j'avais bricolé qqchose pour y remédier
dans cette occurrence:
la 1ère constante vaut 1 à 9
la 2ème vaut 10 à 90
la 3ème 100 a 900
etc...
ensuite je fais la somme (d'où ma question)
je transforme le long en string
et chaque caractère vaut de 1 à 9 (le 0 étant le defaut)
avec un long 32bits j'ai 9 variations de la meme
particularité de la voiture et non pas
2 (presence ou absence)

encore merci de votre reponse.
PR


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> Salut PR !
>
>> dans VB6 la touche '+' faisait apparaitre ce tableau
>> apparemment pas dans vb.net
>> Y a t il un moyen d'y remédier?
>
> Nope.. et c'est pour un bonne raison... en fait, c'est VB6 qui n'aurait
> jamais dû agir de la sorte.
>
> Dans quel contexte voudrais-tu **additionner** des membres


d'énumérations
> ?
>
> Il ne faut pas confondre *combiner* et *additionner* des membres
> d'énumération. On doit employé l'opérateur Or pour combiner des valeurs


de
> type <Flags()>
>
> Lit mes deux messages dans ce thread, ça pourrait t'éclairer sur la
> différence fondamentale existante entre les deux opérations :
>


http://groups.google.com/group/microsoft.public.fr.vb/browse_frm/thread/add2c7a07fc4bbdf/af6ff365e2f675b5#af6ff365e2f675b5
>
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
>
> "PR" a écrit dans le message de news:
>
>> Bonjour,
>>
>> Lorsque que dans les paramètres d'une fonction il y a un paramètre
>> de type enum
>>
>> le tableau des constantes énumérées apparait
>> lors de la frappe de la virgule puis de 'and' puis espace
>> ou 'or' puis espace
>>
>>
>>
>> merci
>>
>> PR
>>
>
>




Avatar
Zoury
> 2/N'étant pas pro de l'informatique je n'aime
pas trop les and et les or
et j'avais bricolé qqchose pour y remédier
dans cette occurrence:
la 1ère constante vaut 1 à 9
la 2ème vaut 10 à 90
la 3ème 100 a 900
etc...
ensuite je fais la somme (d'où ma question)
je transforme le long en string
et chaque caractère vaut de 1 à 9 (le 0 étant le defaut)
avec un long 32bits j'ai 9 variations de la meme
particularité de la voiture et non pas
2 (presence ou absence)




Je vois. :O)

Dans un système de flag réinventé comme le tient, j'avoue que l'addition de
membre d'énumération peut-être pratique. La solution que tu proposes
consistant à remplacer les And ou Or par des + par la suite est ta seule
porte de sortie si tu tiens à avoir l'intellisense (la liste de valeur qui
apparait lors de l'édition de code).



Maintenant pour compléter tes autres questions :

mais je ferai qqs remarques:
1/si vb6 le faisait ce ne devait pas etre aussi horrible
que ça.
D'autre part quel mal peut il y avoir à
additionner des constantes.




Si on considère l'approche préconiser par .NET concernant l'utilisation des
énumération avec l'attribut <Flags>, l'emploi de l'addition au lieu du OU
logique risque de nous retourné le mauvais résultat comme l'explique mon
lien. Car 1 + 3 = 4 alors que 1 Or 3 = 3..


--
Cordialement
Yanick
MVP pour Visual Basic