我什么时候需要调用form.ShowDialog(IWin32Window)而不是form.ShowDialog()?

时间:2009-04-22 12:33:29

标签: .net winforms modal-dialog

我有一些代码,它调用form.ShowDialog(IWin32Window)重载而不是form.ShowDialog()重载,但它在当前活动窗口中作为参数传递。

使用其他重载似乎保持行为不变。切换到更简单的过载是否安全?我什么时候想传递IWin32Window参数?

3 个答案:

答案 0 :(得分:3)

IWin32Window参数用于指定对话框的所有者。在这种情况下,它是一个接口,以便您可以将非托管窗口(例如,您正在使用的COM对象)作为对话框的所有者。

我不同意此处的用户,他们说您不应指定所有者。事实上,在可能的情况下,始终建议为表单指定所有者。虽然对话可能没有非模态形式那么重要,但养成指定所有者的习惯总是一个好主意。

答案 1 :(得分:0)

如果您希望在其他应用程序或表单中为您的表单提供父级,则可以使用IWin32Window参数。

例如,您可以获取另一个应用程序或表单的句柄,并将您的表单显示为该应用程序的一部分。您可以找到更多信息here

答案 2 :(得分:0)

在正常情况下,您应该使用void构造函数。像Nathan所说,如果你想显示与特定所有者的对话框,只使用IWin32Window构造函数。这通常不是必需的。

ShowDialog()的文档指出,“将表单显示为模式对话框,当前活动窗口设置为其所有者。”因此,除非您明确需要将窗体的所有者设置为不是活动窗口的窗口,否则无需使用ShowDialog(IWin32Window)。