OVH Cloud OVH Cloud

Collection d'objets

14 réponses
Avatar
Séb
Bonjour,

J'ai encore un pb dans ma transition VB6 --> VB.NET 2005 (express)

En VB6, j'avais une classe Pompe avec des propriété et méthodes.
J'avais réussi à créer directement quelque chose qui ressemblait à un
tableau :
Public pompe(1 To 25) As New pompe

Je pouvais alors appeler, plus loin dans mon programme, pompe(1).Allumer par
exemple.

Je n'arrive pas à reproduire cela en VB.NET :
Si je mets Public pompe(0 To 25) As New pompe, j'ai une erreur d'indiquant
"Arrays cannot be declared with 'New' "
et je n'arrive pas à me sortir du problème.
C'était bien pratique !

Quelqu'un peut m'aider ?

Merci d'avance,

Séb

10 réponses

1 2
Avatar
Vincent Poyo
Salut,
Il suffit d'enlever le mot clé new.
Public pompe (25) as Pompe
tu peux toujours faire une initialisation par défaut dans ton constructeur.
Il m'a sembler voir une nouvelle "propriété" qui est defaultvalue qui est
utilisé
pour l'initialisation par défaut. par exemple defaultvalue d'un integer
c'est 0,
d'un objet c'est nothing. Essayes de voir si c'est possible d'utiliser ceci
pour renvoyer un new Pompe.

Vincent


"Séb" a écrit dans le message de news:
OzhUZBE$
Bonjour,

J'ai encore un pb dans ma transition VB6 --> VB.NET 2005 (express)

En VB6, j'avais une classe Pompe avec des propriété et méthodes.
J'avais réussi à créer directement quelque chose qui ressemblait à un
tableau :
Public pompe(1 To 25) As New pompe

Je pouvais alors appeler, plus loin dans mon programme, pompe(1).Allumer
par exemple.

Je n'arrive pas à reproduire cela en VB.NET :
Si je mets Public pompe(0 To 25) As New pompe, j'ai une erreur d'indiquant
"Arrays cannot be declared with 'New' "
et je n'arrive pas à me sortir du problème.
C'était bien pratique !

Quelqu'un peut m'aider ?

Merci d'avance,

Séb



Avatar
Séb
"Vincent Poyo" a écrit dans le message de news:
O76nuoJ$
Salut,
Il suffit d'enlever le mot clé new.
Public pompe (25) as Pompe
tu peux toujours faire une initialisation par défaut dans ton
constructeur.
Il m'a sembler voir une nouvelle "propriété" qui est defaultvalue qui est
utilisé
pour l'initialisation par défaut. par exemple defaultvalue d'un integer
c'est 0,
d'un objet c'est nothing. Essayes de voir si c'est possible d'utiliser
ceci pour renvoyer un new Pompe.

Vincent




Bonjour,

J'avais effectivement repéré cela pendant mes essais.

