38

我正在用 C# .NET 制作一个应用程序。我有8个图片框。我使用了具有透明背景的 PNG 图像,但在我的表单中,当它出现在另一个图像上方时,它是不透明的。

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

表格截图

4

7 回答 7

74

一种方法是将重叠图片框的父级更改为重叠的图片框。由于 Visual Studio 设计器不允许您将 PictureBox 添加到 PictureBox,因此必须在您的代码 (Form1.cs) 和 Intializing 函数中完成:

public Form1()
{
    InitializeComponent();
    pictureBox7.Controls.Add(pictureBox8);
    pictureBox8.Location = new Point(0, 0);
    pictureBox8.BackColor = Color.Transparent;
}

只需将图片框名称更改为您需要的名称。这应该返回:

在此处输入图像描述

于 2013-11-18T23:59:18.693 回答
6

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

        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();

在此处输入图像描述

于 2016-06-08T16:39:22.910 回答
1

尝试使用ImageList

ImageList imgList = new ImageList;

imgList.TransparentColor = Color.White;

像这样加载图像:

picturebox.Image = imgList.Images[img_index];
于 2013-11-11T15:56:20.323 回答
0

我遇到过类似的问题。您不能轻易地制作出如本页顶部显示的图片那样的透明图片框,因为 .NET Framework 和 VS .NET 对象是由 INHERITANCE 创建的!(使用父属性)。

我通过下面的代码解决了这个问题,我删除了背景,如果和RectangleShape之间的区别不重要也不重要,你可以轻松使用。PictureBoxRectangleShapeRectangleShape

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 
}
于 2014-02-09T16:23:06.427 回答
0

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

于 2014-09-18T10:18:24.783 回答
0

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

    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);
            }
    }
于 2021-01-29T14:20:13.827 回答
-2

您可以将属性设置PictureBox BackColorTransparent

于 2013-11-11T15:45:17.223 回答