2009-09-08 34 views
5

Quiero mostrar messagebox al usuario, de modo que el usuario no pueda negarse a confirmar el cuadro de mensaje. El usuario no debería poder hacer nada más en la pantalla hasta que confirme el cuadro de mensaje.MessageBox en C#

Esta es una aplicación basada en Windows C#.

Lo principal es que, incluso si uso el cuadro de mensaje de Windows. Algunas veces se esconde detrás de alguna pantalla. Pero en mi caso, quiero que el cuadro de mensaje esté en la parte superior cada vez que aparece.

Estoy usando otras aplicaciones de terceros, que sobrepasan mi cuadro de mensaje. Quiero superar esto.

Cómo hacer esto ...

+0

Ese tipo de messagebox se llama "System Modal" y el soporte para esto es muy mínimo porque a nadie le gusta una aplicación que deshabilita el resto del sistema. ¿Por qué su aplicación podría hacer esto? – rein

Respuesta

2

Si implementación estándar de MessageBox no hace lo que necesita, tendrá que crear su propia forma y utilizar ShowDialog() método.

+0

Lo principal es que, incluso si uso el cuadro de mensaje de Windows. Algunas veces se esconde detrás de alguna pantalla. Pero en mi caso, quiero que el cuadro de mensaje esté en la parte superior cada vez que aparece. – Anuya

+0

estoy usando algunas otras aplicaciones de terceros, que sobrepasan mi cuadro de mensaje. Quiero superar esto. – Anuya

1

Suena como el cuadro de mensaje en otro hilo. Debe asegurarse de llamar a MessageBox.Show en el hilo principal de UI. A continuación se muestra un fragmento de código que ilustra una forma de lograr esto:

public class FooForm: Form 
{ 

    //This is just a button click handler that calls ShowMessage from another thread. 
    private void ButtonShowMessage_Click(object sender,EventArgs e) 
    { 
    //Use this to see that you can't interact with FooForm before closing the messagebox. 
    ThreadPool.QueueUserWorkItem(delegate{ ShowMessage("Hello World!");}); 

    //Use this (uncomment) to see that you can interact with FooForm even though there is a messagebox. 
    //ThreadPool.QueueUserWorkItem(delegate{ MessageBox.Show("Hello World!");}); 
    } 

    private void ShowMessage(string message) 
    { 
    if(InvokeRequire) 
    { 
     BeginInvoke(new MethodInvoker(() => MessageBox.Show(message))); 
    } 
    else 
    { 
     MessageBox.Show(message); 
    } 
    }  
} 

Estoy asumiendo que usted no tiene un escenario en el que tiene múltiples hilos de interfaz de usuario, y cuando uno de ellos hace estallar un cuadro de mensaje, que desea que MessageBox ser modal para toda la interfaz de usuario. Ese es un escenario más complicado.

Cuestiones relacionadas