如何将图片框部分覆盖在表单控件上
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 设置为透明,即使它已在设计器中设置。除非在代码中设置,否则看起来它将从父级获取。
- 嵌套的子控件不仅会覆盖其
Parent
的 ClientArea
,还会覆盖任何 Border
.
我想要一个部分覆盖 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 设置为透明,即使它已在设计器中设置。除非在代码中设置,否则看起来它将从父级获取。
- 嵌套的子控件不仅会覆盖其
Parent
的ClientArea
,还会覆盖任何Border
.