.net (C#) WinForm 開発、ビジュアルデザインなので、必要なコンポーネントをデザインインターフェイスに手動で直接追加できます。プロパティ設定などを含むこのコンポーネントを自動的に初期化します。 InitilizeComponent() を実行すると、このコンポーネントが対応する親コンポーネントに追加されます。これらはすべて .net によって自動的に行われます。 ただし、シナリオによっては、コンポーネントが属する親コンテナを変更するコードを手動で記述する必要があります。たとえば、一部のコンポーネントはもともと親コンテナ A に属していましたが、これらのコンポーネントを親コンテナ B に調整したいとします。このとき、興味深い問題が発生します。
次の 3 つのコンポーネントは元々この中にありました:
this.Controls.Add(this.operRateUC); this.Controls.Add(this.personProductUg); this.Controls.Add(this.procedingPanel);
はこれら 3 つのコンポーネントを
adjustPanel コンポーネントに調整したいと考えています。次のコードに示すように: foreach イテレーターが変更されたという例外はスローされません
button2 だけが groupBox1 に移動されるのはなぜですか? ? ? 以上が.NET Framework - Winform テクノロジのコンテナによって参照されるコンポーネントのトラップの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。 private void moveToAdjustPanel()
{ //AdjustablePanel是一个Control类
AdjustablePanel adjustPanel = new AdjustablePanel();
foreach (Control ultraControl in this.Controls)
{ if (ultraControl.GetType() == typeof(UltraGrid) ||
ultraControl.GetType() == typeof(UltraChart) ||
ultraControl.GetType() == typeof(Panel))
{
adjustPanel.Controls.Add(ultraControl);
}
}
}
。 これが Microsoft のバグかどうかはわかりません。 ヘルプを求めて bbs.csdn.net に投稿すると、ほとんどのユーザーが foreach トラバーサルでエラーが報告されると考えていましたが、コンパイラが例外をスローしなかったのは事実でした。コンパイラを使用して簡単なテストを再実行した結果、foreach トラバーサルではエラーが報告されませんでしたが、期待した結果が得られませんでした。
テストコードは次のとおりです。テストの目的は、2 つの Button コンポーネントを groupBox1 に移動することです。しかし、結果として、この中にはまだ button1 が存在し、button2 だけが groupBox1 に移動されています。
りー