none
Desactivar Enter sobre los controles que se encuentran enfocados ¿? RRS feed

  • Pregunta

  • Buenos días, tardes, noches o lo que sean.

    Tengo un problema con una aplicación (calculadora) en la cual muestro los datos por un Textbox.

    La calculadora hace las tareas correspondientes dependiendo del control que se ejecute, incluso leo los datos del teclado para llevar acabo las mismas operaciones. Mi problema deriva, en que a pesar de haber configurado la tecla Enter mediante keypress en Form para que se ejecute el click de un botón especifico, se ejecuta el procedimiento del control que pose el foco en lugar de producirse el establecido en el método keypress. ¿Cómo puedo evitar que se ejecute el procedimiento del control sobre el cual se encuentra el foco (sin importar cual sea) y de esta forma lograr que la tecla enter ejecute la tarea que designe en keypress?.

    Este es el método por el cual leo el teclado y realizo las operaciones específicas

    private void Form1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar >= '0' && e.KeyChar <= '9')
                {
                    if (ultimaEntrada != Entrada.DIGITO)
                    {
                        if (e.KeyChar == '0')
                        {
                            return;
                        }
                        etPantalla.Text = "";
                        ultimaEntrada = Entrada.DIGITO;
                        comaDecimal = false;
                    }
                    etPantalla.Text += Convert.ToString(e.KeyChar);
                }
                else if (e.KeyChar == '+')
                    btMas.PerformClick();
                else if (e.KeyChar == '-')
                    btMenos.PerformClick();
                else if (e.KeyChar == '*')
                    btPor.PerformClick();
                else if (e.KeyChar == '/')
                    btDividir.PerformClick();
                else if (e.KeyChar == Convert.ToChar(13))       //Aquí es donde corroboro si presiono la tecla enter
                {
                    e.Handled = true; //Doy por controlado el evento
                    btIgual.PerformClick(); //Asigno la tarea que quiero que realice, sin embargo ejecuta la acción del control que tiene 
                }   el foco
            }


    • Editado Cyroks jueves, 5 de mayo de 2016 5:58
    jueves, 5 de mayo de 2016 5:58

Respuestas

  • Lo que se me ocurre que puedes hacer es controlar el evento GotFocus de los botones que no quieres que mantengan el foco y en el controlador del evento devolver el foco al formulario y establecer el control activo a null:

                button1.GotFocus += numberButton_Focus;
                button2.GotFocus += numberButton_Focus;
                button3.GotFocus += numberButton_Focus;
    
    .....
    
    
            private void numberButton_Focus(object sender, EventArgs e)
            {
                Focus();
                ActiveControl = null;
            }


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    jueves, 5 de mayo de 2016 8:03