改進C WinForm窗體及其控制項的自適應

2021-07-04 04:37:17 字數 2576 閱讀 6064

工作原因,所以才知道了這麼多,沒事也經常轉轉部落格,最近發現的問題在網上找到一篇文章寫得很好,解決了我的問題,特此在這裡和大家一起分享!

之前使用的電腦是windows64位的,vs2013編寫好的程式在本機執行沒有問題,可是轉移到32位的時候,winform的窗體開始有了一些 「錯位」 後來才知道不是多少位的問題,而元凶是螢幕解析度,呵呵,終於解決了!

下面的內容是我在這片文章中摘抄的!嘿嘿!

改進c# winform窗體及其控制項自適應各種螢幕解析度

一。說明

2012-11-30 曾經寫過 《c# winform窗體及其控制項自適應各種螢幕解析度》

,其中也講解了控制項自適應的原理。近期有網友說,裝在panel裡面的控制項,沒有效果?

這是控制項巢狀的問題,加入即可實現。使用**時,要注意在窗體load事件中,有些控制項(比如datagridview)的子控制項還沒有完成,在這裡記錄控制項的個數比較少,而在窗體sizechanged事件中獲取的比較多(是正常的)。

解決的方法是,記錄控制項的初始位置和大小以及處理控制項的縮放,都放到窗體sizechanged事件中,只需第一次記錄控制項的初始位置和大小,之後再呼叫類的自適應方法即可。

二。使用方法

1.把自適應的類整體複製到你的工程命名空間裡,(這樣做,每個窗體均可使用)

然後在需要自適應的窗體中做2步即可:

2.宣告自適應類例項。

3.為窗體新增sizechanged事件,並在其方法form1_sizechanged中,首次記錄窗體和其控制項初始位置和大小,之後呼叫類的自適應方法,完成自適應。

三。完整**如下:

(一)。自適應窗體的**:

using system;

using system.windows.forms;

//2. 為窗體新增load事件,並在其方法form1_load中,呼叫類的初始化方法,記錄窗體和其控制項的初始位置和大小

private void form1_load(object sender, eventargs e)

//3.為窗體新增sizechanged事件,並在其方法form1_sizechanged中,呼叫類的自適應方法,完成自適應

private void form1_sizechanged(object sender, eventargs e)  }

}(二)。自適應類的**

using system.collections.generic;

using system.windows.forms;

//(2).宣告 1個物件

//注意這裡不能使用控制項列表記錄 list nctrl;,因為控制項的關聯性,記錄的始終是當前的大小。

//  public list oldctrl= new list();//這裡將西文的大於小於號都過濾掉了,只能改為中文的,使用中要改回西文

public list《controlrect》 oldctrl = new list《controlrect》();

int ctrlno = 0;//1;

//(3). 建立兩個函式

//(3.1)記錄窗體和其控制項的初始位置和大小,

public void controllinitializesize(control mform)

private void addcontrol(control ctl)  }

//(3.2)控制項自適應大小,

public void controlautosize(control mform)

float wscale = (float)mform.width / (float)oldctrl[0].width;//新舊窗體之間的比例,與最早的舊窗體

float hscale = (float)mform.height / (float)oldctrl[0].height;//.height;

ctrlno = 1;//進入=1,第0個為窗體本身,窗體內的控制項,從序號1開始

autoscalecontrol(mform, wscale, hscale);//窗體內其餘控制項還可能巢狀控制項(比如panel),要單獨抽出,因為要遞迴呼叫

} private void autoscalecontrol(control ctl, float wscale, float hscale)  }

}}20140627特此更正:

// public list oldctrl= new list();//這裡將西文的大於小於號都過濾掉了,只能改為中文的,使用中要改回西文

public list《controlrect》 oldctrl = new list《controlrect》();

2。在load中正常,到sizechang中,高度和寬度,應使用

mform.preferredsize.width,mform.preferredsize.height;

//  cr.left = mform.left; cr.top = mform.top; cr.width = mform.width; cr.height = mform.height;

cr.left = 0; cr.top = 0; cr.width = mform.preferredsize.width; cr.height = mform.preferredsize.height;

SY的專欄 C WinForm製作異形窗體 控制項

c winform製作異形窗體 控制項 製作異形窗體或控制項的思路一般都是想辦法生成乙個region,然後設定給指定的視窗或控制項。生成region的方法有很多,最常用的就是從一幅生成,把該中的透明色部分 摳 掉,剩下的部分作為乙個region。設定視窗或控制項的region可以用setwindow...

C WinForm窗體及其控制項的自適應

c winform窗體及其控制項自適應各種螢幕解析度 一。說明 我們自己編寫程式的介面,會遇到各種螢幕解析度,只有自適應才能顯的美觀。實際上,做到這點也很簡單,就是首先記錄窗體和它上面控制項的初始位置和大小,當窗體改變比例時,其控制項的位置和大小也按此比例變化即可。因為窗體上控制項的位置和大小是相對...

C winform窗體及其控制項的自適應

為了提公升使用者的體驗,窗體不能再固定其大小 使用者不能隨意改變窗體的大小 所以要做到窗體適應電腦螢幕的解析度,窗體中的控制項要跟隨窗體的變化比例而變化。通過網上查詢學習,發現有幾個位大佬的方法不錯,所以把他們的 加到自己的工程中測試了一下,發下儘管能實現比例變化的功能,但是還是有時候會有控制項錯位...