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