cs_zephyrin
Messages postés47Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention17 août 2006
-
18 juin 2003 à 10:24
cs_zephyrin
Messages postés47Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention17 août 2006
-
18 juin 2003 à 11:51
Bonojur,
j'ai un problème de structure de mes collections :
Pourquoi dans la collection "pcolVisees" je peux voir les items depuis l'extérieur (avec debug, je les vois 2 fois) alors qu'avec la collection "IOM_pcolVisees" ce n'est pas le cas ?
Je voudrais que la collection "IOM_pcolVisees" se comporte comme "pcolVisees" - ce qui est le cas pour toutes mes autres collections !!
Merci
Zephyrin
***********************
code fenêtre :
----------------
Option Explicit
Dim colVisees As pcolVisees
Dim clsVisees As pclsVisees
Dim colViseesIOM As IOM_pcolVisees
Dim clsViseesIOM As IOM_pclsVisees
Private Sub cmdBouton_Click()
Set colVisees = New pcolVisees
Set clsVisees = colVisees.Add("Elt", "min", "mep", "max")
End Sub
Private Sub cmdBouton2_Click()
Dim res As Long
Set colViseesIOM = New IOM_pcolVisees
res = colViseesIOM.flViseeMEPEcrire("Elt", "min", "mep", "max")
Set clsViseesIOM = colViseesIOM.Item("Elt")
End Sub
************************
classe IOM_pclsVisees :
---------------------------
Option Explicit
'variables locales de stockage des valeurs de propriétés
Private psNomElement As String
Private psMEP As String
Private psMEPMin As String
Private psMEPMax As String
Friend Property Let MepMax(ByVal valeur As String)
psMEPMax = valeur
End Property
Friend Property Get MepMax() As String
MepMax = psMEPMax
End Property
Friend Property Let MepMin(ByVal valeur As String)
psMEPMin = valeur
End Property
Friend Property Get MepMin() As String
MepMin = psMEPMin
End Property
Friend Property Let MEP(ByVal valeur As String)
psMEP = valeur
End Property
Friend Property Get MEP() As String
MEP = psMEP
End Property
Friend Property Let nomElement(ByVal nom As String)
psNomElement = nom
End Property
Friend Property Get nomElement() As String
nomElement = psNomElement
End Property
********************************
classe IOM_pcolVisees
-------------------------
Option Explicit
'variable locale pour la collection
Private pcolVisees As Collection
Friend Function flViseeMEPEcrire(nomElement As String, MepMin As String, MEP As String, MepMax As String) As Long
Dim pclsVisee As IOM_pclsVisees
On Error Resume Next
'recherche si l'élément a déjà au moins une visée (AOD, MEP ou SA)
Set pclsVisee = pcolVisees.Item(nomElement)
If Err.Number = 0 Then
' L'élément existe déjà, il suffit de lui affecter les valeurs
pclsVisee.MEP = MEP
pclsVisee.MepMin = MepMin
pclsVisee.MepMax = MepMax
Else
' l'élement n'existe pas, il faut le créer
Set pclsVisee = New IOM_pclsVisees
pclsVisee.MEP = MEP
pclsVisee.MepMin = MepMin
pclsVisee.MepMax = MepMax
pcolVisees.Add pclsVisee, nomElement
End If
flViseeMEPEcrire = 0
Set pclsVisee = Nothing
End Function
Friend Property Get Item(vntIndexKey As Variant) As IOM_pclsVisees
Set Item = pcolVisees(vntIndexKey)
End Property
Friend Property Get Count() As Long
Count = pcolVisees.Count
End Property
Friend Sub Remove(vntIndexKey As Variant)
pcolVisees.Remove vntIndexKey
End Sub
Friend Property Get NewEnum() As IUnknown
Set NewEnum = pcolVisees.[_NewEnum]
End Property
Private Sub Class_Initialize()
Set pcolVisees = New Collection
End Sub
Private Sub Class_Terminate()
Set pcolVisees = Nothing
End Sub
**********************************
classe pclsVisees
-------------------
Option Explicit
Private mvarMEP As String
Private mvarMepMin As String
Private mvarMepMax As String
Private mvarElement As String
Public Property Let Element(ByVal vData As String)
mvarElement = vData
End Property
Public Property Get Element() As String
Element = mvarElement
End Property
Public Property Let MepMax(ByVal vData As String)
mvarMepMax = vData
End Property
Public Property Get MepMax() As String
MepMax = mvarMepMax
End Property
Public Property Let MepMin(ByVal vData As String)
mvarMepMin = vData
End Property
Public Property Get MepMin() As String
MepMin = mvarMepMin
End Property
Public Property Let MEP(ByVal vData As String)
mvarMEP = vData
End Property
Public Property Get MEP() As String
MEP = mvarMEP
End Property
********************************
classe pcolVisees
-------------------
Option Explicit
'variable locale pour la collection
Private mCol As Collection
Public Function Add(MEP As String, MepMin As String, MepMax As String, Element As String) As pclsVisees
Dim objNewMember As pclsVisees
Set objNewMember = New pclsVisees
objNewMember.MEP = MEP
objNewMember.MepMin = MepMin
objNewMember.MepMax = MepMax
objNewMember.Element = Element
mCol.Add objNewMember, Element
Set Add = objNewMember
Set objNewMember = Nothing
End Function
Public Property Get Item(vntIndexKey As Variant) As pclsVisees
Set Item = mCol(vntIndexKey)
End Property
Public Property Get Count() As Long
Count = mCol.Count
End Property
Public Sub Remove(vntIndexKey As Variant)
mCol.Remove vntIndexKey
End Sub
Public Property Get NewEnum() As IUnknown
Set NewEnum = mCol.[_NewEnum]
End Property
Private Sub Class_Initialize()
Set mCol = New Collection
End Sub
Private Sub Class_Terminate()
Set mCol = Nothing
End Sub
cs_zephyrin
Messages postés47Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention17 août 2006 18 juin 2003 à 11:51
dans les fichiers VB, il y a du code caché "Attribute ..." - non vu depuis l'interface de codage.
En éditant le fichier de ma collection, j'ai découvert qu'il manquait dans les propriétés suivantes :
Public Property Get Item(vntIndexKey As Variant) As IOM_pclsVisees
Attribute Item.VB_UserMemId = 0
Set Item = pcolVisees(vntIndexKey)
End Property
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
Set NewEnum = pcolVisees.[_NewEnum]
End Property