La respuesta seleccionada se técnicamente correcta, dado las características específicas de la cuestión: este tipo de propiedad hace no existe en el marco de .NET.
Pero si desea una propiedad así, aquí hay una extensión de control que hará el truco. Sí, usa coordenadas de pantalla, pero dada la naturaleza general del título de la publicación, estoy seguro de que a algunos usuarios que visiten esta página les puede resultar útil.
A propósito, pasé un par de horas tratando de hacer esto sin coordenadas de pantalla al pasar por todos los padres de control. Nunca podría obtener los dos métodos para reconciliar. Esto bien puede ser debido al comentario de Hans Passant al OP sobre cómo Aero miente sobre el tamaño de la ventana.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Cambia
{
public static class ControlExtensions
{
public static Point FormRelativeLocation(this Control control, Form form = null)
{
if (form == null)
{
form = control.FindForm();
if (form == null)
{
throw new Exception("Form not found.");
}
}
Point cScreen = control.PointToScreen(control.Location);
Point fScreen = form.Location;
Point cFormRel = new Point(cScreen.X - fScreen.X, cScreen.Y - fScreen.Y);
return cFormRel;
}
}
}
¿Qué quiere decir exactamente por ubicación de _control_ es la ubicación del cursor que desea? – uday
@uDaY Es decir: en coordenadas de pantalla. Si el formulario está en 100,100 y el control está en 150,350, quiero obtener 50,250. – ispiro
Cuidado: http://stackoverflow.com/questions/8838621/how-to-determine-actual-windows-form-size-with-all-nonclient-elements-when-run –