[英]How do I prevent the app from terminating when I close the startup form?
我的项目中有两个表单:Form1 和 Form2。 Form1 中有一个按钮,我想要做的是关闭 Form1 并在单击该按钮时显示 Form2。
首先,我试过
Form2 frm = new Form2();
frm.Show();
this.Close();
但随着 Form1 关闭,Form2 也关闭了。 接下来,我尝试
Form2 frm = new Form2();
frm.Show();
this.Hide();
但是有一个缺点,即当 Form2 关闭时应用程序不会退出。因此,我不得不在 Form2 的 form_FormClosing 部分中放入其他源。
嗯......我想知道这是否是正确的方法......那么,处理这个问题的正确方法是什么?
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;
}
默认情况下,第一个窗体控制 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());
}
}
你可以这样:
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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.