2016-04-06 49 views
2

Enter tuşuna bastığımda, MessageBox gösteriliyor. Her zamanki gibi tekrar enter tuşuna bastığımda kapatmak için MessageBox'u istiyorum. Sorun şu ki, odak noktası yok, ama TextBox'un sahip olduğu ve _textBox_OnKeyUp olay satıcısını yeniden tıkladığımda tekrar ve tekrar çağrılır. Sorunumu nasıl çözebilirim?MessageBox odağı almıyor

Biçimlendirme:

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

Kodu: Sen KeyDown olay kullanabilirsiniz

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

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

gösteri bu, bence, bu vaka ile aynıdır: http://stackoverflow.com/questions/6882196/wpf-command-for-textbox-which-fires-up-when-we-hit -enter-key-on-it –

+0

WPF'de denetlenmeyen pencereler olduğundan, kötü hava alanı sorunlarından, etkinleştirme ve odaklama gereksinimlerinden biridir. Bu "normal" yolu yapmazsanız, oldukça glitchy olabilir, WPF kısayol tuş vuruşlarını KeyDown bildirimi ile uygulanmış bir sert pişmiş varsayım vardır. Bu olayı kullanmak, probleminizi önemsiz bir şekilde çözer. –

cevap

2

yerine çünkü KeyDown olaya MessageBox tepki gösterir:

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

Ve:

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

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

Thx, işe yarayacak gibi görünüyor, ancak KeyUp olayını kullanmam gerekiyorsa ne yapabilirim? – monstr

0

Ben MessageBox this method kullanarak tavsiye.

MessageBox.Show(Window, String) 

MSDN'den Alındığı:

görüntüler bir ileti kutusu belirtilen pencerenin önünde. mesaj kutusu bir mesaj görüntüler ve bir sonuç döndürür.

aşağıdaki gibi kullanabilirsiniz:

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

DÜZENLEME:

Sen MessageBox çağırmadan önce ana penceresine odağı geri vermelidir.

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

Hayır, OP'nin istediği gibi tekrar Enter butonuna basarak 'MessageBox'ı kapatmaz. –

+0

Akbai ile katılıyorum ve gerçek uygulamada (bu testte değil) Ben Application.Current.MainWindow = null var – monstr

+0

Application.Current.MainWindow null ise bir düzenleme yaptım, sonra benim yorumumu yerine şu anki penceren –