Pergunta

Existe uma maneira de desativar a validação do ErrorProvider elegantemente ao clicar no botão Cancelar para descartar um WinForm? A validação sempre acontece quando a caixa de texto perde o foco, e eu não quero validar quando o usuário clique no botão Cancelar, é um pouco bobo validar quando o usuário clicando em cancelar.

Foi útil?

Solução

Depois de pesquisar no Google, encontrei a resposta, basta definir a propriedade Causa Validação do botão Cancelar como false. é isso.

Outras dicas

Acabei de encontrar isso sozinho e configurar CauseValidation = false é apenas uma solução parcial.

Quando você define o Form.CancelButton Para o botão Cancelar, a tecla Escape deve invocar esse botão. No entanto, a validação ainda é executada em resposta à chave de escape, mesmo que definamos CauseValidation = false.

Para consertar, adicione o seguinte hack:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    // Although we set CausesValidation = false for the Cancel button,
    //  the Escape key fails to cancel due to validation failure. The
    //  Form.CancelButton property should invoke the validation-free
    //  cancel button, but doesn't. Force the issue here.
    if (keyData == Keys.Escape)
    {
        DialogResult = DialogResult.Cancel;
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top