Mais le souci, c'est que même en supprimant "New", je bloque pour la suite :
Dans une form quelconque, à la moindre saisie de "pompe(1)." (par exemple
"pompe(1).NumSortie = 1", j'ai droit au liseré bleu, avec pour commentaire :
Pompe is a type and cannot be used as an expression.

Y a-t-il quelque chose de particulier qui manque ?

Merci,

Séb
Avatar
Séb
"Vincent Poyo" a écrit dans le message de news:
eORcSQM$
ben déja VB n'est pas case sensitive, donc évite de donner le même nom
à la classe et l'objet. de plus fait attention car ta valeur par défaut
sera
nothing. et donc l'appel a une propriété ou méthode plantera.




Bonjour,

C'était effectivement une bête question de nom.
J'ai renommé ton tableau en Pompes, ma classe s'appelle toujours Pompe, et
tout est parfait !

Merci beaucoup pour votre aide,

Séb
Avatar
Séb
"Vincent Poyo" a écrit dans le message de news:
eORcSQM$
ben déja VB n'est pas case sensitive, donc évite de donner le même nom
à la classe et l'objet. de plus fait attention car ta valeur par défaut
sera
nothing. et donc l'appel a une propriété ou méthode plantera.




Arg, j'ai parlé trop vite... :-

La 2e partie de votre message semble effectivement poser problème.

J'ai défini dans ma class, la propriété NumSortie en tant que Short

Et lors de l'appel, Pompes(1).NumSortie = 1 fait planter l'appli : "La
référence d'objet n'est pas définie à une instance d'un objet".
Là, je ne comprends pas pourquoi. Quelle "valeur par défaut" sera Nothing ?

Le passage à .net n'est pas évident :-

Merci,

Séb
Avatar
Séb
"Vincent Poyo" a écrit dans le message de news:
uZjz3rM$
ben oui la valeur par défaut c'est nothing
comme en vb6 tant qu'on a pas fait new ou createobject

c'est pour cela que je te disais d'initialiser ton tableau dans le
constructeur, ou voir si on peut redéfinir le fameux défaultvalue




Excusez moi, mais j'ai du mal à comprendre.

Dans quel constructeur puis-je initialiser mon tableau ? La notion de
constructeur ne m'est pas très familière, j'en ai simplement vaguement
entendu parler.
Pour le moment, ma ligne Pompe(1).NumSortie se fait dans le Form_Load de mon
1er formulaire.

Séb
Avatar
Vincent Poyo
ben déja VB n'est pas case sensitive, donc évite de donner le même nom
à la classe et l'objet. de plus fait attention car ta valeur par défaut sera
nothing. et donc l'appel a une propriété ou méthode plantera.



"Séb" a écrit dans le message de news:
ubRd2JM$

"Vincent Poyo" a écrit dans le message de news:
O76nuoJ$
Salut,
Il suffit d'enlever le mot clé new.
Public pompe (25) as Pompe
tu peux toujours faire une initialisation par défaut dans ton
constructeur.
Il m'a sembler voir une nouvelle "propriété" qui est defaultvalue qui est
utilisé
pour l'initialisation par défaut. par exemple defaultvalue d'un integer
c'est 0,
d'un objet c'est nothing. Essayes de voir si c'est possible d'utiliser
ceci pour renvoyer un new Pompe.

Vincent




Bonjour,

J'avais effectivement repéré cela pendant mes essais.

Mais le souci, c'est que même en supprimant "New", je bloque pour la suite
:
Dans une form quelconque, à la moindre saisie de "pompe(1)." (par exemple
"pompe(1).NumSortie = 1", j'ai droit au liseré bleu, avec pour commentaire
: Pompe is a type and cannot be used as an expression.

Y a-t-il quelque chose de particulier qui manque ?

Merci,

Séb



Avatar
Patrice
Le plus simple est de faire un MonTableau(i)=New MaClasse avant d'utiliser
l'objet.

Contrairement à VB6, le New n'est pas implanté en VB.NET comme voulant dire
"insérer un test avant chaque appel à l'objet et le créer si il est nothing"
mais appelle automatiquement au démarrage, le code créant explicitement
l'objet.

Donc à mon avis impossible d'initialiser à la déclaration tous les éléments
d'un tableau (peut-être en 2.0 ?)

--

"Séb" a écrit dans le message de
news:eo6Z9vM$

"Vincent Poyo" a écrit dans le message de news:
uZjz3rM$
> ben oui la valeur par défaut c'est nothing
> comme en vb6 tant qu'on a pas fait new ou createobject
>
> c'est pour cela que je te disais d'initialiser ton tableau dans le
> constructeur, ou voir si on peut redéfinir le fameux défaultvalue


Excusez moi, mais j'ai du mal à comprendre.

Dans quel constructeur puis-je initialiser mon tableau ? La notion de
constructeur ne m'est pas très familière, j'en ai simplement vaguement
entendu parler.
Pour le moment, ma ligne Pompe(1).NumSortie se fait dans le Form_Load de


mon
1er formulaire.

Séb




Avatar
Vincent Poyo
ben oui la valeur par défaut c'est nothing
comme en vb6 tant qu'on a pas fait new ou createobject

c'est pour cela que je te disais d'initialiser ton tableau dans le
constructeur, ou voir si on peut redéfinir le fameux défaultvalue

"Séb" a écrit dans le message de news:
uDVA4mM$

"Vincent Poyo" a écrit dans le message de news:
eORcSQM$
ben déja VB n'est pas case sensitive, donc évite de donner le même nom
à la classe et l'objet. de plus fait attention car ta valeur par défaut
sera
nothing. et donc l'appel a une propriété ou méthode plantera.




Arg, j'ai parlé trop vite... :-

La 2e partie de votre message semble effectivement poser problème.

J'ai défini dans ma class, la propriété NumSortie en tant que Short

Et lors de l'appel, Pompes(1).NumSortie = 1 fait planter l'appli : "La
référence d'objet n'est pas définie à une instance d'un objet".
Là, je ne comprends pas pourquoi. Quelle "valeur par défaut" sera Nothing
?

Le passage à .net n'est pas évident :-

Merci,

Séb



Avatar
Vincent Poyo
le constructeur est la méthode new
pour une forme elle est définit dans le designer
mais pour une forme tu peux également te servir de l'évènement onLoad pour
l'initialisation

par exemple dans ta méthode load tu rajoutes au début ce code

dim l_pompe as pompe

for each l_pompe in pompes
l_pompe = new pompe()
next

au moins tu es sûr qu'après ceci, tu as un objet pompe pour tout les
éléments de ton tableau



"Séb" a écrit dans le message de news:
eo6Z9vM$

"Vincent Poyo" a écrit dans le message de news:
uZjz3rM$
ben oui la valeur par défaut c'est nothing
comme en vb6 tant qu'on a pas fait new ou createobject

c'est pour cela que je te disais d'initialiser ton tableau dans le
constructeur, ou voir si on peut redéfinir le fameux défaultvalue




Excusez moi, mais j'ai du mal à comprendre.

Dans quel constructeur puis-je initialiser mon tableau ? La notion de
constructeur ne m'est pas très familière, j'en ai simplement vaguement
entendu parler.
Pour le moment, ma ligne Pompe(1).NumSortie se fait dans le Form_Load de
mon 1er formulaire.

Séb



Avatar
Séb
"Vincent Poyo" a écrit dans le message de news:
%23Jm6oCN$
le constructeur est la méthode new
pour une forme elle est définit dans le designer
mais pour une forme tu peux également te servir de l'évènement onLoad pour
l'initialisation

par exemple dans ta méthode load tu rajoutes au début ce code

dim l_pompe as pompe

for each l_pompe in pompes
l_pompe = new pompe()
next

au moins tu es sûr qu'après ceci, tu as un objet pompe pour tout les
éléments de ton tableau




Excusez moi d'abuser, j'ai encore quelques soucis...

La notion de constructeur, OK, c'est la méthode appelée à l'ilitialisation
d'un objet de la classE.
Le fait que celui d'une form est inclu dans Load, OK

Mais j'ai du mal à comprendre le but du code qui suit.
Ce que j'aimerais, c'est pouvoir utiliser mon tableau :
pompes(4).NumSortie = 789 par exemple, ou plus précisément :
For i = 3 to 7
pompes(i).NumSortie = i*2
Next i
par exemple, pour montrer l'utiliser du tableau.
Et je ne comprends pas l'intervention de ce l_pompe, qui ne résout pas mon
souci, après test.

Merci pour le temps que vous m'accordez.

Séb
1 2