关闭启动窗体时如何防止应用程序终止?

ttp71kqs  于 2021-07-26  发布在  Java
关注(0)|答案(4)|浏览(348)

在我的项目中有两种形式:form1和form2。在form1中有一个按钮,我想做的是关闭form1并在单击该按钮时显示form2。
首先,我试着

Form2 frm = new Form2();
frm.Show();
this.Close();

但是,由于form1关闭了,form2也关闭了。接下来,我试着

Form2 frm = new Form2();
frm.Show();
this.Hide();

但是有一个缺点,当form2关闭时,应用程序不会退出 表格2的表格结束部分。
隐马尔可夫模型。。。。我想知道这是否是正确的方法…那么,处理这个问题的正确方法是什么?

weylhg0b

weylhg0b1#

program.cs中自动生成的代码是用来在启动窗口关闭时终止应用程序的。您需要调整它,使其仅在没有更多窗口时终止。这样地:

[STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var main = new Form1();
        main.FormClosed += new FormClosedEventHandler(FormClosed);
        main.Show();
        Application.Run();
    }

    static void FormClosed(object sender, FormClosedEventArgs e) {
        ((Form)sender).FormClosed -= FormClosed;
        if (Application.OpenForms.Count == 0) Application.ExitThread();
        else Application.OpenForms[0].FormClosed += FormClosed;
    }
arknldoa

arknldoa2#

默认情况下,第一个窗体控制windows窗体应用程序的生存期。如果需要多个独立的windows窗体,则应用程序上下文应该是与窗体分离的上下文。

public class MyContext : ApplicationContext
{
   private List<Form> forms;     

   private static MyContext context = new MyContext();

   private MyContext()
   {
      forms = new List<Form>();
      ShowForm1();
   }

   public static void ShowForm1()
   {
      Form form1 = new Form1();
      context.AddForm(form1);
      form1.Show();
   }

   private void AddForm(Form f)
   { 
      f.Closed += FormClosed;
      forms.Add(f);
   }

   private void FormClosed(object sender, EventArgs e)
   {
      Form f = sender as Form;
      if (form != null)
          forms.Remove(f);
      if (forms.Count == 0)
         Application.Exit();
   }          
}

要使用上下文,请将其传递给application.run(而不是表单)。如果要创建另一个form1,请调用mycontext.showform1()等。

public class Program
{
   public void Main()
   {
      Application.Run(new MyContext());
   }
}
13z8s7eq

13z8s7eq3#

你可以这样做:

form2 f2=new form2()
this.Hide();
f2.Show();

希望有帮助。

ki0zmccv

ki0zmccv4#

将其写入您的方法中,该方法在 FormClosing 事件发生。

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
      // Display a MsgBox asking the user if he is sure to close
      if(MessageBox.Show("Are you sure you want to close?", "My Application", MessageBoxButtons.YesNo) 
         == DialogResult.Yes)
      {
         // Cancel the Closing event from closing the form.
         e.Cancel = false;
         // e.Cancel = true would close the window
      }
}

相关问题