2016-04-06 10 views
2

Wenn ich auf die Enter-Taste klicke, wird MessageBox angezeigt. Ich möchte MessageBox schließen, wenn ich wie üblich erneut auf die Enter-Taste klicke. Das Problem ist - es hat keinen Fokus, aber TextBox hat und wenn ich auf Enter-Taste _textBox_OnKeyUp Eventhandler wird immer wieder aufgerufen. Wie kann ich mein Problem lösen?MessageBox nicht Fokus

Markup:

<Grid> 
    <TextBox Name="_textBox" 
     Width="100" 
     Height="30" 
     Background="OrangeRed" 
     KeyUp="_textBox_OnKeyUp"/> 
</Grid> 

Code:

private void _textBox_OnKeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.Key != Key.Enter) 
     return; 

    MessageBox.Show("Bla-bla"); 
} 
+0

Dieser, glaube ich, ist es mit Ihrem Fall gleich: http://stackoverflow.com/questions/6882196/wpf-command-for-textbox-which-fires-up-when-we-hit -enter-key-on-it –

+0

Es ist eines der berüchtigten Luftraumprobleme, Aktivierung und Fokus müssen in WPF emuliert werden, da Steuerelemente keine Fenster sind. Das kann ziemlich störend sein, wenn Sie es nicht auf die "normale" Art und Weise machen, hat WPF eine hartnäckige Annahme, dass Tastaturkürzel mit der KeyDown-Benachrichtigung implementiert werden. Die Verwendung dieses Ereignisses löst stattdessen Ihr Problem trivialerweise auf. –

Antwort

2

Sie KeyDown Ereignis verwenden, könnte stattdessen, weil die MessageBox reagiert auf das KeyDown Ereignis:

<TextBox Name="_textBox" 
     Width="100" 
     Height="30" 
     Background="OrangeRed" 
     KeyDown="_textBox_OnKeyDown"/> 

Und:

private void _textBox_OnKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key != Key.Enter) 
     return; 

    MessageBox.Show("Bla-bla"); 
} 
+0

Thx, es scheint zu funktionieren, aber was kann ich tun, wenn ich das KeyUp Event benutzen muss? – monstr

0

empfehlen I this method von Messagebox mit.

MessageBox.Show(Window, String) 

aus der MSDN Genommen:

Zeigt ein Meldungsfeld vor dem angegebenen Fenster. Die Nachricht Box zeigt eine Nachricht an und gibt ein Ergebnis zurück.

Sie können dies wie folgt verwendet werden:

MessageBox.Show(Application.Current.MainWindow, "I'm on top of teh window so I should get focus"); 

EDIT:

Sie sollten den Fokus auf Ihre Hauptfenster zurück geben, bevor die MessageBox aufrufen.

private void _textBox_OnKeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.Key != Key.Enter) 
     return; 

    //this.Focus() or at least YourWindow.Focus() 
    MessageBox.Show("Bla-bla"); 
} 
+0

Nein, dies schließt die 'MessageBox' nicht, indem Sie erneut auf die Eingabetaste klicken, wie OP gewünscht hat. –

+0

Akzeptiere mit Akbai und in der realen Anwendung (nicht in diesem Test) Ich habe Application.Current.MainWindow = null – monstr

+0

Ich habe eine Bearbeitung gemacht, wenn Ihre Application.Current.MainWindow ist null dann sollten Sie meinen Kommentar durch etwas ersetzen, die gibt Sie das aktuelle Fenster –