2009-08-04 4 views

Odpowiedz

18

zahaczyć zdarzenie KeyPress sposobu tak:

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

Przetestowałem to w aplikacji WinForms z VS2008 i to działa.

Jeśli to nie działa, proszę opublikuj swój kod.

+0

Próbowałem już. To nie działa. Spróbuj sam i zobacz. To dlatego wysłałem pytanie. – Presidenten

+0

Próbowałem go i działa dobrze. Opublikuj swój kod ... –

+0

Jedną z możliwych przyczyn jest to, że inna funkcja obsługi zdarzeń najpierw przejmuje funkcję "enter" i zatrzymuje pracę pozostałych osób obsługujących. Na przykład menu lub sam formularz. – Petros

9

lub altertatively można podłączyć do KeyDown zdarzenie:

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

Działa to w VS2010E, thx :) –

17

W przypadku zdefiniowania AcceptButton na formularzu, nie można słuchać Wprowadź klucz KeyDown/keyUp/naciśnięciem klawisza.

W celu sprawdzenia, że ​​trzeba zastąpić ProcessCmdKey na postać:

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); 
    } 
} 

W tym przykładzie, który daje pole wiadomość jeśli jesteś na polu kombi i działa jak poprzednio w przypadku wszystkich innych kontroli .

0

Możliwe, że w oknie dialogowym znajduje się przycisk, który spożywa klucz Enter, ponieważ jest ustawiony jako AcceptButton we właściwościach formularza.
Jeśli to przypadek następnie rozwiązać ten tak przez wyłączające właściwość AcceptButton gdy kontrola dostaje skupienia następnie zresetowanie go z powrotem, gdy kontrola traci ostrość (w moim kodu, button1 jest przycisk zaakceptować)

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"); 
     } 
    } 

I trzeba przyznać, nie lubić moje własne rozwiązanie, gdyż wydaje się nieco hacky na wyłączony/ustawić właściwość AcceptButton więc jeśli ktoś ma lepsze rozwiązanie wtedy byłbym zainteresowany

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

Spróbuj tego:

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");     
    } 
} 

Nie zapomnij ustawić KeyPreview na true w formularzu.