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