一、窗體
- 綠色邊框框住的區域:屏幕
- 橙色邊框框住的區域:窗體
- 黃色邊框框住的區域:窗體工作區
1.邊框
窗體的FormBorderStyle可以設置以下的值,每個值導致窗體的邊框的寬度不一樣,但是可以發現的是左、右、下邊框的寬度是一樣的:
//
// 摘要:
// 指定窗體的邊框樣式。
[ComVisible(true)]
public enum FormBorderStyle
{
//
// 摘要:
// 無邊框。
None = 0,
//
// 摘要:
// 固定的單線邊框。
FixedSingle = 1,
//
// 摘要:
// 固定的三維邊框。
Fixed3D = 2,
//
// 摘要:
// 粗、 固定的對話框樣式邊框。
FixedDialog = 3,
//
// 摘要:
// 可調整大小的邊框。
Sizable = 4,
//
// 摘要:
// 不是可調整大小工具窗口邊框。 在任務欄中或在用戶按 ALT + TAB 時出現的窗口中未顯示工具窗口。 雖然窗體,用於指定 System.Windows.Forms.FormBorderStyle.FixedToolWindow
// 通常不顯示在任務欄中,您必須確保 System.Windows.Forms.Form.ShowInTaskbar 屬性設置為 false, ,因為其默認值是
// true。
FixedToolWindow = 5,
//
// 摘要:
// 可調整大小的工具窗口邊界。 在任務欄中或在用戶按 ALT + TAB 時出現的窗口中未顯示工具窗口。
SizableToolWindow = 6
}
可以通過ClientSize獲取工作區的大小,即窗體除邊框外的大小
Size clientSize = this.ClientSize; //獲取窗體工作區的大小
int left = (this.Size.Width - clientSize.Width) / 2; //左右的邊框長度
int top = (this.Size.Height - clientSize.Height) - left; //下邊框和左右邊框長度一樣
各窗體模式下的邊框寬度如下:
2.坐標
窗體的坐標,即Location屬性,是窗體左上角(不是工作區的左上角)相對於屏幕而言的。屏幕左上角是原點,原點往右為X的正方向,往下為Y的正方向。
二、相對坐標
1.PointToClient
將指定屏幕點的位置計算成工作區坐標
Control.PointToClient(p2);
p2坐標是相對於屏幕,即屏幕左上角原點(0,0)的坐標;假如Control相對於屏幕原點的坐標為 p1;Control.PointToClient(p2) 的結果為 p2 - p1。即以p1為原點時p2的坐標(坐標系和窗體的一致)
PS:如果Control為Form時,p1為Form工作區相對於原點的坐標,而不是Location。
2.PointToScreen
將指定工作區點的位置計算成屏幕坐標
Control.PointToScreen(p2);
p2坐標是相對於屏幕,即屏幕左上角原點(0,0)的坐標;假如Control相對於屏幕原點的坐標為 p1;Control.PointToScreen(p2) 的結果為 p2 + p1。即以屏幕原點為原點p1和p2的疊加
PS: 如果Control為Form時,p1為Form工作區相對於原點的坐標,而不是Location。
三、獲取坐標
1.相對於屏幕
Control.PointToScreen(new Point(0,0)); //獲取控件相對於屏幕原點的絕對坐標
PS:如果Control為Form時,是指工作區相對於屏幕的坐標。Form相對於屏幕的坐標就是Location
2.相對於控件
//Control1相對於Control2的坐標
Control2.PointToClient(Control1.PointToScreen(new Point(0,0)));
3.相對於窗體
Control.FindForm().PointToClient(Control.PointToScreen(new Point(0,0)));