公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】WinForm實現窗體自適應縮放

admin
2025年3月20日 22:24 本文熱度 522

眾所周知,WinForm采用基于像素的布局模型。

因此,原生WinForm對于窗體自適應支持不是很好

但是我們也可以通過代碼來實現。

今天跟大家分享一下如何實現WinForm窗體自適應。

界面布局

當我們想要實現窗體自適應的時候,優先要通過界面布局設置好窗體和控件的一些屬性:
1、Anchor:用于固定控件的邊緣到窗體的邊緣,當窗體大小改變時,控件的位置也會相應改變。
2、Dock:用于將控件停靠到窗體的邊緣,控件的大小會隨著窗體邊緣的改變而改變。

3、布局控件使用 TableLayoutPanel 或 FlowLayoutPanel 等布局控件可以更好地管理控件的布局,它們可以自動調整大小和位置。

4、Padding:Padding屬性定義控件內部的一段空間,用于將控件的內容保持在距控件邊框一定的距離。
5、Margin:Margin屬性定義控件周圍的空間,該空間使其他控件與控件的邊框保持指定距離

代碼實現

除了以上方法外,在實際應用中,我們更多會使用通過代碼來手動調整窗體和控件的大小和位置,這種方法第一次寫的時候會麻煩一些,但是封裝好之后,后續應用也比較簡單。

一、我們創建一個類FormAutoSize,然后創建三個字段,分別是窗體寬度、高度和窗體對象。

public class FormAutoSize{    //窗體對象    private Form form;    //定義當前窗體的寬度    private float width    //定義當前窗體的高度    private float height}

二、在FormAutoSize類的構造方法中,初始化寬度、高度和窗體對象,同時將各個控件的寬度、高度、左邊距、上邊距以及字體大小,按照指定的格式(這里使用分號拼接)存儲到AccessibleDescription屬性里,因為AccessibleDescription屬性很少使用,所以存儲到這個屬性里。

private void SetDescription(Control cons){    foreach (Control ctl in cons.Controls)    {        ctl.AccessibleDescription = ctl.Width + ";" + ctl.Height + ";" + ctl.Left +";" + ctl.Top + ";" + ctl.Font.Size;        //遞歸        if (ctl.Controls.Count > 0)        {            SetDescription(ctl);        }    }}
public FormAutoSize(Form form){    this.form = form;    width = this.form.Width;    height = this.form.Height;    SetDescription(this.form);}

三、接下來就是如何重置窗體控件布局,這里將當前的寬度高度與初始寬度高度進行相除,會得到比例系數scaleX/scaleY,然后將這個系數疊加進去,得到新的寬度高度等屬性值,然后重新設置控件屬性即可。

private void SetControls(float scaleX, float scaleY, Control cons){    //遍歷窗體中的控件,重新設置控件的值    foreach (Control con in cons.Controls)    {        //獲取控件的AccessibleDescription屬性值,并分割后存儲字符串數組        if (con.AccessibleDescription != null)        {            var tag = con.AccessibleDescription.ToString().Split(';');            //根據窗體縮放的比例確定控件的值            con.Width = Convert.ToInt32(Convert.ToSingle(tag[0]) * scaleX); //寬度            con.Height = Convert.ToInt32(Convert.ToSingle(tag[1]) * scaleY); //高度            con.Left = Convert.ToInt32(Convert.ToSingle(tag[2]) * scaleX); //左邊距            con.Top = Convert.ToInt32(Convert.ToSingle(tag[3]) * scaleY); //頂邊距            var currentSize = Convert.ToSingle(tag[4]) * scaleY; //字體大小                               if (currentSize > 0)            {                con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);            }            con.Focus();            if (con.Controls.Count > 0)            {                SetControls(scaleX, scaleY, con);            }        }    }}
 /// <summary> /// 重置窗體布局 /// </summary> public void ResumeLayout() {     var scaleX = form.Width / width;     var scaleY = form.Height / height;     SetControls(scaleX, scaleY, form); }

四、最后一步就是如何進行調用:首先在需要進行縮放的窗體中定義一個FormAutoSize對象,然后在構造方法中實例化該對象,將當前窗體this作為參數傳遞進去,最后在窗體的SizeChanged事件中調用該對象的ResumeLayout方法。

private FormAutoSize formAutoSize;public FrmMain(){    InitializeComponent();    formAutoSize = new FormAutoSize(this);    this.SizeChanged += (sender, e) =>    {        formAutoSize.ResumeLayout();    };}

五、測試效果:

縮放前尺寸:1280*720

縮放后尺寸:1420*827


閱讀原文:原文鏈接


該文章在 2025/3/21 10:32:43 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 91视频污污网站 | 国精产品一区二区 | 国产精品一品二区三区的使用体验 | 国产一级毛片在线视频 | 黑色丝袜脚足国产在线看 | 成人一级免费视频 | 91精品一区二区三区 | 国产精品免费一区二区三区观看 | 99久久久久精品一级毛片 | 国产精品成人一区二 | 国产成人精品午夜福利 | 成人区免费aⅴ片在线观看 成人区人妻 | 2025国内精品久久久久精品 | 国产精品一v二v在线观看 | 国产午夜福利影音 | 国产91精品一区二区麻豆网站 | 国产麻豆福利在线观看 | 3d动漫精品一区视频 | 国产精品亚洲aⅴ片 | 丰满人妻一区二区三区视频53 | 国产麻豆精品久久一二三 | 精品国产一区二区三区久久久狼 | 国自产成人免费视频在线播放 | 国产精品丰满大屁股流白浆 | av无码免费永久在线观看 | 精品国产v无码 | 国产精品高清一区二区 | 国产精品欧美日韩另类中文 | 国产福利在线观看永久免费 | 国产精品国产三级国产成人 | aⅴ无码播放一级毛片免费 aⅴ无码午夜在线 | 精品久久久久久无码专区 | 国产高清不卡视频在线播放 | 国产高清天天看在线 | 精品国产欧美一区二区三区 | 成人欧美网日韩青椒网 | 国产精品女人一区 | 国产成人一区二区三区在线播放 | 国产69精品久久久久乱码 | 精品国产乱码一区二区三区网站 | 国产精品香蕉在线的人 |