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

时间:2011-09-20 21:02:31

标签: c# .net winforms view krypton-toolkit

请不要马上关闭这个问题。在以下主题中也讨论了几乎相似的问题。

  1. Windows Forms and ShowDialog problem
  2. Form.ShowDialog() or Form.ShowDialog(this)?
  3. 但是,这些并不能解决我的问题。 我的开发机器中从未发生过这个问题。它发生在用户机器上,但并非总是如此。实际上它只发生了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. 我应该考虑哪些因素可能导致此问题?
    4. 如果Show()绝对保证不会出现问题,我会选择Show()。我对此ShowDialog()失去了信心。

      非常感谢任何帮助。


      **特定屏幕/视图不会出现此问题。它是随机发生的。

      **对于除主窗体之外的所有窗体,ShowInTaskBar设置为false。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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