VB.Net MessageBox.Show()将我的表单移动到后面

时间:2008-10-01 02:30:15

标签: vb.net mdi messagebox mdichild

我有一个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,它返回一个字符串,具体取决于成员变量的值。这个属性没有副作用。

有什么想法吗?

3 个答案:

答案 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位置。

由于我的搜索使我想起了这个问题,所以我只包含此注释,我认为这可能对其他人有帮助。