winforms ShowDialog(所有者)隐藏在/不显示,即使我提供所有者IWin 32 Window

sqyvllje  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(109)

请不要马上结束这个问题。几乎类似的问题也在下面的线程中讨论。

  1. Windows Forms and ShowDialog problem
  2. Form.ShowDialog() or 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.如何在开发机器中重现问题并修复它?
1.如果我使用Show()并设置TopMost = true,是否可能出现此问题?
1.我应该考虑哪些因素可能导致此问题?
如果Show()绝对保证问题不会发生,我就选Show()。我对ShowDialog()失去了信心。
任何帮助将不胜感激。

**特定屏幕/视图不会出现此问题。它随机发生。
**对于除主窗体外的所有窗体,ShowInTaskBar均设置为false。

a9wyjsp7

a9wyjsp71#

您可以尝试将TopMost = true用于表单

monwx1rj

monwx1rj2#

你有没有试过在表单的load事件中添加this.Activate(),因为我也遇到过类似的问题。

相关问题