Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème avec une dll [ Windows / Autre ] (veler)

mercredi 26 septembre 2007 à 16:31:31 | Problème avec une dll

veler

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.fr [ Lien ]

mercredi 26 septembre 2007 à 17:07:33 | Re : Problème avec une dll

Bidou

Administrateur CodeS-SourceS
Salut,
Ce code fonctionne chez moi sans soucis...
(avec ton ajout en rouge)



-My Blog-

mercredi 26 septembre 2007 à 17:30:21 | Re : Problème avec une dll

veler

???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.fr [ Lien ]

mercredi 26 septembre 2007 à 19:15:45 | Re : Problème avec une dll

Bidou

Administrateur CodeS-SourceS
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.




-My Blog-

mercredi 26 septembre 2007 à 19:28:50 | Re : Problème avec une dll

veler

Hein? je ne c'est pas faire de C#, peux-tu m'expliqué?

ebaudoux@club.fr
http://www.velersoftware.2007.fr [ Lien ]

mercredi 26 septembre 2007 à 19:31:18 | Re : Problème avec une dll

Bidou

Administrateur CodeS-SourceS
Euh, expliqué quoi??


-My Blog-

mercredi 26 septembre 2007 à 19:33:41 | Re : Problème avec une dll

veler

"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.fr [ Lien ]

mercredi 26 septembre 2007 à 19:39:14 | Re : Problème avec une dll

Bidou

Administrateur CodeS-SourceS
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...



-My Blog-

mercredi 26 septembre 2007 à 19:43:33 | Re : Problème avec une dll

veler

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.fr [ Lien ]

jeudi 27 septembre 2007 à 19:37:02 | Re : Problème avec une dll

veler

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:
[ Lien ]

ebaudoux@club.fr
http://www.velersoftware.2007.fr [ Lien ]


1 2 3

Cette discussion est classé dans : control, doc, attributes, value, attribute


Répondre à ce message

Sujets en rapport avec ce message

Assembly: custom attributes [ par jusob ] Bonjour, j'utilise des custom attributes du genre: [assembly:AssemblyTitle("First plugin")] [assembly:AssemblyCompany("MySelf")] [assembly:Assemb problème fichier XML [ par marinounette ] Bonjour à toutes et à tous, tout d'abbord merci pour ce site, parce qu'il m'a déjà répondu à pas mal de questions...J'ai pourtant un problème que je n Lire un fichier XML [ par snakzbenjy ] Bonjour à tous,Alors voilà j'ai un fichier XML de ce type la:xml version="1.0" ?><div class="c" style="MARGIN-LEFT: Xml ajouter un noeud ? [ par ansizak ] Bonjour, je travaille sur un programme qui charge le contenu d'un fichier xml dans une datagrid ("en manuel"; sans passer par dataset ou datatable)Je Propriétés d'un control par défaut [ par bmouget ] Bonjour,Je change les propriétés de controls (button, textbox, ...) via une PropertyGrid.Puis, je récupére chaque control dans un objet de type "Compo User Control + FolderBrowse [ par RV2931 ] Bonjour,Je suis en train de m'initier aux "user controls" et je reste bloqué sur un petit truc.Je travaille sur une control dérivé d'un TreeView dans Cibler une OU pour requete. [ par adeliz ] Bonjour tout le monde !Après moult recherches sur le net, j'ai enfin trouvé une source complete sur le protocole LDAP.En effet, je cherche à créer un usage des tooltips [ par olibara ] Bonjour J'aimerais mettre des tooltips sur differents control - GroupBox- Combobox- Button Mais je n'ai pas réussi par la doc a comprendre comme WebBrowser control - HttpContext ? [ par Gendal67 ] Bonjour à tous,J'ai un petit souci et je viens solliciter votre aide, en espérant que quelqu'un ait une solution.Voilà, je développe une application u Les user control dans un site [ par ranouf ] Peut on mettre un user control dans un site web ? Merci


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.