WinForm:一个登陆窗体引发的问题系列(五):窗口跳转

在实际项目中,并不会是一个登陆窗体单独存在的,一般我们会放在主窗口前进行调用的,这里有两种方法

注:frmMain 代表主窗口

    Login 代表登陆窗口

第一种方法

在private void frmMain_Load(object sender, EventArgs e) 方法里添加以下代码

     Form f2 = new Login(); 
     f2.ShowDialog(); 
     
if (f2.DialogResult == DialogResult.OK) 
     { 
        MessageBox.Show(
"hello");   
     } 
     
else 
     { 
        
this.Close(); 
     } 


在private void btnLogin_Click(object sender, EventArgs e)里添加以下代码

 

 if (Reader.HasRows)//判断是否有查询到对象的数据
 {
      
this.DialogResult = DialogResult.OK;

      this.Close();
 }


主要原理就是利用的DialogResult = DialogResult.OK来实现的,

首先程序load主frmMain,主frmMain就会new一个Login并弹出登陆窗口,在登陆窗口验证密码正确以后设置DialogResult.OK这一句,再将对话框关闭。关闭以后from_load方法继续运行判断弹出的登陆框f2的DialogResult是否是ok,如果是,则加载主表单,如果否,则关闭主表单。

 

第二种方法:

在program.cs里改写Main方法

将 Application.Run(new frmMain());改为

 

 Form f1 = new Login();
 f1.ShowDialog();
 
if (f1.DialogResult == DialogResult.OK)
 {
      Application.Run(
new frmMain());
 }
 
else
 {
      
return;
 }

 

在private void btnLogin_Click(object sender, EventArgs e)里添加代码 同方法一

 

 

在main方法运行的时候就先加载f1登陆框进行验证,如果验证通过才run(new frmMain())。如果不通过则返回。

 

总结:

还有一种就是将登陆框hide,直接是 this.hide()而不是this.close()。以上这两种方法,第二种比第一种简单一些,它们都可以避免X掉登陆框之后任然加载主表单的情况。同时这两种方法都不会出现主次窗口都显示和关掉一个窗口另外一个也关闭的情况

 

 


 

 

posted @ 2009-10-21 15:09  Jason.z  阅读(1521)  评论(1编辑  收藏  举报