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