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.NET Discussion :

Classe : récupérer une propriété d'une autre classe qui est liée mais qui n'est pas une classe mère


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Classe : récupérer une propriété d'une autre classe qui est liée mais qui n'est pas une classe mère
    Bonjour,
    dans le cadre d'un autre topic, je suis en train de créer un DataGridViewTextBoxColumn personnalisé que j'ai appelé DataGridViewStarRateColumn
    Ca commence comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class DataGridViewStarRateColumn
        Inherits DataGridViewTextBoxColumn
     
     
        Private _starwidth As Integer = 20
        Private _starheigth As Integer = 20
     
        Public Sub New()
            Me.CellTemplate = New DataGridViewStarRateCell()
     
        End Sub
    S'ensuit donc une classe DataGridViewStarRateCell qui hérite de DataGridViewTextBoxCell

    Dans cette classe DataGridViewStarRateCell , j'ai besoin de définir une propriété StarHeight que je souhaiterais paramétrable par l'utilisateur dans le designer

    Comme les propriétés de DataGridViewStarRateCell ne sont pas directement accessibles dans le designer, je passe donc par les propriétés de DataGridViewStarRateColumn qui, elles, le sont. Donc j'ai défini la propriété suivant dans la classe DataGridViewStarRateColumn :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     <Category("Design")>
        <Description("Largeur de l'étoile")>
        Public Property StarWidth() As Integer
            'Property that corresponds with the
            'starswidth variable
            Get
                Return _starwidth
            End Get
            Set(ByVal value As Integer)
                _starwidth = value
            End Set
        End Property
    Grâce à ça, je peux définir dans le designer la propriété StarHeight en même temps que j'opte pour le type DataGridViewStarRateColumn

    Maintenant, il faut que je récupère la valeur de cette propriété dans le code de ma classe DataGridViewStarRateCell.

    Si vous m'avez suivi jusque là, vous aurez compris qu'il n'y a pas de lien d'héritage entre DataGridViewStarRateCell et DataGridViewStarRateColumn
    DataGridViewStarRateCell hérite de DataGridViewTextBoxCell
    DataGridViewStarRateColumn hérite de DataGridViewTextBoxColumn
    Mais j'ai besoin de transmettre l'une des propriétés de DataGridViewStarRateColumn à DataGridViewStarRateCell

    J'ai essayé ceci qui me paraissait logique, mais ça plante carrément l'exécution :
    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
    Public Class DataGridViewStarRateColumn
        Inherits DataGridViewTextBoxColumn
     
        Private _starwidth As Integer = 20
        Private _starheigth As Integer = 20
     
        Public Sub New()
            Me.CellTemplate = New DataGridViewStarRateCell(_starheigth)
     
        End Sub
    ...
    End Class
     
    Public Class DataGridViewStarRateCell
        Inherits DataGridViewTextBoxCell
     Private _starheigth As Integer
     Public Sub New(toto as integer)
                 _starheigth = toto
        End Sub
    ..
    End Class
    Quelqu'un peut-il me dépanner ? Je suis encore très novice en matière de POO même si cela fait déjà un an que je code en VB.NET

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Et tout simplement comme ça peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Property StarWidth() As Integer
        Get
            Return Me.CellTemplate.Starwidth
        End Get
        Set(ByVal value As Integer)
            Me.CellTemplate.Starwidth = value
        End Set
    End Property
    Après avoir initialisé dans le constructeur de la classe DataGridViewStarRateCell la valeur par défaut.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Ca ne peut pas marcher. CellTemplate n'est pas un membre de DataGridViewStarRateCell justement parce qu'il n'y a pas de lien d'héritage.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,
    Et de cette façon
    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
    Public Class DataGridViewStarRateColumn
        Inherits DataGridViewTextBoxColumn
        Private _starwidth As Integer = 20
        Private _starheigth As Integer = 20
     
        Public Sub New()
            Me.CellTemplate = New DataGridViewStarRateCell()
            DirectCast(Me.CellTemplate, DataGridViewStarRateCell).StarWidth = _starwidth
        End Sub
    End Class
     
    Public Class DataGridViewStarRateCell
        Inherits DataGridViewTextBoxCell
        Private _starheigth As Integer
        Public Sub New(toto As Integer)
            _starheigth = toto
        End Sub
        Public Sub New()
        End Sub
        Private _starwidth As Integer
        '<Category("Design")>
        <System.ComponentModel.Description("Largeur de l'étoile")>
        Public Property StarWidth() As Integer
            'Property that corresponds with the'starswidth variable
            Get
                Return _starwidth
            End Get
            Set(ByVal value As Integer)
                _starwidth = value
            End Set
        End Property
    End Class
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Si je comprends bien ton idée :
    - tu définis la propriété StarWidth dans le classe DataGridViewStarRateCell
    - dans la classe DataGridViewStarRateColumn, dans la sub new, tu instancies un DataGridViewStarRateCell en lui affectant la valeur de la propriété StarWidth, cette valeur étant définie par la variable _starwidth de la classe DataGridViewStarRateColumn.

    Je vois bien l'idée, mais il y a un truc que je n'arrive pas à caler c'est
    - comment définir la valeur _starwidth de la classe DataGridViewStarRateColumn à partir du designer ? J'ai essayé en créant une propriété StarWidth dans cette classe. La propriété apparaît bien dans le designer mais n'est pas prise en compte dans l'instruction DirectCast et n'est pas mémorisée non plus dans le designer (si je quitte la fenêtre des propriétés de la colonne et que j'y reviens, la dernière valeur saisie n'a pas été mémorisée.
    - visiblement la sub new(toto as integer) n'est pas utile dans ton exemple.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    J'imagine ainsi, mais cela reste à voir.
    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
    Public Class DataGridViewStarRateColumn
        Inherits DataGridViewTextBoxColumn
        Private _starwidth As Integer = 20
        Private _starheigth As Integer = 20
        Public Sub New()
            Me.CellTemplate = New DataGridViewStarRateCell()
            DirectCast(Me.CellTemplate, DataGridViewStarRateCell).StarWidth = _starwidth ' par défaut
        End Sub
        <Category("Design")>
        <System.ComponentModel.Description("Largeur de l'étoile")>
        Public Property StarWidth() As Integer
            'Property that corresponds with the'starswidth variable
            Get
                Return _starwidth
            End Get
            Set(ByVal value As Integer)
                _starwidth = value
                DirectCast(Me.CellTemplate, DataGridViewStarRateCell).StarWidth = _starwidth ' attribué par le designer
            End Set
        End Property
    End Class
    [Edit] il doit aussi falloir un attribut pour marquer la sérialisation.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/10/2014, 13h50
  2. Binder un élément et pas une propriété
    Par Flaburgan dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 27/02/2013, 15h37
  3. Réponses: 11
    Dernier message: 23/05/2011, 02h26
  4. Réponses: 1
    Dernier message: 08/11/2010, 11h24
  5. Réponses: 1
    Dernier message: 08/01/2009, 11h23

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