You can use two PictureBoxes
and bring one below the DGV
and nest the other. Then move the overlay to the right place..
both should be identical otherwise, i.e. have the same Image
and the same SizeMode
.
Here is a function that'll do it:
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);
}
And the result:

Notes:
- You explictily need to do the nesting as a DGV is not a container, so it will not be enough to move it in place in the designer.
- You explictily need to set the BackColor to Transparent even if it was set in the designer. Looks like it will be taken from the parent unless set in code.
- The nested child control will overlay not only the
ClientArea
of its Parent
but also any Border
.