【发布时间】:2010-03-19 06:19:26
【问题描述】:
我的应用程序遇到了问题。我有两种形式,一种在我的应用程序启动时加载并要求输入密码,另一种在用户使用正确密码登录时显示。
如何关闭登录表单并让用户进入下一个实际应用程序的表单?
目前我隐藏了登录表单,但要求是关闭登录表单以防止额外处理。但是,当我关闭登录表单时,我的应用程序退出,当我隐藏登录表单但关闭实际应用程序表单时,登录表单保持打开状态并阻止我的应用程序关闭,因为登录表单仍在后台运行。
如何解决这个问题?
【问题讨论】:
我的应用程序遇到了问题。我有两种形式,一种在我的应用程序启动时加载并要求输入密码,另一种在用户使用正确密码登录时显示。
如何关闭登录表单并让用户进入下一个实际应用程序的表单?
目前我隐藏了登录表单,但要求是关闭登录表单以防止额外处理。但是,当我关闭登录表单时,我的应用程序退出,当我隐藏登录表单但关闭实际应用程序表单时,登录表单保持打开状态并阻止我的应用程序关闭,因为登录表单仍在后台运行。
如何解决这个问题?
【问题讨论】:
我通常处理这个问题的方式是使用类似于 main 方法中的代码;
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (PerformLogin())
{
Application.Run(new MainForm());
}
}
private static bool PerformLogin()
{
using (LoginForm loginForm = new LoginForm())
{
if (loginForm.ShowDialog() == DialogResult.OK)
{
return AuthenticateUser(loginForm.UserName, loginForm.Password);
}
else
{
return false;
}
}
}
由于登录表单是在PerformLogin 方法中创建和销毁的,因此它不会在内存中保留超过必要的时间。
【讨论】:
我想说最简单的方法就是在第二个的 Load 事件中将第一个表单显示为模式对话框。如果密码验证失败,您可以在事件处理程序中调用 Close,第二种形式也将消失。
显然,您将使用第二种形式作为传递给您的 Main() 函数中的 Application.Run 的形式。
【讨论】:
更简单 - 进入 main 方法。打开第一个窗体为 DIALOG,初始化应用程序,使用 Application.Run 打开第二个窗体。完成了。
【讨论】:
我想你已经用过
LoginForm.Hide();
使用
LoginForm.Close();
我也可能是错的...但只是试试我的运气...
【讨论】: