zoukankan      html  css  js  c++  java
  • c# 读取xml文件 编写form

    主要思想:xml保存控件的数据,c#读取出来并加以显示。

    难点:1.控件有父容器和子控件的关系;2.控件事件的添加。

    1.控件有父容器和子控件的关系:

      可以用绝对坐标在xml文件中先读取子控件再读取父容器;

      也可以在子控件属性中设置一个标签记录父容器,然后c#读取时候父容器add子控件。

    2.控件事件的添加:

      在控件add完之后也可以对事件进行添加(包括属性更改)。

      为了精确确定某个控件,c#读取到的诸多控件,不建议采用数组包装,用dictionnary省力。

    代码:

    xml文件:

    <?xml version='1.0' encoding='UTF-8'?>
    <XmlDataForm Name="ReportSum" Text="报告模板总" ClientSize="1086,1058" DataEntity="">
    <Controls>
    <Button name="button_firstLang" Location="51,32" Size="38,28" Text="CN" />
    <Button name="button_secondLang" Location="96,32" Size="38,28" Text="EN" />
    <GroupBox name="groupBox2" Location="188,12" Size="854,58" Text="采图信息" />
        <Label name="label1" Location="68,24" Size="32,17" Text="姓名" />
        <TextBox name="textBox_name" Location="103,21" Size="120,23" Text="" />
        <Label name="label2" Location="229,24" Size="32,17" Text="性别" />
        <ComboBox name="comboBox_sex" Location="263,21" Size="45,25" Text="" />
        <Label name="label3" Location="313,24" Size="32,17" Text="年龄" />
        <TextBox name="textBox_age" Location="348,21" Size="28,23" Text="" />
        <Label name="label5" Location="417,24" Size="56,17" Text="采图站点" />
        <TextBox name="textBox_site" Location="476,21" Size="92,23" Text="" />
        <Label name="label6" Location="572,24" Size="60,17" Text="" />
        <TextBox name="textBox_create_date" Location="635,21" Size="137,23" Text="" />
    </Controls>
    </XmlDataForm>

    c#:

    public void xmlLoad()
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(@"moban1.xml");
                XmlNodeList list_body = xmlDoc.SelectNodes("XmlDataForm");
                getControlFromXml(list_body[0]);
                this.Width = int.Parse(formWeight);
                this.Height = int.Parse(formHeight);
                this.Text = formTitle;
                foreach (var itemControl in controlsFromXml)
                {
                    Control control = itemControl.Value;
                    if (control == null) { continue; }
                    bool addCtrBool = true;
                    if (control.Tag != null)
                    {
                        foreach (var cto in controlsFromXml)
                        {
                            Control tempControl = cto.Value;
                            if (tempControl == null)
                            {
                                continue;
                            }
                            if (tempControl.Name.Equals(control.Tag.ToString()))
                            {
                                tempControl.Controls.Add(control);
                                addCtrBool = false;
                                break;
                            }
                        }
    
                    }
                    if (addCtrBool)
                    {
                        this.Controls.Add(control);
                    }
                }
            }
    
         string formWeight;
            string formHeight;
            string formTitle;
            Dictionary<string, Control> controlsFromXml;
            public void getControlFromXml(XmlNode xmlNode)
            {
                formWeight=xmlNode.Attributes["ClientSize"].Value.Split(',')[0];
                formHeight=xmlNode.Attributes["ClientSize"].Value.Split(',')[1];
                formTitle=xmlNode.Attributes["Text"].Value;
                XmlNodeList list=xmlNode.SelectSingleNode("Controls").ChildNodes;
                controlsFromXml = new Dictionary<string, Control>();
                for (int i = 0; i < list.Count; i++)
                {
                    XmlNode tempXmlNode = list[i];
                    string className = tempXmlNode.Name;
                    Assembly assembly = Assembly.LoadFrom(@"System.Windows.Forms.dll");
                    if (className != null&&!className.Contains("#")&&className!="")
                    {
                        Type type = assembly.GetType(@"System.Windows.Forms."+className);
                        object obj = Activator.CreateInstance(type);
                        Control control = (Control)obj;
                        control.Left = int.Parse(tempXmlNode.Attributes["Location"].Value.Split(',')[0]);
                        control.Top = int.Parse(tempXmlNode.Attributes["Location"].Value.Split(',')[1]);
                        control.Width = int.Parse(tempXmlNode.Attributes["Size"].Value.Split(',')[0]);
                        control.Height = int.Parse(tempXmlNode.Attributes["Size"].Value.Split(',')[1]);
                        control.Name = tempXmlNode.Attributes["Name"].Value;
                        if (tempXmlNode.Attributes["Father"] != null)
                        {
                            control.Tag = tempXmlNode.Attributes["Father"].Value;
                            
                        }
                        if (tempXmlNode.Attributes["Text"]!= null)
                        {
                            control.Text = tempXmlNode.Attributes["Text"].Value;
                        }
                        controlsFromXml.Add(control.Name,control);
                    }
                }
            }
  • 相关阅读:
    [LeetCode] Remove Linked List Elements
    [LeetCode] Delete Node in a Linked List
    [LeetCode] Valid Anagram
    [LeetCode] Ugly Number II
    自制工具:迅速打开一个Node 环境的Playground
    [LeetCode] Ugly Number
    [LeetCode] Happy Number
    [LeetCode] Isomorphic Strings
    [LeetCode] Word Pattern
    自制工具:上传修改过的文件到指定服务器
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/8631184.html
Copyright © 2011-2022 走看看