【发布时间】:2009-05-03 12:03:13
【问题描述】:
我听说如果我在没有指定所有者的情况下调用 form.ShowDialog(),那么可能会出现在屏幕上看不到对话框的情况(它将与其他窗口一起隐藏)。这是真的吗?我使用 ShowDialog() 没有指定所有者数百次,我从来没有遇到过任何问题。
您能否解释一下我在什么情况下会遇到所描述的问题?
更新:
嗯,我做了很多实验,使用 ShowDialog()(没有指定所有者)没有遇到任何真正的意外问题。
所以我认为 ShowDialog() 可能会导致问题只是谣言。 如果您不同意 - 请给我一个导致问题的代码示例。
【问题讨论】:
-
这似乎不适用于winforms,但为了记录,我来到这里是因为我在WPF中遇到问题。如果我切换到另一个应用程序,当我再次单击父窗体时,子对话框被卡在后面(因为子对话框设置为不在任务栏中显示,这很糟糕)。设置对话框的所有者解决了这个问题。
-
启动后台工作者并调用 ShowDialog。该窗口不会显示在您的应用程序前面,而是显示在背景上(只是为了惹恼我们的程序员,这种情况偶尔会发生)。
-
Barfieldmv,我尝试按照您的建议进行操作,表单显示在顶部,而不是在背景上。
-
请给我一个导致问题的代码示例 - 方法错误。契约是MSDN,执行行为是今天的心情。不同版本的 Windows 上的行为可能会有所不同,并且可能会随着 Windows 更新、Windows 功能或其他程序而改变。模态窗口确实有一个所有者,其他所有人都希望您指定正确的所有者。
-
举个例子:
Form1带有一个可以启动约 1 秒计时器的按钮。计时器的Tick事件停止计时器,并用ShowDialog打开Form2。设置Form2.ShowInTaskbar=false,它的行为就像一个弹出窗口。启动程序,单击按钮,然后选择另一个程序在计时器触发之前。单击任务栏图标以再次将您的应用程序置于前台。在我的系统上,我观察到:禁用的 Form1 获得输入焦点(而不是 Form2),并且单击 Form1 不会使 Form2 的标题栏闪烁。