2016-04-27 2 views
0

J'ai beaucoup de zones de texte avec lesquelles je fais diverses validations et en un point j'ai juste besoin de supprimer un errorProvider si le code atteint cette instruction if. Ce que je l'ai fait dans ce:Est-il possible de savoir sur quel contrôle un ErrorProvider est affiché?

if (errorProviderSame1.DataSource.ToString() != null && errorProviderSame2.DataSource.ToString() != null) 
    { 

    if (errorProviderSame2.DataSource.ToString() == textBoxSvrcAtual.Name) 
     errorProviderSame2.Dispose(); 
    if (errorProviderSame1.DataSource.ToString() == textBoxSvrcAtual.Name) 
     errorProviderSame1.Dispose(); 

    } 

Note: Je lance toutes les validations en cas changé de texte et le « textBoxSvrcAtual » est le nom de la zone de texte je compare au errorProvide DataSource

Répondre

0

Dispose ne supprime pas un objet. La suppression réelle est faite automatiquement par le garbage collector, s'il n'y a plus de variable référençant l'objet. Dispose est conçu pour effectuer un nettoyage prématuré de la suppression réelle d'un objet (par exemple libérer de la mémoire non gérée, fermer des descripteurs de fichiers ou des sockets, ...), voir MSDN documentation et tutorial.

Pour vraiment obtenir le fournisseur d'erreur supprimé (à un point quelque part dans le futur), vous devez définir toutes les références à null (ou un autre ErrorProvider).

De toute façon (en éliminant ou en définissant à null), vous ne pourrez plus utiliser le fournisseur plus après – et si vous avez encore besoin d'un fournisseur d'erreur pour validation future, vous devrez le remplacer par une nouvelle instance. Je peux très bien imaginer que ce n'est pas vraiment ce que vous vouliez, il est peut-être plus approprié pour vous d'effacer l'erreur (en utilisant SetError avec une chaîne vide).

Avertissement: "La source de données est une source de données que vous pouvez attacher à un contrôle et que vous souhaitez surveiller en cas d'erreurs DataSource peut être définie sur n'importe quelle collection qui implémente IList." (Voir MSDN). Donc vous n'obtiendrez pas ce que vous attendiez.

Vous pouvez à la place définir la propriété Tag à la zone de texte et comparer ep.Tag == tb (pas toString, pas de nom, juste directement la référence).