C# 如何使picturebox透明?

C# 如何使picturebox透明?,c#,winforms,picturebox,C#,Winforms,Picturebox,我正在用C#NET做一个应用程序。我有8个图片框在里面。我使用了带有透明背景的PNG图像,但在我的表单中,当它位于另一个图像上方时,它是不透明的 我正在使用Visual Studio 2012。这是我表格的截图: 您可以使用 按如下方式加载图像: picturebox.Image = imgList.Images[img_index]; 一种方法是将重叠图片框的父对象更改为其重叠的图片框。由于Visual Studio designer不允许您将PictureBox添加到PictureBox,

我正在用C#NET做一个应用程序。我有8个图片框在里面。我使用了带有透明背景的PNG图像,但在我的表单中,当它位于另一个图像上方时,它是不透明的

我正在使用Visual Studio 2012。这是我表格的截图:


您可以使用

按如下方式加载图像:

picturebox.Image = imgList.Images[img_index];

一种方法是将重叠图片框的父对象更改为其重叠的图片框。由于Visual Studio designer不允许您将PictureBox添加到PictureBox,因此必须在代码(Form1.cs)和初始化函数中执行此操作:

public Form1()
{
    InitializeComponent();
    pictureBox7.Controls.Add(pictureBox8);
    pictureBox8.Location = new Point(0, 0);
    pictureBox8.BackColor = Color.Transparent;
}
只要将图片框名称更改为您需要的名称即可。这应返回:


我也遇到过类似的问题。 您无法轻松制作透明的picturebox,如本页顶部显示的图片,因为.NET Framework和VS.NET对象是通过继承创建的!(使用父属性)

我通过
RectangleShape
解决了这个问题,并用下面的代码删除了背景, 如果
PictureBox
RectangleShape
之间的差异不重要,也不重要,您可以轻松使用
RectangleShape

private void CreateBox(int X, int Y, int ObjectType)
{
    ShapeContainer canvas = new ShapeContainer();
    RectangleShape box = new RectangleShape();
    box.Parent = canvas;
    box.Size = new System.Drawing.Size(100, 90);
    box.Location = new System.Drawing.Point(X, Y);
    box.Name = "Box" + ObjectType.ToString();
    box.BackColor = Color.Transparent;
    box.BorderColor = Color.Transparent;
    box.BackgroundImage = img.Images[ObjectType];// Load from imageBox Or any resource
    box.BackgroundImageLayout = ImageLayout.Stretch;
    box.BorderWidth = 0;
    canvas.Controls.Add(box);   // For feature use 
}

一个快速的解决方案是为image1设置图像属性,并将backgroundimage属性设置为imag2,唯一的不便之处在于,图片框中有两个图像,但您可以将背景属性更改为平铺、拉伸等。请确保背景色是透明的。
希望这有帮助

GameBoard是DataGridView类型的控件; 图像应为PNG类型,具有透明的alpha通道背景

        Image test = Properties.Resources.checker_black;
        PictureBox b = new PictureBox();
        b.Parent = GameBoard;
        b.Image = test;
        b.Width = test.Width*2;
        b.Height = test.Height*2;
        b.Location = new Point(0, 90);
        b.BackColor = Color.Transparent;
        b.BringToFront();

只需使用Form Paint方法并在其上绘制每个图片框,它允许透明:

    private void frmGame_Paint(object sender, PaintEventArgs e)
    {
        DoubleBuffered = true;
        for (int i = 0; i < Controls.Count; i++)
            if (Controls[i].GetType() == typeof(PictureBox))
            {
                var p = Controls[i] as PictureBox;
                p.Visible = false;
                e.Graphics.DrawImage(p.Image, p.Left, p.Top, p.Width, p.Height);
            }
    }
private void frmGame\u Paint(对象发送方,PaintEventArgs e)
{
双缓冲=真;
for(int i=0;i
查看可能的副本,有一个使用普通控制面板的解决方案。。。我们可以自己绘制图像,但是对于
PictureBox
来说很难。如果要在运行时移动对象(因为闪烁),即使是另一个控件的解决方案也不是很好。我知道这是一个老问题,但为什么不使用一个picturebox,然后获取图形对象,并使用Graphics.DrawImage将所有图像绘制到picturebox图像,对于你必须绘制和移动的每一幅图像,你不需要在表单上有一个picturebox对象吗?是的,但这只适用于表单背景。我这样做了,但正如你在截图中看到的,当图片框重叠时,它不起作用。我使用的是两张不同尺寸的图片。当我将一个图像设置为另一个的父图像时,只会显示重叠部分,并且父图像边界之外的任何内容都会被截断。有什么解决办法吗?@valsidalv很抱歉,我已经有一段时间没有使用Visual Studio了,但根据我的记忆,是否可以只放大父图像(不拉伸等),这样它也可以显示所有的子图像?我也这么想。。。我最终按照本教程创建了一个包含我的图像的自定义控件,试图做到这一点,但是,我无法使矩形形状显示在其他控件的顶部(即,它似乎位于其他控件的下方,因此不会显示在窗体上)
    private void frmGame_Paint(object sender, PaintEventArgs e)
    {
        DoubleBuffered = true;
        for (int i = 0; i < Controls.Count; i++)
            if (Controls[i].GetType() == typeof(PictureBox))
            {
                var p = Controls[i] as PictureBox;
                p.Visible = false;
                e.Graphics.DrawImage(p.Image, p.Left, p.Top, p.Width, p.Height);
            }
    }