控制台应用程序中的Form.ShowDialog没有设置所有者

时间:2017-05-17 08:21:27

标签: c# modal-dialog console-application

class Form1 : Form
{
    ...
    void SoSomething()
    {
        var f2 = new Form2();
        f2.ShowDialog(null);
    }
    void SoSomethingElse()
    {
        var f2 = new Form2();
        f2.ShowDialog(this);
    }
}

从我目前的测试来看,似乎这两个方法是相同的,ShowDialog似乎自动将其所有者设置为调用它的形式(如果没有设置)(ShowDialog的参数是null

但是我有一个创建这种表单的控制台应用程序。我想知道在这种情况下对话框的所有者是什么。我没有找到任何文档描述在向null提供ShowDialog时究竟发生了什么。

1 个答案:

答案 0 :(得分:1)

Reference Source开始,程序似乎试图获取活动窗口。

git config --global -e

对于控制台应用程序,没有,c:\windows\system32\.gitconfigIntPtr hWndActive = UnsafeNativeMethods.GetActiveWindow(); IntPtr hWndOwner = owner == null ? hWndActive : Control.GetSafeHandle(owner); hWndActive为空。所以表格没有所有者。

实际上,the same behaviorIntPtr.Zero,因为它只调用:

owner

所以基本上这只是一个没有所有者的表格。没什么特别的。它就像一个独立的窗口。

作为旁注:您不应在不使用ShowDialog()的情况下从控制台应用程序打开表单。它确保Win32消息循环已启动并正在运行。