C# Winform的自適應解析度的類

來源:互聯網
上載者:User

在做YH的時候,為了擴充介面的功能區域,使得更為方便的使用系統,所以對介面的大小進行了擴充。隨之而來的解析度問題也就來了。功能寫完了,但是現在又在原來的介面上顯示不全。改回去太麻煩了,只好寫了一個自適應解析度的類,來解決這一問題。


多的不說了,直接上代碼吧。

using System;using System.Collections.Generic;using System.Drawing;using System.Windows.Forms;class AutoSizeForm{    //(1).聲明結構,只記錄表單和其控制項的初始位置和大小。    public struct controlRect    {        public int Left;        public int Top;        public int Width;        public int Height;        public float FontSize;    }    //(2).聲明 1個對象    //注意這裡不能使用控制項列表記錄 List<Control> nCtrl;,因為控制項的關聯性,記錄的始終是的大小。    public List<controlRect> oldCtrl;    //int ctrl_first = 0;    //(3). 建立兩個函數    //(3.1)記錄表單和其控制項的初始位置和大小,    public void controllInitializeSize(Form mForm)    {        // if (ctrl_first == 0)        {            //  ctrl_first = 1;            oldCtrl = new List<controlRect>();            controlRect cR;            //記錄表單位置和大小及字型大小            cR.Left = mForm.Left;            cR.Top = mForm.Top;            cR.Width = mForm.Width;            cR.Height = mForm.Height;            cR.Width = int.Parse(mForm.Tag.ToString().Split(',')[0]);            cR.Height = int.Parse(mForm.Tag.ToString().Split(',')[1]);            cR.FontSize = mForm.Font.Size;            oldCtrl.Add(cR);            //記錄控制項的位置大小及字型大小            GetControlSize(mForm);        }    }    //記錄控制項容器中各個控制項的位置與大小    private void GetControlSize(Control con)    {        int s = con.Controls.Count;        string name = con.Name;        //記錄控制項的位置大小及字型大小        foreach (Control c in con.Controls)        {            controlRect objCtrl;            objCtrl.Left = c.Left;            objCtrl.Top = c.Top;            objCtrl.Width = c.Width;            objCtrl.Height = c.Height;            objCtrl.FontSize = c.Font.Size;            oldCtrl.Add(objCtrl);            //記錄容器控制項中的控制項位置,大小,及字型大小            if (c.GetType().ToString() == "System.Windows.Forms.Panel")            {                GetControlSize(c);            }        }    }    //(3.2)控制項自適應大小,    public void controlAutoSize(Form mForm)    {        float wScale;        float hScale;        try        {            wScale = (float)mForm.Width / (float)oldCtrl[0].Width;//新舊表單之間的比例,與最早的舊表單            hScale = (float)mForm.Height / (float)oldCtrl[0].Height;//.Height;        }        catch (Exception)        {            return;        }        int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;        float ctrFontSize0;        int ctrlNo = 1;//第1個是表單自身的 Left,Top,Width,Height,所以表單控制項從ctrlNo=1開始        SetSize(mForm, ctrlNo, wScale, hScale);    }    private void SetSize(Control con, int ctrlNo, float wScale, float hScale)    {        int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;        float ctrFontSize0;        int s = con.Controls.Count;        string name = con.Name;        foreach (Control c in con.Controls)        {            ctrLeft0 = oldCtrl[ctrlNo].Left;            ctrTop0 = oldCtrl[ctrlNo].Top;            ctrWidth0 = oldCtrl[ctrlNo].Width;            ctrHeight0 = oldCtrl[ctrlNo].Height;            ctrFontSize0 = oldCtrl[ctrlNo].FontSize;            c.Left = (int)((ctrLeft0) * wScale);//新舊控制項之間的線性比例。控制項位置只相對於表單,所以不能加 + wLeft1            c.Top = (int)((ctrTop0) * hScale);//            c.Width = (int)(ctrWidth0 * wScale);//只與最初的大小相關,所以不能與現在的寬度相乘 (int)(c.Width * w);            c.Height = (int)(ctrHeight0 * hScale);//            c.Font = new Font(c.Font.Name, (float)(ctrFontSize0 * hScale));            ctrlNo += 1;            if (ctrlNo >= oldCtrl.Count) return;            if (c.GetType().ToString() == "System.Windows.Forms.Panel")            {                SetSize(c, ctrlNo, wScale, hScale);//設定控制項容器中的控制項大小。                ctrlNo += c.Controls.Count;            }         }    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.