Problème avec une dll

cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 26 sept. 2007 à 16:31
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 - 5 oct. 2007 à 22:53
Salut à tous, pour le logiciel que créer en VB.Net, j'utilise une dll dans lequel on trouve le code suivant. Cette dll permet d'enregistrer dans un xml tous les contrôle d'une form, malheuresement, cette dll n'enregistre que les propriété Text, Location, BackColor et autre, elle ne fait pas toute les propriétés. Je ne sais pas faire de C#, j'ai tous de même essayé de modifier le code afin d'y rajouter la propriété Name. le code s'execute correctemment mais rien n'a changé dans mon fichier xml, je ne vois pas apparaitre la ligne à propos de Name. Il y a quelque chose qui cloche. Pouvez-vous m'aidez svp a résoudre le problême?
J'ai mis ci dessous le code modifier, je sais, j'en ais mit beaucoups mais je n'ai auccune idée de ce qui peut cloché, alors... (j'ai mis en rouge ce que j'ai modifié ou rajouté)

public class FormSerializer
    {
        private static void SerializeControls(XmlDocument doc, XmlNode parentNode, Control.ControlCollection controls)
        {
            foreach (Control control in controls)
            {
                XmlElement newElement = doc.CreateElement("Control");

                XmlAttribute attribute = doc.CreateAttribute("ControlType");
                attribute.Value = control.GetType().ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Name");
                attribute.Value = control.Name;
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Text");
                attribute.Value = control.Text;
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Top");
                attribute.Value = control.Top.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Left");
                attribute.Value = control.Left.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Width");
                attribute.Value = control.Width.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Height");
                attribute.Value = control.Height.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("OnClick");
                attribute.Value = "";
                newElement.Attributes.Append(attribute);
               
                parentNode.AppendChild(newElement);

                if (control.HasChildren)
                    SerializeControls(doc, newElement, control.Controls);
            }
        }

        public static XmlDocument Serialize(Form form)
        {
            XmlDocument doc = new XmlDocument();

            XmlElement element = doc.CreateElement("root");

            SerializeControls(doc, element, form.Controls);

            doc.AppendChild(element);

            return doc;
        }
       
        public static void Serialize(Form form, string fileName)
        {
            Serialize(form).Save(fileName);
        }

        public static void Deserialize(Form form, string fileName)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(fileName);

            Deserialize(form, doc);
        }

        public static void Deserialize(Form form, XmlDocument doc)
        {
            if (!doc.HasChildNodes) return;
           
            XmlNode root = doc.ChildNodes[0];
            DeserializeControls(doc, root, form);
        }

        private static void DeserializeControls(XmlDocument doc, XmlNode parentNode, Control parentControl)
        {
            foreach (XmlNode node in parentNode.ChildNodes)
            {
                string typeName = node.Attributes["ControlType"].Value;
                Assembly a = Assembly.GetAssembly(typeof(Form));
                Type t = a.GetType(typeName);

                Control c = (Control) Activator.CreateInstance(t);

                c.Name = node.Attributes["Name"].Value;
                c.Text = node.Attributes["Text"].Value;
                c.Top = Convert.ToInt32(node.Attributes["Top"].Value);
                c.Left = Convert.ToInt32(node.Attributes["Left"].Value);
                c.Width = Convert.ToInt32(node.Attributes["Width"].Value);
                c.Height = Convert.ToInt32(node.Attributes["Height"].Value);

                c.Parent = parentControl;

                string clickMethod = node.Attributes["OnClick"].Value;
                if (clickMethod != "")
                {
                    Form f = parentControl.FindForm();
                    Type formType = f.GetType();
                    MethodInfo mi = formType.GetMethod(clickMethod);
                    if (mi != null)
                        c.Click += (EventHandler) Delegate.CreateDelegate(typeof(EventHandler), f, mi);
                }

                if (node.HasChildNodes)
                    DeserializeControls(doc, node, c);
            }
        }

