工作原因,所以才知道了這麼多,沒事也經常轉轉部落格,最近發現的問題在網上找到一篇文章寫得很好,解決了我的問題,特此在這裡和大家一起分享!
之前使用的電腦是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窗體及其控制項的自適應
為了提公升使用者的體驗,窗體不能再固定其大小 使用者不能隨意改變窗體的大小 所以要做到窗體適應電腦螢幕的解析度,窗體中的控制項要跟隨窗體的變化比例而變化。通過網上查詢學習,發現有幾個位大佬的方法不錯,所以把他們的 加到自己的工程中測試了一下,發下儘管能實現比例變化的功能,但是還是有時候會有控制項錯位...