C#UserControlにDispose機能を追加するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/167602

  •  03-07-2019
  •  | 
  •  

質問

UserControlを実装するクラスがあります。 .NET 2005では、次のような部分クラスファイルMyClass.Designer.csにDisposeメソッドが自動的に作成されます。

  protected override void Dispose(bool disposing)
  {
     if (disposing && (components != null))
     {
        components.Dispose();
     }
     base.Dispose(disposing);
  }

独自の破棄機能を追加する場合、どこに配置しますか?このファイルが生成されるので、ここにコードを追加したくないし、吹き飛ばされる危険もありません。

役に立ちましたか?

解決

このような場合、生成された Dispose メソッドをメインファイルに移動して拡張します。 Visual Studioはこれを尊重します。

別のアプローチは、部分的な方法を使用することです(C#3.0)。

他のヒント

すべての Component クラスは、 Disposed イベントを実装します。そのイベントのイベントハンドラーを追加して、そこにあるものをクリーンアップできます。

たとえば、 UserControl に次のメソッドを追加できます。

private void OnDispose(object sender, EventArgs e)
{
    // do stuff on dispose
}

そしてコンストラクター(または Load イベントハンドラー)で次の行を追加します:

Disposed += OnDispose;

この場合、コードジェネレーターはコードを尊重します。分離コードに入れるのは安全なはずです。

VS 2005(および2008)では、 Dispose メソッドを更新できます。デザイナーからコントロールを編集しても削除されません。

必要に応じて、.designer.csファイルからメインの.csファイルに移動できます。既に述べたように、上書きされません。

ユーザーコントロールが継承するコンポーネントクラスのpublic void Dispose()メソッドをオーバーロードする必要があります。

呼び出しを基本メソッドに渡し、機能的に破棄するか、完全に実装しない限り機能を破壊することを確認してください

最もクリーンな方法は、コントロールに独自のDisposed()イベントをサブスクライブさせ、そこでクリーンアップすることだと思います。

クリーンアップに使用できるUserControlのUnloadedイベントがあります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top