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(',')[];
- formHeight=xmlNode.Attributes["ClientSize"].Value.Split(',')[];
- formTitle=xmlNode.Attributes["Text"].Value;
- XmlNodeList list=xmlNode.SelectSingleNode("Controls").ChildNodes;
- controlsFromXml = new Dictionary<string, Control>();
- for (int i = ; 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(',')[]);
- control.Top = int.Parse(tempXmlNode.Attributes["Location"].Value.Split(',')[]);
- control.Width = int.Parse(tempXmlNode.Attributes["Size"].Value.Split(',')[]);
- control.Height = int.Parse(tempXmlNode.Attributes["Size"].Value.Split(',')[]);
- 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);
- }
- }
- }
c# 读取xml文件 编写form的更多相关文章
- C# 读取XML文件示例
有关XML文件编写规范,请参考:http://www.w3school.com.cn/xml/index.aspXML内容如下(文件名为:Information.xml):浏览器显示: <?xm ...
- Android 开发自己的网络收音机4——读取XML文件的电台数据
国内外的电台数据很多,起码有好几百,所以把这些数据都写到代码里面是不实际的.只能写成一个数据文件,程序启动的时候再去加载.保存这些简单数据,我们肯定会优先使用XML文件,今天讲讲如何读取XML里面的数 ...
- Loadrunner脚本读取 XMl 文件
Loadrunner脚本读取 XMl 文件 性能测试工程师要懂代码么?答案是必须的,好多测试员认为在 loadrunner 中编写脚本很难很牛 X . 好多人认为 loadrunner 只支持 C 语 ...
- C#读取xml文件写入到TreeView中
开发过程中我们会遇到一些读取xml文件的时候,下面是我学习的整理. 用XmlDocument读取加载 XmlDocument doc = new XmlDocument(); doc.Load(&qu ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)
xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...
- C#中常用的几种读取XML文件的方法
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
- 读取xml文件报错:Invalid byte 2 of 2-byte UTF-8 sequence。
程序读取xml文件后,系统报“Invalid byte 2 of 2-byte UTF-8 sequence”错误,如何解决呢? 1.程序解析xml的时候,出现Invalid byte 2 of 2- ...
- C#读取XML文件的基类实现
刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...
随机推荐
- H5混合开发进阶之inspect调试
h5界面嵌套在原生app内部的时候,需要调用原生的方法,传递数据.中间难以调试代码,. 用google的 inspect调试.查看数据的传输方式. 1.adb连接正常,打开手机USB调试 2.第一次使 ...
- PHP二维码生成
原文链接:http://www.qqdeveloper.com/detail/14/1.html 代码下载地址:链接:http://pan.baidu.com/s/1dFgqiaP 密码:lex5 材 ...
- collections.namedtuple()命名序列元素
## collections.namedtuple()命名序列元素 from collections import namedtuple Student = namedtuple("Stud ...
- django配置虚拟环境-1
目录 安装python 使用venv虚拟环境 使用Virtualenv虚拟环境 ### Windows安装 方案一 方案二 Linux安装 其他命令 安装django 安装python https:/ ...
- python类的多态
1. 什么是多态 多态指的是同一种/类事物的不同形态 2. 为何要用多态 多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象 多态性的精髓:统一 ...
- 实验1 查看CPU和内存,用机器指令和汇编指令编程
·实验任务 (1)使用Debug,用E命令和A命令以两种方式将指令写入内存 机器码 汇编指令 b8 20 4e mov ax,4e20h 05 16 14 add ax,14 ...
- 成都Uber优步司机奖励政策(2月20日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 成都Uber优步司机奖励政策(2月1日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Ubuntu 安装 搜狗输入法
1.去下载搜狗输入法安装包: https://pinyin.sogou.com/linux/ 2.安装 sudo dpkg sougou****.deb 3.去设置 参考:https://blog.c ...
- SIFT 特征点提取算法
SIFT特征点相对于ORB计算速度较慢,在没有GPU加速情况下,无法满足视觉里程计的实时性要求,或者无法运行在手机平台上,但是效果更好,精度更高.在应用时可以择优选取,了解其本质原理的动机是为了自己使 ...