1,配置实体类储存变量,注意实体类的属性名称和控件的名称一致(或者txt_后面的字符一致)
2,把用户输入在控件的值保存在Xml文档中(配置信息窗口)
//参数设置的保存修改按钮 private void btn_save_systemPara_Click(object sender, EventArgs e) { //第一步:把控件的值赋值给存储类的属性 CommonMethods.SetValueFromContorl(Global.myParameter, this.grp_systemParameter); //第二步,把储存类的属性保存在Xml文件中 CommonMethods.SaveXmlFromProperties(Global.myParameter,ConfigFilePath); }
/// <summary> /// 把控件的值赋值给存储类的属性(通过反射) /// </summary> /// <param name="obj">要操作的类</param> /// <param name="c">窗体或者容器(遍历容器里面的控件)</param> public static void SetValueFromContorl(object obj,Control c) { Type type02 = obj.GetType(); PropertyInfo[] propertyInfos02 = type02.GetProperties();//获取Global.myParameter的公有属性 foreach (PropertyInfo item in propertyInfos02)//遍历属性 { var value = item.GetValue(obj);//获取属性的值 //在字典集合中加入 属性的名称 和属性的值 foreach (Control contorl in c.Controls) { if (contorl.Name.Contains(item.Name))//如果控件的名字包含属性值的名字,并且属性的值不为空 { item.SetValue(obj, contorl.Text.ToString()); //属性的值设置为字典的value } } } }
/// <summary> /// 把储存类的属性保存在Xml文件中 /// </summary> /// <param name="obj"></param> /// <param name="xmlPath"></param> public static void SaveXmlFromProperties(object obj,string xmlPath) { //获取属性 Type type02 = obj.GetType(); PropertyInfo[] propertyInfos02 = type02.GetProperties();//获取Global.myParameter的公有属性 //1,将dict集合中的内容保存在xml文件中 //xml操作 //1,创建XDocument对象 XDocument document = new XDocument(); //2,加入一个根节点 XElement rootElement = new XElement("ParameterList"); document.Add(rootElement); //3,向跟节点中增加Parameter节点,需要遍历属性 foreach (PropertyInfo item in propertyInfos02)//遍历属性 { var value = item.GetValue(obj);//获取属性的值 if (value != null) { //4,创建一个Person节点 XElement personElement = new XElement("Parameter"); personElement.SetElementValue(item.Name, value); //将Person节点加根节点下 rootElement.Add(personElement); } } //将xml对象写入文件 document.Save(xmlPath + "ParameterList.xml"); }
3,窗口加载的时候,配置信息初始化(配置信息窗口)
/// <summary> /// 初始化配置信息 /// </summary> private void InitialTxt() { foreach (Control item in this.groupBox1.Controls) { if (item is ComboBox) { ComboBox cmb = (ComboBox)item; for (int i = 1; i <= 4; i++) { cmb.Items.Add(i.ToString()); } } } cmb_ContorllerType.Items.Add("PF4000"); cmb_ContorllerType.Items.Add("PF6000"); cmb_ContorllerType.Items.Add("MTF6000"); cmb_ContorllerType.Items.Add("PM4000"); cmb_ContorllerType.Items.Add("PF600"); CommonMethods.SetContorlFromXml(ConfigFilePath + "ParameterList.xml", this.grp_systemParameter); }
/// <summary> /// 读取Xml文档赋值给控件显示 /// </summary> /// <param name="xmlpath"></param> /// <param name="c"></param> public static void SetContorlFromXml(string xmlpath, Control c) { if (!File.Exists(xmlpath)) { MessageBox.Show(xmlpath + "配置文件不存在"); } else { //将xml文件读取出来,然后存到dict集合,并且初始化listbox中的数据 XmlDocument document = new XmlDocument(); document.Load(xmlpath); //获取根节点 XmlNodeList xmlNodeList = document.DocumentElement.ChildNodes; //遍历根节点下的所有子节点 foreach (XmlElement item in xmlNodeList) { foreach (XmlElement node in item.ChildNodes) { foreach (Control contorl in c.Controls) { if (contorl.Name.Contains(node.Name))//如果控件的名字包含属性值的名字,并且属性的值不为空 { contorl.Text = node.InnerText; } } } } } }
3,在主程序窗口获取Xml文档给实体类的属性(主窗口)
#region 初始化信息 private void InitialTxt() { Global.SleevePsetDict = CommonMethods.LoadXmlToDict(ConfigFilePath+ "SleevePsetList.xml"); CommonMethods.SetPropertiesFromXml(ConfigFilePath + "ParameterList.xml", Global.myParameter);//读取配置文件赋值给储存类的属性 this.lbl_StationName.Text = Global.myParameter.StationName; } #endregion
/// <summary> /// 读取Xml文档赋值给储存类的属性 /// </summary> /// <param name="xmlpath"></param> /// <param name="obj"></param> public static void SetPropertiesFromXml(string xmlpath,object obj) { Type type = obj.GetType(); PropertyInfo[] propertyInfos = type.GetProperties();//获取Global.myParameter的公有属性 if (!File.Exists(xmlpath)) { MessageBox.Show(xmlpath + "配置文件不存在"); } else { //将xml文件读取出来,然后存到dict集合,并且初始化listbox中的数据 XmlDocument document = new XmlDocument(); document.Load(xmlpath); //获取根节点 XmlNodeList xmlNodeList = document.DocumentElement.ChildNodes; //遍历根节点下的所有子节点 foreach (XmlElement item in xmlNodeList) { foreach (XmlElement node in item.ChildNodes) { foreach (PropertyInfo itemProp in propertyInfos) { var value = itemProp.GetValue(obj);//获取属性的值 if (node.Name == itemProp.Name) { itemProp.SetValue(obj, node.InnerText); //属性的值设置为字典的value } } } } } }