2016-04-27 10 views
0

Ich habe viele Textfelder mit denen ich verschiedene Validierungen und in einem Punkt muss ich nur einen errorProvider löschen, wenn der Code diese if-Anweisung erreicht. Was ich in das getan:Ist es möglich zu wissen, auf welchem ​​Steuerelement ein ErrorProvider angezeigt wird?

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(); 

    } 

Hinweis: Ich betreibe alle der Validierungen im Text geändert Ereignis und die „textBoxSvrcAtual“ ist der Name der Textbox ich zum errorProvide Datasource bin im Vergleich

Antwort

0

Dispose löscht kein Objekt. Die eigentliche Löschung erfolgt automatisch durch den Garbage Collector, wenn keine Variable mehr auf das Objekt verweist.

Dispose wurde entwickelt, um die Löschung eines Objekts vorzeitig zu bereinigen (z. B. nicht verwalteten Speicher freigeben, Dateideskriptoren oder Sockets schließen, ...), siehe MSDN documentation und tutorial.

Um wirklich den Fehleranbieter gelöscht (zu einem Zeitpunkt in der Zukunft), müssen Sie alle Verweise darauf auf Null (oder einen anderen ErrorProvider) setzen.

In beiden Fällen (durch Wegwerfen oder durch Setzen auf Null) können Sie den Provider danach nicht mehr ordnungsgemäß verwenden – und wenn Sie weiterhin einen Fehleranbieter für die zukünftige Validierung benötigen, müssen Sie ihn durch ersetzen eine neue Instanz Ich kann mir gut vorstellen, dass dies nicht wirklich das ist, was Sie beabsichtigt haben, möglicherweise ist es für Sie besser, den Fehler zu löschen (indem Sie SetError mit einer leeren Zeichenfolge verwenden).

Achtung: "Die DataSource ist eine Datenquelle, die Sie an ein Steuerelement anhängen können und die auf Fehler überwacht werden soll. DataSource kann auf jede Sammlung gesetzt werden, die IList implementiert." (siehe MSDN). Sie werden also nicht bekommen, was Sie erwartet haben.

Sie könnten stattdessen die Tag-Eigenschaft auf das Textfeld setzen und ep.Tag == tb (nein toString, kein Name, nur direkt die Referenz) vergleichen.