我有一个MDI应用程序。当我使用MessageBox.Show()显示一个消息框时,当我关闭消息框时,整个应用程序将在我打开的所有窗口后面消失。
代码没有做任何特别的事情。实际上,这是从MDI子窗体中调用消息框的行:
MessageBox.Show(String.Format("{0} saved successfully.", Me.BusinessUnitTypeName), "Save Successful", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
Me.BusinessUnitTypeName()是一个只读属性getter,它返回一个字符串,具体取决于成员变量的值。这个属性没有副作用。
有什么想法吗?
答案 0 :(得分:5)
删除最后一个参数MessageBoxOptions.DefaultDesktopOnly
。
来自MSDN:
DefaultDesktopOnly会导致 引发MessageBox的应用程序 失去焦点。这是MessageBox 显示不会使用视觉样式。 有关更多信息,请参见渲染 使用视觉样式进行控制。
最后一个参数允许通过csrss.exe将后台Windows服务与活动桌面进行通信!有关详细信息,请参阅Bart de Smet的blog post。
答案 1 :(得分:2)
删除MessageBoxOptions.DefaultDesktopOnly
参数,它将正常工作。
DefaultDesktopOnly
指定“消息框显示在活动桌面上”,这会导致焦点丢失。
答案 2 :(得分:1)
这些答案是正确的,但我想补充一点。我在处理别人的代码时遇到了这个问题。一个简单的消息框导致最前面的窗口向后移动:
MessageBox.Show(“ Hello”)。
结果是,在MessageBox之前有一个BindingSource.Endedit命令。 BindingSource尚未连接到任何控件,但它导致窗口更改z位置。
由于我的搜索使我想起了这个问题,所以我只包含此注释,我认为这可能对其他人有帮助。