6

各コントロールが部屋を表すフロー レイアウト パネルを作成しています。パネル内のすべてのコントロールを削除し、新しいコントロールを追加して、すべての部屋をリロードしたいと考えています。

私が使用した:

foreach(Control control in flowLayoutPanel.Controls) 
{
    flowLayoutPanel.Controls.Remove(control);
    control.Dispose(); 
}

しかし、一部のコントロールを削除できませんでした。

インターネットで解決策を見つけようとしましたが、どこにも見つかりませんでした。

どんな体でも助けてくれる?

4

4 に答える 4

12

これは、反復している同じリストからコントロールを削除しているためです。このようなことを試してください

List<Control> listControls = flowLayoutPanel.Controls.ToList();

foreach (Control control in listControls)
{
    flowLayoutPanel.Controls.Remove(control);
    control.Dispose();
}

そうではないかもしれませんが、アイデアはわかります。リストでそれらを取得してから、それらを削除します。

于 2012-10-01T15:25:15.173 に答える
6

注:これは前のコメントに基づいた実用的なソリューションなので、その人の功績です:)

これは私のために働いた:

List<Control> listControls = new List<Control>();

foreach (Control control in flowLayoutPanel1.Controls)
{
     listControls.Add(control);
}

foreach (Control control in listControls)
{
     flowLayoutPanel1.Controls.Remove(control);
     control.Dispose();
}

おそらくより良い/よりクリーンな方法がありますが、機能します。

于 2015-10-19T09:49:53.220 に答える
0

簡単で迅速な解決策を探している場合。ここにあります。

while (flowLayoutPanel.Controls.Count > 0) flowLayoutPanel.Controls.RemoveAt(0);
于 2016-09-19T09:22:32.270 に答える