我有许多文本框可用来进行各种验证,并且有一点我只需要在代码到达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();
}
最佳答案
处置不删除对象。如果不再有引用该对象的变量,则实际删除由垃圾回收器自动完成。
Dispose旨在对对象的实际删除进行过早清理(例如,释放非托管内存,关闭文件描述符或套接字等),请参见MSDN documentation和tutorial。
要真正删除错误提供程序(在将来某个时候),您必须将对其的所有引用都设置为null(或另一个ErrorProvider)。
无论哪种方式(通过处理或设置为null),之后都将无法再适当使用提供程序–如果将来仍需要错误提供程序进行验证,则必须将其替换为新实例。我可以很好地想象这不是您想要的,可能更适合您清除错误(将SetError与空字符串一起使用)。
注意:“DataSource是可以附加到控件并且要监视错误的数据源。可以将DataSource设置为实现IList的任何集合。” (请参阅MSDN)。因此,您将无法获得预期的结果。
您可以将Tag属性设置为文本框,然后比较ep.Tag == tb
(无toString,无名称,仅直接引用)。