C#中对话框的开发模式

来源:互联网 发布:js产生1 100随机数 编辑:程序博客网 时间:2024/05/21 18:34

C#中对话框的开发模式

举个最实用的例子:用户登录系统。

以往我们在进行程序开发的时候,尤其是在用户登录系统这一块中,往往没有充分利用开发语言中所提供的对话框功能。在以往的应用开发中,我们往往在主界面出现之前,先出现一个验证用户有效性的对话框,因为其简单,我们就在验证窗口中添加几个Button【按钮】、textbox【文本框】、Label【标签】,系统根据用户在textbox输入的信息,通过响应用户点击的按钮事件(Event)来判断用户的有效性。我们往往在此添加好多冗余的代码,来判断各种异常的出现,有时候我们还常常为自己考虑“周全”而沾沾自喜。

在经过一段事件的学习后,我发现微软提供C#开发环境中已经为我们解决了后顾之忧(当然BCB6也有),只需要极少量的代码就能实现高效率的功能。这就是要充分利用对话框的开发思想。名字是自己起的,只是觉得这么叫比较顺溜:)

现在详细介绍一下怎么应用这种模式:

1、    如果你在主界面使用之前要先验证用户的有效性,可以在主界面的Load事件里面show出验证用户有效性的对话框。

2、    在验证用户有效性对话框(也就是用户登录系统)要作如下设置:

2.  1首先要设置此窗体的FormBorderStyle的类型为:FixedDialog(此类型更适合对话框)。

22然后设置此窗体的MaxmizeboxMinmizebox的属性为False

23设置窗体的AcceptButton为你的【确定】按钮。

此属性的作用是使【确定】按钮响应【Enter】键。

24设置窗体的CancelButton为你的【取消】按钮。

    此属性的作用是使【取消】按钮响应【Esc】键。

上述操作做完后,我们就要开始写一些处理的事件函数了。以往我们都在【确定】和【取消】按钮的Click()事件里面来处理。在C#中,我们可以充分利用Button.DialogResult属性。由此我们可知道用户具体点击了那个按钮,从而处理相关事件。此功能一定要在窗体的FormClosing事件里面来处理,BCB6FormClosed里来处理。此区别就如其名字一样,一个是在窗体即将关闭之时来响应用户的动作,另一个是窗体关闭后来响应用户的动作(过去分词吗,因为最后是ed^_^)。

这时候我们就可以在FormClosing里面这样来写:

if (DialogResult == DialogResult.OK)    //说明用户点击了【确定】键

    {

        //在此写相关处理内容,比如判断用户名和口令是否正确;

        //若正确,则置FormClosingEventArgs的参数的cancelfalse

        //若不正确,则置FormClosingEventArgs的参数的canceltrue

        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”,则进入系统,否则,系统给予口令错误:)

以上为自己愚见,希望各位学长不要见笑:)