【问题标题】:ShowDialog(owner) is hiding behind/not showing even though I am supplying owner IWin32Window即使我提供所有者 IWin32Window,ShowDialog(owner) 也隐藏/不显示
【发布时间】:2011-09-20 21:02:31
【问题描述】:

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

  1. Windows Forms and ShowDialog problem
  2. Form.ShowDialog() or 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。

【问题讨论】:

  • 您的代码 sn-p 无法诊断此问题。
  • @HansPassant 我同意,我在这里发布它们是为了展示我如何调用视图,如果这很重要的话。
  • @HansPassant 如果您有兴趣查看任何特定代码,我可以在这里发布。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你能解释一下为什么我需要调用 this.Active() 吗?
    • 我看到弹出对话框,但在当前表单后面,这意味着必须使用 alt-tab 才能获取对话框。这是你指的问题吗?您是否找到了解决方案,因为它已经有一段时间了。
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 2016-06-26
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多