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

Langages Discussion :

Serialisation/deserialisation de plusieurs button en XML [Débutant]


Sujet :

Langages

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Serialisation/deserialisation de plusieurs button en XML
    Bonjour,
    je fais un developpement ou j'ai 169 bouton qui on un certain backcolor au lancement de l'application
    si je clic sur sur l'un de ses bouton : backcolor devient Cyan et si je reclic sur le meme boutton backcolor revient comme au debut
    voici le 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
    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
    Public Class Form1
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim CollectBtColor As Collection
            CollectBtColor = New Collection
            Dim CtrlBt As Control
            Dim BtRange As Button
            For Each CtrlBt In Me.Controls
                If TypeOf CtrlBt Is Button Then
                    BtRange = CtrlBt
                    Dim Name_Bt As String
                    Name_Bt = BtRange.Name
                    If InStr(Name_Bt, "Bt_Color_") > 0 Then
                        CollectBtColor.Add(BtRange)
                    End If
                End If
            Next CtrlBt
            For Each BtRange In CollectBtColor
                AddHandler BtRange.Click, AddressOf RangeColor
            Next
        End Sub
     
        Private Sub RangeColor(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim BtRangeColor As Button
            BtRangeColor = sender
            If InStr(BtRangeColor.Name, "Bt_Color_Suited") > 0 Then
                If BtRangeColor.BackColor = Color.Khaki Then
                    BtRangeColor.BackColor = Color.Cyan
                Else
                    BtRangeColor.BackColor = Color.Khaki
                End If
            End If
            If InStr(BtRangeColor.Name, "Bt_Color_Off") > 0 Then
                If BtRangeColor.BackColor = Color.LightGray Then
                    BtRangeColor.BackColor = Color.Cyan
                Else
                    BtRangeColor.BackColor = Color.LightGray
                End If
            End If
            If InStr(BtRangeColor.Name, "Bt_Color_Pair") > 0 Then
                If BtRangeColor.BackColor = Color.DarkSeaGreen Then
                    BtRangeColor.BackColor = Color.Cyan
                Else
                    BtRangeColor.BackColor = Color.DarkSeaGreen
                End If
            End If
        End Sub
    je voudrai crée un boutton "save"pour sauvegarder la configuration du backcolor des 169 bouton afin de les recharger lors de la réouverture de l'application.
    je ne veux pas d'une auto-saugarde à la fermeture mais que ce soit l'utilisateur qui force la sauvegarde.
    je débute et je n'arrive pas a comprendre les tuto sur la sérialisation.
    merci pour votre aide.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    J'utilise beaucoup du JSON pour saver mes données.

    Voilà un exemple de sérialisation/déserialisation avec JSON.NET (c'est un package Nuget à installer)

    http://www.newtonsoft.com/json/help/...izerToFile.htm


    http://www.newtonsoft.com/json/help/...erFromFile.htm

    Tu dois créer une classe ou tu stocke l'id et la couleur d'un bouton. Tu fais ça pour tous les boutons, et tu mets tout ça dans une liste , et enfin tu utilises JSON.NET
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    La sérialisation/déserialisation est bien lorsque tu souhaite sauvegarder/restaurer de façon automatique une quantité importante d'information sur un certain nombre d'objets d'une collection.

    Dans le cas présent, la sérialisation serait intéressante si tu souhaitais sauvegarder l'ensemble des paramètres de tes boutons, eux-même contenus, tous, dans un même container. Il suffirait de sérialiser la collection Controls du container.

    Ici, tu ne souhaite sauvegarder qu'un seul paramètre de chaque contrôle, le Backcolor. Comme l'explique GuruuMeditation, tu vas donc être obliger de recréer une collection temporaire ne contenant, pour chacun des contrôles, que cette information.
    De plus à la désérialisation, il faudra faire de même, désérialiser dans une collection temporaire avant de réaffecter le paramètre à chaque contrôle.

    Personnellement, dans le cas présent, je ne vois qu'un intérêt plutôt limité à laisser gérer la sérialisation à des outils existants. Tous les avantages qu'ils apportent sont bouffés par la nécessité de préparer en amont et de "dépréparer" en aval dans le sens inverse.

    Puisqu'il te faut de toute façon une boucle pour préparer préalablement une liste, pourquoi ne pas utiliser plutôt cette boucle pour gérer manuellement ta propre sérialisation en écrivant l'info à la volée directement dans un fichier.
    Tout type de fichier peut être utiliser pour stocker l'information que tu souhaite stocker, XML, JSON évidemment, mais aussi fichier ini, csv, voire simple fichier texte.
    En imaginant même que ton nombre de bouton est fixe, qu'il ne changera pas, que tu sauvegarde toujours l'ensemble des boutons toujours dans le même ordre, que tu restaure toujours l'ensemble des boutons dans le même ordre, tu peux pousser l'économie jusqu'à ne sauvegarde uniquement que la valeur de la couleur, les une à la suite des autres, dans un fichier binaire.

    Quelque chose comme (pas sur que ça marche en l'état):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                bw = New BinaryWriter(File.Create(NomFichier)) 
                For Each btn As Button in TonContainer.Controls 
                    bw.Write(btn.Backcolor) 
                Next
    sera, dans le cas présent de ton problème, de toute façon bien plus économique que toute classe de sérialisation.

    Ceci dit, dans un cas général de sauvegarde de quantité importante d'information sur chaque élément, la sérialisation reste quelque chose de plus propre, plus performant.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    merci pour tes explications Sevyc64
    Voici un PDF "Presentation_Appli.pdf" qui explique comment je veux que mon Appli fonction, tous fonctionne sauf pour la sauvegarde du backcolor des boutons.
    Mes boutons qui changent de couleurs sont dans une collection dont la quantité ne changera pas donc je suppose qu'ils sont toujours dans le meme ordre.
    Comme tu le sais ,je débute donc si tu pense apres avoir lu mon PDF qu'un Fichier Binaire est suffisant,je le ferai.
    Par contre ,je manque de compréhention sur le fonctionnement de la Sérialisation/Désérialisation des fichiers:
    je me doute que la sérialisation dois ce faire dans le code du bouton Save et que la désérialisation dans le code du RadiaButtonChecked.
    ce que je ne comprend pas c'est comment je recupere les information du fichier afin de les réapliquer au boutton qui lui correspond.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Comment sont nommés tes boutons, tu as choisi un nom contenant un index ?
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Avant de m'attaquer au code de l'appli,j'ai essayer de faire un test:
    j'ai creer un bouton puis j'ai sérialisé la couleur du bouton en indentant la désérialisation.

    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
    Imports System.IO
    Imports System.Xml.Serialization
    Imports System.Runtime.Serialization.Formatters.Soap
     
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            'Cyan=-16711681
            Me.Button1.BackColor = Color.Red
     
            Dim iColor As Integer
            iColor = Me.Button1.BackColor.ToArgb
            Dim test As New couleur(iColor)
            Dim ff As FileStream = File.Create("Couleur.xml")
            Dim Serialiseurcolor As New XmlSerializer(GetType(couleur))
            Serialiseurcolor.Serialize(ff, test)
            ff.Close()
     
            'If File.Exists("Couleur.xml") Then
            '    ' 4Je crée ma classe « vide »
            '    Dim A As New couleur()
            '    ' On ouvre le fichier et récupère son flux
            '    Dim FluxDeFichier As Stream = File.OpenRead("Couleur.xml")
            '    Dim Deserialiseur As New XmlSerializer(GetType(couleur))
            '    ' Désérialisation et conversion de ce qu'on récupère dans le type « Film »
            '    A = CType(Deserialiseur.Deserialize(FluxDeFichier), couleur)
            '    ' Fermeture du flux
            '    FluxDeFichier.Close()
            'End If
     
            Me.Button1.BackColor = Color.FromArgb(iColor)
        End Sub
    End Class
    le fichier c'est bien créer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <couleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <_Argb>-65536</_Argb>
    </couleur>
    j'ai replacer le argb couleur red par la couleur Cyan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <couleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <_Argb>-16711681</_Argb>
    </couleur>
    j'ai sauvegardé le xml ,indenté la sérialisation et désindenté la deserialisation.
    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
    Imports System.IO
    Imports System.Xml.Serialization
    Imports System.Runtime.Serialization.Formatters.Soap
     
     
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            'Cyan=-16711681
            Me.Button1.BackColor = Color.Red
     
            Dim iColor As Integer
            iColor = Me.Button1.BackColor.ToArgb
     
            'Dim test As New couleur(iColor)
            'Dim ff As FileStream = File.Create("Couleur.xml")
            'Dim Serialiseurcolor As New XmlSerializer(GetType(couleur))
            'Serialiseurcolor.Serialize(ff, test)
            'ff.Close()
     
            If File.Exists("Couleur.xml") Then
                Dim A As New couleur()
                Dim FluxDeFichier As Stream = File.OpenRead("Couleur.xml")
                Dim Deserialiseur As New XmlSerializer(GetType(couleur))
                A = CType(Deserialiseur.Deserialize(FluxDeFichier), couleur)
                FluxDeFichier.Close()
            End If
     
            Me.Button1.BackColor = Color.FromArgb(iColor)
        End Sub
    End Class
    j'ai relancer l'application en pensent que le boutton serai couleur Cyan
    Pas de change il est toujours rouge

    voici laclasse que j'ai créer
    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
    <Serializable()>
    Public Class couleur
     
        Public _Argb As Integer
     
     
        Sub New()
     
        End Sub
     
        Sub New(ByVal ArgbCol As Integer)
            _Argb = ArgbCol
     
        End Sub
     
    End Class
    Quelqu'un peux me dire ou est mon erreur.
    Ca fais une semaine que je suis dessus et je commence à désespérer.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Non mes boutton qui change de couleur n'ont pas d'index
    ils commence tous par :Bt_Color_

    les gris ont "Off_"+ la valeur du titre
    ex Bt_Color_Off_AKo

    les verts ont "Pair_"+ la valeur du titre
    ex Bt_Color_Pair_AA

    les jaunes ont "Suited_"+ la valeur du titre
    ex Bt_Color_Suited_AKs

  8. #8
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Ton code avec un bouton marchera si tu fais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        If File.Exists("Couleur.xml") Then
          Dim A As New couleur()
          Dim FluxDeFichier As Stream = File.OpenRead("Couleur.xml")
          Dim Deserialiseur As New XmlSerializer(GetType(couleur))
          A = CType(Deserialiseur.Deserialize(FluxDeFichier), couleur)
          Me.Button1.BackColor = Color.FromArgb(A._Argb)
          FluxDeFichier.Close()
        End If
    Par contre, pour tous les boutons, il faudra que tu stocke le nom du bouton avec la couleur.

    Ensuite à la relecture tu feras ceci pour réattribuer la couleur au bon bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          Me.Controls("NomLuDuBouton").BackColor = Color.FromArgb(A._Argb)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    merci ça fonctionne pour le test.

    si j'ai bien compris
    tu veut que je crée un tableau à 2 dimension, ou pour chaque boutons de ma collection, je stock sont Nom et sa couleur.
    Puis je sérialise le tableau.

  10. #10
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Utilise ta classe couleur avec une second propriété qui sera le nom du contrôle
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Désoler mes je manque de connaissance:
    j'ai créer ma classe couleur
    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
    <Serializable()>
    Public Class couleur
     
        Public _Argb As Integer
        Public _BtName As String
     
     
        Sub New()
     
        End Sub
     
        Sub New(ByVal ArgbCol As Integer, ByVal BtName As String)
            _Argb = ArgbCol
            _BtName = BtName
        End Sub
     
    End Class
    j'ai sérialisé les bouttons avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim MaListeDeBoutons As New List(Of couleur)
            For Each button As Button In Col_Bt_Color
                MaListeDeBoutons.Add(New couleur(button.BackColor.ToArgb, button.Name))
            Next
            Dim FluxDeFichier As FileStream = File.Create("Couleur.xml")
            Dim Serialiseurcolor As New XmlSerializer(GetType(List(Of couleur)))
            Serialiseurcolor.Serialize(FluxDeFichier, MaListeDeBoutons)
            FluxDeFichier.Close()
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0"?>
    <ArrayOfCouleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <couleur>
        <_Argb>-7357301</_Argb>
        <_BtName>Bt_Color_Pair_22</_BtName>
      </couleur>
      <couleur>
        <_Argb>-2894893</_Argb>
        <_BtName>Bt_Color_Off_32o</_BtName>
      </couleur>
      <couleur>
        <_Argb>-989556</_Argb>
        <_BtName>Bt_Color_Suited_32s</_BtName>
      </couleur>
    mais je n'arrive pas à désérialisé car je ne comprend pas ce que tu veux que je mette dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Me.Controls("NomLuDuBouton").BackColor = Color.FromArgb(A._Argb)
    j'ai changé des couleur dans le fichier XML mais ça ne marche pas.
    voici ce que j'ai ecrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            If File.Exists("Couleur.xml") Then
                Dim A As New couleur()
                Dim FFF As Stream = File.OpenRead("Couleur.xml")
                'Dim Deserialiseur As New XmlSerializer(GetType(couleur))
                Dim Deserialiseur As New XmlSerializer(GetType(List(Of couleur)))
                A = CType(Deserialiseur.Deserialize(FFF), couleur)
                ' Me.Bt_Color_1.BackColor = Color.FromArgb(A._Argb)
                Me.Controls(A._BtName).BackColor = Color.FromArgb(A._Argb)
                FFF.Close()
            End If

  12. #12
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Oui j'ai été un peu vite tout à l'heure, j'avais pas fait les tests.

    En fait quand tu désérialise, c'est pas une couleur que tu récupère, mais une liste de couleur. Ensuite il faut que tu passe en revue chaque élément de la liste, et que tu affecte la couleur récupérée au bouton dont tu as aussi récupéré le nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
           Dim A As New List(Of couleur)
     
            Dim FluxDeFichier As Stream = File.OpenRead("Couleur.xml")
            Dim Deserialiseur As New XmlSerializer(GetType(List(Of couleur)))
            A = CType(Deserialiseur.Deserialize(FluxDeFichier), List(Of couleur))
            For Each b As couleur In A
              Me.Controls(b._BtName).BackColor = Color.FromArgb(b._Argb)
            Next
            FluxDeFichier.Close()
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci ça fonctionne
    je n'aurrai jamais réussi sans ton aide.
    je voudrai savoir si il faut que je fasse des fichier XML pour chaque RadioButton ou est ce que je peux mettre tous dans un seul fichier.

  14. #14
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Normalement tu peux le faire dans un seul xml, mais il va falloir créer un noeud par radiobouton pour mélanger. A la sérialisation c'est dans le noeud correspondant au radiobouton qu'il faudra sérialiser et donc deserialiser.

    A l'heure actuelle, tu as ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0"?>
    <ArrayOfCouleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <couleur>
        <_Argb>-7357301</_Argb>
        <_BtName>Bt_Color_Pair_22</_BtName>
      </couleur>
      <couleur>
        <_Argb>-2894893</_Argb>
        <_BtName>Bt_Color_Off_32o</_BtName>
      </couleur>
      <couleur>
        <_Argb>-989556</_Argb>
        <_BtName>Bt_Color_Suited_32s</_BtName>
      </couleur>
    Il te faudra ça
    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
    <?xml version="1.0"?>
    <RadioBouton toto>
      <ArrayOfCouleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <couleur>
          <_Argb>-7357301</_Argb>
          <_BtName>Bt_Color_Pair_22</_BtName>
        </couleur>
        <couleur>
          <_Argb>-2894893</_Argb>
          <_BtName>Bt_Color_Off_32o</_BtName>
        </couleur>
        <couleur>
          <_Argb>-989556</_Argb>
          <_BtName>Bt_Color_Suited_32s</_BtName>
        </couleur>
      </ArrayOfCouleur>
    </RadioBouton>
    <RadioBouton titi>
      <ArrayOfCouleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        ....
      </ArrayOfCouleur>
    </RadioBouton>
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci,
    je vais me penché sur la doc pour créer des noeud et voir si j'y arrive car je trouve que c'est mieux d'avoir un seul fichier.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Bon, je n'ai pas trouvé d'exemple qui permet de serialisé avec des noeuds pour avoir un fichier XML du tupe que tu m'a montré
    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
     
    <?xml version="1.0"?>
    <RadioBouton toto>
      <ArrayOfCouleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <couleur>
          <_Argb>-7357301</_Argb>
          <_BtName>Bt_Color_Pair_22</_BtName>
        </couleur>
        <couleur>
          <_Argb>-2894893</_Argb>
          <_BtName>Bt_Color_Off_32o</_BtName>
        </couleur>
        <couleur>
          <_Argb>-989556</_Argb>
          <_BtName>Bt_Color_Suited_32s</_BtName>
        </couleur>
      </ArrayOfCouleur>
    </RadioBouton toto>
    <RadioBouton titi>
      <ArrayOfCouleur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        ....
      </ArrayOfCouleur>
    </RadioBouton titi>
    Faut il crée une classe de ce 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
    <Serializable()>
    Public Class RbCouleur
        Public _rbColor As RadioButton
        Public Class couleur
     
            Public _Argb As Integer
            Public _BtName As String
     
     
            Sub New()
     
            End Sub
     
            Sub New(ByVal ArgbCol As Integer, ByVal BtName As String)
                _Argb = ArgbCol
                _BtName = BtName
            End Sub
     
        End Class
    End Class
    Avec un code sérialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim MaListeDeBoutons As New List(Of RbCouleur)
            For Each button As Button In Col_Bt_Color
                MaListeDeBoutons.Add(New RbCouleur(button.BackColor.ToArgb, button.Name))
            Next
            Dim FluxDeFichier As FileStream = File.Create("Couleur.xml")
            Dim Serialiseurcolor As New XmlSerializer(GetType(List(Of RbCouleur)))
            Serialiseurcolor.Serialize(FluxDeFichier, MaListeDeBoutons)
            FluxDeFichier.Close()
    Si tu as un exemple:il est le bienvenu.

  17. #17
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Bon, je m'étais jamais poser la question, mais il semblerait que l'on ne puisse pas faire plusieurs sérialisations différentes dans le même fichier. Apparemment la sérialisation écrase le contenu du fichier. Il te faudra probablement faire autant de fichiers que de radiobutton
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    C'est ce que j'ai fait.
    Par contre j'ai un comportement bizarre avec le clic des bouttons qui change de couleur.
    lorsque je lance l'application et que je me mets sur l'un des radiobutton pour choisir les boutton qui change de couleur--> clic suffit.
    je sauvegarde les bouttons.
    si je veux changer d'autre boutton donc modifier le fichier sauvegarder, je suis obliger de faire un double clic.
    je ne voix pas pourquoi ça fait ça.

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

Discussions similaires

  1. Serialisation/Deserialisation Xml
    Par FredericP. dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2009, 18h23
  2. [XML]Generateur de code serialisation/deserialisation
    Par clincks dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 26/08/2007, 11h51
  3. Réponses: 3
    Dernier message: 07/01/2007, 16h48
  4. [Serialisation]Serialisation / Deserialisation.
    Par neXistPa dans le forum Général Java
    Réponses: 6
    Dernier message: 29/11/2005, 07h52
  5. [Info]Sérialisation / Désérialisation...
    Par onlytoine dans le forum Général Java
    Réponses: 3
    Dernier message: 27/08/2005, 21h58

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