[英]How to make more than 1 transparent picturebox layer in C#?
我正在使用 3 个图片框。 1 作为背景 & 2 作为背景上的透明层。 所有尺寸相同。 第 1 层用于绘制线条,第 2 层用于绘制形状。 我正在使用选项卡控件来控制哪个图层可见,哪个图层隐藏。 但不知何故,即使它们都是透明的,也不能同时使两个图层可见。
我正在使用的代码
public Form1()
{
InitializeComponent();
bgLayer.Image = bmp;
bgLayer.Controls.Add(lineLayer);
bgLayer.Controls.Add(squareLayer);
lineLayer.Location = new Point(0, 0);
squareLayer.Location = new Point(0, 0);
lineLayer.BackColor = Color.Transparent;
squareLayer.BackColor = Color.Transparent;
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl1.SelectedIndex == 0)
{
lineLayer.Visible = true;
squareLayer.Visible = true;
lineLayer.Enabled = false;
squareLayer.Enabled = false;
}
else if (tabControl1.SelectedIndex == 1)
{
lineLayer.Visible = true;
squareLayer.Visible = false;
lineLayer.Enabled = true;
squareLayer.Enabled = false;
}
else if (tabControl1.SelectedIndex == 2)
{
lineLayer.Visible = false;
squareLayer.Visible = true;
lineLayer.Enabled = false;
squareLayer.Enabled = true;
}
}
有谁知道如何使两个透明层同时可见? 选项卡控件 0 都是可见的,1 仅是picturebox1,2 仅是picturebox3。 选项卡控件 1 和 2 工作正常,但 0 仅显示图层 picturebox1。
尝试添加lineLayer.Controls.Add(squareLayer);
但它使程序缓冲区在执行时不会停止
使用 WinForm 的PictureBox
是不可能的:WinForms 不支持 alpha 混合(甚至索引透明)控件的 z 排序,您可以使用 WPF 或 HTML+CSS 的方式。 它唯一允许控件在绘制自己之前重新呈现其父Control
的背景(请注意,父控件也必须剪辑其子控件,因为 WinForms 中的所有Control
子类都封装了 User32 hWnd。唯一的解决方法是创建一个没有非客户区的新顶级窗口,这可能很痛苦)。
唯一的解决方法是使用一个自定义绘制的控件来重绘其覆盖的OnPaint
事件内的堆叠图像,或者在每次希望外观更改并使用单个PictureBox
时重新生成内存中的Bitmap
请参见此处: 使重叠PictureBox
透明在 C#.net 中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.