结合Control.FirefoxDialog控件,构造优秀的参数配置管理模块

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

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

参数配置模块 

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

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

 

 

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

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

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

 

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

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

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

 

该控件的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);
            }
        }

 本文转自博客园伍华聪的博客,原文链接:结合Control.FirefoxDialog控件,构造优秀的参数配置管理模块,如需转载请自行联系原博主。

时间: 2024-09-30 14:30:06

结合Control.FirefoxDialog控件,构造优秀的参数配置管理模块的相关文章

js-JS控件如何给Knockout参数赋值?

问题描述 JS控件如何给Knockout参数赋值? 如上述题目:页面调用JS控件给Knockout参数赋值时失败求解??求给一个例子参考- 解决方案 http://desert3.iteye.com/blog/1480421

js-J控件如何给Knockout参数赋值

问题描述 J控件如何给Knockout参数赋值 1. <input data-bind="value: EndDate, visible: editMode" id='date' onclick="laydate()" /> > 其中EndDate为knockout的ko.observerable()的参数 : onclick为JS时间控件 求解为什么无法给EndDate赋值?

js-JS控件如何给Knockout参数赋值

问题描述 JS控件如何给Knockout参数赋值 > 1. <input data-bind="value: EndDate, visible: editMode" id='date' onclick="laydate()" /> > 其中EndDate为knockout的ko.observerable()的参数 : onclick为JS时间控件 求解为什么无法给EndDate赋值? 解决方案 onclick="MyCalendar

与众不同windows phone (2) Control(控件)

介绍 与众不同 windows phone 7.5 (sdk 7.1) 之控件 Panorama - 全景图控件 Pivot - 枢轴控件 Map - bing 地图控件 WebBrowser - 内嵌浏览器控件 Other - 其他可用控件 示例 1.Panorama 的 Demo Panorama.xaml <phone:PhoneApplicationPage x:Class="Demo.Controls.Panorama" xmlns="http://schem

MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

        最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序,这里介绍两种在对话框picthre控件中显示BMP图片的最简单基础的方法.       ~~方法可能并不完美,高手忽略,但是提供一种能运行的方法,希望对刚接触这方面知识的同学有所帮助.可能你觉得文章过于简单或者有些过于详细叙述(点到即可我并不反对),但也为哪些入门同学想想,当初自己也是一头雾

Unicode控件的字串参数问题

控件|问题 写Unicode控件时发现的传字串参数的问题:问题描述:   Unicode的OCX,属性参数Text,类型:BSTR.   控件的源码(VC中)   afx_msg void SetText(LPCTSTR lpszText)    VB调用1:   Dim strTest As String    strTest = Text1.Text       'Text1文本框为空    If Not IsNull(strTest) Then       TestOCX2221.stri

调用ocx控件提示 指定的参数数目与所需数目不匹配

问题描述 而我用相同的控件在web页面就可以成功调用方法,在winform程序中不行.比较奇怪.方法参数类型不可能错误. 解决方案 本帖最后由 sxy_javaeye 于 2014-09-23 12:28:33 编辑解决方案二:不会的吧,根据错误提示肯定是参数不对了.

mfc控件-Edit Control控件赋值报错

问题描述 Edit Control控件赋值报错 求问大神,我从数据库取了一条记录出来,想要赋值给EditControl,代码如下: if (pRst->rsEOF) { MessageBox(_T("没有数据")); } else; {MessageBox(_T("有数据")); CString m = (LPCTSTR)_bstr_t(pRst->GetCollect("Book_ID")); AfxMessageBox(m); m

MFC中使用Tab Control从CTabCtrl控件类继承自己的类(CTabSheet)来处理。

使用Tab Control,并且从CTabCtrl控件类继承自己的类(CTabSheet)来处理. 首先我先介绍一下如何使用CTabSheet. 先要制作子对话框类,这次的子对话框类不要从CPropertyPage继承,而是直接从CDialog继承.并且各个子对话框资源的属性应设置为:Style为Child, Border为None. 在主对话框资源中,加入一个Tab Control,并且适当调整位置和大小.利用ClassWizard来为这个Tab Control创建一个CTabSheet的控件