Julio 26

2017

Problemas difíciles, soluciones fáciles

Hoy he tenido problemas de nuevo con el tema de ejecutar una función cuando se presiona la tecla ENTER dentro de un ComboBox en una aplicaron Windows Forms utilizando c#.

Lo primero que piensas, al igual que en un TextBox es utilizar el Evento KeyPress y usar el mismo código que en el, algo así como

            if ((int)e.KeyChar == (int)Keys.Enter)
{
//aqui codigo
}

Pero en la practica esto no funciona dentro de un ComboBox.

La solución

Como no es la primera vez que me enfrento a esto, en esta ocasión quería intentar solucionarlo de la manera mas sencilla posible, ya que en otras ocasiones la verdad que me lié mucho. Pero conseguí dar con la solución. Internet a veces sirve para algo. 

Hay que sobrescribir el evento ProcessCmdKey y comprobar que el control activo es el ComboBox que tu deseas. Esto, en teoría, lo podrías hacer con todos los controles del formulario.

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

Como veis en el if se comprueba el control activo, por lo que con poner ahí el control que queréis que ejecute el procedimiento al presionar ENTER bastaría.

Happy coding


#trucos #CSHARP #windowsforms



1 Comentarios

  • Tambien se podria incluir la tecla RETURN, dependiendo del teclado es posible que devuelva otro codigo.

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
    //capture the ENTER in a combobox
    if ((this.ActiveControl == ListPostCodes) && ((keyData == Keys.Enter) || (keyData == Keys.Return)))
    {
    GetCosts(ListPostCodes.Text);
    TexPostCodes.Text = "";
    return true;
    }
    else
    {
    return base.ProcessCmdKey(ref msg, keyData);
    }
    }

Escribir un comentario

7 - 4 =



Archivo