当下面的代码运行时,anyImagePanel在其Control集合中有一个控件,而orImagePanel的Control集合为空。我意识到当我添加到一个集合时,另一个集合被清空。有谁知道为什么?
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);
答案 0 :(得分:1)
因为Control不能是两个不同Panel的Child。您需要克隆图像对象。目前,您只需使用相同的对象引用创建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);
会奏效。您还可以在imageOff
http://msdn.microsoft.com/de-de/library/system.drawing.image.clone.aspx
编辑:发表评论:
每个control
都有一个controls
- 集合,但只有一个单一的父属性。使用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是一棵树。每个根都有很多叶子,但叶子只能有一个根。