ShowDialog(所有者)隐藏在后面/不显示,即使我提供所有者IWin32Window

本文关键字:所有者 IWin32Window 隐藏 在后面 ShowDialog 显示 | 更新日期: 2023-09-27 18:09:25

请不要直接关闭问题。下面的线程也讨论了几乎类似的问题。

  1. Windows窗体和ShowDialog问题
  2. 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/

问题:

  1. 我如何在我的开发机器中重现问题并修复它?
  2. 如果我用Show(),设置TopMost = true,是否有可能出现这个问题发生吗?
  3. 我应该考虑哪些事情可能导致这个问题?

如果Show()绝对保证问题不会发生,我将选择Show()。在这件事上,我对ShowDialog()有点失去信心了。

任何帮助都将非常感激。


**该问题不发生在特定的屏幕/视图。它是随机发生的。

**对于除主表单外的所有表单,ShowInTaskBar被设置为false

ShowDialog(所有者)隐藏在后面/不显示,即使我提供所有者IWin32Window

您可以尝试使用TopMost = true的形式

您是否尝试在表单的加载事件中添加this.Activate(),因为我有类似的问题