1. 程式人生 > >C# 窗體控件跟隨窗體大小自動調節

C# 窗體控件跟隨窗體大小自動調節

c# 控件大小 窗口大小 窗體大小 大小調節 自動調節

測試目的:如何使得窗體內的控件可以跟隨窗體大小自動調節

測試環境:WIN10 ENT + VS2015

方法原理:記錄初始時窗口大小、控件大小等信息。每當窗口大小變化時,計算窗口大小相對於初始時的縮放比例,然後根據縮放比例再調整控件的位置(Location)、大小(Size)、字體大小(Font.Size)。


C#主要測試代碼:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace TEST1111
{
    public partial class Form1 : Form
    {
        int igFormWidth = new int();  //窗口寬度
        int igFormHeight = new int(); //窗口高度
        float fgWidthScaling = new float(); //寬度縮放比例
        float fgHeightScaling = new float(); //高度縮放比例

        public Form1()
        {
            InitializeComponent();
            igFormWidth = this.Width;
            igFormHeight = this.Height;
            InitConTag(this);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (igFormWidth == 0 || igFormHeight == 0) return;
            fgWidthScaling = (float)this.Width / (float)igFormWidth;
            fgHeightScaling = (float)this.Height / (float)igFormHeight;
            ResizeCon(fgWidthScaling, fgHeightScaling, this);
        }
        
        //記錄控件集初始的 位置、大小、字體大小信息
        private void InitConTag(Control cons)
        {
            foreach (Control con in cons.Controls) //遍歷控件集
            {
                con.Tag = con.Left + "," + con.Top + "," + con.Width + "," + con.Height + "," + con.Font.Size;
                if (con.Controls.Count > 0) //處理子控件
                {
                    InitConTag(con);
                }
            }
        }
        
        //重新調整控件的 位置、大小、字體大小
        private void ResizeCon(float widthScaling, float heightScaling, Control cons)
        {
            float fTmp = new float();

            foreach (Control con in cons.Controls) //遍歷控件集
            {
                string[] conTag = con.Tag.ToString().Split(new char[] {‘,‘});
                fTmp = Convert.ToSingle(conTag[0]) * widthScaling;
                con.Left = (int)fTmp;
                fTmp = Convert.ToSingle(conTag[1]) * heightScaling;
                con.Top = (int)fTmp;
                fTmp = Convert.ToSingle(conTag[2]) * widthScaling;
                con.Width = (int)fTmp;
                fTmp = Convert.ToSingle(conTag[3]) * heightScaling;
                con.Height = (int)fTmp;
                fTmp = Convert.ToSingle(conTag[4]) * widthScaling * heightScaling;
                con.Font = new Font("", fTmp);
                if (con.Controls.Count > 0) //處理子控件
                {
                    ResizeCon(widthScaling, heightScaling, con);
                }
            }
        }
    }
}


運行初始圖:

技術分享


窗口大小調節後圖:

技術分享

可以看到當窗體大小變化後,窗體內的控件位置、大小、字體大小也發生了些許變化。

感謝閱覽!


本文出自 “firswof” 博客,請務必保留此出處http://firswof.blog.51cto.com/9362961/1980896

C# 窗體控件跟隨窗體大小自動調節