关闭父母而不关闭孩子

时间:2012-09-08 10:59:21

标签: c# winforms dialog

我有一个项目,其中弹出设置对话框(Parent)。当用户点击继续时,将打开一个主对话框(Child)。 在主对话框中,用户可以重新编辑设置对话框(Parent)。当用户单击X关闭设置对话框时,应用程序终止。 我认为这是因为我们关闭了Parent并且它处理了所有子节点

是否可以关闭Parent(或隐藏它)而不关闭主对话框(child)? 如果没有,以下修复是否有效? 打开主对话框作为父对象,并打开设置对话框(子)

2 个答案:

答案 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();
    }

但是,这会产生两个问题:

  1. 启动时不会显示任何表单,因为我们已从Main函数中删除了该表单。要解决此问题,您需要在main函数中创建一个新表单并显示它:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
    
        Form1 form = new Form1();
        form.Show();
    
        Application.Run();
    }
    
  2. 关闭表单时,应用程序不会退出。如果您关闭所有表单,该过程仍将继续运行,因此您需要在需要退出应用程序时调用Application.Exit();(例如,表单结束事件)。

答案 1 :(得分:0)

或者,您无法理解modal窗口无法在没有父级的情况下生存。当父级最小化时,所有模态形式都被隐藏。当父母关闭时,模态形式也会发生同样的情况。

因此,在父母去世后欺骗模型表格以保持活力是一种不好的做法。试着保持第二种形式与第一种形式只是另一种相同形式的模式。