天天看点

【C#】三层登录总结<机房重构>前言三层我遇到的问题五、未解决的问题

前言

        三层登录的实例使用C#敲的,我也模仿例子,自己实现了一下,例子中,只有你所有的东西都是正确的时候,它才会实现应有的功能,一旦有一点没有通过验证,就会非常不友好的抛出错误,正好我的机房重构也是用C#敲的,在总结三层的时候,顺便把机房登录的问题也总结了吧。我修改了好久,大部分不友好的地方都改完了,剩下最后一个难题,在看董胜娇博客的时候解决了。接下来说一下我遇到的问题和解决办法。

三层

        三层,对于我们以前的知识来说是一个新鲜的事物,因为以前做的系统用的VB是面向过程的编程方法,突然之间用到了面向对象,而面向对象三大特性中,封装继承多态在哪里体现出来?我觉得就是在实现代码时,三层七层划分严明,非常好的解除了模块间的耦合度,大大有利于后期维护,在如今大软件越来越多的情况下,面向对象的使用是必然的。

我遇到的问题

一、登录窗体关闭后显示主窗体

        这个本来不是什么难的问题,但是对于第一次接触C#编程,第一次接触三层的我来说,还是比较困难的,进入正题。 1、在Program.cs文件改成:

static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        //[STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FrmLogin());//FrmLogin就是登录窗体
            if (FrmMain.isRunMain == true)
            {
                Application.Run(new FrmMain());//FrmMain就是我们要显示的主窗体
            }
        }
    }
           

2、接下来,在登录窗体上写

if (true)//登录成功
            {
                FrmMain frmMain = new FrmMain(); 
                FrmMain.isRunMain = true;
                frmMain.Show();              
                this.Close();
            }
           

3、最后,在主窗体也就是我们要显示的窗体上声明

public static bool isRunMain = false;
           

        好了,这个问题就解决了。这里面的逻辑关系很好懂,相信大家都能看的很明白。

二、显示当前时间

        在主窗体中,右下角有一个显示当前时间的label,这个是怎么显示的呢,这其实和我们VB时用到的方法相同,但VS里相对简单。         首先,添加一个Timer控件。

private void timer1_Tick(object sender, EventArgs e)
        {
            lblTime.Text = string.Format("当前日期时间:{0}",DateTime.Now);
        }
           

        这样就行了,非常的简单。

三、存储用户名

        我不知道这个问题的解决方法是不是符合三层,但是到现在为止我只会这一种方法,如果有更好的方法,欢迎大家留言告诉我,希望大家不吝赐教。         在修改密码的时候,我们没有必要输入用户名,因为在登录的时候用户名已经获取过了,刚开始我想,用户名在Model中,我没有清空,可是当我实例化调用的时候却发现它为null,到现在我也不清楚是什么原因,只能采取另外一种办法。         这种方法是,另外创建一个类,我是把这个类放在Model空间下的,然后在这个类中定义变量

Public static string User;
           

然后,在登录的时候,顺便存储一下这个变量,当用到这个用户名的时候,直接使用就可以了。

四、报喜不报忧

        为什么叫这个名字呢?因为在三层例子中,当我们把所有正确的信息输入后,系统提示我们登录成功,但是,当我们密码或者帐号输入不正确时,它就非常不友好的报错,这个问题,我一直找不到答案,终于今天在看董胜娇博客的时候找到了,她给的方法是在需要判断来返回值的时候,在方法的后面加一个out string 参数,用它来做判断的依据,董胜娇遇到的判断是在BLL层,在修改密码时,我遇到一个需要在DAL层进行的判断,方法相同,只需要再用一个这样的参数继续向上传递就行,具体的方法详见董胜娇博客http://blog.csdn.net/dsj15831653282/article/details/50428799

五、未解决的问题

        最近的一个问题,就是我的MDI窗体是主窗体,子窗体显示出来的时候,所有的控件都漂浮在子窗体上方,遮住了子窗体,无论怎么置顶都没有用,希望大家能帮助我解决这个问题。