0

以下のコードを実行すると、いずれかの ImagePanel の Control コレクションに 1 つのコントロールがあり、orImagePanel の Control コレクションは空です。私が気付いたのは、1 つのコレクションに追加すると、もう 1 つのコレクションが空になるということです。誰かが理由を知っていますか?

Image imageOff = new Image();
imageOff.Attributes["style"] = "display:inline-Block; overflow:hidden;";
imageOff.ImageUrl = "/Off.png"; 

Image etherImage = imageOff;
Image orImage = imageOff;

orImagePanel.Controls.Add(orImage);
eitherImagePanel.Controls.Add(etherImage);
4

1 に答える 1

1

コントロールは 2 つの異なるパネルの子になることはできないためです。画像オブジェクトのクローンを作成する必要があります。現在、同じオブジェクト参照を持つ 2 つの変数を作成しています。

Image etherImage = new Image();
etherImage .Attributes["style"] = "display:inline-Block; overflow:hidden;";
etherImage .ImageUrl = "/images/webdataentry/Off.png"; 

Image orImage = new Image(); // New Object! thats the key.
orImage .Attributes["style"] = "display:inline-Block; overflow:hidden;";
orImage .ImageUrl = "/images/webdataentry/Off.png"; 

orImagePanel.Controls.Add(orImage);
eitherImagePanel.Controls.Add(etherImage);

動作します。clone メソッドを使用することもできますimageOff

http://msdn.microsoft.com/de-de/library/system.drawing.image.clone.aspx

編集:あなたのコメントへ:それぞれcontrolcontrols-Collection がありますが、SINGLE Parent-Attribute だけです。使用時a.controls.add(b)b.setParent(a)呼び出されます。これは1:n関係であるため、コントロールを別のパネルに追加すると、setParent再度呼び出されて最初の親がオーバーライドされます。

http://msdn.microsoft.com/de-de/library/system.windows.forms.control.parent.aspx

完全な Control-Layout はツリーです。各根には多くの葉がありますが、葉には根が 1 つしかありません。

于 2013-05-01T19:28:30.420 に答える