将相同的图像对象添加到集合将从第一个添加的集合中删除该图像

本文关键字:集合 图像 添加 删除 第一个 对象 | 更新日期: 2023-09-27 18:11:38

当下面的代码运行时,要么imagepanel的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);

将相同的图像对象添加到集合将从第一个添加的集合中删除该图像

因为控件不能是两个不同面板的子控件。您需要克隆映像对象。目前,您只是创建了两个具有相同对象引用的变量。

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

完整的控件布局是一个树。

每个根都有许多叶子,但是一片叶子只能有一个根。