Como usar o provedor de erros no tempo de execução, além de associar qualquer controle para validar
-
28-09-2019 - |
Pergunta
Estou tentando criar uma validação de maneira reutilizável.
Propósito:Torne o controle de validação reutilizável.
O provedor de erros deve se associar ao controle passado dinamicamente e pode ser definido ou limpo no tempo de execução.
Quando o usuário pressiona o evento OnClick, todos os controles são validados com seus próprios provedores de erros.
public bool IsFieldEmpty(ref TextBox txtControl, Boolean SetErrorProvider,string msgToShowOnError)
{
ErrorProvider EP = new ErrorProvider();
if (txtControl.Text == string.Empty)
{
if(SetErrorProvider==true)
EP.SetError(txtControl, msgToShowOnError);
return true;
}
else
{
if(SetErrorProvider==true)
EP.Clear();
return false;
}
}
Questão:
Toda vez que a função é chamada de novo objeto ErrorProvider é criado, o que eu não quero. Todo controle não deve ter mais de 1 provedor de erros e eu devo pesquisá -lo como feito no ASP.net para procurar algum controle em uma página.
Como posso fazer isso
Solução
Na maioria dos casos, você realmente precisa apenas de uma instância do ErrorProvider em um formulário.
Por exemplo
ErrorProvider errorProvider1 = new ErrorProvider();
ou apenas arraste um da caixa de ferramentas para o formulário.
Ao chamar um ErrorProvider, você fornece o controle e a mensagem ,,
errorProvider1.SetError (dateTimePicker1, "HEY BAD DATE");
Para limpar o erro ...
errorProvider1.SetError (dateTimePicker1, "");
Portanto, uma instância do ErrorProvider é tudo o que você realmente precisa na maioria das situações.
Outras dicas
Faça em Propertyondemand como este e acesse essa propriedade toda vez que precisar de um novo ErrorProvider
private ErrorProvider _ErrorProvider = null;
//PropertyOnDemand
private ErrorProvider ErrorProviders
{
get
{
if (_ErrorProvider == null)
{
_ErrorProvider = new ErrorProvider();
return _ErrorProvider;
}
else
return _ErrorProvider;
}
}
public bool IsFieldEmpty(ref TextBox txtControl, Boolean SetErrorProvider, string msgToShowOnError)
{
if (txtControl.Text == string.Empty)
{
if (SetErrorProvider == true)
ErrorProviders.SetError(txtControl, msgToShowOnError);
return true;
}
else
{
if (SetErrorProvider == true)
ErrorProviders.Clear();
return false;
}
}