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