在我的节目我秀的主要形式之前登录表单,一旦程序检测登录成功我用这个:C#打开一个新的形式和关闭另一个
MainForm Main = new MainForm();
Main.Show();
this.Hide();
这工作得很好,但有一个问题,登录表单仍然是开放的,即使它是隐藏的,所以当程序关闭时,进程仍然挂起,我怎么能阻止这种情况发生?
对不起,忘了添加,使用this.Close();
不起作用,会完全关闭程序。
在我的节目我秀的主要形式之前登录表单,一旦程序检测登录成功我用这个:C#打开一个新的形式和关闭另一个
MainForm Main = new MainForm();
Main.Show();
this.Hide();
这工作得很好,但有一个问题,登录表单仍然是开放的,即使它是隐藏的,所以当程序关闭时,进程仍然挂起,我怎么能阻止这种情况发生?
对不起,忘了添加,使用this.Close();
不起作用,会完全关闭程序。
您需要在应用程序开启时指定您的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
}
}
附:如果它是你应用程序的主要形式,那么Close
将完全关闭你的应用程序。在登录处理
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);
}
}
然后在:
如果隐藏的MainForm在它的负载事件显示登录表单之前,您将更密切地复制首先打开登录表单的用户功能。 – Servy
this.Close()
怎么办?
将主窗体更改为MainForm
,并且当应用程序启动时,在您的MainForm_Load
启动登录窗体中作为对话框,使他们无法访问主窗体。
Application.Exit(0);
SetVisibilityCore
,并调用它内MainForm_Load
。尝试更多的东西是这样的:
this.Hide();
Main.ShowDialog();
this.Close();
你想隐藏的登录表单显示您的对话框之前,然后关闭登录表单对话框关闭后。
简单地关闭登录对话框最终会结束应用程序,所以这不是一个真正的解决方案,但你仍然想隐藏登录。
简而言之,请按照您希望他们进入的顺序进行操作,特别是在处理消息循环时。
首先,您隐藏登录表单。
接下来,您将显示主窗体对话框,但阻止“ShowDialog()”的调用者继续,直到对话框关闭。
最后,关闭对话框后,关闭登录表单,结束应用程序。
您可以使用ApplicationContext.MainForm
指定当前主要形式为应用程序
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();
}
尝试this.close() –