2011-01-04 3 views
5

Sto sperimentando un comportamento strano utilizzando MessageBox (es) in un programma C#/WPF.Problema con MessageBox (i)

Creare un'applicazione WPF di base con alcune etichette e un pulsante.

ecco il codice del pulsante cliccare

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBoxResult result; 
     do 
     { 

      result = MessageBox.Show(this, "Please Click here under", "TestBugMessageBox", MessageBoxButton.OKCancel, MessageBoxImage.Information, MessageBoxResult.None); 
      if (result.Equals(MessageBoxResult.OK)) 
      { 
       result = MessageBox.Show(this, "Is it the first time you see it ?", "TestBugMessageBox", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.None); 
      } 
     } while (result.Equals(MessageBoxResult.Yes)); 
    } 

quindi posizionare le finestre sul centro dello schermo (in modo che il MessageBox per coprire alcune etichette)

fare clic su Sì per tre volte, e non l'ultima volta e vedrete il problema (spero):

La finestra di messaggio rimane visualizzata sull'app.

Potrebbe farmi sapere cosa c'è che non va?

+0

si comporta bene per me ... – BrokenGlass

+0

In realtà ho attivato Visual Studio per compilare questo e non posso dire quale sia il problema. Quindi sembra che tu debba dircelo. Nessuna combinazione di clic può farla rimanere sullo schermo. –

+0

Va bene anche per me. Puoi darci un suggerimento? – TheEvilPenguin

risposta

0

Ho appena provato questo su un sistema multi-monitor Windows 7 64-bit in Visual Studio 2010 con .NET 4.0 C#/WPF e ha funzionato bene per me.

L'unica differenza è il mio MessageBox.Show non accetta l'oggetto "this".

Si sta utilizzando System.Windows.MessageBox?

Forse ha solo bisogno di un aggiornamento di Windows e/o una reinstallazione del framework .NET.

1

Stai eseguendo il debug e rimanendo su un punto di interruzione nel ciclo do..while? Se la risposta è "sì", è necessario rimuovere i punti di interruzione: wpf non può ridisegnare la superficie della finestra se si blocca un ciclo sul thread principale.

MODIFICA: Anche il debug e il breakpoint del do..while non ero in grado di riprodurre il comportamento descritto. Il problema di cui ho parlato è solo quando si interrompe il thread dell'interfaccia utente (ad esempio quando si esegue l'override di Measure || Disponi i metodi e il debugging), non il thread principale. Scusate.