2016-04-27 73 views
0

我有很多文本框,我做了各种验证,在一点上,我只需要删除一个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”是文本框的,我比较了 errorProvide数据源名称

回答

0

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

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

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

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

注意:“DataSource的是,你可以连接到一个控制和要监视的错误数据源数据源可以被设置为实现IList任何集合。” (见MSDN)。所以你不会得到你所期望的。

您可以改为设置Tag属性的文本框,并比较ep.Tag == tb(没有的toString,没有名字,只是直接参考)。

相关问题