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