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();
}
5 ответов
Ты можешь попробовать вот так
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.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 на его родительской форме. (За исключением, может быть, центрирования родительской формы.)
Более правильный способ сделать это - установить владельца MessageBox.