我有一个使用windowsforms的Visual C#项目,当在第一个表单以外的任何表单上单击X时,该窗口不会退出。我认为这可能与我的表格切换有关?
目前,我有一个Template.CS,听起来就是这样。我的所有使用形式都通过以下方式扩展:
public partial class Welcome : ADL.template
然后,我通过调用此方法在表单之间切换:
public static void formSwitch(Form in_form, Form out_form)
{
in_form.Hide();
out_form.Show();
}
被叫:
Program.formSwitch(this, new frmUserInput());
我认为这里发生的是,X正在关闭表单而不是应用程序,因为起始表单是隐藏的,而不是关闭的。我有更好的方式在表单之间切换吗?
谢谢!
答案 0 :(得分:2)
在回答你的问题之前,我应该指出Hide
实际上并没有关闭你的表格,它只是(顾名思义)隐藏它。因此,随着时间的推移,你将继续堆积在表格上,直到你用完GDI对象或内存不足,无论哪种方式你都会崩溃。
您对应用程序未关闭的原因有点正确:即使您关闭当前表单,所有其他表单仍然已加载,因此您的应用程序不会结束。
要解决此问题,最好的方法是在不再需要表格时实际关闭表单。您甚至不必添加任何代码来关闭您的应用程序。
现在,如果您因任何原因不想这样做,您可以随时拨打Application.Exit
。我强烈反对你不要追求这个“解决方案”。
修改:对于可能的解决方案,您可以将 Program.cs 更改为:
static class Program
{
static Form NextForm=new frmLogin(); // or whatever your first form is
static public void SetNext(Form next) { NextForm=next; }
static void Main()
{
while(NextForm!=null)
{
Form _next=NextForm;
NextForm=null; // so it closes at the end
Application.Run(NextForm);
}
}
}
然后你的formSwitch
会变成:
public static void formSwitch(Form in_form, Form out_form)
{
Program.SetNext(out_form);
in_form.Close();
}
看起来很奇怪,因为您的工作流程对于Windows程序来说很奇怪。这更像是在DOS下运行的1970 FORTRAN程序的工作流程。
答案 1 :(得分:0)
默认的Windows窗体应用程序行为是:当MAIN窗口关闭时,应用程序将关闭。
主窗口是您创建的第一个窗口。当您在此窗口上调用Hide()
时,它将呈现为不可见(但仍然存在)。因此,关闭第二个窗口不会关闭应用程序。
答案 2 :(得分:0)
您可以按以下方式编辑~/Program.cs
文件中的代码:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form f = new Form();
f.Show();
Application.Run();
}
}
这样,在您私下调用Application.Exit()
之前,应用程序不会关闭。