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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    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

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 255
    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.

  4. #4
    Membre averti
    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
    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 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 255
    Par défaut
    Comment sont nommés tes boutons, tu as choisi un nom contenant un index ?

  6. #6
    Membre averti
    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
    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
    Membre averti
    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
    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

+ 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, 19h23
  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, 12h51
  3. Réponses: 3
    Dernier message: 07/01/2007, 17h48
  4. [Serialisation]Serialisation / Deserialisation.
    Par neXistPa dans le forum Général Java
    Réponses: 6
    Dernier message: 29/11/2005, 08h52
  5. [Info]Sérialisation / Désérialisation...
    Par onlytoine dans le forum Général Java
    Réponses: 3
    Dernier message: 27/08/2005, 22h58

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