2009-08-04 14 views

cevap

18

Kanca kadar böyle bir yönteme KeyPress olayı:

protected void myCombo_OnKeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 13) 
    { 
     MessageBox.Show("Enter pressed", "Attention");     
    } 
} 

Ben VS2008 WinForms uygulamada bu test ettik ve işe yarıyor.

Sizin için uygun değilse, lütfen kodunuzu gönderin.

+0

Zaten denedim. İşe yaramıyor. Kendini dene ve gör. Bu yüzden sorumu gönderdim. – Presidenten

+0

Denedim ve gayet iyi çalışıyor. Kodunuzu gönderin ... –

+0

Bunun olası bir nedeni, başka bir olay işleyicisinin önce girişi yakalaması ve işleyicilerin geri kalanının işlerini yapması durması olabilir. Örneğin bir Menü veya formun kendisi. – Petros

9

veya altertatively sen KeyDown olayı kanca edebilirsiniz: durumunda

private void comboBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     MessageBox.Show("Enter pressed."); 
    } 
} 
+0

Bu VS2010E içinde çalışır, thx :) –

17

formunuzda AcceptButton tanımlamak, sen KeyDown/KeyUp/KeyPress içinde Enter tuşuna dinleyemiyorum.

o kontrol etmek için, FORM üzerinde ProcessCmdKey geçersiz kılmak gerekir: Eğer açılan kutu olup olmadığını size mesaj kutusunu verecekti Bu örnekte

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if ((this.ActiveControl == myComboBox) && (keyData == Keys.Return)) { 
     MessageBox.Show("Combo Enter"); 
     return true; 
    } else { 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

ve tüm diğer kontroller için daha önce olduğu gibi çalışır .

0

Diyalogunuz, enter özelliğinden yararlanan bir düğme vardır, çünkü form özelliğinde AcceptButton olarak ayarlanmıştır.
bu durumda o zaman kontrol odağı kaybettiği anda kontrol geri sıfırlamayı sonra odaklamak alır AcceptButton özelliğini unsetting tarafından böyle çözmek ise

private void comboBox1_Enter(object sender, EventArgs e) 
{ 
    this.AcceptButton = null; 
} 

private void comboBox1_Leave(object sender, EventArgs e) 
{ 
    this.AcceptButton = button1; 
} 

private void comboBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyData == Keys.Enter) 
     { 
      MessageBox.Show("Hello"); 
     } 
    } 

(benim kodunda, button1 kabul düğme) herkes daha iyi bir çözüm varsa o zaman ilgi duyarım böylece tanımsız biraz hacky görünüyor olarak kendi çözüm sevme itiraf etmeliyim/AcceptButton özelliğini ayarlayın

1
private void comboBox1_KeyDown(object sender, EventArgs e) 
{ 
    if(e.KeyCode == Keys.Enter) 
    { 
     // Do something here... 
    } else Application.DoEvents(); 
} 
1

bu deneyin:

protected override bool ProcessCmdKey(ref Message msg, Keys k) 
{ 
    if (k == Keys.Enter || k == Keys.Return) 
    { 
     this.Text = null; 
     return true; 
    } 

    return base.ProcessCmdKey(ref msg, k); 
} 
0
protected void Form_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 13) // or Key.Enter or Key.Return 
    { 
     MessageBox.Show("Enter pressed", "KeyPress Event");     
    } 
} 

KeyPreview'i formda doğru olarak ayarlamayı unutmayın.

İlgili konular