C# 動的に読み込んだコントロールの削除
C#にて動的に読み込んだ不特定多数のコントロールを削除する正しい手順は
どのような物でしょうか。
MSDNによるとコンテナに読み込んだコントロールをFlowLayoutPanel.Clear()で
クリアするとメモリリークにつながるため、Dispose()をしろとあります。
動的に作成したコントロールが不特定多数のため、Foreach文をつかい
FlowLayoutPanel.Controlsで確認できた物をDispose()しましたが、偶数indexの
コントロールしか削除されませんでした。
まぁ、これはなんとなく分かるのですが、では、正しくすべてのコントロールを
削除するにはどうしたら良いのか分かりません。
ご教示のほど、よろしくお願いいたします。
確認コード(空のForm1_Loadに貼り付け)
※現象を再現させるためのサンプルで意味はありません
// コントロール配置用のコンテナ
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.Dock = System.Windows.Forms.DockStyle.Fill;
this.Controls.Add(panel);
// テストコントロール追加ボタン
Button create = new Button();
create.Size = new Size(50, 25);
create.Text = "create";
create.Click += (ss, ee) =>
{
for (int i = 0; i < 100; i++)
{
TextBox text = new TextBox();
text.Size = new Size(50, 25);
text.Text = i.ToString();
panel.Controls.Add(text);
}
};
panel.Controls.Add(create);
// コントロール削除ボタン
Button delete = new Button();
delete.Size = new Size(50, 25);
delete.Text = "delete";
delete.Click += (ss, ee) =>
{
foreach (var control in panel.Controls)
{
if (control is TextBox)
{
((TextBox)control).Dispose();
}
}
};
panel.Controls.Add(delete);
お礼
ありがとうございます ご指導の通りに修正いたしましたら一発OKでした おかげさまで助かりました ありがとうございました