C#中对话框的开发模式
举个最实用的例子:用户登录系统。
以往我们在进行程序开发的时候,尤其是在用户登录系统这一块中,往往没有充分利用开发语言中所提供的对话框功能。在以往的应用开发中,我们往往在主界面出现之前,先出现一个验证用户有效性的对话框,因为其简单,我们就在验证窗口中添加几个Button【按钮】、textbox【文本框】、Label【标签】,系统根据用户在textbox输入的信息,通过响应用户点击的按钮事件(Event)来判断用户的有效性。我们往往在此添加好多冗余的代码,来判断各种异常的出现,有时候我们还常常为自己考虑“周全”而沾沾自喜。
在经过一段事件的学习后,我发现微软提供C#开发环境中已经为我们解决了后顾之忧(当然BCB6也有),只需要极少量的代码就能实现高效率的功能。这就是要充分利用对话框的开发思想。名字是自己起的,只是觉得这么叫比较顺溜:)
现在详细介绍一下怎么应用这种模式:
1、 如果你在主界面使用之前要先验证用户的有效性,可以在主界面的Load事件里面show出验证用户有效性的对话框。
2、 在验证用户有效性对话框(也就是用户登录系统)要作如下设置:
2. 1首先要设置此窗体的FormBorderStyle的类型为:FixedDialog(此类型更适合对话框)。
2.2然后设置此窗体的Maxmizebox和Minmizebox的属性为False。
2.3设置窗体的AcceptButton为你的【确定】按钮。
此属性的作用是使【确定】按钮响应【Enter】键。
2.4设置窗体的CancelButton为你的【取消】按钮。
此属性的作用是使【取消】按钮响应【Esc】键。
上述操作做完后,我们就要开始写一些处理的事件函数了。以往我们都在【确定】和【取消】按钮的Click()事件里面来处理。在C#中,我们可以充分利用Button.DialogResult属性。由此我们可知道用户具体点击了那个按钮,从而处理相关事件。此功能一定要在窗体的FormClosing事件里面来处理,BCB6在FormClosed里来处理。此区别就如其名字一样,一个是在窗体即将关闭之时来响应用户的动作,另一个是窗体关闭后来响应用户的动作(过去分词吗,因为最后是ed^_^)。
这时候我们就可以在FormClosing里面这样来写:
if (DialogResult == DialogResult.OK) //说明用户点击了【确定】键
{
//在此写相关处理内容,比如判断用户名和口令是否正确;
//若正确,则置FormClosingEventArgs的参数的cancel为false。
//若不正确,则置FormClosingEventArgs的参数的cancel为true。
e.Cancel = true; //告知系统该窗体不关闭。
}
注:e为窗体关闭时 事件的参数,其原型为FormClosingEventArgs,其中的Cancel属性是指向系统传递当前窗体关闭还是不关闭,如果要关闭当前窗口,则置为False(默认也应该为false),如果不关闭应置为(true)。详细看示例子:)
if (DialogResult == DialogResult.Cancel) //说明用户点击了【取消】键
{
e.Cancel = false; //告知系统该窗体关闭。
}
如此以来,我们已经充分利用了C#提供的对话模式进行编程,若没有经验的程序员在查看时,【确定】按钮和【取消】按钮的事件为空^_^,没有任何代码。但应用程序却可以实现以往的任何功能。
若要使程序更完善一点,比如说用户即没有点【确定】按钮,也没有点击【取消】按钮,而是直接点击了对话框右上角的小“X”,这时后程序应该全部退出,我们可以通过在Closing事件里面加入一个变量bClose,并将其置为true,如果用户直接执行上述操作,我们就可以这么写:)
Bool bClose = true;
if(DialogResult == DialogResult.Cancel && bClose)
{
Application.Exit();
}
这样以来,在用户验证模块上,如果用户直接按【Enter】键,就响应了回车键,若按【Esc】键就响应【取消】键盘。就使程序更人性化了点,不是吗^_^
附加一个例子:如果用户名和口令都为“1”,则进入系统,否则,系统给予口令错误:)
以上为自己愚见,希望各位学长不要见笑:)