et voici le code originale:

public class FormSerializer
    {
        private static void SerializeControls(XmlDocument doc, XmlNode parentNode, Control.ControlCollection controls)
        {
            foreach (Control control in controls)
            {
                XmlElement newElement = doc.CreateElement("Control");

                XmlAttribute attribute = doc.CreateAttribute("ControlType");
                attribute.Value = control.GetType().ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Text");
                attribute.Value = control.Text;
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Top");
                attribute.Value = control.Top.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Left");
                attribute.Value = control.Left.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Width");
                attribute.Value = control.Width.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("Height");
                attribute.Value = control.Height.ToString();
                newElement.Attributes.Append(attribute);

                attribute = doc.CreateAttribute("OnClick");
                attribute.Value = "";
                newElement.Attributes.Append(attribute);
               
                parentNode.AppendChild(newElement);

                if (control.HasChildren)
                    SerializeControls(doc, newElement, control.Controls);
            }
        }

        public static XmlDocument Serialize(Form form)
        {
            XmlDocument doc = new XmlDocument();

            XmlElement element = doc.CreateElement("root");

            SerializeControls(doc, element, form.Controls);

            doc.AppendChild(element);

            return doc;
        }
       
        public static void Serialize(Form form, string fileName)
        {
            Serialize(form).Save(fileName);
        }

        public static void Deserialize(Form form, string fileName)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(fileName);

            Deserialize(form, doc);
        }

        public static void Deserialize(Form form, XmlDocument doc)
        {
            if (!doc.HasChildNodes) return;
           
            XmlNode root = doc.ChildNodes[0];
            DeserializeControls(doc, root, form);
        }

        private static void DeserializeControls(XmlDocument doc, XmlNode parentNode, Control parentControl)
        {
            foreach (XmlNode node in parentNode.ChildNodes)
            {
                string typeName = node.Attributes["ControlType"].Value;
                Assembly a = Assembly.GetAssembly(typeof(Form));
                Type t = a.GetType(typeName);

                Control c = (Control) Activator.CreateInstance(t);

                c.Text = node.Attributes["Text"].Value;
                c.Top = Convert.ToInt32(node.Attributes["Top"].Value);
                c.Left = Convert.ToInt32(node.Attributes["Left"].Value);
                c.Width = Convert.ToInt32(node.Attributes["Width"].Value);
                c.Height = Convert.ToInt32(node.Attributes["Height"].Value);

                c.Parent = parentControl;

                string clickMethod = node.Attributes["OnClick"].Value;
                if (clickMethod != "")
                {
                    Form f = parentControl.FindForm();
                    Type formType = f.GetType();
                    MethodInfo mi = formType.GetMethod(clickMethod);
                    if (mi != null)
                        c.Click += (EventHandler) Delegate.CreateDelegate(typeof(EventHandler), f, mi);
                }

                if (node.HasChildNodes)
                    DeserializeControls(doc, node, c);
            }
        }

voila
Merci d'avance
a+

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/

21 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
26 sept. 2007 à 17:07
Salut,
Ce code fonctionne chez moi sans soucis...
(avec ton ajout en rouge)

<hr />
-My Blog-
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
26 sept. 2007 à 17:30
???quoi? et, peut tu me mettre le contenu du fichier xml pour que je face la différence stp!?
merci

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
26 sept. 2007 à 19:15
Sorry, j'ai déjà tout supprimé, mais j'avais fort logiquement un attribut en plus, Name, avec la valeur que j'avais donné au Control.

<hr />
-My Blog-
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
26 sept. 2007 à 19:28
Hein? je ne c'est pas faire de C#, peux-tu m'expliqué?

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
26 sept. 2007 à 19:31
Euh, expliqué quoi??

