パネルからコントロールを正しく削除する方法

動的にコントロールの追加と削除を繰り返していたら、「ウィンドウのハンドルを作成中にエラーが発生しました。」という例外が発生した。

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

panel1.Controls.Clear();

コントロールのハンドルを解放するには以下のように書くべき。

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

※後ろから解放している点が重要らしい。