C#UserControlにDispose機能を追加するにはどうすればよいですか?
-
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イベントがあります