EMMANUELTAVE
Messages postés22Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention 3 janvier 2008
-
31 août 2007 à 02:48
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 2008
-
31 août 2007 à 09:35
bonsoir,
Je transforme une application VB6 en VB2005 : Ouf je m'acroche !
voici ma classe de base : rien de tres .....
Public Class cArbHier
Private mstrArbHierCode As String
Private mstrArbHierDescription As String
Public Property ArbHierCode() As String
Get
Return mstrArbHierCode
End Get
Set(ByVal value As String)
mstrArbHierCode = value
End Set
End Property
Public Property ArbHierDescription() As String
Get
Return mstrArbHierDescription
End Get
Set(ByVal value As String)
mstrArbHierDescription = value
End Set
End Property
End Class
Je cree ma classe de collection comme suite :
Imports System.Collections
Public Class cArbHiers
Private mCollection As System.Collections.Generic.List(Of cArbHier)
Private mlinkArbHier As cArbHier
Sub New()
mCollection = New System.Collections.Generic.List(Of cArbHier)
mlinkArbHier = New cArbHier
End Sub
Public Function Add(ByVal obAjouter As cArbHier, ByVal lngKey As Integer) As cArbHier
mCollection.Add(obAjouter)
Add = obAjouter
End Function
Public ReadOnly Property Item(ByVal Index As Integer) As cArbHier
Get
Item = mCollection.Item(Index)
End Get
End Property
Public ReadOnly Property Count() As Integer
Get
Count = mCollection.Count
End Get
End Property
Public Property cArbHier() As cArbHier
Get
If mlinkArbHier Is Nothing Then
mlinkArbHier = New cArbHier
End If
cArbHier = mlinkArbHier
End Get
Set(ByVal value As Codex_Vp_App.cArbHier)
mlinkArbHier = value
End Set
End Property
End Class
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 31 août 2007 à 09:35
Et si, plutot que de mettre un membre private de type Collection, tu dérivais ta classe de ce même type ? Je sais, en venant de VB6 on n'a pas le reflexe de l'héritage.
Le souci vient du fait que je crois que pour utiliser For Each sur une classe, elle doit implémenté l'interface IEnumerable,ce que fait le type System.Collection.generic.List je pense.
Donc un simple Inherits dessus devrait le faire (puisque tu vas hérité des interfaces implémenté par ta classe de base.)
Tu seras peut-être obligé de remanier le code des memnbres de ta collection, masi si tu travaille sous VB.NET 2005, il te guidera en te disant que tel membre dois être overrides ou shadows, etc ...
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 31 août 2007 à 02:57
salut,
en vb6, pour implémenter For Each avec une classe collection, il fallait ajouter le membre caché de la collection _NewEnum () As IUnknown et passer l'attribut de procédure à -4, de mémoire :
Public Function NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
Set NewEnum = NomDeTaCollection.[_NewEnum]
End Function