Winform控件大小随窗体缩放

创建类文件 AutoSizeFormClass

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

namespace WindowsFormsApp1
{
    public static class AutoSizeFormClass
    {
        public static float X;
        public static float Y;

        public static void setTag(Control cons)
        {
            foreach (Control con in cons.Controls)
            {
                con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
                if (con.Controls.Count > 0)
                {
                    setTag(con);
                }
            }
        }

        public static void setControls(float newx, float newy, Control cons)
        {
            foreach (Control con in cons.Controls)
            {

                if (con.Tag != null)
                {
                    string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
                    float a = Convert.ToSingle(mytag[0]) * newx;
                    con.Width = (int)a;
                    a = Convert.ToSingle(mytag[1]) * newx;
                    con.Height = (int)a;
                    a = Convert.ToSingle(mytag[2]) * newx;
                    con.Left = (int)a;
                    a = Convert.ToSingle(mytag[3]) * newx;
                    con.Top = (int)a;
                    Single currentSize = Convert.ToSingle(mytag[4]) * Math.Min(newx, newy);
                    con.Font = new System.Drawing.Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                    if (con.Controls.Count > 0)
                    {
                        setControls(newx, newy, con);
                    }
                }
            }
        }
    }
}

在Form窗体下增加以下代码

public partial class Form1 : Form
{
    [DllImport("user32")]
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
    private const int WM_SETREDRAW = 0xB;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        SendMessage(this.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
        float newx = (this.Width) / AutoSizeFormClass.X;
        float newy = this.Height / AutoSizeFormClass.Y;
        AutoSizeFormClass.setControls(newx, newy, this);
        SendMessage(this.Handle, WM_SETREDRAW, 1, IntPtr.Zero);
        this.Invalidate(true);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.Resize += new EventHandler(Form1_Resize);
        AutoSizeFormClass.X = this.Width;
        AutoSizeFormClass.Y = this.Height;
        AutoSizeFormClass.setTag(this);
        Form1_Resize(new object(), new EventArgs());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值