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 :

Property as a class


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut Property as a class
    Bonjour,

    J'ai un user control Timeline qui a une proprieté Periode qui est elle même une classe crée

    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
    Public Class Periode
        Public Property DateFrom As Date
        Public Property DateTo As Date
    End Class
     
    Public Class Timeline
       Dim _period As Periode
     
       Public Sub New()
          _period = New Period with {.DateFrom = Now , .DateTo = Now.AddDays(1) }
       End Sub
     
       Public Writeonly Property Period As Periode
            Set(value As Periode)
                 _period = value
                 UpdateStripDates()
            End Set
        End Property
     
        Private Sub UpdateStripDates()
            Dim DIFFDATE as integer= DateDiff("d",_period.DateTo - _period.DateFrom )
            .....etc
        End Sub
    End Class
    Dans mon code si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ctl as New Timeline
    Dim D as New Periode with {.DateFrom =now , .DateTo =now.addmonths(1) }
    ctl.Period=D
    J'obtiens bien DIFFDATE

    mais si je fais par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ctl as New Timeline
    ctl.Period.DateFrom= New Date(2000, 1, 1)
    Je ne passe plus dans UpdateStripDates

    Que me manque-t-il pour que, si on change une des propriétés (DateFrom / DateTo) de ma propriété Periode, cela revienne à changer celle ci.

    Merci

    Olivier

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Je suis étonné que ça fonctionne, car il n'y a qu'un "Set" sur "Period" donc je ne vois pas comment on peut modifier un de ses attributs sans y accéder par un "Get"...

    Sinon, je regarderais de ce côté :
    https://stackoverflow.com/questions/...ge-in-property
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Au temps pour moi. Il y a bien un Get

    Si je regarde cette méthode INotifyPropertyChanged, cela ferait quelque chose comme ça:

    Classe Periode
    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
    Public Class ItemArgs
        Inherits EventArgs
        Public Property DateFrom As Date
        Public Property DateTo As Date
     
        Public Sub New()
        End Sub
        Public Sub New(ByVal dDateFrom As Date, ByVal dDateto As Date)
            DateFrom = dDateFrom
            DateTo = dDateto
        End Sub
     
    End Class
    Public Class Periode
        Private _datefrom As Date, _dateto As Date
        Public Event PropertyItemChanged As EventHandler(Of ItemArgs)
        Public Property DateFrom As Date
            Get
                Return (_datefrom)
            End Get
            Set(value As Date)
                If value <> _datefrom Then
                    _datefrom = value
                    PropertyChanged()
                End If
            End Set
        End Property
        Public Property DateTo As Date
            Get
                Return (_dateto)
            End Get
            Set(value As Date)
                If value <> _dateto Then
                    _dateto = value
                    PropertyChanged()
                End If
            End Set
        End Property
     
        Private Sub PropertyChanged()
            RaiseEvent PropertyItemChanged(Me, New ItemArgs(_datefrom, _dateto))
        End Sub
    End Class
    Et la classe Timeline:
    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
    Public Class Timeline
       Dim _period As Periode
     
       Public Sub New()
          _period = New Period with {.DateFrom = Now , .DateTo = Now.AddDays(1) }
          AddHandler _period.PropertyItemChanged, AddressOf UpdateStripDates
       End Sub
     
       Public Property Period As Periode
            Set(value As Periode)
                 _period = value
                 UpdateStripDates()
            End Set
        End Property
     
        Private Sub UpdateStripDates()
            Dim DIFFDATE as integer= DateDiff("d",_period.DateTo - _period.DateFrom )
            .....etc
        End Sub
    End Class
    Et ça a l'air de marcher. Mais peut être y-a-t'il plus élégant?

    Merci pour la piste.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/03/2010, 15h40
  2. probleme avec property dans une class
    Par Dereck07 dans le forum Débuter
    Réponses: 3
    Dernier message: 03/01/2010, 23h07
  3. Réponses: 7
    Dernier message: 27/07/2009, 15h11
  4. Gestion des 'property' d'une classe
    Par philnext dans le forum Langage
    Réponses: 2
    Dernier message: 22/12/2007, 08h45
  5. Réponses: 2
    Dernier message: 24/10/2007, 16h58

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