Pergunta

Eu tenho implementado regras de validação em uma caixa de texto no meu WinForm e funciona bem. No entanto, verifica a validação só quando eu guia fora do campo. Eu gostaria que verificar assim que nada é digitado na caixa e toda vez que as alterações de conteúdo. Também eu gostaria-lo para verificar a validação assim que o WinForm abre.

Lembro-me de fazer isto muito recentemente, definindo alguns eventos e outras coisas, mas eu não consigo lembrar como.

Foi útil?

Solução

evento TextChanged

no futuro, você pode encontrar todos os eventos da biblioteca MSDN, aqui está o TextBox referência de classe :

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

Outras dicas

Se você estiver usando ligação de dados, vá para as Propriedades da caixa de texto. Abertos (DataBindings) na parte superior, clique na propriedade (avançado), três pontos aparecerá (...) Clique sobre aqueles. Aparece a tela de ligação de dados avançados. Para cada propriedade da caixa de texto que está vinculado, no seu caso Text, você pode definir quando a ligação de dados e, assim, a validação, deve "chute no" usando o Data Source Update mode combobox. Se você configurá-lo para OnPropertyChanged, ele irá reavaliar enquanto você digita (o padrão é OnValidation que atualiza apenas como você guia).

Como é que os seus dados ser válida se for não terminou? ou seja, um usuário digita um número e você tentar e validá-lo como uma data?

Ao vincular sua caixa de texto para um BindingSource ir para Avançado e selecione tipo de validação
"Em propriedade alterada". Isto irá propagar seus dados para sua entidade em cada tecla. Aqui está a captura de tela

Você deve verificar em eventos KeyPress ou KeyDown e não apenas o seu evento TextChanged.

Aqui é um # Exemplo C direto do MSDN documentação :

// 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top