2011-01-29 23 views
8

tengo un código que popups un cuadro de mensaje:C# de mensaje hacia adelante cuando la aplicación se minimiza en la bandeja

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

Mi problema es cuando esta aparece mi aplicación es usualmente minimiza en la bandeja. Como resultado, el messagebox no aparece al frente y tampoco aparece a lo largo de la barra de inicio. La única forma de verlo es alt-tabbing.

Este es el código que minimice mi aplicación (el padre) a la bandeja:

if (FormWindowState.Minimized == WindowState) 
{     
     Hide();     
} 
+3

Por favor, roba mi enfoque. Lo más importante en el mundo es tu aplicación y es imperativo que detenga todo lo que estoy haciendo y preste atención solo a tu aplicación y a tu aplicación. – siride

+10

no tiene idea de lo que hace mi aplicación y si esto es aceptable en el contexto del problema, por lo tanto, si no va a ser constructivo, no haga ningún comentario. –

+0

http://stackoverflow.com/a/4834954/206730 es una mejor solución? – Kiquenet

Respuesta

17

se puede tratar como esto

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); 
+0

¡genial! cuando cierro el cuadro de mensaje, también mataría esa forma, ¿verdad? (parece que sí lo está) –

+3

@nextgenneo: No hay ninguna razón por la que deba crear un formulario nuevo solo para mostrar un cuadro de mensaje. Vea mi respuesta para una mejor solución. (Y no, no necesariamente mata a la forma. Todavía se está ejecutando en segundo plano). –

+0

'Form' tiene' IDisposable' por lo que se recomienda 'usar' a su alrededor. El motivo de que esta sea la mejor solución (y en ese caso reutilizar la instancia más alta) es que si abre varios cuadros de diálogo todos pueden llegar a ser el cuadro de diálogo real visible, y no se ocultan uno detrás del otro y no pueden leer ellos. – NiKiZe

26

Hay un indicador adicional se puede especificar como una opción para el estándar Windows MessageBox function que no está expuesto en el contenedor WinForms.

Lo que está buscando se llama MB_TOPMOST, lo que garantiza que el cuadro de mensaje se muestre como la ventana superior sobre todo lo demás en su escritorio. Basta con modificar el código como se muestra a continuación:

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 
+0

Esta es de hecho la mejor solución. –

+0

+100, increíble solución. – tallseth

+0

todavía no viene al frente o arriba. No puedo arrastrar ese messagebox o hacer clic en los botones ok/close. – Sakthivel

2

sólo necesitaba esto para las pruebas, así que si no te importa estar extra de queso, MessageBoxOptions.ServiceNotification hará el truco ...

 MessageBox.Show(message, 
      "Error", 
      MessageBoxButton.YesNo, 
      MessageBoxImage.Exclamation, 
      MessageBoxResult.OK, 
      MessageBoxOptions.ServiceNotification); 
+0

Solución mucho mejor que hacer girar una nueva forma y marcarla como la más alta. También existe la opción para MessageBoxImage.None que elimina la imagen cursi. – TChadwick

0

la forma más correcta de hacer esto es establecer el propietario del cuadro de mensaje

0

de mensaje en la parte superior de todas las ventanas (sin icono de la bandeja):

MessageBox.Show(new Form() { TopMost = true }, boxText, "Box Title", 
       MessageBoxButtons.OK, boxIcon); 

de mensaje y su aplicación en la parte superior de todas las ventanas (sin icono de la bandeja):

TopMost = true; 
MessageBox.Show(boxText, "Box Title", MessageBoxButtons.OK, boxIcon); 
TopMost = false; 

de mensaje en la parte superior de todas las ventanas, además bandeja de iconos (aplicación pierde el foco):

MessageBox.Show(boxText, "Box Title", MessageBoxButtons.OK, boxIcon, 0, 
       MessageBoxOptions.DefaultDesktopOnly); 
// (The "0" can also be "MessageBoxDefaultButton.Button1".) 

MessageBoxButtons.OK y boxIcon son argumentos opcionales en los dos primeros.

Configuración de TopLevel no hace anthing; ya es verdad

No hay una manera directa de centrar un MessageBox en su forma principal. (Excepto tal vez centrando el formulario principal.)

Cuestiones relacionadas