0

Form のコントロールを C# のパネルにロードして、パネルがフォームと同じコンポーネントを表示するようにします。私はこのコードを試しました:

foreach (Control control in (new Form2()).Controls)
{
    panels[panelsCounter].Controls.Add(control);
}

しかし、問題は、プログラムを実行しているときに、最後に追加したタイプのコントロールのみをロードすることです (たとえば、ラベルを追加し、フォームにボタンを追加した場合、表示されるのはボタンですが、別のラベルを追加すると、両方のラベルが表示されますが、ボタンは表示されません)。

私を助けてください。

4

2 に答える 2

2

これは古典的なバグです。反復中にコレクションを変更しています。副作用は、他のコントロールだけがパネルに移動することです。これを慎重に行う必要があります。問題を回避するには、コレクションを逆方向に繰り返します。

var formObj = new Form2();    //???
for (int ix = formObj.Controls.Count-1; ix >= 0; --ix) {
    panels[panelsCounter].Controls.Add(formObj.Controls[ix]);
}
于 2013-10-10T14:29:26.403 に答える
0

コントロールは、複数回表示されるようには設計されていません。コントロールを複数のフォームに追加したり、フォームに同じコントロールを複数回追加したりすることはできません。それらは単にそれをサポートするように設計されていません。

各コントロールを調べて、同じタイプの新しいコントロールを作成し、それらのプロパティの値 (または少なくともパブリックにアクセスできるもの) をコピーして、それらを効果的に複製することもできますが、別のコントロールであることが重要です。新しいパネルに追加します。

于 2013-10-10T14:24:58.210 に答える