VS 2013でプログラムによってフォームに配置するいくつかのユーザーコントロールを作成しました。これらのコントロールは、時々削除して再作成する必要があります。コントロールを2つの異なる方法で削除してみました。1つは機能し、もう1つは機能しません。なぜそれが機能しないのかについて誰かが洞察を提供してくれることを願っています。
このバージョンは機能しません(4つのコントロールのうち2つしか見つかりません):
// delete user controls from the front panel
foreach (UserControl ctrl in this.Controls.OfType<StationControl>())
{
this.Controls.Remove(ctrl);
}
このバージョンは機能します(4つのコントロールのうち4つが見つかります):
// delete user controls from the front panel
var uc_list = this.Controls.OfType<StationControl>().ToArray();
foreach (var ctrl in uc_list)
{
this.Controls.Remove(ctrl);
}
タイプに一致するユーザーコントロールの数を問題なくカウントできます(例:
int controlCount = this.Controls.OfType<StationControl>().Count()
では、なぜ最初のforeachステートメントが完全に機能しないのでしょうか。
これは機能しますか?
foreach (UserControl ctrl in this.Controls.OfType<StationControl>())
{
ctrl.Dispose();
this.Controls.Remove(ctrl);
}
これがお役に立てば幸いです。
編集:
上記は正しく機能しません。これが機能するアプローチです。
while (this.Controls.OfType<StationControl>().Count() > 0)
{
UserControl ctrl = this.Controls.OfType<StationControl>().First();
ctrl.Dispose();
this.Controls.Remove(ctrl);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加