当应用程序最小化到托盘时,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.OK
和boxIcon
是前两个中的可选参数。
设置TopLevel不会进行anthing; 这已经是真的了。
没有直接的方法将MessageBox置于其父窗体上。 (除了可能以父表格为中心。)