<hr />
-My Blog-
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
26 sept. 2007 à 19:33
"Sorry, j'ai déjà tout supprimé, mais j'avais fort logiquement un
attribut en plus, Name, avec la valeur que j'avais donné au Control.", Comprend pas ton histoire d'attribut, quesque tu as fait exactement...?

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
26 sept. 2007 à 19:39
Mais tu comprends pas le code que tu as écrit?
Ca écrit dans le XML les properties des Control contenu dans la ControlCollection que tu lui files en paramètres...
Avec les lignes que tu as rajoutées en plus (en rouge), tu rajoutes un attribut dans le fichier XML, qui contient la property Name du Control...

<hr />
-My Blog-
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
26 sept. 2007 à 19:43
Oui d'accord, je pensait que tu parlais d'autre chose. mais comment ça se fait que ça fonctionne bien chez toi, mais que chez moi, je n'ai pas la propriété Name qui apparait dans le fichier!?
bizarre

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
27 sept. 2007 à 19:37
Vous n'avez pas d'idée?
Siv ous voulez plus de précision et voir ça de plus près, voila le code source en entier:
dossier/DesignModeDialog.rar http://www.velersoftware.2007.fr/Nouveau dossier/DesignModeDialog.rar

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
30 sept. 2007 à 15:44
Snif, personne n'a d'idée qui pourrais me débloqué, sans ce code, je ne peux pas avancer dans mon projet...

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
30 sept. 2007 à 15:49
Ce code fonctionne, comment t'aider mieux?

<hr />
-My Blog-
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
30 sept. 2007 à 15:51
Ba, je ne sais pas, je ne voix toujours pas pourquoi il ne fonctionne pas chez moi, je cherche, mais sans succet. ...

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
3 oct. 2007 à 13:33
Salut à tous, bon après 2 semaine, j'ai enfin parvenut à faire fonctionné la propriété Name, je m'attaque maintenant au autre, et si je passe 2 semaine pour chaque propriété, vous vous rendez contes que ça va être hyper long. Je ram déja avec le nouvelle propriété, BackColor, pfff, je ne m'en sort pas du tout.
Esque vous arrivez à faire ce que je suis entrain de faire avec la propriété BackColor? nn parce que à force je me demande même si avec ce code, c'est réalisable.

Merci d'avance

a+

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
5 oct. 2007 à 16:34
Quelle était ton erreur finalement ?

Concernant ce que tu veux faire, ca serai peut etre plus simple de faire ca par reflexion... mais je pense qu'il te faudrai déjà te former au C# avant d'attaquer ca...

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
5 oct. 2007 à 17:50
Salut, mon erreur était juste une question d'inversemment entre 4 lignes de code. Qu'entends-tu par reflexion?

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
5 oct. 2007 à 18:01
La reflexion te permet d'explorer tes objets à l'exécution de ton code, par exemple pour lister tous leur attributs, récupérer leur types, etc.

Une définition un peu plus précise :
http://fr.wikipedia.org/wiki/R%C3%A9flexion_(informatique)

Mais je pense que si tu n'es pas familié de ces concepts objets ni du C#, ce n'est pas une bonne idée de commencer par là...

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
5 oct. 2007 à 18:07
Salut, j'ai pigé, ok, bon vous savez quoi, ça fait telement de temp que je suis sur ça et que j'ai laissé tèlement de message à propros de ce même problême que je me demande si vous ne connaiseriez pas un truc qui fait exactement la même chose (ou prèsque) sauf que la, ça peut enregistrer vraiment toutes les propriétés?

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
5 oct. 2007 à 18:52
Fait une recherche sur la sérialisation de contrôles, il doit bien y avoir des choses en rapport avec ce que tu veux faire.

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
5 oct. 2007 à 19:07
ouai, je regarde ça en ce moment même. Je te tiens au courrant.

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 2
5 oct. 2007 à 19:15
mmmh, pas trouvé, cherché sur code sources, developpez, google, msdn... rien

ebaudoux@club.fr
http://www.velersoftware.2007.frhttp://velerweb-2.fr.nf/Veler%20Software/
0
Rejoignez-nous