C# Get a control's position on a form

Erlend D. picture Erlend D. · Sep 25, 2009 · Viewed 115.6k times · Source

Is there any way to retrieve a control's position in a form, when the control may be inside other controls (like Panels)?

The control's Left and Top properties gives me only it's position within it's parent control, but what if my control is inside five nested panels, and I need it's position on the form?

Quick example:

The button btnA is located on coordinates (10,10) inside the panel pnlB.
The panel pnlB is located on coordinates (15,15) inside the form frmC.

I want btnA's location on frmC, which is (25,25).

Can I get this location?

Answer

Fredrik Mörk picture Fredrik Mörk · Sep 25, 2009

I usually combine PointToScreen and PointToClient:

Point locationOnForm = control.FindForm().PointToClient(
    control.Parent.PointToScreen(control.Location));