【问题标题】:Transparency over multiple pictureBoxes多个图片框的透明度
【发布时间】:2017-01-25 14:01:39
【问题描述】:

我有一组排列成正方形的图片框。我想在顶部放一个更大的、大部分是透明的图片框。但是当我这样做时,它会覆盖其他图片框并仅绘制表单的背景。
有没有办法让它让所有其他图片框都显示它是透明的?

【问题讨论】:

    标签: c# winforms picturebox


    【解决方案1】:

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

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

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

    试试 WPF!

    【讨论】:

    • 关于子类化 PictureBox 时的陷阱,这本质上是一种复杂的经验吗?还是提问者的兄弟形式要求是复杂的部分?
    • 几年前我做过类似的事情,但我不记得所有细节了。我记得必须知道所有控件的转换和缩放以及相对位置,以便正确剪辑输出。这绝对是可行的,也是一个有趣的挑战!
    【解决方案2】:

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

    1. 为您的顶部图片创建多个副本。
    2. 将每个副本添加到它应该覆盖的每个图片框的控件中。
    3. 根据要覆盖的每个图片框的偏移量调整每个副本的位置。

    因此,您将看到覆盖每个图片框的大图像的每个副本,就好像它们是单个图像一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多