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
.
从参考源看来,程序试图获取活动窗口。
IntPtr hWndActive = UnsafeNativeMethods.GetActiveWindow();
IntPtr hWndOwner = owner == null ? hWndActive : Control.GetSafeHandle(owner);
对于控制台应用程序,没有、hWndActive
isIntPtr.Zero
和owner
is null。所以表单没有所有者。
实际上,这具有相同的行为的ShowDialog()
,因为这只是调用:
public DialogResult ShowDialog() {
return ShowDialog(null);
}
所以基本上这只是一个没有所有者的表格。没什么特别的。它就像一个独立的窗口。
附带说明:如果不使用Application.Run(new ...());
它确保 Win32 消息循环启动并运行,则不应从控制台应用程序打开表单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句