我有一个项目,其中会弹出一个设置对话框(父级)。当用户点击继续时,会打开一个主对话框(子级)。从主对话框中,用户可以重新编辑设置对话框(父)。当用户单击 X 关闭设置对话框时,应用程序终止。我认为这是因为我们关闭了 Parent 并且它处理了它的所有孩子
是否可以在不关闭主对话框(子项)的情况下关闭父项(或隐藏它)?如果没有,以下修复会起作用吗?以父级身份打开主对话框并使其打开设置对话框(子级)
在Program.cs
文件中,您可能有这样的函数:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
此函数是您的应用程序的入口点。该Application.Run()
函数运行应用程序的主循环。图形应用程序的主循环是事件处理程序触发事件、更新 UI 等的地方。如果事件(例如按下按钮)处理时间过长,则 UI 挂起。为了防止这种情况发生,可以使用线程。
函数是重载的Application.Run()
,所以如果函数有参数(new Form1()
在这种情况下),表单就变成了“主”表单,所以当表单关闭时主循环将退出。
要解决此问题,您需要删除该参数,这将使主循环在窗体关闭时运行而不关闭:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run();
}
但是,这会产生两个问题:
启动时不显示表单,因为我们从Main
函数中删除了它。要解决这个问题,您需要在主函数中创建一个新表单,并显示它:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
form.Show();
Application.Run();
}
当您关闭表单时,应用程序不会退出。如果您关闭所有表单,该进程将仍在运行,因此您需要Application.Exit();
在希望应用程序退出时调用(例如表单关闭事件)。
或者,您只是无法理解模态窗口没有父级就无法生存。当父级最小化时,所有的模态表单都被隐藏了。当父级关闭时,模态表单也会发生同样的情况。
因此,在父母去世后欺骗模型表单以保持活力是一种不好的做法。试着保持第二种形式与第一种形式相同的模式。