zoukankan      html  css  js  c++  java
  • 结合Control.FirefoxDialog控件,构造优秀的参数配置管理模块

    在前面一篇随笔《WinForm界面开发之模块化分合》中,说到了参数配置管理模块内容,内容摘录如下:

    ==================================== 

    参数配置模块 

    在程序中,一般应用就是通过代码把相关的内容进行转义保存或者解析,以便呈现给用户更好的数据展示效果,这个模块比较通用,可分可合。

    另外一个也比较常用的就是参数的配置管理模块,一般如果参数比较少,直接使用.NET的配置保存功能即可,如下图所示。

     

     

    但这种方式只能保存比较少的内容,对于比较复杂的配置,一般很少采用这种模式存放程序的参数信息,这种方式存储的参数,如果不是放到一个独立的文件中,还存在一个不同步的现象。

    其实我们还是可以把参数的配置功能作为一个独立的模块进行处理,我的程序就是经常这么干的,而且由于是相对比较独立,并在设计时候就支持参数的编辑及展示功能,因此效率大大提高,对使用用户来说,由于修改界面比较统一,而且参数的说明等很丰富,因此用户修改系统的配置参数友好性大大增强,界面效果如下所示:

    使用用户看到的参数配置界面效果: 

     

    =========================================================
     

     该参数配置模块在设计时刻和运行时刻都提供管理界面,非常方便参数的定义以及管理,参数一旦定义后,就是强类型的属性类型,也非常方便在代码中进行引用或者修改。

    而另一方面,Control.FirefoxDialog控件却提供了很好的参数管理界面效果,比前面说到的参数配置管理模块界面更加友好,FirefoxDialog控件的界面效果如下所示:

    ControlFirefoxDialog.jpg 

    该控件的Codeproject地址是(http://www.codeproject.com/KB/miscctrl/ControlFirefoxDialog.aspx?msg=1856449

    因此我们可以结合两者的特点,对参数配置管理模块的功能进行整合,界面采用 FirefoxDialog控件显示,而参数的获取或者设置则采用前面介绍的强类型参数配置管理模块,这样可以很好的利用各自的特点,重新构造出一个优秀的参数配置管理功能模块。整合后在我的新软件,绿苗帮电脑监控软件中的配置管理界面,最终的界面效果如下所示:

     

     这个FireFoxDialog的参数配置界面,其实是有一个主窗体界面和几个Page类组成的,如主窗体的加载界面代码如下:

        public partial class FrmSettings : Form
        {
            
    public FrmSettings()
            {
                InitializeComponent();
            }

            
    private void FrmSettings_Load(object sender, EventArgs e)
            {
                
    this.firefoxDialog1.ImageList = this.imageList1;

                
    this.firefoxDialog1.AddPage("参数设置"new PageSetting());
                
    this.firefoxDialog1.AddPage("程序控制"new PageControl());
                
    this.firefoxDialog1.Init();
            }
        }

    而对于每一个Page类,需要实现初始化控件以及“应用”的功能模块代码,如下面的实现所示:

            public override void OnInit()
            {
                SystemConfig.Default.Load();

                
    #region 采集间隔时间
                
    string defaultInterval = "00:00:30";
                
    string intervalString = SystemConfig.Default.CaptureInterval;
                
    if (string.IsNullOrEmpty(intervalString))
                {
                    intervalString 
    = defaultInterval;
                }

                
    string[] timeArray = intervalString.Split(':');
                
    this.txtHour.Value = Convert.ToInt32(timeArray[0]);
                
    this.txtMinute.Value = Convert.ToInt32(timeArray[1]);
                
    this.txtSecond.Value = Convert.ToInt32(timeArray[2]); 
                
    #endregion

                
    if (!string.IsNullOrEmpty(SystemConfig.Default.ImageFormat))
                {
                    
    this.ddlImageFormat.Text = SystemConfig.Default.ImageFormat;
                }
                
    else
                {
                    
    this.ddlImageFormat.SelectedIndex = 0;
                }

                
    this.txtExtension.Text = SystemConfig.Default.ImageFileExtension;
                
    this.txtSavePath.Text = SystemConfig.Default.PictureSavePath;
            }

            
    public override void OnApply()
            {
                
    try
                {
                    
    string timeSpan = string.Format("{0:D2}:{1:D2}:{2:D2}"
                        Convert.ToInt32(
    this.txtHour.Value), Convert.ToInt32(this.txtMinute.Value), Convert.ToInt32(this.txtSecond.Value));
                    SystemConfig.Default.CaptureInterval 
    = timeSpan;
                    SystemConfig.Default.ImageFileExtension 
    = this.txtExtension.Text.Trim('.');
                    SystemConfig.Default.ImageFormat 
    = this.ddlImageFormat.Text;
                    SystemConfig.Default.PictureSavePath 
    = this.txtSavePath.Text;
                    SystemConfig.Default.Save();
                }
                
    catch (Exception ex)
                {
                    LogHelper.Error(ex);
                    MessageUtil.ShowError(ex.Message);
                }
            }

    而其中代码中的“SystemConfig.Default” 调用的操作是强类型的,编写代码的时候,有相关的说明,非常易于操作,不会出现混淆意思的说明,比直接操作XML类或者其他封装XML调用的辅助类方便不少,而且也具有设计时刻对参数项的定义以及修改界面的支持。该代码调用就是采用了原有的参数配置管理类,实现数据的获取或者修改的,这样把他们两者的特点都发挥出来,实现了更好的参数配置管理,根据具有可定制性和可扩展性。


    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    雅礼集训 Day6 T2 Equation 解题报告
    雅礼集训 Day6 T1 Merchant 解题报告
    雅礼集训 Day5 T3 题 解题报告
    雅礼集训 Day3 T2 u 解题报告
    雅礼集训 Day3 T2 v 解题报告
    set-begin
    set-constructors
    set-constructors
    list-unique
    list-unique
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/1796099.html
Copyright © 2011-2022 走看看