C#根据Form大小控件自动更改大小(自适应)(字体自适应)

C#From窗体改变后控件自适应代码,可自动改变控件中的控件及字体大小

 

//长话短说 //大家互相交流,有不足处请指正

 

//此代码设计思路:记录初始的Form的宽度与高度,每次更改后算出比例,然后再等比例设置所有控件的Top,Left,Width,Heigh,及字体的大小更改

//字体大小更改关键字:自动更改字体的大小  //2020-03-23 19:21:50 更新

//可搜关键字://核心代码

 

//整个源代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace FormResize

{

    public partial class Form1 : Form

    {

        // <summary>

        /// 窗体改变前的Width宽度

        /// </summary>

        private int iForm_ResizeBefore_Width;

        /// <summary>

        /// 窗体改变前的Height高度

        /// </summary>

        private int iForm_ResizeBefore_Height;

 

        /// <summary>

        /// 取得Form中控件中初始的字体大小,即无论Form多大此字体都是Form中最小值

        /// </summary>

        private float FontSizeMin = 0; //2020-03-23 19:21:50 更新

 

        /// <summary>

        /// 宽比例,float类型,此处为每次改后窗体的宽度 除以改变前窗体的宽度的比例

        /// </summary>

        private float fRatio_Width;

        /// <summary>

        /// 高比例,float类型,此处为每次改后窗体的高度 除以改变前窗体的高度的比例

        /// </summary>

        private float fRatio_Height;

 

        public Form1()

        {

            InitializeComponent();

 

            //代码增加ResizeEnd事件   //也可通过设计器增加ResizeEnd事件然后删掉此处代码

            this.ResizeEnd += new System.EventHandler(this.Form1_ResizeEnd);

 

            //设置最小大小为窗体打开的初始大小

            this.MinimumSize = this.Size;

 

            //取得Form中控件中初始的字体大小 //若此From中字体不统一,则此处为数组。

            FontSizeMin = this.button1.Font.Size; //2020-03-23 19:21:50 更新

 

            //获得窗体改变前的Form的宽度与高度 //赋初始值

            iForm_ResizeBefore_Width = this.Size.Width;

            iForm_ResizeBefore_Height = this.Size.Height;

        }

        private void Form1_ResizeEnd(object sender, EventArgs e) //窗体改变后发生的事件

        {

            //窗体改变后Form的宽度与高度及宽比例和高比例

            fRatio_Width = (this.Size.Width / (float)iForm_ResizeBefore_Width);

            fRatio_Height = (this.Size.Height / (float)iForm_ResizeBefore_Height);

            AutoResize(this); //2019-3-21 10:50:42更新

 

            ////获得下一次窗体改变前的Form的宽度与高度

            iForm_ResizeBefore_Width = this.Size.Width;

            iForm_ResizeBefore_Height = this.Size.Height;

        }

 

        // <summary>

        /// 自适应窗体大小的方法,递归

        /// </summary>

        /// <param name="theControl"></param>

        private void AutoResize(Control theControl)  //核心代码

        {

            #region 控制控件自适应UI大小

            foreach (Control OneCon in theControl.Controls)   //根据原大小等比例放大

            {

                OneCon.Left = Convert.ToInt32((OneCon.Left * fRatio_Width));

                OneCon.Top = Convert.ToInt32((OneCon.Top * fRatio_Height));

                OneCon.Width = Convert.ToInt32(OneCon.Width * fRatio_Width);

                OneCon.Height = Convert.ToInt32(OneCon.Height * fRatio_Height);

                if (OneCon.Controls.Count > 0)

                {

                    AutoResize(OneCon);//如Form内还有控件中的控件,此处则可递归改变大小,此处为重点中的重点  //2019-3-21 10:50:42更新

                }

                #region 自动更改字体的大小  //2020-03-23 19:21:50 更新

                // 当前控件(OneCon.Font.Size) 乘以(8)  长宽比例中最小值 (Math.Min(fRatio_Width, fRatio_Height)

                //Math.Round(数值, 2) //保留两位有效数字

                float currentSize = float.Parse(Math.Round(OneCon.Font.Size * (Math.Min(fRatio_Width, fRatio_Height)), 2).ToString());

                if (currentSize > FontSizeMin)

                    OneCon.Font = new Font(OneCon.Font.Name, currentSize, OneCon.Font.Style, OneCon.Font.Unit);

                else

                    OneCon.Font = new Font(OneCon.Font.Name, FontSizeMin, OneCon.Font.Style, OneCon.Font.Unit);

                //某种程度上来说 if 语句都可以改成三目运算符, 举例: m=a>b?a:b; 表示先判断a是否大于b,若a>b,则将a的值赋给m,若不符合a>b,则将b的值赋给m

                //float NowSize = currentSize > FontSizeMin ? currentSize : FontSizeMin;

                //OneCon.Font = new Font(OneCon.Font.Name, NowSize, OneCon.Font.Style, OneCon.Font.Unit);

                #endregion

            }

            #endregion

        }

    }

}

 

备注:1.Form显示时可以调整到的最小的大小,代码-> this.MinimumSize = this.Size; //2019-1-25 10:29:24更新

2.修改代码 使之可以改变控件中的控件的大小//2019-3-21 20:50:42更新

3.新增变量FontSizeMin来确认自动更改字体的大小,//2020-03-23 19:21:50 更新

4.源代码下载地址:(https://download.csdn.net/download/shengmingzaiyuxuexi/12264681)(或者私信我要源码也可)

5.代码可能不够缜密,如何优化,请指出

 

 

 

如有错误,请指正

如有疑问,请留言

如想提携,请私信

与君共勉,共同进步!

 

编译环境:Visual studio 2012

编译语言:C#

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章