C# 多个图片框上的透明度

C# 多个图片框上的透明度,c#,winforms,picturebox,C#,Winforms,Picturebox,我有一个排列成正方形的图片框阵列。我想在顶部放一个更大的、几乎透明的图片框。但是当我这样做的时候,它覆盖了其他的图片框,只是画了表单的背景 有没有办法让所有其他图片框都显示它的透明位置?WinForms中的透明不是很好。有些控件具有透明度支持,其他控件则没有。可以对某些控件进行子类化以启用此功能(通过使用SupportsTransparency标志调用Control.SetStyle())。我相信这可以通过PictureBox实现 但是,所有WinForms控件中的透明度都是通过让透明控件在子控

我有一个排列成正方形的图片框阵列。我想在顶部放一个更大的、几乎透明的图片框。但是当我这样做的时候,它覆盖了其他的图片框,只是画了表单的背景

有没有办法让所有其他图片框都显示它的透明位置?

WinForms中的透明不是很好。有些控件具有透明度支持,其他控件则没有。可以对某些控件进行子类化以启用此功能(通过使用
SupportsTransparency
标志调用
Control.SetStyle()
)。我相信这可以通过
PictureBox
实现

但是,所有WinForms控件中的透明度都是通过让透明控件在子控件绘制背景之前调用其父控件来实现的。这意味着您不能有两个同级控件,并期望其中一个控件的透明度显示给另一个。对不起

尽管如此,您还是可以编写自己的解决方案来支持这一点。这将涉及子类化
PictureBox
和在
OnPaint
覆盖中进行巧妙编码,以定位同级控件并手动触发将它们绘制到内存位图中。这种方法有很多缺点


试试WPF

以下是获得所需结果的提示:

  • 创建顶级图像的多个副本
  • 将每个副本添加到它应该覆盖的每个图片框的控件中
  • 根据要覆盖的每个图片框的偏移量调整每个副本的位置

  • 因此,你会看到你的大图像的每个副本都覆盖着每个图片框,就好像它们是一个单独的图像一样。

    关于子类化
    图片框时的陷阱,这本身就是一个陷阱吗?还是询问者的兄弟表单需求是复杂的部分?我几年前做过类似的事情,但我不记得所有细节。我记得必须知道所有控件的变换、缩放和相对位置,以便正确剪裁输出。这绝对是可行的,也是一个有趣的挑战!