2016-04-27 28 views
0

私は様々なバリデーションを行うためのテキストボックスがたくさんあります。ある時点で、コードがif文に達するとerrorProviderを削除するだけです。 私はこれでやっていること: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データソースと比較しています、テキストボックス(TextBox)コントロールの名前です。

答えて

0

処分は、オブジェクトを削除しません。実際の削除は、オブジェクトを参照する変数がなくなった場合にガベージコレクタによって自動的に行われます。

Disposeは、オブジェクトの実際の削除(たとえば、アンマネージメモリの解放、ファイルディスクリプタまたはソケットのクローズなど)を早期に行うように設計されています(MSDN documentationおよびtutorialを参照)。

エラープロバイダを実際に削除するには、すべての参照をnull(または別のErrorProvider)に設定する必要があります。

いずれにしても(廃棄またはnullに設定することにより)、プロバイダを適切に使用することができなくなります。–今後の検証のためにエラープロバイダが必要な場合は、新しいインスタンス。私は非常によくこれはあなたが意図したものではないことを想像することができます。おそらく、単に空の文字列でSetErrorを使用してエラーをクリアする方が適切です。

注意:「DataSourceは、コントロールに添付してエラーを監視するデータソースです。DataSourceは、IListを実装するコレクションに設定できます。」 (MSDN参照)。だからあなたはあなたが期待したものを手に入れません。

代わりに、Tagプロパティをテキストボックスに設定し、ep.Tag == tb(toString、名前なし、直接参照)を比較することができます。

関連する問題