C # MessageBox на фронт, когда приложение свернуто - PullRequest
8 голосов
/ 29 января 2011

У меня есть некоторый код, который выскакивает в окне сообщения:

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 ]

29 голосов
/ 29 января 2011

Существует дополнительный флаг, который вы можете указать в качестве опции для стандартной функции 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
18 голосов
/ 29 января 2011

вы можете попробовать вот так

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);
1 голос
/ 15 апреля 2016

Мне нужно было это только для тестирования, так что, если вы не против того, чтобы быть слишком глупым MessageBoxOptions.ServiceNotification сделает свое дело ...

        MessageBox.Show(message,
            "Error",
            MessageBoxButton.YesNo,
            MessageBoxImage.Exclamation,
            MessageBoxResult.OK,
            MessageBoxOptions.ServiceNotification);
0 голосов
/ 29 июля 2017

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 на его родительской форме.(За исключением, может быть, центрирования родительской формы.)

0 голосов
/ 16 апреля 2016

Более правильный способ сделать это - установить владельца MessageBox

...