我正在使用c#和winForms创建一个应用程序,允许我将6个图片框(每个图片框都有不同的图像)叠加在一起。每个图像都有很多空白区域,因此我尝试使用透明度来允许用户打开和关闭图像。当关闭图像时,将更新所有其他图像的父/子,以使透明度起作用。
我首先创建了一个自定义类:
public class MyImageWrapper
{
public MyImageWrapper Parent { get; set; }
public PictureBox PictureBox { get; set; }
public MyImageWrapper(PictureBox i, MyImageWrapper parent = null)
{
Parent = parent;
PictureBox = i;
}
}
然后我创建了数组:
MyImageWrapper[] pictureBoxArray = new MyImageWrapper[6];
下一个代码是检查透明度是否有效的测试:
pictureBox[0] = new MyImageWrapper(pictureBox1);
pictureBox[1] = new MyImageWrapper(pictureBox2);
pictureBox1.Image = (Image.FromFile(""+ Application.StartupPath +"../../../images/imageA.png"));
pictureBox2.Image = (Image.FromFile(""+ Application.StartupPath +"../../../images/imageB.png"));
pictureBoxArray[1].Parent = pictureBoxArray[0];
不幸的是,我没有收到任何错误消息,所以它似乎正在工作。但是,当我运行程序时,图片框2不是图片框1的子项(因此透明度不起作用)
我还没有把图像设置为打开或关闭,我仍然试图理清透明度。
具体问题是这一行:
pictureBoxArray[1].Parent = pictureBoxArray[0];
测试时我用以下内容替换了以上行:
pictureBox2.Parent = pictureBox1;
这完全相同(但有效!)。但是我的程序以后需要工作的方式我不能这样做。我需要修复Array版本。
非常感谢任何帮助。
答案 0 :(得分:1)
你不需要把:
pictureBoxArray[1].PictureBox.Parent = pictureBoxArray[0].PictureBox
这两行:
pictureBoxArray[1].Parent = pictureBoxArray[0];
pictureBox2.Parent = pictureBox1;
你放的不等同。其中一个是您分配 ImageWrapper 的父级,另一个是您分配 PictureBox 的父级。
我不知道这是您提供代码的方式或程序本身的错误。