2010-08-21 16 views
9

Sistemi tetikler: Windows7 Pro, Visual Studio 2010, C#C# - MessageBox Enter Pushing kontrol KeyUp olay

Bir metin kutusu vardır: textBox1 Ben onun etkinliği ayarlayın: Düzgün çalışır

textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp); 

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     button1.PerformClick(); 
    } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (string.IsNullOrEmpty(textBox1.Text)) 
    { 
     MessageBox.Show("Invalid data", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     return; 
    } 
} 

, Sorun, girilen verinin geçersiz olduğu ve MessageBox görüntülendiğinde, MessageBox OK Düğmesine ENTER ENTER düğmesine bastığımda, 'u da tetikler, bu da MessageBox'un tekrar gösterilmesine neden olur. Bu nedenle, MessageBox Tamam düğmesini tetikler, bu da kaybolmasına neden olur ve ayrıca textbox_keyUp'u tetikler ve daha sonra ileti kutusunun yeniden görünmesine neden olur.

Yardımlarınız için teşekkürler.

cevap

17

Evet, ileti kutusu, tuş aşağı olayına yanıt verir. Yani TextBox'ınız olmalı. Bunun yerine KeyDown olayını kullanın, sorun çözüldü. Ayrıca kullanıcının normalde duyduğu can sıkıcı BEEP'i de çözer.

private void textBox1_KeyDown(object sender, KeyEventArgs e) { 
     if (e.KeyData == Keys.Enter) { 
      button1.PerformClick(); 
      e.SuppressKeyPress = true; 
     } 
    } 
+0

Ama bu benim sorunum, ben sadece MessageBox düğmesine –

+0

@WoF tetiklemek istiyorum, her iki tetiklemek istemiyorum: daha iyi Hecelemeli olur. Yayın güncellendi. –

+0

Çalıştı, teşekkürler –

0

Denetimler yalnızca odaklanmışlarsa olayları tetikler. Yani sizin durumunuzda hala metin kutunuzda odakla düğmesini tıklarsınız ve bu yüzden mesaj kutusuna giremezsiniz. Çözelti button1_Click yönteminin içine aşağıdaki kodu eklemektir:

var btn = sender as Button; 
btn.Focus(); 

mesaj kutusuna girdiğiniz vurursam bunu çözmüş hiçbir olay metin kutusu

+0

tahmin etmek için mesaj kutusunu kullanabilirim. Aslında, istediğim sadece MessageBox'ta değil, MessageBox'ta ve –

+0

numaralı butonumda değil, mesaj kutusuna odaklanmayı kullanmaktır. metin kutusu etkinliğini tekrar tekrar tetiklemeyecek – tchrikch

1

ateş edeceği böylece odak butonuna kurulacaktır Bu kez liste görünümü için, bu metin için çalışabilir:

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     textBox1.enable = false; 
     button1.PerformClick(); 
     textBox1.enable = true; 
    } 
}