Adsense_top

2014年8月14日木曜日

C# 動的に配置したコントロールの削除

動的にコントロールの追加と削除を繰り返していたら、例外が発生したので調べてみました。

同じ事をしないようにメモっておきます。

まず表示された例外は以下の様なものでした。
------------
型 'System.ComponentModel.Win32Exception' のハンドルされていない例外が System.Windows.Forms.dll で発生しました

追加情報:ウィンドウのハンドルを作成中にエラーが発生しました。
------------

削除は以下のように書いていました。

panel1.Controls.Clear();

この適当な書き方が悪かったようで、正しくコントロールによって使用されているリソースを開放する必要がありました。

正しくは以下のように書くべきでした。

for(int i = panel1.Controls.Count - 1; 0 <= i; i--) {
    panel1.Controls[i].Dispose();
}

※コレクションの後ろ側から開放している点が重要

結構な回数繰り返さないと発生しないので、例外も発生せず問題化していないプログラムも多いかも・・


2 件のコメント:

  1. ありがとうございます!!!

    返信削除
  2. Clearだけで、Win32Exceptionが発生していたので助かりました。
    ありがとうございます。

    返信削除