我有一些弹出消息框的代码:
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();
}
答案 0 :(得分:29)
您可以指定一个额外的标志作为标准Windows MessageBox
function的一个选项,该标志未在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
答案 1 :(得分:18)
你可以这样尝试
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);
答案 2 :(得分:1)
我只需要这个进行测试,所以如果你不介意额外的俗气, MessageBoxOptions.ServiceNotification将起作用......
MessageBox.Show(message,
"Error",
MessageBoxButton.YesNo,
MessageBoxImage.Exclamation,
MessageBoxResult.OK,
MessageBoxOptions.ServiceNotification);
答案 3 :(得分:0)
更正确的方法是设置MessageBox的所有者
答案 4 :(得分:0)
所有窗口顶部的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.OK
和boxIcon
是前两个中的可选参数。
设置TopLevel并不会产生任何影响;这已经是真的了。
没有直接的方法将MessageBox置于其父窗体上。 (除了可能以父表格为中心。)