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

VB 6 et antérieur Discussion :

[VB6] Classe Implements


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [VB6] Classe Implements
    Bonjour,
    J'ai essayé de faire une classe Forme et une classe Cercle qui contient des propriétés comune à Forme (la couleur) mais qui en contient des propriétés pour cercle seulement (le rayon)

    J'ai ce code pour la classe cForme :
    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
     
    Option Compare Database
    Option Explicit
     
    Private vCouleur As String
     
    Public Sub AfficherProprietes()
      MsgBox Couleur
    End Sub
     
    Public Property Get Couleur() As String
      Couleur = vCouleur
    End Property
     
    Public Property Let Couleur(ByVal NouvelleValeur As String)
      vCouleur = NouvelleValeur
    End Property
    J'ai ce code pour la classe cCercle :
    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
     
    Implements cFormes
    Private vRayon As Integer
     
    Private Sub cFormes_AfficherProprietes()
      MsgBox cFormes_Couleur & " " & Rayon
    End Sub
     
    Private Property Get cFormes_Couleur() As String
      cFormes_Couleur = cFormes.Couleur
    End Property
     
    Private Property Let cFormes_Couleur(ByVal NouvelleValeur As String)
      cFormes.Couleur = NouvelleValeur
    End Property
     
    Friend Property Get Rayon() As String
      Rayon = vRayon
    End Property
     
    Friend Property Let Rayon(ByVal NouvelleValeur As String)
      vRayon = NouvelleValeur
    End Property

    Et puis j'ai ce code sur un bouton d'un formulaire :

    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
     
    Private Sub Commande0_Click()
      Dim UneForme As cFormes
      Set UneForme = New cFormes
      UneForme.Couleur = "rouge"
      UneForme.AfficherProprietes
     
      Dim UnRond As cCercle
      Set UnRond = New cCercle
      UnRond.Rayon = 25
     
      Dim UnCercle As cFormes
      Set UnCercle = New cCercle
      UnCercle.Couleur = "vert"
      UnCercle.AfficherProprietes
    End Sub
    J'ai l'erreur : "Variable objet ou variable de blox With non définie"
    à ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UnCercle.Couleur = "vert"
    UnCercle.AfficherProprietes
    Quelqu'un peut m'aider?

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    C'est ça qu'il aime pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Property Get cFormes_Couleur() As String 
      cFormes_Couleur = cFormes.Couleur 
    End Property
    Il faudrait que cFormes soit une instance de classe, ce qui n'est pas le cas. En VB tu peux pas appeler la méthode de la classe mère. Il faut passer par une bidouille : tu encapsules une instance de la classe mère dans l'instance de la classe fille. C'est le pseudo-héritage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'classe cCercle
    Private cFormeMere As cFormes
     
    Public Property Set clsFormeMere(ClasseMere As cFormes) 
        set cFormeMere = ClasseMere 
    End Property
     
    Private Property Get cFormes_Couleur() As String 
      cFormes_Couleur = cFormeMere.Couleur 
    End Property
    Je sais, c'est ch...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 37
    Points
    37
    Par défaut
    Oui, NighFall et Goldust, c'est hyper chiant! Quant on vient du monde objet c'est déboussolant.

    Voici comment j'ai réglé ce prob. Il y a plus de codes (enfin des copier coller) mais ca marche du tonnerre.

    "
    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
    49
    classe cCercle 
    implements cFormes
    Private cFormeMere As cFormes
    Private vRayon As Integer 
     
     
    Private Sub Class_Initialize()
    set cFormeMere=new cFormes
    end sub
     
    Private Sub Class_Terminate()
    set cFormeMere=nothing
    end sub 
     
    Public Sub AfficherProprietes()  'Noter que c'est Public
      MsgBox Couleur & " " & Rayon 
    End Sub 
     
    Public Property Get Couleur() As String 'Noter que c'est Public
      Couleur = cFormes.Couleur 
    End Property 
     
    Public Property Let Couleur(ByVal NouvelleValeur As String) 'Noter que c'est Public
      cFormes.Couleur = NouvelleValeur 
    End Property 
     
    Friend Property Get Rayon() As String 
      Rayon = vRayon 
    End Property 
     
    Friend Property Let Rayon(ByVal NouvelleValeur As String) 
      vRayon = NouvelleValeur 
    End Property
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Implémentation de cFormes
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
    Private Sub cFormes_AfficherProprietes() 
      AfficherProprietes
    End Sub 
     
    Private Property Get cFormes_Couleur() As String 
      cFormes_Couleur = Couleur 
    End Property 
     
    Private Property Let cFormes_Couleur(ByVal NouvelleValeur As String) 
      Couleur = NouvelleValeur 
    End Property
    Quelques commentaires :
    1) Cette classe est utilisable à travers cFormes mais aussi indépendamment.

    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
    Private Sub Commande0_Click() 
      Dim UneForme As cFormes 
      Set UneForme = New cFormes 
      UneForme.Couleur = "rouge" 
      UneForme.AfficherProprietes 
     
      Dim UnRond As cCercle 
      Set UnRond = New cCercle 
      UnRond.Rayon = 25
      'En plus, maintenant on peut faire :
      UnRond.Couleur = "Orange"
     
      Dim UneForme As cFormes, UnCercle As cCercle 
      Set UneForme = New cCercle 
      UneForme.Couleur = "vert" 
      set UnCercle=UneForme ' on fait un Cast 
      UnCercle.Rayon=30
      UneForme.AfficherProprietes 'ou UnCercle.AfficherProprietes, c'est le même résultat
    End Sub
    2) La partie implémentation est générique : Pour tout classes dérivant de cFormes, il suffit de faire un copier-coller de la partie implémentation

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    austin49 j'ai essayé ce que tu m'as dit, j'ai copier/coller tout le code que t'as écrit et¸ça ne fonctionne pas.
    Ça me donne encore l'erreur "Variable objet ou variable de blox With non définie"
    J'ai cet erreur à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'En plus, maintenant on peut faire :
    UnRond.Couleur = "Orange"
    Cette ligne va dans la classe cCercle et exécute ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Property Let Couleur(ByVal NouvelleValeur As String) 'Noter que c'est Public
      cFormes.Couleur = NouvelleValeur
    End Property
    En mettant ma souris au dessus de cFormes.Couleur c'est ça qui est la "Variable objet ou variable de blox With non définie"

    J'ai la même erreur à dernière ligne de ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim UneForme As cFormes, UnCercle As cCercle
    Set UneForme = New cCercle
    UneForme.Couleur = "vert"
    UneForme tu l'avais déjà déclaré plus haut alors j'ai effacé la déclaration du haut mais ça me donne quand même un erreur.

    Il essaye appel ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Property Let cFormes_Couleur(ByVal NouvelleValeur As String)
      Couleur = NouvelleValeur
    End Property
    et là c'est cCerlce qui est "Variable objet ou variable de blox With non définie"

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé ce que nightfall m'a dit mais j'ai encore l'erreur "Variable objet ou variable de blox With non définie"

    C'est la dernière ligne de ce bout de code qui cause l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim UnCercle As cFormes
    Set UnCercle = New cCercle
    UnCercle.Couleur = "vert"
    En appellant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Property Let cFormes_Couleur(ByVal NouvelleValeur As String)
      cFormes.Couleur = NouvelleValeur
    End Property
    Quand je met ma souris au dessus de cFormes.Couleur ca m'affiche "Variable objet ou variable de blox With non définie"

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 37
    Points
    37
    Par défaut
    Désolé, j'ai pas testé, je voulais juste te donner l'ordre de marche en écrivant à la volée.

    Mais voici le corrigé et testé :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    'cForme
    Option Explicit
     
    Private vCouleur As String
     
    Public Sub AfficherProprietes()
      MsgBox Couleur
    End Sub
     
    Public Property Get Couleur() As String
      Couleur = vCouleur
    End Property
     
    Public Property Let Couleur(ByVal NouvelleValeur As String)
      vCouleur = NouvelleValeur
    End Property
     
    'cCercle
    Implements cForme
    Private cFormeMere As cForme
    Private vRayon As Integer
     
     
    Private Sub Class_Initialize()
    Set cFormeMere = New cForme
    End Sub
     
    Private Sub Class_Terminate()
    Set cFormeMere = Nothing
    End Sub
     
    Public Sub AfficherProprietes()  'Noter que c'est Public
      MsgBox Couleur & " " & Rayon
    End Sub
     
    Public Property Get Couleur() As String 'Noter que c'est Public
      Couleur = cFormeMere.Couleur
    End Property
     
    Public Property Let Couleur(ByVal NouvelleValeur As String) 'Noter que c'est Public
      cFormeMere.Couleur = NouvelleValeur
    End Property
     
    Friend Property Get Rayon() As String
      Rayon = vRayon
    End Property
     
    Friend Property Let Rayon(ByVal NouvelleValeur As String)
      vRayon = NouvelleValeur
    End Property
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Implémentation de cFormes
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
    Private Sub cForme_AfficherProprietes()
      AfficherProprietes
    End Sub
     
    Private Property Get cForme_Couleur() As String
      cFormes_Couleur = Couleur
    End Property
     
    Private Property Let cForme_Couleur(ByVal NouvelleValeur As String)
      Couleur = NouvelleValeur
    End Property

    Mais quand même, il faut apprendre à déboguer.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 37
    Points
    37
    Par défaut
    Un dernier bout de code :

    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
    Private Sub Command1_Click()
     
      Dim UneForme As cForme
      Set UneForme = New cForme
      UneForme.Couleur = "rouge"
      UneForme.AfficherProprietes
     
      Dim UnRond As cCercle
      Set UnRond = New cCercle
      UnRond.Rayon = 25
      'En plus, maintenant on peut faire :
      UnRond.Couleur = "Orange"
      UnRond.AfficherProprietes
     
      Dim UnCercle As cCercle
      Set UneForme = New cCercle
      UneForme.Couleur = "vert"
      Set UnCercle = UneForme ' on fait un Cast
      UnCercle.Rayon = 30
      UneForme.AfficherProprietes 'ou UnCercle.AfficherProprietes, c'est le même résultat
     
    End Sub
    [Edité par Nightfall]
    [Balise Code ajoutée]

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci austin49!
    Ça fonctionne très bien!

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

Discussions similaires

  1. je ne cprds pas pourquoi ma classe implements ActionListener
    Par poulette3000 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 16/05/2007, 11h52
  2. Réponses: 3
    Dernier message: 04/04/2007, 08h45
  3. [Reflection] Obtenir toutes les classes implémentant une interface
    Par Pill_S dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/04/2005, 16h48
  4. [RMI] Probleme pour retrouver la classe implementée.
    Par Koko22 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/09/2004, 19h15
  5. [Reflection] Classes implémentant une interface
    Par thibaut dans le forum API standards et tierces
    Réponses: 17
    Dernier message: 29/07/2004, 14h57

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