在我的程序中,我在主窗体之前显示一个登录表单,一旦程序检测到登录成功,我就用这个:
MainForm Main = new MainForm();
Main.Show();
this.Hide();
这样可以正常但是有一个问题,登录表单仍然是打开的,即使它是隐藏的,所以当程序关闭时,进程仍然挂起,我怎么能阻止这种情况发生呢?
抱歉,忘记添加,使用this.Close();
无效并将完全关闭该程序。
答案 0 :(得分:10)
尝试更像这样的事情:
this.Hide();
Main.ShowDialog();
this.Close();
您希望在显示对话框之前隐藏登录表单,然后在关闭对话框后关闭登录表单。
简单地关闭“登录”对话框将最终结束应用程序,因此这不是一个真正的解决方案,但您仍然希望隐藏登录。
简单地说,按照您希望他们进入的顺序放置内容,尤其是在处理消息循环时。
首先,您隐藏登录表单
接下来,显示主窗体对话框,但阻止“ShowDialog()”的调用者继续,直到对话框关闭。
最后,关闭对话框后,关闭登录表单,结束应用程序。
答案 1 :(得分:8)
您需要在启动应用程序时指定MainForm
,并在此表单的Load
事件处理程序中请求登录。在这种情况下,您将在启动时运行应用程序和Login
:
<强> Program.cs的强>
Application.Run(new MainForm());
<强> MainForm.cs 强>
private void Form1_Load(object sender, EventArgs e)
{
LoginForm loginForm = new LoginForm();
if (loginForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// check login here
}
}
P.S。 Close
如果它是您申请的主要形式,将完全关闭您的申请。
答案 2 :(得分:1)
将主窗体更改为MainForm
,并在应用程序启动时,在MainForm_Load
启动登录表单中作为对话框,以便他们无法访问主窗体。
Application.Exit(0);
SetVisibilityCore
并在 MainForm_Load
内将其称为。答案 3 :(得分:1)
您可以使用ApplicationContext.MainForm
指定应用程序的当前主窗体:
static class Program
{
public static ApplicationContext Context { get; set; }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Context = new ApplicationContext(new LoginForm());
// pass Context instead of just new LoginForm()
Application.Run(Context);
}
}
然后在登录处理程序中:
private void login_Click(object sender, EventArgs e)
{
Program.Context.MainForm = new MainForm();
// close login form
this.Close();
// set up context to track main form instead of login
Program.Context.MainForm.Show();
}
答案 4 :(得分:-1)
this.Close()
呢?