2009-08-04 13 views

Respuesta

18

conectar el evento KeyPress a un método como este:

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

He probado esto en una aplicación Windows Forms con VS2008 y funciona.

Si no funciona para usted, publique su código.

+0

Ya lo he probado. No funciona. Prueba tu mismo y observa. Por eso publiqué la pregunta. – Presidenten

+0

Lo he probado y funciona muy bien. Publique su código ... –

+0

Una posible razón sería que algún otro controlador de eventos detecta primero la entrada y detiene el resto de los manejadores que hacen su trabajo. Por ejemplo, un menú o el formulario en sí. – Petros

9

o altertatively se puede conectar el evento KeyDown:

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

Esto funciona en VS2010E, thx :) –

17

En el caso de definir AcceptButton en su forma, no se puede escuchar a la tecla Enter en KeyDown/KeyUp/pulsación de tecla.

Con el fin de comprobar que, se debe redefinir ProcessCmdKey en FORMA:

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

En este ejemplo que le daría cuadro de mensaje si está en cuadro combinado y funciona como antes para todos los otros controles .

0

Puede ser que su cuadro de diálogo tenga un botón que está comiendo la tecla Intro porque está configurado para ser el botón Aceptar en la propiedad del formulario.
Si ese es el caso, entonces usted resolver este como este por desarmar la propiedad AcceptButton cuando el control se centran entonces reajustar de nuevo una vez que el control pierde el foco (en mi código, el botón 1 es el botón aceptar)

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 tiene que admitir que no le gustaba mi propia solución, ya que parece un poco hacky a desarmar/establecer la propiedad AcceptButton así que si alguien tiene una mejor solución, entonces estaría interesado

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

Prueba esto:

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

No olvide establecer KeyPreview en verdadero en el formulario.

Cuestiones relacionadas