1

我有许多文本框,我用它们进行各种验证,如果代码到达 if 语句,我只需要删除一个 errorProvider。我在这方面做了什么:

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();

   }

注意:我在文本更改事件中运行所有验证,“textBoxSvrcAtual”是我要与 errorProvide DataSource 进行比较的文本框的名称

4

1 回答 1

0

Dispose 不会删除对象。如果不再有变量引用该对象,则实际删除由垃圾收集器自动完成。

Dispose 旨在对对象的实际删除进行一些清理(例如释放非托管内存、关闭文件描述符或套接字,...),请参阅 MSDN文档教程

要真正删除错误提供程序(在将来的某个时间点),您必须将对它的所有引用设置为 null(或另一个 ErrorProvider)。

无论哪种方式(通过处置或设置为 null),之后您将无法再适当地使用提供程序 - 如果您仍然需要错误提供程序以供将来验证,则必须将其替换为新实例。我可以很好地想象这并不是您真正想要的,可能更适合您清除错误(使用带有空字符串的 SetError )。

注意:“DataSource 是一个数据源,您可以将其附加到控件并监视错误。DataSource 可以设置为实现 IList 的任何集合。” (见MSDN)。所以你不会得到你所期望的。

您可以改为将 Tag 属性设置为文本框并进行比较ep.Tag == tb(没有 toString,没有名称,只是直接引用)。

于 2016-04-27T10:21:40.713 回答