是否可以知道ErrorProvider正在显示哪个控件?

时间:2016-04-27 09:54:09

标签: c# error-handling datasource errorprovider

我有很多文本框,我可以使用它进行各种验证,如果代码到达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

1 个答案:

答案 0 :(得分:0)

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

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

要真正删除错误提供程序(在将来的某个地方),您必须将的所有引用设置为null(或其他ErrorProvider)。

无论哪种方式(通过处置或设置为null),您之后都无法再适当地使用提供程序 - 如果您仍需要错误提供程序以供将来验证,则必须更换它用一个新实例。我可以想象这不是你想要的,也许你只是为了清除错误(使用带有空字符串的SetError)更合适。

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

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