C# 如何使picturebox透明?
我正在用C#NET做一个应用程序。我有8个图片框在里面。我使用了带有透明背景的PNG图像,但在我的表单中,当它位于另一个图像上方时,它是不透明的 我正在使用Visual Studio 2012。这是我表格的截图: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,
您可以使用 按如下方式加载图像:
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);
}
}