IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Probléme de Classe utilisant un collection générique.


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut Probléme de Classe utilisant un collection générique.
    Bonjour a tous
    J'ai crée une Classe contenant une Classe générique comme ceci:

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Public Class ANNEXE
        Const ConstEntete As String = "E1"
        Const TypeDoc As String = "An1"
        Const ConstFin As String = "T1"
        Private _mMatrFisc As Double
     
        Private  maCol As System.Collections.Generic.List(Of Employes)
     
        Public Sub New()
            maCol = New System.Collections.Generic.List(Of Employes)
        End Sub
     
        Public Property Matricule_Fiscal() As Double
            Get
                Return _mMatrFisc
            End Get
     
            Set(ByVal Value As Double)
                _mMatrFisc = Value
            End Set
        End Property
     
        Public ReadOnly Property Item(ByVal lIndex As Integer) As Employes
            Get
                Item = maCol.Item(lIndex)
            End Get
        End Property
     
        Public Sub AddSalarie(ByVal Sal As Employes)
            maCol.Add(Sal)       
         End Sub
     
    Public Class Employes
     
    Private Shared _yNomPrenom As String
          Public Sub New()
     
          End Sub
     
     
           Public Property NomPrenom() As String
            Get
                Return _yNomPrenom
            End Get
     
            Set(ByVal Value As String)
                _yNomPrenom = Value
            End Set
        End Property
     
    End Class
     
     
    End Class

    J'utilise ma classe comme suit en la remplissant a partir d'un gridview:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Dim ANX As New ANNEXE
    ANX.Matricule_Fiscal = txtMat.Text
     
    For i As Integer = 0 To GridEmploye.Rows.Count - 1
     
                Dim ANX_Employe As New ANNEXE.Employes
                ANX_Employe.NomPrenom =  GridEmploye.Rows.Item(i).Cells(0).Value
                ANX.AddSalarie(ANX_Employe)
                ANX_Employe = Nothing
    Next


    Le problème c'est que si par exemple après avoir ajouté 3 employés ("toto1","Toto2","toto3") , j'ai toujours les mêmes éléments dans ma collection !
    c'est a dire que dans ANX.Item(0).NomPrenom j'ai toto3
    dans ANX.Item(1).NomPrenom j'ai toto3
    dans ANX.Item(2).NomPrenom j'ai toto3

    alors que je devrai avoir dans ANX.Item(0).NomPrenom toto1
    dans ANX.Item(0).NomPrenom toto2
    dans ANX.Item(0).NomPrenom toto3


    J'ai du loupé un truc

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Je vois pas la déclaration de _yNomPrenom dans ta classe Employé. A partir du moment où elle n'est pas déclarée, faut s'attendre à un comportement étrange quand tu récupéres tes employés (en l'occurence tu te récupéres la derniére valeur).

    Le conseil : utilise Option Explicit et Option Strict On, ça va t'éviter ce genre de surprise.

    PS : je pense que le titre du post est impropre, la classe Annexe n'a rien de générique par elle même. Disons donc Probléme de Classe utilisant un collection générique.

    Cdt.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    Merci Pour les conseils

    Mais le problème persiste toujours...

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Avec une exécution pas à pas (debug), que vaut "GridEmploye.Rows.Item(i).Cells(0).Value" à chaque étape ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    ça contient bien les valeurs correctes.

    C'est bizarre car si j'ajoute 3 éléments , j'ai bien un count = 3
    mais c toujours les mêmes éléments , a savoir, toujours le dernier ajouté...

    J'ai aussi testé le truc sur un nouveau projet comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    
    Imports System.Collections
    
    Public Class MaCollection
        Private Shared maCol As System.Collections.Generic.List(Of Employes)
        Public Sub New()
            maCol = New System.Collections.Generic.List(Of Employes)
        End Sub
    
        Public ReadOnly Property Item(ByVal lIndex As Integer) As Employes
            Get
                Item = maCol.Item(lIndex)
            End Get
        End Property
    
        Public Function AddSalarie(ByVal Sal As Employes)
            maCol.Add(Sal)
            AddSalarie = Sal
        End Function
    
    End Class
    
    
    
    
    Public Class Employes
    
        Private Shared _yNomPrenom As String
      
        Public Sub New()
    
        End Sub
    
        Public Property NomPrenom() As String
            Get
                Return _yNomPrenom
            End Get
    
            Set(ByVal Value As String)
                _yNomPrenom = Value
            End Set
        End Property
    
    
    End Class
    
    et puis dans une form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Col As New MaCollection
            Dim emp As New Employes
            Dim emp2 As New Employes
     
            emp.NomPrenom = "xyz"
            Col.AddSalarie(emp)
     
            emp2.NomPrenom = "abc"
            Col.AddSalarie(emp2)
            MsgBox(Col.Item(0).NomPrenom)
            MsgBox(Col.Item(1).NomPrenom)
        End Sub
    J'ai toujours "abc" dans tous les items

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Tain tu m'as fait faire du VB, j'en ai horreur

    Bref, retire le "Shared" qu'il y a devant "_yNomPrenom" ...
    Le Shared signifie (à priori, équivalent du static) que toutes les instances de ta classe utiliseront le même objet et donc le modifieront ce qui n'est pas l'objectif ...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    YESS ca marche !!!

    J'EXIGE UNE EXPLICATION !!!!!

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par hawax Voir le message
    J'EXIGE UNE EXPLICATION !!!!!
    Citation Envoyé par smyley Voir le message
    Le Shared signifie (à priori, équivalent du static) que toutes les instances de ta classe utiliseront le même objet et donc le modifieront ce qui n'est pas l'objectif ...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    Merci Beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec les collection génériques
    Par David Fouejio dans le forum Windows Forms
    Réponses: 9
    Dernier message: 18/02/2010, 16h48
  2. problème classe utilisant le multiprocessing
    Par airod dans le forum Général Python
    Réponses: 2
    Dernier message: 14/11/2009, 11h29
  3. Problème conception classe générique
    Par scary dans le forum Langage
    Réponses: 19
    Dernier message: 23/10/2009, 09h27
  4. Réponses: 9
    Dernier message: 09/12/2008, 00h07
  5. [POO] Problème avec l'utilisation de classes.
    Par sekiryou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo