使用XML作为配置表,WinForm程序读取配置表来动态显示控件
一、首先创建一个XML文件定义以下格式(uName:显示的中文字,uKey:代表控件的Name属性,ukeyValue:代表是否显示)

二、项目中定义一个通用类,来存放读取的值

这三个字段对应XML文件里面的三个属性
三、写一个工具类用来读取XML文件

这样就把XML里面的数据全部取出来放到了刚刚定义的一个通用类集合里面了
四、接下来在窗体里面,我们需要添加一个FlowLayoutPanel容器,用来存放动态添加的控件

对应的后台代码↓↓↓

做完这些,我们运行后就会得到这个页面

五、勾选好需要的选项后,点击保存,保存事件如下:

以上就完成了使用XML作为配置表来保存数据,使用FlowLayoutPanel容器来装载动态添加的控件了。
下面贴出代码:
辅助类
public class XMLs
    {
        private string name;
public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private string uKey;
public string UKey
        {
            get { return uKey; }
            set { uKey = value; }
        }
        private int showcheck;
public int Showcheck
        {
            get { return showcheck; }
            set { showcheck = value; }
        }
    }
工具类
public class ConfigIsShow
    {
        public List<XMLs> ShowData()
        {
            List<XMLs> lx = new List<XMLs>();
            //实例化一个XML操作对象
            XmlDocument xmldoc = new XmlDocument();
            string filen = @"ShowConfig.xml";
            //载入xml文件名
            xmldoc.Load(filen);
            //读取根节点的所有子节点,放到xn0中 
            XmlNodeList xn0 = xmldoc.SelectSingleNode("person").ChildNodes;
            //进行循环赋值
            foreach (XmlElement oon in xn0)
            {
                XMLs ser = new XMLs();
                ser.Name = oon.GetElementsByTagName("uName")[0].InnerText;
                ser.UKey = oon.GetElementsByTagName("uKey")[0].InnerText;
                ser.Showcheck = Convert.ToInt32(oon.GetElementsByTagName("ukeyValue")[0].InnerText);
                lx.Add(ser);
            }
            return lx;
        }
    }
加载事件
public ConfigIsShow cif = new ConfigIsShow();
        public ShowFig()
        {
            InitializeComponent();
            //读取XML文件的数据
            List<XMLs> xl = cif.ShowData();
            //循环
            for (int i = 0; i < xl.Count; i++)
            {
                //实例化复选框
                CheckBox ck = new CheckBox();
                ck.Size = new Size(100, 30);//设置宽度和高度
                ck.Name = xl[i].UKey;//给Name赋值
                ck.Text = xl[i].Name;//给文本赋值
                //通过获取的0、1值来判断复选框是否选中
                ck.Checked = xl[i].Showcheck == 1 ? true : false;
flowLayoutPanel1.Dock = DockStyle.Fill;//设置控件在容器中自适应
                flowLayoutPanel1.Width = 320;
                flowLayoutPanel1.Controls.Add(ck); //把复选框添加到容器中
            }
            this.Controls.Add(flowLayoutPanel1);//将容器添加到主窗体中,否则会覆盖整个窗体
        }
保存事件
private void button1_Click(object sender, EventArgs e)
        {
            string filen = @"ShowConfig.xml";//获取文件路径
            var doc = XDocument.Load(filen);//得到文件
            foreach (Control ctl in flowLayoutPanel1.Controls)//注意,这边循环的是容器,而不是主窗体
            {
                if (((CheckBox)ctl).Checked == true)//判断是否选中
                {
                    //首先找主节点person,然后控件的Name找到具体的分节点,再直接给分节点里面的ukeyValue赋值
                    doc.Element("person").Element(ctl.Name).Element("ukeyValue").Value = "1";
                }
                else
                {
                    doc.Element("person").Element(ctl.Name).Element("ukeyValue").Value = "0";
                }
            }
            doc.Save(filen);//更新文件
            ViewHelper.ShowAutoCloseMsg("设置成功!", 1000);
            ShowFig agr = new ShowFig();
            agr.Close();
            base.Dispose();
        }
使用XML作为配置表,WinForm程序读取配置表来动态显示控件的更多相关文章
- winform程序读取和改写配置文件App.config元素的值
		winform程序读取和改写配置文件App.config元素的值 2016-05-16 17:49 by newbirth, 2412 阅读, 0 评论, 收藏, 编辑 1 2 3 4 5 6 7 & ... 
