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

Framework .NET Discussion :

VB.2003 -Serialization de propriété classe


Sujet :

Framework .NET

  1. #1
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut VB.2003 -Serialization de propriété classe
    Bonjour,

    Je penche sur un problème depuis 2 jours et j'avoue que je ne trouve pas de solution...

    Voici le problème.

    J'ai une classe qu'on va appeler Bidon

    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
     
    Public Class Bidon
        Inhertis System.ComponentModel.Component
     
        Public Sub New( _
            Byval objControl as Control _
        )
            MyBase.New()
     
            ' Pour l'exemple je n'utilise pas le control, mais dans mon programme
            ' j'en ai besoin
     
        End Sub
     
        Private mBln_Test As Boolean = True
       <DefaultValue(True)> _
        Public Property Test As Boolean
        Get
            Return mBln_Test
        End Get
        Set(ByVal Value As Boolean)
            mBln_Test = Value
        End Set
     
    End Class
    Ensuite j'ai un control hérité de Button par exemple auquel j'ajoute une propriété

    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
     
    Public Class MonButton
        Inherits System.Windows.Forms.Button
     
        Private m_objBidon As Bidon = New Bidon(Me)
        < _
        Description("Gestion de la classe Bidon"), _
        Category("Apparence"), _
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content) _
        > _
        Public ReadOnly Property Bidon() As Bidon
        Get
            Return m_objBidon
        End Get
        End Property
     
    End Class
    J'ajoute ce bouton dans une fenetre Form.
    Dans le panneau de propriété, je vois bien la propriété "Test" et je peux modifier les propriétés de ma classe Bidon et la propriéte modifié de la classe Bidon est bien serialisée dans le code généré de la form.

    Donc, jusque là tout va bien.

    Le problème que lorsque je créé une autre form qui herite de ma form précédente, la valeur de ma propriété "Test" de ma classe bidon est de nouveau serialisée dans mon nouvel écran, alors que la valeur est identique à la valeur de l'écran dont j'hérité.
    (Je me rens compte que c'est difficile à expliqué comme ça)

    Pour ceux qui ont compris le problème, j'aimerais savoir comment il faut procéder pour que cela se comporte de la même manière que la propriété Font du control par exemple...

  2. #2
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Finalement, en y reflechissant, l'exemple avec Font n'est pas correct.

    L'objet Font est créé à nouveau si il y a modification.
    En fait, je pense (arrêter moi si je me trompe) que l'objet Font de la classe control est à nothing par défaut et la propriété va rechercher le Font du parent (s'il y a parent... sinon un objet Font par défaut).

    A partir du moment, ou une des propriétés est modifiée, une instance est créé si les propriétés sont différentes de l'objet Font parent et c'est ici qu'intervient la serialisation de l'objet.

    Dans mon cas, j'ai toujours une instance et le parent n'a aucune influence sur l'objet, donc la serialisation est effectuée à chaque fois que les valeurs sont différentes des valeurs par défaut.

    Maintenant, par contre, j'aimerai étudier le comportement d'une propriéte de type boolean (Type Valeur, Structure ??)
    Car dans le cas d'une propriété de type boolean, sur l'écran hérité, la valeur n'est pas sérialisée, si la valeur est différente de la valeur par défaut.

    Y a vraiment personne qui s'est déjà penché sur ce problème ?

  3. #3
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Bon, je sais que je me fais un monologue depuis le début, mais j'ai une solution (pas très élegante car, je ne comprends pas trop le pourquoi du comment) et c'est celle que je vais appliquer.
    Si ça peut aider ...

    La solution consiste à implémenter l'interface ICloneable sur l'objet.

    Voici un exemple très allegé :
    (Dans mon application j'ai une classe qui hérite d'ExpandableObjectConverter pour pourvoir gérer le libellé affiché sur la propertyGrid)

    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
     
    <TypeConverter(GetType(ExpandableObjectConverter))> _
    Public Class Bidon
        Implements ICloneable
     
        *** Constructeur
        Public Sub New( _
            Byval objControl as Control _
        )
            MyBase.New()
     
            ' Pour l'exemple je n'utilise pas le control, mais dans mon programme
            ' j'en ai besoin
     
        End Sub
     
        Private mBln_DefautTest As Boolean = True 
        Private mBln_Test As Boolean = True
     
        *** Propriété Test
        Public Property Test As Boolean
        Get
            Return mBln_Test
        End Get
        Set(ByVal Value As Boolean)
            mBln_Test = Value
        End Set
     
        '*** Serialisation
        Private Function ShouldSerializeTest As Boolean
            Return mBln_Test <> mBln_DefautTest
        End Function
     
        '*** Réinitialisation
        Private Sub ResetTest
            mBln_Test = mBln_DefautTest
        End Sub
     
        '*** Clone du composant
        Public Function Clone() As Object _
        Implements System.ICloneable.Clone
     
            ' Rédéfinition des valeurs par défaut
            Me.mBln_DefautTest = Me.mBln_Test
            Return Me.MemberwiseClone
     
        End Function
     
    End Class

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2006, 09h36
  2. proprité class="MaClasse" et JavaScript
    Par Sheriff dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/07/2006, 11h42
  3. [Access 2003]Problème de Propriété Bouton
    Par steeves5 dans le forum Access
    Réponses: 5
    Dernier message: 23/05/2006, 21h01
  4. [C#]Propriété class d'un <td> en contrôle serveur
    Par Oberown dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/05/2006, 10h11
  5. WEB SERVICE No serializer found for class
    Par lch dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 14/09/2005, 16h02

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