当应用程序最小化到托盘时,C#MessageBox到前面

我有一些弹出消息框的代码:

MessageBox.Show(this, "You have not inputted a username or password. Would you like to configure your settings now?", "Settings Needed", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 

我的问题是当弹出我的应用程序通常最小化到托盘。 因此,消息框不会出现在前面,也不会出现在开始栏中。 看到它的唯一方法是通过alt-tabbing。

以下是将我的应用程序(父级)最小化到托盘的代码:

 if (FormWindowState.Minimized == WindowState) { Hide(); } 

你可以这样试试

 MessageBox.Show(new Form() { TopMost = true }, "You have not inputted a username or password. Would you like to configure your settings now?", "Settings Needed", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 

您可以指定一个额外的标志作为标准Windows MessageBox函数的一个选项,该函数未在WinForms包装器中公开。

您正在寻找的是MB_TOPMOST ,它确保消息框显示为桌面上其他所有内容的最顶层窗口。 只需修改您的代码,如下所示:

 MessageBox.Show(this, "You have not inputted a username or password. Would you like to configure your settings now?", "Settings Needed", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, // specify "Yes" as the default (MessageBoxOptions)0x40000); // specify MB_TOPMOST 

我只需要这个进行测试,所以如果你不介意额外的俗气,MessageBoxOptions.ServiceNotification会做到这一点……

  MessageBox.Show(message, "Error", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.OK, MessageBoxOptions.ServiceNotification); 

更正确的方法是设置MessageBox的所有者

所有窗口顶部的MessageBox(无托盘图标):

 MessageBox.Show(new Form() { TopMost = true }, boxText, "Box Title", MessageBoxButtons.OK, boxIcon); 

所有窗口顶部的MessageBox 和您的应用程序 (无托盘图标):

 TopMost = true; MessageBox.Show(boxText, "Box Title", MessageBoxButtons.OK, boxIcon); TopMost = false; 

所有窗口顶部的MessageBox, 以及托盘图标 (应用程序失去焦点):

 MessageBox.Show(boxText, "Box Title", MessageBoxButtons.OK, boxIcon, 0, MessageBoxOptions.DefaultDesktopOnly); // (The "0" can also be "MessageBoxDefaultButton.Button1".) 

MessageBoxButtons.OKboxIcon是前两个中的可选参数。

设置TopLevel不会进行anthing; 这已经是真的了。

没有直接的方法将MessageBox置于其父窗体上。 (除了可能以父表格为中心。)