C winform控制項的各種座標獲取

2021-10-21 19:32:37 字數 1636 閱讀 8057

窗體的formborderstyle可以設定以下的值,每個值導致窗體的邊框的寬度不一樣,但是可以發現的是左、右、下邊框的寬度是一樣的:

//

// 摘要:

// 指定窗體的邊框樣式。

[comvisible(true)]

public enum formborderstyle

可以通過clientsize獲取工作區的大小,即窗體除邊框外的大小

size clientsize = this.clientsize;   //獲取窗體工作區的大小

int left = (this.size.width - clientsize.width) / 2; //左右的邊框長度

int top = (this.size.height - clientsize.height) - left; //下邊框和左右邊框長度一樣

各窗體模式下的邊框寬度如下: 

窗體的座標,即location屬性,是窗體左上角(不是工作區的左上角)相對於螢幕而言的。螢幕左上角是原點,原點往右為x的正方向,往下為y的正方向。

將指定螢幕點的位置計算成工作區座標

control.pointtoclient(p2);
p2座標是相對於螢幕,即螢幕左上角原點(0,0)的座標;假如control相對於螢幕原點的座標為 p1;control.pointtoclient(p2) 的結果為 p2 - p1。即以p1為原點時p2的座標(座標系和窗體的一致)

ps:如果control為form時,p1為form工作區相對於原點的座標,而不是location。 

將指定工作區點的位置計算成螢幕座標

control.pointtoscreen(p2);
p2座標是相對於螢幕,即螢幕左上角原點(0,0)的座標;假如control相對於螢幕原點的座標為 p1;control.pointtoscreen(p2) 的結果為 p2 + p1。即以螢幕原點為原點p1和p2的疊加

ps: 如果control為form時,p1為form工作區相對於原點的座標,而不是location。 

control.pointtoscreen(new point(0,0));    //獲取控制項相對於螢幕原點的絕對座標
ps:如果control為form時,是指工作區相對於螢幕的座標。form相對於螢幕的座標就是location

//control1相對於control2的座標

control2.pointtoclient(control1.pointtoscreen(new point(0,0)));

control.findform().pointtoclient(control.pointtoscreen(new point(0,0)));

各種獲取控制項座標的方法總結

最近遇到非常多需要獲取控制項在螢幕中位置的需求,用途有很多,比如一些拋物線動畫的起始點 popupwindow的顯示位置 scrollview中用於滑動跳轉到固定位置等,這裡總結一下 1.獲取螢幕的大小 windowmanager manager windowmanager getsystemser...

c winform 直角座標系

已經在winform中畫出了直角座標系,且讀取資料畫出了弧線,現在求這個弧線頂點座標並顯示在文字框中,各位大哥大姐拜託看看怎麼做,小弟初學c 多多指教。using system using system.collections.generic using system.componentmodel ...

C Winform控制項動態刪除

wpf控制項的動態刪除請參考wpf動態刪除指定型別控制項 今天在實現控制項動態刪除過程中遇到了點小trouble,就是在刪除的過程中只能刪除一半,具體 如下 foreach var control in from ctls in controlutility.getcontrols panel1 w...