您的位置:首页 > 其它

登陆窗体的关闭

2016-05-04 18:24 155 查看
建一个小Demo,在FrmLogin窗体输入用户名admin,点击登陆按钮,显示出FrmMain窗体。





旧方法

先运行登陆窗体,然后在登陆窗体中验证,验证成功后show出主窗体,并把登陆窗体Hide隐藏。

//Program中的代码
Application.Run(new FrmLogin());
//FrmLogin中的代码
private void btnLogin_Click(object sender, EventArgs e)
{
string uid = txtUid.Text.Trim();
if (uid=="admin")
{
FrmMain fMain = new FrmMain();
fMain.Show();
Hide();
}
}


这样做有什么弊端?就是hide并不会销毁登陆窗体,只是隐藏了,这时登陆窗体已经没用了,但一直在消耗资源。winform程序把程序关闭后就把资源释放了,但如果以后要做网站的话,网站是要一直跑的。这绝对是不允许的。

如何改进,开始是想把hide换成close,但主窗体是在登陆窗体中new出来的,close就都没了,肯定是不能close的。

新方法

在Program中new出登陆窗体,然后在登陆窗体中判断是否登陆成功,然后将消息返回给Program,为OK的话Program销毁登陆窗体,并运行主窗体。



这里登陆窗体显示为模态窗体。你只有给登陆窗体一个反馈,才可以做别的。

模态与非模态窗体的主要区别是窗体显示的时候是否可以操作其他窗体。

模态窗体不允许操作其他窗体(比如弹出的警告,只有给警告一个反馈(比如点个确定),才可以继续操作其他窗体),非模态窗体可以操作其他窗体。

反映到代码里,模态窗体就是你必须赋给我一个值(即给我一个反馈),否则不会继续执行下面的代码。

非模态窗体在显示时,程序可继续执行下面的代码。

非模态窗体:Show()

模态窗体:ShowDialog()

//Program中的代码
FrmLogin fLogin = new FrmLogin();//创建登陆窗体
fLogin.ShowDialog();//显示模态窗体

if (fLogin.DialogResult==DialogResult.OK)//判断返回的值
{
fLogin.Dispose();//手动释放资源
Application.Run(new FrmMain()); //运行主窗体
}
else
{
MessageBox.Show("用户名错误");
}
//FrmLogin中的代码
private void btnLogin_Click(object sender, EventArgs e)
{
string uid = txtUid.Text.Trim();
if (uid=="admin")
{
DialogResult=DialogResult.OK;
}
else
{
DialogResult = DialogResult.No;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: