我正在使用C# .NET制作一个应用程序。其中有8个picture box,使用了具有透明背景的PNG图像。但是在我的表单上,当它与另一张图片重叠时,它并不是透明的。
我正在使用Visual Studio 2012。这是我的表单截图:
我正在使用C# .NET制作一个应用程序。其中有8个picture box,使用了具有透明背景的PNG图像。但是在我的表单上,当它与另一张图片重叠时,它并不是透明的。
我正在使用Visual Studio 2012。这是我的表单截图:
一种实现此操作的方法是将重叠的图片框的父级更改为它搭在上面的 PictureBox。由于 Visual Studio 设计器不允许您向 PictureBox 添加另一个 PictureBox,因此这需要在您的代码(Form1.cs)中并且在初始化函数内完成:
public Form1()
{
InitializeComponent();
pictureBox7.Controls.Add(pictureBox8);
pictureBox8.Location = new Point(0, 0);
pictureBox8.BackColor = Color.Transparent;
}
只需将图片框的名称更改为您需要的任何内容。这应该返回:
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();
ImageList
。ImageList imgList = new ImageList;
imgList.TransparentColor = Color.White;
像这样加载图片:
picturebox.Image = imgList.Images[img_index];
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);
}
}
我曾经遇到过类似的问题。 你不能像本页面顶部显示的图片那样轻松地制作透明的picturebox,因为.NET Framework和VS .NET对象是通过继承创建的!(使用Parent属性)。
我通过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
}
您可以将 PictureBox
的 BackColor
属性设置为 Transparent
PictureBox
来说很困难。即使是另一个控件的解决方案,在运行时移动对象也不是很好(因为会出现闪烁)。 - King King