ShowDialog(所有者)隐藏在后面/不显示,即使我提供所有者IWin32Window
本文关键字:所有者 IWin32Window 隐藏 在后面 ShowDialog 显示 | 更新日期: 2023-09-27 18:09:25
请不要直接关闭问题。下面的线程也讨论了几乎类似的问题。
- Windows窗体和ShowDialog问题
- Form.ShowDialog()还是Form.ShowDialog(this)?
但是,这些并不能解决我的问题。我的开发机器从未出现过这个问题。它发生在用户计算机中,但并不总是如此。事实上,这种情况只发生了三四次。
当它发生时,似乎应用程序/调用表单被冻结了。如果我能猜出(因为我没有在屏幕上看到它)关闭按钮在哪里,并在被调用的表单上单击它,它就会关闭,应用程序回到可用状态,直到它再次发生。
我的视图被封装在演示器中,所以我不是从视图中调用ShowDialog()
,而是通过演示器。
MainPresenter
{
MainPresenter(IMainView view)
{
_view = view;
}
…
…
OpenSecondView()
{
var secondPresenter =_presenterFactory.Create<SecondPresenter>();
secondPresenter.Ininialize(_view);
}
}
// Initialize method in the SecondPresenter
Initialize(owner)
{
_secondView.ShowDialog(owner);
}
我使用观察演示者风格的MVP在这里解释http://www.aspiringcraftsman.com/2008/11/23/model-view-presenter-styles/
问题:
- 我如何在我的开发机器中重现问题并修复它?
- 如果我用
Show()
,设置TopMost = true
,是否有可能出现这个问题发生吗? - 我应该考虑哪些事情可能导致这个问题?
如果Show()
绝对保证问题不会发生,我将选择Show()
。在这件事上,我对ShowDialog()
有点失去信心了。
任何帮助都将非常感激。
**该问题不发生在特定的屏幕/视图。它是随机发生的。
**对于除主表单外的所有表单,ShowInTaskBar被设置为false
您可以尝试使用TopMost = true
的形式
您是否尝试在表单的加载事件中添加this.Activate()
,因为我有类似的问题