首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MessageBox TopMost不是?

为什么MessageBox TopMost不是?
EN

Stack Overflow用户
提问于 2013-04-19 12:53:45
回答 5查看 72.8K关注 0票数 54

我最近发现,默认情况下,MessageBoxes并不是显示在默认情况下最多的表单,我想知道是否有人知道什么情况下您不希望在其他窗口上显示消息框?

当我开始在加载应用程序时显示启动屏幕时,我发现了这个问题,看起来我的程序还在运行,但是在启动屏幕后面有一个MessageBox在等待输入。splash屏幕显示在一个与调用messagebox的线程不同的线程上,所以我想这就是为什么它没有出现在splash上面;但是这仍然不能解释为什么MessageBox默认没有MB_TOPMOST标志?

编辑

为了更好地澄清:最后,我不得不做一些类似的事情来创建一个消息盒,代码并不完全正确,就像从内存中写出来的那样)

代码语言:javascript
复制
[DllImport("User32.dll")]
private int extern MessageBox(windowhandle, message, caption, flag);
public static void MessageBox(windowhandle, string message, string caption)
{
    MessageBox(windowhandle, message,caption, MB_TOPMOST);
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-19 13:20:37

要在最上面显示MessageBox,最重要的是为应用程序显示

代码语言:javascript
复制
//Should be MessageBox.Show() below
MessageBox.Show(this, "My top most message");

默认情况下不是MB_TOPMOST 的原因

如果MB_TOPMOST是默认的,那么MessageBox将出现在“系统模式”模式中,并且它将恰好位于该表单的顶部,副作用是“系统模式”模式将导致MessageBox阻塞窗口,直到消息正常被取消--它将是“应用模式”模式。

参考链接

  1. MSDN论坛-如何将MessageBox显示为最顶部的窗口
  2. 因此-当应用程序最小化为Tray时,C# MessageBox到前沿
票数 38
EN

Stack Overflow用户

发布于 2014-05-18 16:00:36

如果您可以获得一个句柄或对对话框应该出现在顶部的窗口的引用,则建议的解决方案可以工作。然而,这并不总是可能或容易做到的:

  • 该窗口是一个启动屏幕,不应与您的业务逻辑紧密耦合。
  • 该窗口由另一个类或库创建,而不是当前的类或库。
  • 窗口超出了您的控制范围,即来自第三方(本机)库。

在这种情况下,您可以使用来自Win232 MessageBox API的User32.dll,但也可以使用更简单的托管解决方案:

代码语言:javascript
复制
MessageBox.Show(new Form { TopMost = true }, "Hello, I'm on top!");

代码new Form { TopMost = true }将使用MB_TOPMOST属性创建一个隐藏表单,该属性由messagebox对话框窗口继承。因此,它将出现在所有其他窗口之上。使用new Form()内嵌没有副作用,没有视觉外观,它将通过垃圾收集器正常销毁。

注意:如果您已经不在表单中,请不要忘记名称空间,这是System.Windows.Forms.MessageBox__,而不是System.Windows.MessageBox__!(谢谢,https://stackoverflow.com/questions/16105097/why-isnt-messagebox-topmost/23723931#comment46178269_23723931)。

票数 87
EN

Stack Overflow用户

发布于 2013-04-19 13:05:38

当显示MessageBox时,提供它的所有者作为第一个参数。例如,当从Form实例调用调用时:

代码语言:javascript
复制
MessageBox.Show(this, "Message");

作为第一个参数提供对拥有它的窗口的引用。

消息框(通常是模式窗体)不会出现在应用程序的所有窗口的顶部。它们只出现在主人的顶部。如果您希望您的消息框(或其他模式表单)位于启动屏幕的顶部,请将它们的所有者设置为splash实例。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16105097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档