Paso 5: Agregar controladores de eventos Enter para los controles NumericUpDown

Posiblemente se habrá fijado en que al escribir números en el control NumericUpDown sucede algo extraño.Para corregirlo, se agrega un controlador de eventos Enter.

Para ver el comportamiento del control NumericUpDown

  1. Ejecute el programa e inicie el juego.El control NumericUpDown de la suma debería tener un cursor parpadeante en su interior junto al número 0 (cero).

  2. Escriba 3: aparecerá 30.Escriba 5: aparecerá 350. Sin embargo, después de un segundo cambiará a 100.

    Antes de corregir este problema, piense en lo que está sucediendo.Piense por qué el 0 no desapareció cuando escribió 3. Piense por qué 350 se ha cambiado por 100, y por qué se ha producido un retraso antes del cambio.

    Nota

    Aunque puede parecer un comportamiento extraño, hay una explicación.Al hacer clic en el botón de inicio, la propiedad Enabled del botón está establecida en False; el botón aparece atenuado y no está disponible.El programa busca el control con el siguiente valor de TabIndex más bajo, el control NumericUpDown de la suma, y cambia el foco a ese control.Cuando se presiona la tecla TAB para ir a un control NumericUpDown, el cursor se sitúa automáticamente al principio del control; este es el motivo por el cual los números que se escriben aparecen a la izquierda y no a la derecha.Cuando se escribe un número encima de la propiedad MaximumValue, que está establecida en 100, reemplaza el número escrito con el valor máximo.

Para agregar un controlador de eventos Enter para el control NumericUpDown

  1. A fin de evitar este comportamiento extraño y facilitar el uso del programa, agregue un controlador para cada evento Enter de cada control NumericUpDown.Utilice la página Eventos del el cuadro de diálogo Propiedades para agregar un controlador de eventos Enter denominado answer_Enter para el control NumericUpDown de suma.

    Cuadro de diálogo Propiedades

    Cuadro de diálogo Propiedades

    El código debe tener este aspecto.

    Private Sub answer_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sum.Enter
    
        ' Select the whole answer in the NumericUpDown control.
        Dim answerBox As NumericUpDown = TryCast(sender, NumericUpDown)
    
        If answerBox IsNot Nothing Then
            Dim lengthOfAnswer As Integer = answerBox.Value.ToString().Length
            answerBox.Select(0, lengthOfAnswer)
        End If
    
    End Sub
    
    private void answer_Enter(object sender, EventArgs e)
    {
        // Select the whole answer in the NumericUpDown control.
        NumericUpDown answerBox = sender as NumericUpDown;
    
        if (answerBox != null)
        {
            int lengthOfAnswer = answerBox.Value.ToString().Length;
            answerBox.Select(0, lengthOfAnswer);
        }
    }
    

    Aunque inicialmente parezca complejo, resulta más fácil de entender si se examina paso a paso.En primer lugar, fíjese en la parte superior del método: object sender en C# o sender As System.Object en Visual Basic.Esto significa que dentro del método, cada vez que se utiliza sender, hace referencia al control NumericUpDown cuyo evento Enter se desencadena.Así que, en la primera línea del método, se especifica que no se trata de un simple objeto, sino que es concretamente un control NumericUpDown.(Cada control NumericUpDown es un objeto, pero no todos los objetos son un control NumericUpDown.) En la línea siguiente se comprueba si se ha llevado a cabo correctamente la conversión (de tipos) de answerBox: de un objeto a un control NumericUpDown.Si la conversión de tipos no ha sido correcta, su valor sería null (C#) o Nothing (Visual Basic).En la tercer línea se busca la longitud de la respuesta que se muestra actualmente en el control NumericUpDown.En la cuarta línea se ordena al control NumericUpDown que seleccione la respuesta.Ahora, cuando el usuario navega al control, desencadena este evento, lo que provoca que se seleccione la respuesta.En cuanto el usuario empieza a escribir, se borra la respuesta anterior y se reemplaza con la nueva.

  2. Una vez que se haya implementado este controlador de eventos, vaya al Diseñador de Windows Forms y seleccione el control NumericUpDown de diferencia.Vaya a la página Eventos del cuadro de diálogo Propiedades, desplácese hacia abajo hasta el evento Enter y seleccione el controlador de eventos que acaba de agregar.

  3. A continuación, haga lo mismo para los controles NumericUpDown del producto y del cociente.

  4. Guarde y ejecute el programa.El comportamiento extraño ya no se debería producir.

Para continuar o revisar