C#窗体缩放

1.缩放功能类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;
using System.ComponentModel;
using System.Data;
using System.Drawing;

namespace Common
{
    public class AutoControlSize
    {
        private  Queue<Control> MyControlQuery_Init = new Queue<Control>();//初始化控件集合队列
        private  ArrayList MyControlInfoList_Init = new ArrayList();//初始化控件参数集合
        private  Int32 MainDlg_H_Init;//初始化主对话框参数
        private  Int32 MainDlg_W_Init;//初始化主对话框参数
        private  Int32 MainDlg_H_Curr;//当前主对话框参数
        private  Int32 MainDlg_W_Curr;//当前主对话框参数
        private struct ControlInfo//控件参数结构体
        {
            public string ControlName;
            public Int32 Height;
            public Int32 Width;
            public Int32 Loc_X;
            public Int32 Loc_Y;
        }
        private  void FormControlList(Control item)//递归遍历控件
        {
            for (int i = 0; i < item.Controls.Count; i++)
            {
                if (item.Controls[i].HasChildren)
                {
                    FormControlList(item.Controls[i]);
                }
                ControlInfo Node = new ControlInfo();
                Node.ControlName = item.Controls[i].Name;
                Node.Height = item.Controls[i].Height;
                Node.Width = item.Controls[i].Width;
                Node.Loc_X = item.Controls[i].Location.X;
                Node.Loc_Y = item.Controls[i].Location.Y;
                MyControlInfoList_Init.Add(Node);
                MyControlQuery_Init.Enqueue(item.Controls[i]);
            }
        }
        private  void GetMainFromSize_Init(Form MyForm)//获取初始化对话框参数
        {
            MainDlg_H_Init = MyForm.Height;
            MainDlg_W_Init = MyForm.Width;
        }
        private  void GetMainFromSize_Curr(Form MyForm)//获取当前对话框参数
        {
            MainDlg_H_Curr = MyForm.Height;
            MainDlg_W_Curr = MyForm.Width;
        }
        public  void RegisterFormControl(Form MyForm)//注册对话框所以控件
        {
            FormControlList(MyForm);
            GetMainFromSize_Init(MyForm);
        }
        public  void ChangeFormControlSize(Form MyForm)//使能AutoSize
        {
            GetMainFromSize_Curr(MyForm);
            Control myQuery;
            Queue<Control> ControlQuery = new Queue<Control>(MyControlQuery_Init);
            ControlInfo Node = new ControlInfo();
            Int32 i = 0;
            Int32 count = ControlQuery.Count;
            for (i = 0; i < count; i++)
            {
                myQuery = ControlQuery.Dequeue();
                if (myQuery.IsDisposed)
                {
                    continue;
                }
                Node = (ControlInfo)MyControlInfoList_Init[i];
                myQuery.Height = (Int32)(Node.Height * (MainDlg_H_Curr / (double)MainDlg_H_Init));
                myQuery.Width = (Int32)(Node.Width * (MainDlg_W_Curr / (double)MainDlg_W_Init));
                myQuery.Location = new Point((Int32)(Node.Loc_X * (MainDlg_W_Curr / (double)MainDlg_W_Init)),
                                               (Int32)(Node.Loc_Y * (MainDlg_H_Curr / (double)MainDlg_H_Init)));
            }
        }

    }
}

2.示例使用代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Common;
namespace 缩放代码
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private AutoControlSize controlsize=new AutoControlSize();
        private void Form1_Load(object sender, EventArgs e)
        {
            controlsize.RegisterFormControl(this);
            this.SizeChanged += Form1_SizeChanged; ;
        }

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            controlsize.ChangeFormControlSize(this);
        }
    }
}

3.缩放前窗体

4.放大后窗体

 

posted @ 2022-05-12 17:19  田宏伟_thw  阅读(415)  评论(0编辑  收藏  举报