前言
三层登录的实例使用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窗体是主窗体,子窗体显示出来的时候,所有的控件都漂浮在子窗体上方,遮住了子窗体,无论怎么置顶都没有用,希望大家能帮助我解决这个问题。