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 :

[VB.Net] Comment accéder à une propriété de sous-classes ?


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut [VB.Net] Comment accéder à une propriété de sous-classes ?
    Bonjour ,

    Je m'explique. Je travaille sur un code que j'ai repris, je ne l'ai pas créé.
    J'ai une classeA. J'appelle une méthode de cette classeA qui me retourne un tableau1 de données défini par une autre classeB. Dans ce tableau1, j'ai une dizaine de propriétés publiques, dont une est un tableau2 de données, elle aussi générée par une autre classeC. les données du tableau2 sont de type String ou Integer.
    J'aimerais accéder aux propriétés du tableau2.

    J'ai besoin de parcourir les données du tableau2 dans une boucle For.
    J'ai donc fait cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For k As Integer = 0 To tableau1(i).tableau2.length 
         ' Traîtement du style:
         tableau1(i).tableau2(k).propriétéQueJeVeuxAtteindre
    Next
    Je pensais que cela marcherait...mais en fait il me renvoit l'exception :
    'Variable Objet ou Variable d'un bloc non définie'

    Comme s'il fallait déclarer un New pour la classeC qui créé les propriétés que je veux...enfin c'est ce que je pense...

    Savez-vous comment faire pour accéder aux propriétés ?

    Merci

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Salut druidev,

    Ton erreur n'est pas due à la propriete à laquelle tu veux acceder, montre nous le code complet. on pourra mieux t'aider.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut
    Ok alors je déclare ma classeA, puis j'effectue la méthode pour remplir le tableau1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim classeA As New MyClass.MyClass()
    Dim tableau1 As Array
    tableau1 = classeA.GetProperties(id1, id2)
    Le tableau1 va en fait être composé des propriétés qui répondent aux paramètres id1 et id2.
    Chaque propriété renvoyée est composée d'un tableau spécial de propriétés que nous avons créé spécialement grâce aux méthodes:
    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
     
    Public Class propriété 
        Private num1 As Integer
        Private text1 As String
        Private typePerso As Type
        ...
     
        Public Property num1() As Int32
            Get
                Return ws_num1
            End Get
            Set(ByVal value As Int32)
                ws_num1 = value
            End Set
        End Property
    End Class
    Une des propriétés (typePerso) créé dans cette classe est une sorte de tableau spécial créé de la même manière par une autre classe Type:

    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
    Public Class Type
        Private ws_Id As Integer
        Private ws_value As String
     
        Public Property Id() As Int32
            Get
                Return ws_Id
            End Get
            Set(ByVal value As Int32)
                ws_Id = value
            End Set
        End Property
     
        Public Property value() As String
            Get
                Return ws_value
            End Get
            Set(ByVal value As String)
                ws_value = value
            End Set
        End Property
    End Class
    La propriété typePerso ainsi créé est composée d'Int et de String.



    Au niveau du traîtement des données:

    J'ai donc mon tableau1, avec ses propriétés. J'ai accès à toutes ces propriétés (comme num1 ou text1 par exemple), via le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tableau1(i).num1 
    tableau1(i).text1
    Mais lorsque je veux atteindre les propriétés de typePerso, je n'y parviens pas, et il me renvoie la fameuse erreur citée plus haut. Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For j = 0 To tableau1(i).typePerso.length - 1
         Dim toto As Integer = tableau1(i).typePerso(j).Id     
    Next
    L'erreur est signalée au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = 0 To tableau1(i).typePerso.length - 1

    Voilà j'espère avoir été clair, merci !

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Salut druidev,

    As-tu creé une Property dans la classe propriété pour pouvoir acceder à typePerso.

    Citation Envoyé par druidev
    Public Property num1() As Int32
    Get
    Return ws_num1
    End Get
    Set(ByVal value As Int32)
    ws_num1 = value
    End Set
    End Property
    Tu fais de même pour typePerso

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut
    Salut !

    Oui je l'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Property typePerso() As Type()
          Get
              Return ws_typePerso
          End Get
          Set(ByVal value() As Type)
              ws_typePerso = value
          End Set
    End Property

  6. #6
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut Faut Caster
    Salut je viens de revoir ton code, il faut caster tableau1(i) en propriété

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut
    Euh...tu pourrais m'expliquer car je comprends pas trop (je débute en VB.Net)

  8. #8
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Oui Desolé, donc il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For j = 0 To DirectCast(tableau1(i),propriété).typePerso.length - 1
    et ceci parce que ton tableau contient des objects, il faut caster l'element en propriété pour que les membres soient accessibles.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut
    Ok !

    donc la quand tu parles de mettre propriété en second paramètre de DirectCast, il s'agit du nom de cette classe:
    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
    Public Class propriété 
        Private num1 As Integer
        Private text1 As String
        Private typePerso As Type
        ...
     
        Public Property num1() As Int32
            Get
                Return ws_num1
            End Get
            Set(ByVal value As Int32)
                ws_num1 = value
            End Set
        End Property
    End Class

  10. #10
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Oui oui et si tu essayais !

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut
    J'avais essayé mais je tombais cette fois sur une erreur d'instanciation on dirait:
    "La référence d'objet n'est pas définie à une instance d'un objet."

  12. #12
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Si tu n'as pas eu d'exceptions dues au cast, c'est que ton tableau contient bien des propriété.

    Maintenant si tu recupere des instances nulles, alors le probleme vient de ta classe classeA exactement de la methode GetProperties.

    Il faut revoir le code et voir pourquoi elle te retourne des instances nulles.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut
    Après des tests, la méthode GetProperties me renvoit bien toutes les variables, sauf le typePerso (où il me met l'erreur citée plus haut)...on dirait qu'il faut que je la redéclare comme Type, du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim typePerso As New Type
    Mais je ne vois pas trop où...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 72
    Points
    72
    Par défaut
    Bon en fait j'ai trouvé une exception qui était levé dans un catch bien plus en amont de mon code, et qui bloquait en fait le déroulement de mon script.....désolé....

Discussions similaires

  1. Comment accéder à une clé usb sous solaris 10
    Par warrah dans le forum Unix
    Réponses: 1
    Dernier message: 16/12/2011, 11h23
  2. Réponses: 1
    Dernier message: 08/11/2010, 11h24
  3. Réponses: 6
    Dernier message: 25/09/2006, 17h08
  4. Réponses: 7
    Dernier message: 06/04/2006, 18h17
  5. [ADO.NET][VB.NET] Comment accéder à une BD IBM Universe ?
    Par NicolasJolet dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/02/2006, 15h17

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