C#学习教程:C#打开一个新表单并关闭另一个表单分享


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 } } 

PS Close将完全关闭您的应用程序,如果它是您的应用程序的主要forms。

尝试更像这样的东西:

 this.Hide(); Main.ShowDialog(); this.Close(); 

您希望在显示对话框之前隐藏登录表单,然后在关闭对话框后关闭登录表单。

简单地关闭“登录”对话框最终将结束应用程序,因此这不是一个真正的解决方案,但您仍然希望隐藏登录。

简单地说,按照您希望它们进入的顺序放置内容,尤其是在处理消息循环时。

首先,隐藏登录表单。
接下来,显示“主窗体”对话框,但阻止“ShowDialog()”的调用者继续,直到关闭对话框。
最后,关闭对话框后,关闭登录表单,结束应用程序。

将主窗体更改为MainForm ,并在应用程序启动时,在MainForm_Load启动登录窗体中作为对话框,这样他们就无法访问主窗体。

您可以使用ApplicationContext.MainForm指定ApplicationContext.MainForm当前主窗体:

 static class Program { public static ApplicationContext Context { get; set; } ///  /// The main entry point for the application. ///  [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(); } 

怎么样。 this.Close()呢?

上述就是C#学习教程:C#打开一个新表单并关闭另一个表单分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/960122.html

发表评论

邮箱地址不会被公开。 必填项已用*标注