zoukankan      html  css  js  c++  java
  • winform程序参数配置窗体的通用方法(用到反射)

     

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

    2,把用户输入在控件的值保存在Xml文档中(配置信息窗口)

    情况1:手动添加配置文件的路径

    【1】配置文件路劲:需要手动新建一个文件夹 ConfigFile

            /// <summary>
            /// 配置文件的路径
            /// </summary>
            private string ConfigFilePath = Application.StartupPath + "\ConfigFile\";
    

    【2】保存按钮  

            //参数设置的保存修改按钮
            private void btn_save_systemPara_Click(object sender, EventArgs e)
            {
                //第一步:把控件的值赋值给存储类的属性
                CommonMethods.SetValueFromContorl(Global.myParameter, this.grp_systemParameter);
    
                //第二步,把储存类的属性保存在Xml文件中
                CommonMethods.SaveXmlFromProperties(Global.myParameter,ConfigFilePath);
            }
    

      

    情况2:使用默认配置文件的路径

            //保存配置按钮
            private void ucbtn_save_BtnClick(object sender, EventArgs e)
            {
                //1,把控件的值赋值给参数类的属性(通过反射)
                Jason_Helper.SaveConfigFileHelper.SetValueFromContorl(Global.myParameter, this);
                //2,把参数类的属性保存在xml文件中
                Jason_Helper.SaveConfigFileHelper.SaveXmlFromProperties(Global.myParameter);
            }
    

      

    代码:

            /// <summary>
            /// 保存按钮-步骤1-把控件的值赋值给存储类的属性(通过反射)
            /// </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>
            /// 保存按钮-步骤2-把储存类的属性保存在Xml文件中
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="xmlPath">配置文件的目录,默认binDebugConfigFile</param>
            public static void SaveXmlFromProperties(object obj, string xmlPath=null)
            {
                Jason_Helper.DirFileHelper.CreateBinDirectory("ConfigFile");
                if (xmlPath == null)//默认路径
                {
                    xmlPath = Application.StartupPath + "\ConfigFile\";
                }
                
    
                //获取属性
                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,参数配置窗口加载的时候,配置信息初始化(配置信息窗口) 

    情况1:手动添加配置文件的路径

            /// <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);
            }
    

      

    情况2:使用默认配置文件的路径

            //配置参数窗体加载的时候
            private void FrmParameter_Load(object sender, EventArgs e)
            {
                //读取Xml文档赋值给控件显示
                Jason_Helper.SaveConfigFileHelper.SetContorlFromXml(this);
            }
    

      

    代码:

            /// <summary>
            /// 配置窗体加载的时候-读取Xml文档赋值给控件显示
            /// </summary>
            /// <param name="c">控件或容器</param>
            /// /// <param name="xmlPath">配置文件路径带扩展名,默认binDebugConfigFileParameterList.xml</param>
            public static void SetContorlFromXml(Control c,string xmlPath=null )
            {
                if (xmlPath == null)
                {
                    xmlPath = Application.StartupPath + "\ConfigFile\" + "ParameterList.xml";
                }
                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;
                                }
                            }
                        }
                    }
                }
            }
    

      

    4,在主程序窗口获取Xml文档给实体类的属性(需要用到参数的窗体)

    情况1:手动添加配置文件的路径

            #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
    

     

    情况2:使用默认配置文件的路径

            private void FrmMain_Load(object sender, EventArgs e)
            {
                Jason_Helper.SaveConfigFileHelper.SetPropertiesFromXml(Global.myParameter);
            }
    

       

    代码:

            /// <summary>
            /// 主窗体加载时候:读取Xml文档赋值给储存类的属性(需要调用参数的窗体)
            /// </summary>
            /// <param name="xmlPath">配置文件路径带扩展名,默认binDebugConfigFileParameterList.xml</param>
            /// <param name="obj"></param>
            public static void SetPropertiesFromXml( object obj,string xmlPath=null)
            {
                if (xmlPath == null)
                {
                    xmlPath = Application.StartupPath + "\ConfigFile\" + "ParameterList.xml";
                }
                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
                                }
                            }
                        }
                    }
                }
            }
    

      

      

  • 相关阅读:
    手游产品经理初探(十)竞品分析
    Openfire开发配置,Openfire源码配置,OpenFire二次开发配置
    code forces 148D Bag of mice (概率DP)
    Android Studio怎样更改JDK和SDK的路径?
    bbb
    收集了三年的最好的设计站点
    C# foreach 有用方法具体解释
    Java 过滤器的作用
    SVD神秘值分解
    《C语言编写 学生成绩管理系统》
  • 原文地址:https://www.cnblogs.com/baozi789654/p/12825212.html
Copyright © 2011-2022 走看看