代码之家  ›  专栏  ›  技术社区  ›  David Božjak

经过长时间计算后,消息框未显示在MDI窗体上

  •  0
  • David Božjak  · 技术社区  · 14 年前

    这是一个非常类似的问题 This one 不幸的是,也没人接电话。

    我有一个MDI主论坛,其中有几个儿童表格。其中一个执行长计算,并在发生错误时抛出异常(所有工作都在同一线程上完成)。然后,我尝试用一个消息框通知用户一个错误,但是它没有出现(但是从MDI主窗口窃取焦点,所以应用程序完全没有响应)。

    如果我调用application.doEvents()(我知道这很糟糕,但这是最后一个解决办法),那么这个庞然大物会略有变化。然后表单将保持完全活动状态,只有在我将活动应用程序(alt+tab)更改为其他内容后,才会显示消息框,然后再次返回。

    我该怎么做才能确保消息框可见?我已经尝试将active child和mdi main作为参数传递给messagebox.show方法。它不会改变行为。

    澄清: MessageBox是子窗体的一部分,但此时,我愿意以任何方式显示它,而不是 打破 应用程序。MessageBox应该是模态的,但是它应该是可见的,这样用户就可以确认它。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Spiral    14 年前

    我也有同样的问题。按下alt键,弹出窗口显示。

    结果发现它是一个LinkedLabel,AutoSize属性为true。LinkedLabel位于FlowlayOutpanel内。当我将LinkedLabel.Text属性设置为String.Empty时。LinkedLabel不断尝试调整大小,这导致GUI一直很忙。

    当我关闭AutoSize属性时,GUI不再需要重新计算位置。图形用户界面不是免费的。弹出窗口显示。

    可能还有其他控件的行为相同。 另请参见: https://connect.microsoft.com/VisualStudio/feedback/details/116884

        2
  •  0
  •   TalkingCode    14 年前

    消息框是显示在主窗体中还是作为子窗体的一部分?如果消息框在子窗体中,您可以将事件传递回主窗体并在那里打开消息框。

        3
  •  0
  •   ChrisBD    14 年前

    问题是,消息箱往往是模态的。 在本例中,我认为在主MDI代码中使用委托或带有处理程序的事件要好得多。这样,您的主应用程序就会显示消息框。如果您希望传递所需的任何信息,可以轻松地重新定义事件argstype。