上位机开发应用:C#自适应窗体控件大小功能

一、源码展示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


//1、先记录窗体和控件初始的位置和大小
//2、将新窗体和老窗体相除等到一个比例值
//3、将这个比例值给与老窗体的控件位置和大小相乘
//4、需要考虑控件里还有控件的情况,需要定义一个方法用于嵌套调用


namespace WindowsFormsApp1
{
   
    class Class1
    {
   
        //1.声明结构,只记录窗体和控件的初始位置和大小
        //创建一个对象
        public struct controlRect
        {
   
            //确定好左边和顶部的距离以及高度和宽度,就确定了这个窗体的位置和大小了
            public int Left;
            public int Top;
            public int Width;
            public int Height;

        }

        //2.创建一个对象数组
        public List<controlRect> oldCtrl = new List<controlRect>();

        //定义序号
        int ctrlNo = 0;

        //3.创建两个函数
        //3.1记录窗体和其控件的初始位置和大小
        public void MoRenWeiZhi(Control mForm) 
        {
   
            //实例化对象
            controlRect cR;

            //将窗体的位置和大小保存到对象中
            cR.Left = mForm.Left;
            cR.Top = mForm.Top;
            cR.Width = mForm.Width;
            cR.Height = mForm.Height;

            //将存储窗体参数的对象保存到数组中,第一个就是初始窗体本身
            oldCtrl.Add(cR);

            //调用嵌套方法(往下看)
            AddControl(mForm);
        }


        //定义一个递归调用的方法(嵌套方法)
        private void AddControl(Control ctl)
        {
   
            //如果这个控件里还有嵌套的控件的话,就执行foreach内的语句
            foreach(Control c in ctl.Controls)
            {
   
                //先创建一个对象
                controlRect objCtrl;

                //将嵌套控件的参数传入对象
                objCtrl.Top = c.Top;
                objCtrl.Left = c.Left;
                objCtrl.Height = c.Height;
                objCtrl.Width = c.Width;

                //将存储参数的对象放到数组里
                oldCtrl.Add(objCtrl);

                //如果控件里的有一个嵌套控价,而嵌套控件里还有嵌套控件,则继续递归
                if (c.Controls.Count > 0)
                {
   
                    //嵌套控件里的嵌套控件
                    AddControl(c);
                }
            }
        }


        //控件自适应大小
        public void AutoSize(Control mForm)
        {
   
            if (ctrlNo == 0)
            {
   
        /*  如果在窗体的Form1_Load中,记录控件原始的大小和位置,正常没有问题,
            但要加入皮肤就会出现问题
            因为有些控件如dataGridView的的子控件还没有完成,个数少
            要在窗体的Form1_SizeChanged中,第一次改变大小时,记录控件原始的大小和位置
            这里所有控件的子控件都已经形成
        */

                //实例化对象
                controlRect cR;

                //初始化窗体
                cR.Left = 0;
                cR.Top = 0; 
                cR.Width = mForm.PreferredSize.Width; 
                cR.Height = mForm.PreferredSize.Height
  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走丢的男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值