winform程序配置文件信息的方法(用到反射)

1,配置实体类储存变量,注意实体类的属性名称和控件的名称一致(或者txt_后面的字符一致)

winform程序配置文件信息的方法(用到反射)

 

 

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
                            }
                        }
                    }
                }
            }
        }

  

 

winform程序配置文件信息的方法(用到反射)

上一篇:Express 系列(6):构建 API 接口


下一篇:分享一个自己封装的WIN SOCKET类