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 @   Jason.z  阅读(1528)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示