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

news2025/5/10 4:28:08

放大前  放大后

 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.coloradmin.cn/o/2329641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

infinityfree最新免费建站详细教程_无需备案_5G空间_无限流量_免费域名_免费SSL

一、明确目标—是否要使用 1.为什么选择InfinityFree? 对于初学者、学生或只是想尝试网站搭建的个人用户来说,InfinityFree提供了一个绝佳的免费解决方案。这个国外免费的虚拟主机服务提供: 5GB存储空间 - 足以存放个人博客、作品集或小型…

打造高效英文单词记忆系统:基于Python的实现与分析

在当今全球化的世界中,掌握一门外语已成为必不可少的技能。对于许多学习者来说,记忆大量的英文单词是一个漫长而艰难的过程。为了提高学习效率,我们开发了一个基于Python的英文单词记忆系统。这个系统结合了数据管理、复习计划、学习统计和测试练习等多个模块,旨在为用户提…

node_modules\deasync: Command failed.

运行:“yarn install” 时报错 PS D:\WebPro\hainan-mini-program> yarn install yarn install v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... warning " > babel-loader8.2.2" has un…

游戏引擎学习第206天

回顾并为当天的工作定下目标 接着回顾了前一天的进展。之前我们做了一些调试功能,并且已经完成了一些基础的工作,但是还有一些功能需要继续完善。其中一个目标是能够展示实体数据,以便在开发游戏逻辑系统时,可以清晰地查看和检查…

Zapier MCP:重塑跨应用自动化协作的技术实践

引言:数字化协作的痛点与突破 在当今多工具协同的工作环境中,开发者与办公人员常常面临数据孤岛、重复操作等效率瓶颈。Zapier推出的MCP(Model Context Protocol)协议通过标准化数据交互框架,为跨应用自动化提供了新的…

蓝桥云客--破译密码

5.破译密码【算法赛】 - 蓝桥云课 问题描述 在近期举办的蓝桥杯竞赛中,诞生了一场激动人心的双人破译挑战。比赛的主办方准备了N块神秘的密码芯片,参赛队伍需要在这场智力竞赛中展示团队合作的默契与效率。每个队伍需选出一位破译者与一位传输者&#…

React-Diffing算法和key的作用

1.验证Diffing算法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

【NLP 54、大模型训练相关知识】

目录 引言&#xff1a;大模型训练两大问题 一、并行训练 1.方式一&#xff1a;数据并行 DP ① 复制模型到多个GPU ② 各自计算梯度后累加&#xff0c;再反传更新 ③ 需要单卡就能训练整个模型&#xff08;显存够大&#xff09; 2.方式二&#xff1a;模型并行 PP ① 将模型的不同…

cursor机器码重置

1、下载vscode插件 cursor-fake-machine-0.0.2 2、将插件拖入拓展 3、彻底将cursor账号退出 setting -> Manage -> 退出账号 4、打开cursor&#xff0c;ctrlshiftp &#xff0c;输入fake,点击确定

全国产FMC子卡-16bit 8通道2.4G

国产化FMC DA子卡&#xff0c;16bit 8通道2.4GS/s 全国产FMC子卡是一款高分辨率、高采样率的全国产多通道标准双宽DAC FMC子板。其接口电气和结构设计均依据FMC标准(ANSI/VITA 57.1)&#xff0c;通过两个高密度FMC连接器&#xff08;HPC&#xff09;连接至FPGA载板。它提供8路A…

fpga:分秒计时器

任务目标 分秒计数器核心功能&#xff1a;实现从00:00到59:59的循环计数&#xff0c;通过四个七段数码管显示分钟和秒。 复位功能&#xff1a;支持硬件复位&#xff0c;将计数器归零并显示00:00。 启动/暂停控制&#xff1a;通过按键控制计时的启动和暂停。 消抖处理&#…

小白 thingsboard 拆分前后端分离

1、modules 里注释掉ui_ugx <modules><module>netty-mqtt</module><module>common</module><module>rule-engine</module><module>dao</module><module>edqs</module><module>transport</module&g…

4G专网:企业数字化转型的关键通信基石

4G专网 在数字化转型的浪潮下&#xff0c;企业对高可靠性、低时延、安全可控的通信网络需求日益增长。传统的公用蜂窝网络难以满足企业在工业自动化、能源管理、智慧城市等领域的特殊需求&#xff0c;因此4G专网成为众多行业的优先选择。作为行业领先的移动核心网提供商&#x…

基于FLask的共享单车需求数据可视化分析系统

【FLask】基于FLask的共享单车需求数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够整合并处理大量共享单车使用数据&#xff0c;通过直观的可视化手段&#xff0…

STL 性能优化实战:解决项目中标准模板库的性能瓶颈

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师&#xff0c;数学与应用数学专业&#xff0c;10年以上多种混合语言开发经验&#xff0c;从事DICOM医学影像开发领域多年&#xff0c;熟悉DICOM协议及…

ES使用聚合aggregations实战(自用:2025.04.03更新)

ES使用聚合aggregations实战 聚合模板桶聚合&#xff1a;Bucket Aggregations指标聚合&#xff1a;Metrics Aggregations管道聚合&#xff1a;Pipeline Aggregations嵌套聚合日期直方图&#xff1a;date-histogram 接口实战接口一&#xff1a;根据stu_id分组统计时间段内的各个…

AI Agent设计模式四:Evaluator

概念 &#xff1a;质量验证与反馈机制 ✅ 优点&#xff1a;自动化质量检查&#xff0c;实现持续优化闭环❌ 缺点&#xff1a;评估准确性依赖模型能力 from typing import TypedDict from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, START, …

AI绘画中的LoRa是什么?

Lora是一个多义词&#xff0c;根据不同的上下文可以指代多种事物。以下将详细介绍几种主要的含义&#xff1a; LoRa技术 LoRa&#xff08;Long Range Radio&#xff09;是一种低功耗广域网&#xff08;LPWAN&#xff09;无线通信技术&#xff0c;以其远距离、低功耗和低成本的特…

Linux网络:数据链路层以太网

目录 认识数据链路层关于以太网1. 基本概念2. 以太网帧格式3. MAC vs IP 认识数据链路层 数据链路层 位于物理层和网络层之间&#xff0c;其作用是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层&#xff0c;主要通过物理介质(如以太网&#xff0c;Wi-Fi等)将数…

MySQL基础 [一] - 数据库基础

目录 什么是数据库 站在服务器角度理解 站在用户角度理解 为什么不直接使用文件存储呢&#xff1f; 主流数据库 MySQL的基本使用 数据库的使用样例 服务器管理 服务器数据库表之间的关系 MySQL的架构 MySQL语句分类 存储引擎 查看存储引擎 存储引擎对比 什么…