如何在closures启动表单时阻止应用程序终止?
在我的项目中有两个表单:Form1和Form2。 在Form1中有一个button,我想要做的是closuresForm1并显示Form2单击该button时。
首先,我试了一下
Form2 frm = new Form2(); frm.Show(); this.Close();
但Form1closures,Form2也closures了。 接下来,我试了一下
Form2 frm = new Form2(); frm.Show(); this.Hide();
但有一个缺点,当Form2closures时,应用程序不会退出。所以,我必须在Form2的form_FormClosing部分中添加额外的源。
嗯….我想知道这是否是正确的方法….那么,处理这个问题的正确方法是什么?
编写Program.cs中的自动生成的代码是为了在启动窗口closures时终止应用程序。 你需要调整它,所以只有在没有更多的窗口时才会终止。 喜欢这个:
[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; }
默认情况下,第一个窗体控制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(而不是表单)。 如果要创build另一个Form1,请调用MyContext.ShowForm1()等
public class Program { public void Main() { Application.Run(new MyContext()); } }
你可以采取这种方式:
form2 f2=new form2() this.Hide(); f2.Show();
希望这是有帮助的。
将它写入您的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 } }