3

请不要立即关闭问题。在以下线程中也讨论了几乎类似的问题。

  1. Windows 窗体和 ShowDialog 问题
  2. Form.ShowDialog() 还是 Form.ShowDialog(this)?

但是,这些并不能解决我的问题。我的开发机器上从未出现过这个问题。它发生在用户机器中,但并非总是如此。事实上,它只发生了 3 或 4 次。

当它发生时,应用程序/调用表单似乎被冻结了。如果我能猜到(因为我没有在屏幕上看到它)关闭按钮在哪里并在调用的表单上单击它,它会关闭并且应用程序会返回可用状态,直到它再次出现。

我的视图封装在演示者中,所以我不是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。

4

2 回答 2

0

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

于 2011-09-23T10:10:37.707 回答
0

您可以尝试使用TopMost = true表单

于 2011-09-27T13:34:13.457 回答