Pregunta

He implementado reglas de validación en un TextBox en mi WinForm y funciona bien. Sin embargo, comprueba la validación solo cuando salgo del campo. Me gustaría verificarlo tan pronto como se ingrese algo en el cuadro y cada vez que cambie el contenido. También me gustaría que verifique la validación tan pronto como se abra WinForm.

Recuerdo haber hecho esto bastante recientemente al establecer algunos eventos y otras cosas, pero parece que no puedo recordar cómo.

¿Fue útil?

Solución

evento TextChanged

en el futuro puede encontrar todos los eventos en la biblioteca de MSDN, aquí está Referencia de clase de TextBox :

http: // msdn.microsoft.com/en-us/library/system.windows.forms.textbox(VS.80).aspx

Otros consejos

Si está utilizando el enlace de datos, vaya a las Propiedades del cuadro de texto. Abra (DataBindings) en la parte superior, haga clic en la propiedad (Avanzado), aparecerán tres puntos (...) Haga clic en esos. Aparece la pantalla de enlace de datos avanzados. Para cada propiedad del TextBox que está enlazado, en su caso Text , puede establecer cuándo el enlace de datos, y por lo tanto la validación, debería " patear en " usando el cuadro combinado Modo de actualización de la fuente de datos . Si lo configura en OnPropertyChanged , se volverá a evaluar a medida que escribe (el valor predeterminado es OnValidation que solo se actualiza a medida que la pestaña).

¿Cómo serán válidos sus datos si no están terminados? es decir, un usuario escribe un número e intenta validarlo como una fecha?

Al vincular su cuadro de texto a una fuente de enlace, vaya a Avanzado y seleccione el tipo de validación
" En propiedad cambiada " ;. Esto propagará sus datos a su entidad con cada pulsación de tecla. Aquí está la captura de pantalla

Debería estar verificando los eventos KeyPress o KeyDown y no solo su evento TextChanged.

Aquí hay un ejemplo de C # directamente desde Documentación de MSDN :

// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;

// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    // Initialize the flag to false.
    nonNumberEntered = false;

    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if(e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
    //If shift key was pressed, it's not a number.
    if (Control.ModifierKeys == Keys.Shift) {
        nonNumberEntered = true;
    }
}

// This event occurs after the KeyDown event and can be used to prevent
// characters from entering the control.
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    // Check for the flag being set in the KeyDown event.
    if (nonNumberEntered == true)
    {
        // Stop the character from being entered into the control since it is non-numerical.
        e.Handled = true;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top