- WPF加载Winform窗体时 报错:子控件不能为顶级窗体
		一.wpf项目中引用WindowsFormsIntegration和System.Windows.Forms 二.Form1.Designer.cs 的 partial class Form1 设置为 ... 
- C# 向程序新建的窗体中添加控件,控件需要先实例化,然后用controls.add添加到新的窗体中去
		C# 向程序新建的窗体中添加控件,控件需要先实例化,然后用controls.add添加到新的窗体中去 Form settingForm = new Form(); setForm deviceSet ... 
- WPF 程序如何移动焦点到其他控件
		原文:WPF 程序如何移动焦点到其他控件 WPF 中可以使用 UIElement.Focus() 将焦点设置到某个特定的控件,也可以使用 TraversalRequest 仅仅移动焦点.本文介绍如何在 ... 
- 利用一个VI写入或读取另一个VI的控件值
		利用一个VI写入或读取另一个VI的控件值(转载自浅浅的小草) 有一个VI,叫未命名1.vi. 还有一个vi,叫未命名2.vi 现在,我在 1.vi里要对2.vi的字符串控件进行写入. 可 ... 
- C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面
		个人理解,开发应用程序的目的,不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景也最为复杂,包括但不限于:表格记录查询.报表查询.导出文件查询等等 ... 
- 如何使用AWS和Azure的配置存储服务保存读取配置
		原文:Want to yank configuration values from your .NET Core apps? 作者:pauljwheeler 译文:https://www.cnblog ... 
- Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面 z
		http://www.cnblogs.com/zuowj/p/4504130.html 不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景 也最为 ... 
- [工作札记]03: 微软Winform窗体中ListView、DataGridView等控件的Bug,会导致程序编译失败,影响范围:到最新的.net4.7.2都有
		工作中,我们发现了微软.net WinForm的一个Bug,会导致窗体设计器自动生成的代码失效,这个Bug从.net4.5到最新的.net4.7.2都存在,一直没有解决.最初是我在教学工作中发现的,后 ... 
随机推荐
- OSM地图本地发布-如何生成各省市矢量地图
			目录 1.缘起 2.问题 3.分析 4.生成自定义地区矢量瓦片 4.1.启动docker 4.2.启动postGIS容器 4.3.设置不清理上次的结果 4.4.删除默认切图范围 4.5.修改切图层级和 ... 
- EF Core扩展工具记录 批量操作 记录修改删除历史 动态linq
			Microsoft.EntityFrameworkCore.UnitOfWork Microsoft.EntityFrameworkCore的插件,用于支持存储库,工作单元模式以及支持分布式事务 ... 
- webform中jQuery获取checkboxlist的value值
			后台绑定 /首先,在绑定checkboxlist时,为ListItem每个对象添加一个alt属性,值保存对应的value值,代码如下 if(dt != null && dt.Rows. ... 
- 官方VisualStudio.gitignore配置
			官方地址 https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 示例 ## Ignore Visual Stud ... 
- Linux中的System V信号量
			在进程同步,并发运行时,保证按序地访问共享资源是十分重要的.因此引入了临界区的概念,一次只能有一个线程进入临界区完成他的指令.而信号量(semaphore)的作用,类似于一个交通信号灯,它负责进程协作 ... 
- 听说又有兄弟因为用YYYY-MM-dd被锤了...
			还记得去年分享过一篇日期格式化使用 YYYY-MM-dd 的潜在问题的文章不? 历史又重演了... 事故现场 我们来写个单元测试,重现一下这个问题. 测试逻辑: 创建两个日期格式化,一个是出问题的YY ... 
- [leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树Z字形层序遍历
			相对于102题,稍微改变下方法就行 迭代方法: 在102题的基础上,加上一个变量来判断是不是需要反转 反转的话,当前list在for循环结束后用collection的反转方法就可以实现反转 递归方法: ... 
- 学习 Gin 总结(2020.12.30-31)
			2020.12.30 问题总结 中间件 context.Next() 源码注释: // Next should be used only inside middleware. // It execut ... 
- CMS、G1收集器
			目录 CMS.G1收集器 1.CMS收集器 1.1.原理 1.2.不足 2.G1收集器 2.1.特点 2.2.执行过程 CMS.G1收集器 1.CMS收集器 CMS(Concurrent Mark S ... 
- python之scrapy篇(一)
			一.首先创建工程(cmd中进行) scrapy startproject xxx 二.编写Item文件 添加要字段 # -*- coding: utf-8 -*- # Define here the ... 
