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