【发布时间】:2017-01-25 14:01:39
【问题描述】:
我有一组排列成正方形的图片框。我想在顶部放一个更大的、大部分是透明的图片框。但是当我这样做时,它会覆盖其他图片框并仅绘制表单的背景。
有没有办法让它让所有其他图片框都显示它是透明的?
【问题讨论】:
标签: c# winforms picturebox
我有一组排列成正方形的图片框。我想在顶部放一个更大的、大部分是透明的图片框。但是当我这样做时,它会覆盖其他图片框并仅绘制表单的背景。
有没有办法让它让所有其他图片框都显示它是透明的?
【问题讨论】:
标签: c# winforms picturebox
WinForms 的透明度不是很好。有些控件支持透明度,有些则没有。可以对某些控件进行子类化以启用此功能(通过使用SupportsTransparency 标志调用Control.SetStyle())。我相信这可以通过PictureBox 来完成。
但是,所有 WinForms 控件中的透明度都是通过让透明控件调用其父控件来在子控件绘制之前绘制背景来工作的。这意味着您不能有两个同级控件并期望一个透明性显示到另一个。对不起!
话虽如此,您可以编写自己的解决方法来支持这一点。这将涉及对PictureBox 进行子类化并在OnPaint 覆盖中进行巧妙的编码,以定位同级控件并手动触发将它们绘制到内存位图中。这种方法有很多陷阱。
试试 WPF!
【讨论】:
PictureBox 时的陷阱,这本质上是一种复杂的经验吗?还是提问者的兄弟形式要求是复杂的部分?
以下是获得所需结果的提示:
因此,您将看到覆盖每个图片框的大图像的每个副本,就好像它们是单个图像一样。
【讨论】: