使用图片框之间的图像透明度存储为数组

时间:2014-01-12 19:36:24

标签: c# arrays winforms transparency

我正在使用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版本。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你不需要把:

pictureBoxArray[1].PictureBox.Parent = pictureBoxArray[0].PictureBox

这两行:

pictureBoxArray[1].Parent = pictureBoxArray[0];

pictureBox2.Parent = pictureBox1;

你放的不等同。其中一个是您分配 ImageWrapper 的父级,另一个是您分配 PictureBox 的父级。

我不知道这是您提供代码的方式或程序本身的错误。