一、首先创建一个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();
}

转载于:https://www.cnblogs.com/denuk/p/7156828.html

使用XML作为配置表,WinForm程序读取配置表来动态显示控件相关推荐

  1. spark学习 Java版SparkSQL程序读取Hbase表注册成表SQL查询

    参考: spark学习-SparkSQL–11-scala版写的SparkSQL程序读取Hbase表注册成表SQL查询 http://blog.csdn.net/qq_21383435/article ...

  2. java程序获取外部java程序的控件,将 Java 小程序迁移到 Microsoft J# 浏览器控件-JSP教程,Java技巧及代码...

    visual j# .net 小组 microsoft corporation 摘要:通过 microsoft j# 浏览器控件,开发人员可以将所编写的在 java 虚拟机上运行的 java 小程序迁 ...

  3. vs2015+opencv3.2+mfc读取摄像头显示在图片控件Picture Control

    vs2015 + opencv3.3 + mfc读取摄像头显示在图片控件Picture Control 要开始做一个行人检测的小项目,首先读取出摄像头显示,参考了这位博主的教程:http : //bl ...

  4. WinForm界面开发之“HTML内容编辑控件”

    做过了很多Winform的共享软件,对界面的设计有了一定的经验和积累,准备开一个"WinForm界面开发"系列文章,介绍下相关的Winform界面设计和相关控件的使用,促进相互交流 ...

  5. 【jeecg-boot项目开发crm】:day07JeecgBoot-零基础入门视频-05Online表单自定义按钮与JS增强Popup控件Online报表【p5】

    Online表单自定义按钮与JS增强&Popup控件&Online报表[p5] Online表单自定义按钮与JS增强 JS增强的作用 实现一些复杂的页面效果:页面的动态计算,页面字段的 ...

  6. 一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(6)--添加控件到Flight Delay表单

    准备:打开之前创建的Flight Delay表单.也可以下载Flight Delay Post exercise 1.xsn.右击模板文件,选择设计. 本练习,继续创建Flight Delay表单.添 ...

  7. winform程序读取和改写配置文件App.config元素的值

    在开发Web项目的时候,会有一个配置文件Web.config,用来存放一些全局的变量,如连接数据库用的字符串.相应的,在开发winform程序时,也有一个配置文件,它就是App.config,这个文件 ...

  8. C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面...

    个人理解,开发应用程序的目的,不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景也最为复杂,包括但不限于:表格记录查询.报表查询.导出文件查询等等 ...

  9. 如何使用AWS和Azure的配置存储服务保存读取配置

    原文:Want to yank configuration values from your .NET Core apps? 作者:pauljwheeler 译文:https://www.cnblog ...

最新文章

  1. IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表
  2. zip与zip(*)
  3. 【联邦学习】FATE 集群部署 step1
  4. query上传插件uploadify参数详细分析
  5. 【Java】时间的新旧比较
  6. Python简化代码的操作有哪些
  7. 如何使用Xpose绕过APP自定义证书验证去抓Https包
  8. Python 之 PyCharm + selenium 163邮箱登录详解
  9. u盘安装原版window10系统
  10. linux服务器安装虚拟桌面,并可视化连接远程桌面
  11. Win系统使用WSL子系统Linux启动vGPU增强图形性能加速OpenGL
  12. android关于消防栓的正确使用
  13. cmd看excel有多少个子表_excel表格拆分成多个表格方法工具
  14. Android 11.0 Camera2 默认选择拍照尺寸修改及流程分析
  15. Windows系统中苹果ipa上传到App Store Connect
  16. mysql中有几种模糊查询?
  17. 如何能让英语水平在一年半载内得到大幅提升?(备注下)
  18. 快应用开发1--编译官方的代码并在手机上运行rpk文件(Windows系统上)
  19. [转] meta标签的使用方法
  20. 基于雷达的安防视频监控系统软件设计

热门文章

  1. 新版数据库分页方法(Sql server2012)
  2. [转载] 民兵葛二蛋——第2集
  3. java十五章_java:第十五章
  4. composer查看当前镜像取消_配置和查看composer镜像
  5. 这些 Shell 分析服务器日志命令集锦,收藏好
  6. 单片机自学多久可以成功?学单片机需要什么基础知识?
  7. python在bim中的应用_Revit元素类别——Dynamo Python系列教程(六)
  8. RNN情感分类问题实战
  9. 关于Python的一点学习总结(55-time的使用)
  10. [CTSC2018]混合果汁 二分 套 主席树上二分