1

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

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

4

3 回答 3

3

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

我不得不不同意这里的用户说您不应该指定所有者。事实上,尽可能为表单指定所有者总是可取的。虽然对话框可能不如非模态表单重要,但养成指定所有者的习惯总是一个好主意。

于 2009-04-22T12:48:53.767 回答
0

如果您想在另一个应用程序或窗体中作为父窗体,您可以使用 IWin32Window 参数。

因此,例如,您可以获得另一个应用程序或表单的句柄,并将您的表单显示为该应用程序的一部分。你可以在这里找到更多信息

于 2009-04-22T12:39:31.077 回答
0

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

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

于 2009-04-22T12:45:32.187 回答