我想我必须遗漏一些明显的东西,但经过几个小时的搜索后我无法找到它。是否无法使用PictureBox或其他控件来包含具有部分透明/ alpha混合像素的图像,并将其放在另一个图像上并使混合基于其下的图像?
例如,这会产生我想要的结果:
这不是:
将PictureBox放在表单上并将其设置为PNG。
在表单上放置另一个PictureBox并将其设置为PNG。
将第二个图片框放在第一个图片框上。
...即使第二个图片框只是空白且背景颜色为透明,它仍然会覆盖下面的图片。
我读过这个源于所有winform控件的窗口,所以它们本质上并不透明。
...但是即使是我正在迁移的15年历史的平台,Borland的VCL也有几个没有窗口的控件,因此很难对winforms进行成像并不至少有一些简单的解决方案吗?
我上面的第一个例子是一个答案,是的,但是当你只能使用一个大面板并在其中绘制所有“控件”时,这会增加许多工作。如果您可以使用单独的鼠标事件/等单独控件,那就更好了。即使不是图像控制,也是我必须自己绘制的控件,只要我可以在每个控件中放置一个图像,那就没问题了。在VCL中,他们称之为“油漆盒”,只是一个矩形区域,您可以放置在一个表格上,并在其上绘制任何您想要的东西。它有自己的鼠标事件,界限等。如果你没有画任何东西,它就像它甚至没有(100%透明),除了它仍然得到鼠标事件,所以可以用作“热”现场“或”目标“。
答案 0 :(得分:7)
PictureBox控件支持透明度,只需将其BackColor属性设置为Transparent即可。这将使其父像素可见为背景。
问题在于设计师不会让第二个图片框成为第一个图片框的孩子。您只需要在构造函数中使用一小段代码来重新生成它。并给它一个新的位置,因为它是相对于父母的。像这样:
public Form1() {
InitializeComponent();
pictureBox1.Controls.Add(pictureBox2);
pictureBox2.Location = new Point(0, 0);
pictureBox2.BackColor = Color.Transparent;
}
不要犹豫使用OnPaint()btw。
答案 1 :(得分:0)
很抱歉,我刚刚发现这个......一旦我决定使用谷歌“winforms透明面板”而不是之前的搜索,TransPictureBox示例节目似乎完全符合我的需要:
Transparency Problem by Overlapped PictureBox's at C#
看起来有2个部分:
为窗口样式
覆盖“绘制背景”方法(或者可选地可能使控件样式不透明)。