如何将图片框部分覆盖在表单控件上

How to partially overlay a picturebox over form controls

我想要一个部分覆盖 winform 控件(在本例中为 datagridview)的图像,但它似乎无法正常工作。 我按照找到的答案 here 进行操作,当父级是控件 (DGV) 时效果很好,但当父级是表单时则不行...
我想要这样的东西:

但是我得到的是这样的:

按照答案并将父级设置为 DGV 工作正常....

您可以使用 两个 PictureBoxes 并将 一个放在下面 DGV嵌套另一个。然后将叠加层移动到正确的位置.. 否则两者应该相同,即具有相同的 Image 和相同的 SizeMode.

这是一个可以执行此操作的函数:

void overlayCtls(Control ctlBase, Control ctlOverlay, Control ctlTgt )
{
    ctlOverlay.BackColor = Color.Transparent;
    ctlOverlay.Parent = ctlTgt;
    ctlOverlay.Location = new Point(ctlBase.Left - ctlTgt.Left, ctlBase.Top - ctlTgt.Top);
}

结果:

备注:

  • 您明确需要进行嵌套,因为 DGV 不是容器,因此仅将其移动到设计器中的位置是不够的。
  • 您明确需要将 BackColor 设置为透明,即使它已在设计器中设置。除非在代码中设置,否则看起来它将从父级获取。
  • 嵌套的子控件不仅会覆盖其 ParentClientArea,还会覆盖任何 Border.