Serializer une arborescence treeview

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 656 fois - Téléchargée 25 fois

Contenu du snippet

Bonjour, j'ai dernièrement voulu sérialiser les Nodes d'une Treeview et je suis tombé sur un sujet assez épineux. En effet la classe TreeNodeCollection (qui contient des objets TreeNode) ne se sérialize pas, et encore moins en Xml. Du coup, j'ai rusé en sauvegardant tous les noeuds dans un ArrayList(eq Vector), car la classe TreeNode est sérializable et la classe ArrayList aussi !

Source / Exemple :


using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

private void SauveTreeView(TreeView treeView, string FileName)
{
     ArrayList ListeNoeuds = new ArrayList();  //instanciation de la liste
     FileStream fichier = File.OpenWrite(FileName); //Ouverture du fichier en écriture

     BinaryFormatter serializer = new BinaryFormatter(); // instanciation du serializeur binaire

     foreach (TreeNode noeud in (treeView.Nodes)) //ajout de chaque noeud dans la liste
     {
          ListeNoeuds.Add(noeud);
     }

     serializer.Serialize(fichier, ListeNoeuds); // Serialization de la liste dans le fichier
     fichier.Close(); //Fermeture du fichier
}

private void ChargeTreeView(TreeView treeView, string FileName)
{

     FileStream fichier = File.OpenRead(FileName); //ouverture du fichier à charger
     BinaryFormatter serializer = new BinaryFormatter();// instanciation du serializeur binaire

     treeView.Nodes.Clear(); //efface tout les noeuds de l'arborescence
     treeView.BeginUpdate(); //à mettre avant l'ajout de beaucoup de noeuds

     ArrayList ListeNoeuds = (ArrayList)serializer.Deserialize(fichier); //Deserialisation dans la liste

     foreach (TreeNode node in ListeNoeuds) //ajout de chaque noeud dans l'arborescence
     {
          treeView.Nodes.Add(node);
     }

     treeView.EndUpdate(); //à mettre après l'ajout
     fichier.Close(); //Fermeture du fichier

}

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de sebmafate

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.