Question

J'ai implémenté des règles de validation sur une zone de texte dans mon WinForm et cela fonctionne bien. Cependant, il ne vérifie la validation que lorsque je quitte le champ. Je voudrais qu'il vérifie dès que quelque chose est entré dans la boîte et chaque fois que le contenu change. J'aimerais aussi qu'il vérifie la validation dès que WinForm s'ouvre.

Je me souviens de l'avoir fait assez récemment en organisant des événements et autres, mais je n'arrive pas à me rappeler comment.

Était-ce utile?

La solution

Evénement TextChanged

à l'avenir, vous pouvez trouver tous les événements de la bibliothèque MSDN, voici le Référence de classe TextBox :

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

Autres conseils

Si vous utilisez la liaison de données, accédez aux propriétés de la zone de texte. Ouvrez (DataBindings) en haut, cliquez sur la propriété (Avancé), trois points apparaîtront (...) Cliquez sur ceux-ci. L'écran de liaison de données avancée apparaît. Pour chaque propriété de la zone de texte liée, dans votre cas Texte , vous pouvez définir le moment auquel la liaison de données, et donc la validation, devrait être effectuée par " kick in " utilisation de la liste déroulante Mode de mise à jour de la source de données . Si vous le définissez sur OnPropertyChanged , il sera réévalué au fur et à mesure que vous tapez (la valeur par défaut est OnValidation qui ne se met à jour que lorsque vous utilisez l'onglet).

Comment vos données seront-elles valides si elles ne sont pas finies? c’est-à-dire qu’un utilisateur tape un numéro et que vous essayez de le valider comme une date?

Lorsque vous liez votre zone de texte à un bindingSource, sélectionnez Options avancées et sélectionnez le type de validation
"Sur la propriété modifiée". Cela propagera vos données à votre entité à chaque pression de touche. Voici la capture d'écran

Vous devriez vérifier les événements KeyPress ou KeyDown et pas seulement votre événement TextChanged.

Voici un exemple C # direct depuis Documentation 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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top