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);
                    }
                }
            }
  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/8631184.html
Copyright © 2011-2022 走看看