使用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();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM