2009-09-08 13 views
5

Voglio mostrare messagebox all'utente, in modo tale che l'utente non possa rifiutarsi di confermare la finestra del messaggio. L'utente non dovrebbe essere autorizzato a fare nient'altro sullo schermo finché non conferma la messagebox.MessageBox in C#

Questa è un'applicazione basata su Windows #.

La cosa principale è, anche se uso la finestra di messaggio di Windows. Alcune volte si nasconde dietro uno schermo. Ma per il mio caso, voglio che la message box sia sempre in primo piano ogni volta che appare.

Sto usando alcune altre applicazioni di terze parti, che oltre cavalcano la mia casella di messaggio. Voglio superare questo.

Come fare questo ...

+0

Questo tipo di messagebox è chiamato "System Modal" e il supporto per questo è molto ridotto perché a nessuno piace un'app che disabiliti il ​​resto del sistema. Perché la tua app dovrebbe essere autorizzata a farlo? – rein

risposta

2

Se implementazione standard di MessageBox non fa quello che è necessario, si dovrà creare il proprio modulo e utilizzare ShowDialog() metodo.

+0

La cosa principale è, anche se uso la finestra di messaggio di Windows. Alcune volte si nasconde dietro uno schermo. Ma per il mio caso, voglio che la message box sia sempre in primo piano ogni volta che appare. – Anuya

+0

sto usando alcune altre applicazioni di terze parti, che oltre cavalcano la mia casella di messaggio. Voglio superare questo. – Anuya

1

Sembra che il messagebox viene mostrato in un altro thread. Devi assicurarti di chiamare MessageBox.Show sul thread principale dell'interfaccia utente. Di seguito è riportato un frammento di codice che illustra un modo per raggiungere questo obiettivo:

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

Io parto dal presupposto che non si dispone di uno scenario in cui si dispone di più thread UI e quando uno di loro SCHIOCCA messagebox, si desidera che la messagebox essere modali per l'intera interfaccia utente. Questo è uno scenario più complicato.