c# winform窗體及其控制項自適應各種螢幕解析度
一。說明
我們自己編寫程式的介面,會遇到各種螢幕解析度,只有自適應才能顯的美觀。實際上,做到這點也很簡單,就是首先記錄窗體和它上面控制項的初始位置和大小,當窗體改變比例時,其控制項的位置和大小也按此比例變化即可。因為窗體上控制項的位置和大小是相對於自己所在的窗體的,也就是所謂的視窗座標。
在這裡我們只考慮相對於自己窗體的視窗座標更簡單,也就是成比例變化。為了多個窗體共用,我在這裡建立乙個類autosizeformclass ,1.使用它去記錄窗體和其控制項的初始位置和大小,2.根據窗體變化了的大小,成比例地實現其控制項的水平和垂直方向的變化,也就是自適應。
二。使用方法
使用方法很簡單,
1.把自適應的類整體複製到你的工程命名空間裡,
然後在需要自適應的窗體中做3步即可:
2.宣告自適應類例項。
3.為窗體新增load事件,並在其方法form1_load中,呼叫類的初始化方法,記錄窗體和其控制項初始位置和大小
4.為窗體新增sizechanged事件,並在其方法form1_sizechanged中,呼叫類的自適應方法,完成自適應
三。完整**如下:
public partial class form1 : form
//2. 為窗體新增load事件,並在其方法form1_load中,呼叫類的初始化方法,記錄窗體和其控制項的初始位置和大小
private void form1_load(object sender, eventargs e)
//3.為窗體新增sizechanged事件,並在其方法form1_sizechanged中,呼叫類的自適應方法,完成自適應
private void form1_sizechanged(object sender, eventargs e) }
}(二)。自適應類的**
class autosizeformclass
//(2).宣告 1個物件
//注意這裡不能使用控制項列表記錄 list nctrl;,因為控制項的關聯性,記錄的始終是當前的大小。
public list oldctrl;
//int ctrl_first = 0;
//(3). 建立兩個函式
//(3.1)記錄窗體和其控制項的初始位置和大小,
public void controllinitializesize(form mform) }
// this.windowstate = (system.windows.forms.formwindowstate)(2);//記錄完控制項的初始位置和大小後,再最大化
//0 - normalize , 1 - minimize,2- maximize
} //(3.2)控制項自適應大小,
public void controlautosize(form mform) }
}}當然,視窗座標和螢幕座標也是可以相互轉換的,
private void form1_mousedown(object sender, mouseeventargs e)
它們之間轉換如下:
this.location; // 窗體所在座標
this.pointtoscreen(new point(0, 0)); // 客戶區座標轉換為螢幕座標
this.pointtoclient(new point(0, 0)); // 螢幕座標轉換為客戶區座標
C winform窗體及其控制項的自適應
為了提公升使用者的體驗,窗體不能再固定其大小 使用者不能隨意改變窗體的大小 所以要做到窗體適應電腦螢幕的解析度,窗體中的控制項要跟隨窗體的變化比例而變化。通過網上查詢學習,發現有幾個位大佬的方法不錯,所以把他們的 加到自己的工程中測試了一下,發下儘管能實現比例變化的功能,但是還是有時候會有控制項錯位...
改進C WinForm窗體及其控制項的自適應
工作原因,所以才知道了這麼多,沒事也經常轉轉部落格,最近發現的問題在網上找到一篇文章寫得很好,解決了我的問題,特此在這裡和大家一起分享!之前使用的電腦是windows64位的,vs2013編寫好的程式在本機執行沒有問題,可是轉移到32位的時候,winform的窗體開始有了一些 錯位 後來才知道不是多...
C WinForm製作異形窗體 控制項
製作異形窗體或控制項的思路一般都是想辦法生成乙個region,然後設定給指定的視窗或控制項。生成region的方法有很多,最常用的就是從一幅生成,把該中的透明色部分 摳 掉,剩下的部分作為乙個region。設定視窗或控制項的region可以用setwindowrgn api,不過.net frame...