在前面一篇随笔《
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);
}
}

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


标签: none

添加新评论