La risposta selezionata viene tecnicamente correggere data la specificità della domanda: tale proprietà fa non esiste nel framework .NET.
Ma se si desidera una tale proprietà, qui è un'estensione di controllo che farà il trucco. Sì, utilizza le coordinate dello schermo, ma data la natura generale del titolo del post, sono sicuro che alcuni utenti che atterrano su questa pagina potrebbero trovare ciò utile.
Incidentalmente, ho passato un paio d'ore a provare a farlo senza le coordinate dello schermo passando in rassegna tutti i genitori di controllo. Non potrei mai ottenere i due metodi per riconciliare. Ciò potrebbe essere dovuto al commento di Hans Passant al PO su come Aero mente le dimensioni della finestra.
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;
}
}
}
fonte
2017-05-21 14:41:19
Cosa si intende esattamente per posizione di _control_ è la posizione del cursore che si desidera? – uday
@uDaY Intendo: nelle coordinate dello schermo. Se il modulo è a 100.100 e il controllo è a 150.350, voglio ottenere 50.250. – ispiro
Attenzione: http://stackoverflow.com/questions/8838621/how-to-determine-actual-windows-form-size-with-all-nonclient-elements-when-run –