2016-04-27 74 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,沒有名字,只是直接參考)。

相關問題