当前位置: 首页 > news >正文

C# Winform 入门(3)之尺寸同比例缩放

放大前  放大后

 1.定义当前窗体的宽度和高度

 private float x;//定义当前窗体的宽度
 private float y;//定义当前窗台的高度

2.接收当前窗体的尺寸大小

  x = this.Width;//存储原始宽度
  y=this.Height;//存储原始高度
  setTag(this);//为控件设置 Tag 属性

3.声明方法,获取控件中的每个尺寸

 private void setTag(Control control)
 {
     foreach(Control con in control.Controls)
     {
         //Tag属性   宽度    高度   左边缘  顶部  字体大小
         con.Tag=con.Width+";"+con.Height+";"+con.Left+";"+con.Top+";"+con.Font.Size;
         if(con.Controls.Count > 0 )
         {
             setTag(con); //递归为子控件设置   Tag
         }
     }
 }

4.遍历控件尺寸,拿新的尺寸进行比例扩大

private void setControls(float newx,float newy,Control control)
{
    foreach(Control con in control.Controls)
    {
        if(con.Tag!=null)
        {
            string[]mytag=con.Tag.ToString().Split(';');
            con.Width = Convert.ToInt32(float.Parse(mytag[0])*newx);
            con.Height = Convert.ToInt32(float.Parse(mytag[1])*newy);
            con.Left = Convert.ToInt32(float.Parse(mytag[2]) * newx);
            con.Top = Convert.ToInt32(float.Parse(mytag[3]) * newy);
            float currrentSize=float.Parse(mytag[4])*newy;
            // Font.Unit 返回的是一个度量单位
            con.Font=new Font(con.Font.Name,currrentSize,con.Font.Style,con.Font.Unit);
            if(con.Controls.Count > 0 )
            {
                setControls(newx,newy,con);//递归调整子控件的大小和位置
            }
        }
    }
}

5.窗体尺寸变化事件

private void Form1_Resize(object sender, EventArgs e)
{
    float newx = this.Width / x; // 计算宽度的缩放比例
    float newy = this.Height / y; // 计算高度的缩放比例
    setControls(newx,newy,this); // 调整控件的大小和位置
}

整体代码

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;

namespace _03.resizeForm
{
    public partial class Form1 : Form
    {
        private float x;//定义当前窗体的宽度
        private float y;//定义当前窗台的高度
        public Form1()
        {
            InitializeComponent();
            x = this.Width;//存储原始宽度
            y=this.Height;//存储原始高度
            setTag(this);//为控件设置 Tag 属性
        }
        private void setTag(Control control)
        {
            foreach(Control con in control.Controls)
            {
                con.Tag=con.Width+";"+con.Height+";"+con.Left+";"+con.Top+";"+con.Font.Size;
                if(con.Controls.Count > 0 )
                {
                    setTag(con); //递归为子控件设置   Tag
                }
            }
        }
        private void setControls(float newx,float newy,Control control)
        {
            foreach(Control con in control.Controls)
            {
                if(con.Tag!=null)
                {
                    string[]mytag=con.Tag.ToString().Split(';');
                    con.Width = Convert.ToInt32(float.Parse(mytag[0])*newx);
                    con.Height = Convert.ToInt32(float.Parse(mytag[1])*newy);
                    con.Left = Convert.ToInt32(float.Parse(mytag[2]) * newx);
                    con.Top = Convert.ToInt32(float.Parse(mytag[3]) * newy);
                    float currrentSize=float.Parse(mytag[4])*newy;
                    // Font.Unit 返回的是一个度量单位
                    con.Font=new Font(con.Font.Name,currrentSize,con.Font.Style,con.Font.Unit);
                    if(con.Controls.Count > 0 )
                    {
                        setControls(newx,newy,con);//递归调整子控件的大小和位置
                    }
                }
            }
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            float newx = this.Width / x; // 计算宽度的缩放比例
            float newy = this.Height / y; // 计算高度的缩放比例
            setControls(newx,newy,this); // 调整控件的大小和位置
        }
    }
}

http://www.dtcms.com/a/106416.html

相关文章:

  • 山东大学《多核平台下的并行计算》实验笔记
  • Mysql+Demo 获取当前日期时间的方式
  • 17查询文档的方式
  • CASAIM与哈尔滨电气集团达成战略合作,三维智能检测技术赋能电机零部件生产智造升级
  • 【DRAM存储器四十九】LPDDR5介绍--LPDDR5的低功耗技术之power down、deep sleep mode
  • ContextVars 在 FastAPI 中的使用
  • 最新26考研资料分享考研资料合集 百度网盘(仅供参考学习)
  • 逻辑漏洞之越权访问总结
  • LeetCode 2761 和等于目标值的质数对
  • Anywhere文章精读
  • c# 如何利用redis存储对象,并实现快速查询
  • 实时显示符合条件的完整宋词
  • 基于 DeepSeek 与天地图搭建创新地理信息应用
  • STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
  • 使用ctags+nvim自动更新标签文件
  • 基于springboot汽车租赁系统
  • 【百日精通JAVA | SQL篇 | 第二篇】数据库操作
  • K8S集群搭建 龙蜥8.9 Dashboard部署(2025年四月最新)
  • 云计算:数字化转型的核心引擎
  • 硬件工程师零基础入门教程(三)
  • 淘天集团Java开放岗暑期实习笔试(2025年4月2日)
  • 数据结构B树的实现
  • 3D Mapping秀制作:沉浸式光影盛宴 3D mapping show
  • Linux | I.MX6ULL内核及文件系统源码结构(7)
  • Java 基础-30-单例设计模式:懒汉式与饿汉式
  • 一份关于近期推理模型研究进展的报告
  • PostgreSQL DDL 语句基本语法概览
  • 程序化广告行业(51/89):Cookie映射与移动设备ID映射解析
  • ARC缓存淘汰算法
  • 青少年编程与数学 02-015 大学数学知识点 03课题、概率论和数理统计