zoukankan      html  css  js  c++  java
  • C#窗体最大化最小化等比例缩放

    不废话,直接代码

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    /// <summary>
    /// 20200620 likewei for the windows maxsize
    /// </summary>
    namespace WindowsFormsApp1
    {
        public class WindowZoom
        {
    
            private float x;//当前窗体的宽度
            private float y;//当前窗体的高度
    
            public void SetForm(Control form)
            {
                x = form.Width;           
                y = form.Height;
                SetTag(form);
            }
    
            public void SetReSize(Control form)
            {
                float reSizeX = (form.Width) / x;
                float reSizeY = (form.Height) / y;
    
                SetControls(reSizeX, reSizeY, form);
            }
    
            private void SetTag(Control controls)
            {
                foreach (Control ctr in controls.Controls)
                {
                    ctr.Tag = ctr.Width + ";" + ctr.Height + ";" + ctr.Left + ";" + ctr.Top + ";" + ctr.Font.Size;
                    if (ctr.Controls.Count > 0)
                    {
                        SetTag(ctr);
                    }
                }
            }
    
            private void SetControls(float reSizeX, float reSizeY, Control controls)
            {
                //遍历窗体中的控件,重新设置控件的值
                foreach (Control ctr in controls.Controls)
                {
                    //获取控件的Tag属性值,并分割后存储字符串数组
                    if (ctr.Tag != null)
                    {
                        string[] mytag = ctr.Tag.ToString().Split(new char[] { ';' });
                        //根据窗体缩放的比例确定控件的值
                        ctr.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * reSizeX);//宽度
                        ctr.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * reSizeY);//高度
                        ctr.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * reSizeX);//左边距
                        ctr.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * reSizeY);//顶边距
                        Single currentSize = System.Convert.ToSingle(mytag[4]) * reSizeY;//字体大小
                        ctr.Font = new Font(ctr.Font.Name, currentSize, ctr.Font.Style, ctr.Font.Unit);
                        if (ctr.Controls.Count > 0)
                        {
                            SetControls(reSizeX, reSizeY, ctr);
                        }
                    }
                }
            }
    
    
        }
    }

    使用

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {      
    
            WindowZoom windowZoom = new WindowZoom();
            public Form1()
            {
                InitializeComponent();         
                windowZoom.SetForm(this);
            }
            
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            private void Form1_Resize(object sender, EventArgs e)
            {           
    
                windowZoom.SetReSize(this);
            }
        }
    }
  • 相关阅读:
    微服务划分的姿势
    微服务的时间和成本去哪儿了
    假如你是架构师,你要做些什么
    说透代码评审
    从哲学层面浅谈计算机学习方法论
    分布式事务:两阶段提交与三阶段提交
    敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum
    敏捷史话(三):笃定前行的勇者——Ken Schwaber
    敏捷史话(二):Scrum社区的悲剧性损失——Mike Beedle
    敏捷史话(一):用一半的时间做两倍的事——Scrum之父Jeff Sutherland
  • 原文地址:https://www.cnblogs.com/ike_li/p/13169445.html
Copyright © 2011-2022 走看看