Urgent: Collection d'objets (soft à finir cette semaine)
5 réponses
Frédéric Van der Beken
Bonjour,
VB6
J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
contrôle gère et incorpore les communications en Ip, série, modem etc.
J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème
et ai réussi à envoyer au panneau.
Maintenant, je dois gérer 20 panneaux.
Je crois que la bonne méthode est de créer une collection plutôt que de
dupliquer 20 fois le contrôle sur le form.
D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
RTUs.Add (RTU)
L'objet s'appelle RTU et la collection RTUs
'Déclaration
Dim RTUs As New Collection
'Form_Load
For Index = 0 To 19
RTUs.Add (RTU)
Next Index
'Form_QueryUnload
For Index = 0 To 19
Set RTUs(Index) = Nothing
Next Index
Je pense que je n'ai pas la bonne syntaxe
Merci de votre aide
--
===================================================
F. Van der Beken
VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
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
Patrice Henrio
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a écrit dans le message de news:
Bonjour,
VB6 J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce contrôle gère et incorpore les communications en Ip, série, modem etc. J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème et ai réussi à envoyer au panneau. Maintenant, je dois gérer 20 panneaux. Je crois que la bonne méthode est de créer une collection plutôt que de dupliquer 20 fois le contrôle sur le form. D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur RTUs.Add (RTU)
L'objet s'appelle RTU et la collection RTUs
'Déclaration Dim RTUs As New Collection
'Form_Load For Index = 0 To 19 RTUs.Add (RTU) Next Index
'Form_QueryUnload For Index = 0 To 19 Set RTUs(Index) = Nothing Next Index
Je pense que je n'ai pas la bonne syntaxe Merci de votre aide -- ================================================== > F. Van der Beken
VEDEX 8, rue de la Féculerie Z.I. les Cailloux 45150 JARGEAU Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
Je ne suis pas expert en collection mais une chose me choque dans ton code
For Index = 0 To 19 RTUs.Add (RTU) Next Index
Pour ma part j'écrirai
for Index=0 to 9 set V = new RTU RTUs.add V Next Index
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre}support@vedex.com> a écrit
dans le message de news: exx61rz0FHA.3064@TK2MSFTNGP10.phx.gbl...
Bonjour,
VB6
J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
contrôle gère et incorpore les communications en Ip, série, modem etc.
J'ai posé le contrôle sur le form, ai manipulé les propriétés sans
problème
et ai réussi à envoyer au panneau.
Maintenant, je dois gérer 20 panneaux.
Je crois que la bonne méthode est de créer une collection plutôt que de
dupliquer 20 fois le contrôle sur le form.
D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
RTUs.Add (RTU)
L'objet s'appelle RTU et la collection RTUs
'Déclaration
Dim RTUs As New Collection
'Form_Load
For Index = 0 To 19
RTUs.Add (RTU)
Next Index
'Form_QueryUnload
For Index = 0 To 19
Set RTUs(Index) = Nothing
Next Index
Je pense que je n'ai pas la bonne syntaxe
Merci de votre aide
--
================================================== > F. Van der Beken
VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a écrit dans le message de news:
Bonjour,
VB6 J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce contrôle gère et incorpore les communications en Ip, série, modem etc. J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème et ai réussi à envoyer au panneau. Maintenant, je dois gérer 20 panneaux. Je crois que la bonne méthode est de créer une collection plutôt que de dupliquer 20 fois le contrôle sur le form. D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur RTUs.Add (RTU)
L'objet s'appelle RTU et la collection RTUs
'Déclaration Dim RTUs As New Collection
'Form_Load For Index = 0 To 19 RTUs.Add (RTU) Next Index
'Form_QueryUnload For Index = 0 To 19 Set RTUs(Index) = Nothing Next Index
Je pense que je n'ai pas la bonne syntaxe Merci de votre aide -- ================================================== > F. Van der Beken
VEDEX 8, rue de la Féculerie Z.I. les Cailloux 45150 JARGEAU Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
Localisation: www.mappy.com/PlanPerso/vedex/0 ================================================== "Patrice Henrio" a écrit dans le message de news:
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a
écrit
dans le message de news: > Bonjour, > > VB6 > J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce > contrôle gère et incorpore les communications en Ip, série, modem etc. > J'ai posé le contrôle sur le form, ai manipulé les propriétés sans > problème > et ai réussi à envoyer au panneau. > Maintenant, je dois gérer 20 panneaux. > Je crois que la bonne méthode est de créer une collection plutôt que de > dupliquer 20 fois le contrôle sur le form. > D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur > RTUs.Add (RTU) > > L'objet s'appelle RTU et la collection RTUs > > 'Déclaration > Dim RTUs As New Collection > > 'Form_Load > For Index = 0 To 19 > RTUs.Add (RTU) > Next Index > > 'Form_QueryUnload > For Index = 0 To 19 > Set RTUs(Index) = Nothing > Next Index > > Je pense que je n'ai pas la bonne syntaxe > Merci de votre aide > -- > ================================================== > > F. Van der Beken > > VEDEX > 8, rue de la Féculerie > Z.I. les Cailloux > 45150 JARGEAU > Tél: 02 38 46 11 65 Fax: 02 38 46 19 35 > > Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net > E-mail: {EnlevezMoiPourRepondre} > > Localisation: www.mappy.com/PlanPerso/vedex/0 > ================================================== > > > Je ne suis pas expert en collection mais une chose me choque dans ton code > For Index = 0 To 19 > RTUs.Add (RTU) > Next Index
Pour ma part j'écrirai
for Index=0 to 9 set V = new RTU RTUs.add V Next Index
je vais essayer, le V il faut le déclarer ?
--
================================================== F. Van der Beken
VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
Localisation: www.mappy.com/PlanPerso/vedex/0
==================================================
"Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
news:eK2SN0z0FHA.3892@TK2MSFTNGP12.phx.gbl...
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre}support@vedex.com> a
écrit
dans le message de news: exx61rz0FHA.3064@TK2MSFTNGP10.phx.gbl...
> Bonjour,
>
> VB6
> J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
> contrôle gère et incorpore les communications en Ip, série, modem etc.
> J'ai posé le contrôle sur le form, ai manipulé les propriétés sans
> problème
> et ai réussi à envoyer au panneau.
> Maintenant, je dois gérer 20 panneaux.
> Je crois que la bonne méthode est de créer une collection plutôt que de
> dupliquer 20 fois le contrôle sur le form.
> D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
> RTUs.Add (RTU)
>
> L'objet s'appelle RTU et la collection RTUs
>
> 'Déclaration
> Dim RTUs As New Collection
>
> 'Form_Load
> For Index = 0 To 19
> RTUs.Add (RTU)
> Next Index
>
> 'Form_QueryUnload
> For Index = 0 To 19
> Set RTUs(Index) = Nothing
> Next Index
>
> Je pense que je n'ai pas la bonne syntaxe
> Merci de votre aide
> --
> ================================================== > > F. Van der Beken
>
> VEDEX
> 8, rue de la Féculerie
> Z.I. les Cailloux
> 45150 JARGEAU
> Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
>
> Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net
> E-mail: {EnlevezMoiPourRepondre}support@vedex.com
>
> Localisation: www.mappy.com/PlanPerso/vedex/0
> ================================================== > >
>
Je ne suis pas expert en collection mais une chose me choque dans ton code
> For Index = 0 To 19
> RTUs.Add (RTU)
> Next Index
Pour ma part j'écrirai
for Index=0 to 9
set V = new RTU
RTUs.add V
Next Index
Localisation: www.mappy.com/PlanPerso/vedex/0 ================================================== "Patrice Henrio" a écrit dans le message de news:
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a
écrit
dans le message de news: > Bonjour, > > VB6 > J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce > contrôle gère et incorpore les communications en Ip, série, modem etc. > J'ai posé le contrôle sur le form, ai manipulé les propriétés sans > problème > et ai réussi à envoyer au panneau. > Maintenant, je dois gérer 20 panneaux. > Je crois que la bonne méthode est de créer une collection plutôt que de > dupliquer 20 fois le contrôle sur le form. > D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur > RTUs.Add (RTU) > > L'objet s'appelle RTU et la collection RTUs > > 'Déclaration > Dim RTUs As New Collection > > 'Form_Load > For Index = 0 To 19 > RTUs.Add (RTU) > Next Index > > 'Form_QueryUnload > For Index = 0 To 19 > Set RTUs(Index) = Nothing > Next Index > > Je pense que je n'ai pas la bonne syntaxe > Merci de votre aide > -- > ================================================== > > F. Van der Beken > > VEDEX > 8, rue de la Féculerie > Z.I. les Cailloux > 45150 JARGEAU > Tél: 02 38 46 11 65 Fax: 02 38 46 19 35 > > Sites: www.vedex.com www.pointeuse.fr www.pointeuses.net > E-mail: {EnlevezMoiPourRepondre} > > Localisation: www.mappy.com/PlanPerso/vedex/0 > ================================================== > > > Je ne suis pas expert en collection mais une chose me choque dans ton code > For Index = 0 To 19 > RTUs.Add (RTU) > Next Index
Pour ma part j'écrirai
for Index=0 to 9 set V = new RTU RTUs.add V Next Index
Patrice Henrio
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a écrit dans le message de news:
je vais essayer, le V il faut le déclarer ?
Bien sûr comme toutes les variables pour ne pas avoir de surprises. J'utilise toujours en tête de mes modules Option explicit
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre}support@vedex.com> a écrit
dans le message de news: uEhIE7z0FHA.2924@TK2MSFTNGP15.phx.gbl...
je vais essayer, le V il faut le déclarer ?
Bien sûr comme toutes les variables pour ne pas avoir de surprises.
J'utilise toujours en tête de mes modules Option explicit
"Frédéric Van der Beken" <{EnlevezMoiPourRepondre} a écrit dans le message de news:
je vais essayer, le V il faut le déclarer ?
Bien sûr comme toutes les variables pour ne pas avoir de surprises. J'utilise toujours en tête de mes modules Option explicit
Jacques93
Frédéric Van der Beken a écrit :
Bonjour,
VB6 J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce contrôle gère et incorpore les communications en Ip, série, modem etc. J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème et ai réussi à envoyer au panneau. Maintenant, je dois gérer 20 panneaux. Je crois que la bonne méthode est de créer une collection plutôt que de dupliquer 20 fois le contrôle sur le form. D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur RTUs.Add (RTU)
L'objet s'appelle RTU et la collection RTUs
'Déclaration Dim RTUs As New Collection
'Form_Load For Index = 0 To 19 RTUs.Add (RTU) Next Index
'Form_QueryUnload For Index = 0 To 19 Set RTUs(Index) = Nothing Next Index
Si c'est toi qui gère la collection RTUs, ce qui semble être le cas, (l'erreur 438 indiquant que l'objet RTUs ne gère pas la méthode Add) c'est à toi dans le module de classe de gérer, la création, l'ajout, etc..., par exemple :
=================================================================== Private RTUs As Collection
Public Function Add(Key As String) As RTU Dim newRTU As RTU
Set newRTU = New RTU newRTU.Key = Key RTUs.Add newRTU, Key Set Add = newRTU Set newRTU = Nothing End Function
' Cette propriété doit avoir une ID de procédure 'par défaut' ' dans Outils => Attribut de procédure Public Property Get Item(IndexKey As Variant) As RTU Set Item = RTUs(IndexKey) End Property
Public Property Get Count() As Long Count = RTUs.Count End Property
Public Sub Remove(IndexKey As Variant) RTUs.Remove IndexKey End Sub
' Cette propriété doit être caché et avoir une ID de procédure = -4 ' dans Outils => Attribut de procédure. C'est elle qui permet ' l'énumération de la collection par For Each ... In ... Public Property Get NewEnum() As IUnknown Set NewEnum = RTUs.[_NewEnum] End Property
Private Sub Class_Initialize() Set RTUs = New Collection End Sub
Private Sub Class_Terminate() Set RTUs = Nothing End Sub
' Tu peux bien sur avoir d'autres méthodes et propriétés, spécifiques au fonctionnement de ta collection. ===================================================================== Cela dit, il faut peut être réfléchir entre cette solution et une autre, un groupe de contôles :
Tu poses 1 contrôle sur ta feuille, tu mets sa propriété Index à 0, et ensuite tu fais :
For i=1 to n Load RTU(n) next i
Ensuite tout dépends si ton contrôle présente une interface et est donc visible auquel cas il faudra le positionner sur la feuille, etc ...
-- Cordialement,
Jacques.
Frédéric Van der Beken a écrit :
Bonjour,
VB6
J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce
contrôle gère et incorpore les communications en Ip, série, modem etc.
J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème
et ai réussi à envoyer au panneau.
Maintenant, je dois gérer 20 panneaux.
Je crois que la bonne méthode est de créer une collection plutôt que de
dupliquer 20 fois le contrôle sur le form.
D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur
RTUs.Add (RTU)
L'objet s'appelle RTU et la collection RTUs
'Déclaration
Dim RTUs As New Collection
'Form_Load
For Index = 0 To 19
RTUs.Add (RTU)
Next Index
'Form_QueryUnload
For Index = 0 To 19
Set RTUs(Index) = Nothing
Next Index
Si c'est toi qui gère la collection RTUs, ce qui semble être le cas,
(l'erreur 438 indiquant que l'objet RTUs ne gère pas la méthode Add)
c'est à toi dans le module de classe de gérer, la création, l'ajout,
etc..., par exemple :
=================================================================== Private RTUs As Collection
Public Function Add(Key As String) As RTU
Dim newRTU As RTU
Set newRTU = New RTU
newRTU.Key = Key
RTUs.Add newRTU, Key
Set Add = newRTU
Set newRTU = Nothing
End Function
' Cette propriété doit avoir une ID de procédure 'par défaut'
' dans Outils => Attribut de procédure
Public Property Get Item(IndexKey As Variant) As RTU
Set Item = RTUs(IndexKey)
End Property
Public Property Get Count() As Long
Count = RTUs.Count
End Property
Public Sub Remove(IndexKey As Variant)
RTUs.Remove IndexKey
End Sub
' Cette propriété doit être caché et avoir une ID de procédure = -4
' dans Outils => Attribut de procédure. C'est elle qui permet
' l'énumération de la collection par For Each ... In ...
Public Property Get NewEnum() As IUnknown
Set NewEnum = RTUs.[_NewEnum]
End Property
Private Sub Class_Initialize()
Set RTUs = New Collection
End Sub
Private Sub Class_Terminate()
Set RTUs = Nothing
End Sub
' Tu peux bien sur avoir d'autres méthodes et propriétés, spécifiques au
fonctionnement de ta collection.
=====================================================================
Cela dit, il faut peut être réfléchir entre cette solution et une autre,
un groupe de contôles :
Tu poses 1 contrôle sur ta feuille, tu mets sa propriété Index à 0,
et ensuite tu fais :
For i=1 to n
Load RTU(n)
next i
Ensuite tout dépends si ton contrôle présente une interface et est donc
visible auquel cas il faudra le positionner sur la feuille, etc ...
VB6 J'ai un contrôle ocx provenant d'un fabricant de panneaux lumineux. Ce contrôle gère et incorpore les communications en Ip, série, modem etc. J'ai posé le contrôle sur le form, ai manipulé les propriétés sans problème et ai réussi à envoyer au panneau. Maintenant, je dois gérer 20 panneaux. Je crois que la bonne méthode est de créer une collection plutôt que de dupliquer 20 fois le contrôle sur le form. D'habitude je ne bosse pas en VB et là j'ai un problème: erreur 438 sur RTUs.Add (RTU)
L'objet s'appelle RTU et la collection RTUs
'Déclaration Dim RTUs As New Collection
'Form_Load For Index = 0 To 19 RTUs.Add (RTU) Next Index
'Form_QueryUnload For Index = 0 To 19 Set RTUs(Index) = Nothing Next Index
Si c'est toi qui gère la collection RTUs, ce qui semble être le cas, (l'erreur 438 indiquant que l'objet RTUs ne gère pas la méthode Add) c'est à toi dans le module de classe de gérer, la création, l'ajout, etc..., par exemple :
=================================================================== Private RTUs As Collection
Public Function Add(Key As String) As RTU Dim newRTU As RTU
Set newRTU = New RTU newRTU.Key = Key RTUs.Add newRTU, Key Set Add = newRTU Set newRTU = Nothing End Function
' Cette propriété doit avoir une ID de procédure 'par défaut' ' dans Outils => Attribut de procédure Public Property Get Item(IndexKey As Variant) As RTU Set Item = RTUs(IndexKey) End Property
Public Property Get Count() As Long Count = RTUs.Count End Property
Public Sub Remove(IndexKey As Variant) RTUs.Remove IndexKey End Sub
' Cette propriété doit être caché et avoir une ID de procédure = -4 ' dans Outils => Attribut de procédure. C'est elle qui permet ' l'énumération de la collection par For Each ... In ... Public Property Get NewEnum() As IUnknown Set NewEnum = RTUs.[_NewEnum] End Property
Private Sub Class_Initialize() Set RTUs = New Collection End Sub
Private Sub Class_Terminate() Set RTUs = Nothing End Sub
' Tu peux bien sur avoir d'autres méthodes et propriétés, spécifiques au fonctionnement de ta collection. ===================================================================== Cela dit, il faut peut être réfléchir entre cette solution et une autre, un groupe de contôles :
Tu poses 1 contrôle sur ta feuille, tu mets sa propriété Index à 0, et ensuite tu fais :
For i=1 to n Load RTU(n) next i
Ensuite tout dépends si ton contrôle présente une interface et est donc visible auquel cas il faudra le positionner sur la feuille, etc ...
-- Cordialement,
Jacques.
Frédéric Van der Beken
Bonjour,
J'ai opté pour:
For i=1 to n Load RTU(n) next i et le Unload en fin de programme
C'est simple, compréhensible et ça marche impec., mon appli est terminée et est en test chez l'installateur. Mon ocx est un contrôle invisible (style mscomm) donc pas d'autre problème.
Merci pour votre aide Jacques et Patrick
Frédéric -- ================================================== F. Van der Beken
VEDEX 8, rue de la Féculerie Z.I. les Cailloux 45150 JARGEAU Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
For i=1 to n
Load RTU(n)
next i
et le Unload en fin de programme
C'est simple, compréhensible et ça marche impec., mon appli est terminée et
est en test chez l'installateur.
Mon ocx est un contrôle invisible (style mscomm) donc pas d'autre problème.
Merci pour votre aide Jacques et Patrick
Frédéric
--
================================================== F. Van der Beken
VEDEX
8, rue de la Féculerie
Z.I. les Cailloux
45150 JARGEAU
Tél: 02 38 46 11 65 Fax: 02 38 46 19 35
For i=1 to n Load RTU(n) next i et le Unload en fin de programme
C'est simple, compréhensible et ça marche impec., mon appli est terminée et est en test chez l'installateur. Mon ocx est un contrôle invisible (style mscomm) donc pas d'autre problème.
Merci pour votre aide Jacques et Patrick
Frédéric -- ================================================== F. Van der Beken
VEDEX 8, rue de la Féculerie Z.I. les Cailloux 45150 JARGEAU Tél: 02 38 46 11 65 Fax: 02 38 46 19 35