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

时间:2011-01-29 02:50:14

标签: c# .net winforms messagebox system-tray

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

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();                
}

5 个答案:

答案 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.OKboxIcon是前两个中的可选参数。

设置TopLevel并不会产生任何影响;这已经是真的了。

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