ホームページ >バックエンド開発 >C#.Net チュートリアル >.NET Framework - Winform テクノロジのコンテナによって参照されるコンポーネントのトラップの詳細な説明

.NET Framework - Winform テクノロジのコンテナによって参照されるコンポーネントのトラップの詳細な説明

黄舟
黄舟オリジナル
2017-03-20 11:48:081480ブラウズ

.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

コンポーネントに調整したいと考えています。次のコードに示すように:

     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);                    
                }  
            }
     }
コンポーネントを別の親コンポーネントにバッチ移動するこの方法は失敗します。

adjustPanel が新しいコンポーネントを追加するたびに、this.Controls のコンポーネントが変更され、

foreach イテレーターが変更されたという例外はスローされません
これが Microsoft のバグかどうかはわかりません。 ヘルプを求めて bbs.csdn.net に投稿すると、ほとんどのユーザーが foreach トラバーサルでエラーが報告されると考えていましたが、コンパイラが例外をスローしなかったのは事実でした。コンパイラを使用して簡単なテストを再実行した結果、foreach トラバーサルではエラーが報告されませんでしたが、期待した結果が得られませんでした。



.NET Framework - Winform テクノロジのコンテナによって参照されるコンポーネントのトラップの詳細な説明
テストコードは次のとおりです。テストの目的は、2 つの Button コンポーネントを groupBox1 に移動することです。しかし、結果として、この中にはまだ button1 が存在し、button2 だけが groupBox1 に移動されています。

奇妙な点:

foreachイテレータが変更されているのに、なぜエラーが報告されないのでしょうか? ? ?

button2 だけが groupBox1 に移動されるのはなぜですか? ? ?
りー

以上が.NET Framework - Winform テクノロジのコンテナによって参照されるコンポーネントのトラップの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。