60

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

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

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

4

8 に答える 8

79

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

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

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

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

Disposed += OnDispose;
于 2008-12-01T04:03:48.203 に答える
55

そんな時は生成Disposeしたメソッドをメインファイルに移動して拡張します。Visual Studio はこれを尊重します。

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

于 2008-10-03T16:12:16.960 に答える
8

この場合、コードジェネレーターはあなたのコードを尊重すると思います。コードビハインドに入れても安全です。

于 2008-10-03T16:07:59.607 に答える
6

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

于 2008-10-03T16:08:43.270 に答える
2

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

于 2008-10-03T16:09:23.427 に答える
2

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

ベースメソッドへの呼び出しを渡すだけでなく、機能的に破棄することを確認してください。そうしないと、完全に実装しない限り、機能が壊れます

于 2009-04-22T10:35:27.240 に答える
-2

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

于 2012-05-25T14:48:14.910 に答える