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.mzph.cn/bicheng/75852.shtml

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

相关文章

从零开始的编程-java篇1.6.3

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

【Redis】数据的淘汰策略

目录 淘汰策略方案(8种) LRU和LFU策略的区别 使用建议 手搓LRU算法 方式一 方式二 大家好,我是jstart千语。今天和大家回来聊一下redis,这次要讲的是它的淘汰策略。为什么需要淘汰策略呢,就是当redis里面的内存占…

【前端】Node.js一本通

近两天更新完毕,建议关注收藏点赞。 目录 复习Node.js概述使用fs文件系统模块path路径模块 http模块 复习 为什么JS可以在浏览器中执行 原理:待执行的JS代码->JS解析引擎 不同的浏览器使用不同的 JavaScript 解析引擎:其中,C…

【AI论文】JavisDiT: 具备层次化时空先验同步机制的联合音视频扩散Transformer

摘要:本文介绍了一种新型的联合音频-视频扩散变换器JavisDiT,该变换器专为同步音频-视频生成(JAVG)而设计。 基于强大的扩散变换器(DiT)架构,JavisDiT能够根据开放式用户提示同时生成高质量的音…

Java-实现公有字段自动注入(创建人、创建时间、修改人、修改时间)

文章目录 Mybatis-plus实现自动注入定义 MetaObjectHandler配置 MyBatis-Plus 使用 MetaObjectHandler实体类字段注解使用服务类进行操作测试 Jpa启用审计功能实现自动注入添加依赖启动类启用审计功能实现AuditorAware接口实体类中使用审计注解 总结 自动注入创建人、创建时间、…

金融机构开源软件风险管理体系建设

开源软件为金融行业带来了创新活力的同时,也引入了一系列独特的风险。金融机构需要构建系统化的风险管理体系,以识别和应对开源软件在全生命周期中的各种风险点。下面我们将解析开源软件在金融场景下的主要风险类别,并探讨如何建立健全的风险…

图形渲染中的定点数和浮点数

三种API的NDC区别 NDC全称,Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下: featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…

同花顺客户端公司财报抓取分析

目标客户端下载地址:https://ft.51ifind.com/index.php?c=index&a=download PC版本 主要难点在登陆,获取token中的 jgbsessid (每次重新登录这个字段都会立即失效,且有效期应该是15天的) 抓取jgbsessid 主要通过安装mitmproxy 使用 mitmdump + 下边的脚本实现监听接口…

QT工程建立

打开软件新建一个工程 选择chose 工程命名,选择保存路径,可以自己选择,但是不要有中文路径 默认的直接下一步 任意选一个下一步 点击完成 之后是这个界面,点击右下角的绿色三角形编译一下 实验内容 添加类 第一个是建立cpp和.h文件…

【NLP 53、投机采样加速推理】

目录 一、投机采样 二、投机采样改进:美杜莎模型 流程 改进 三、Deepseek的投机采样 流程 Ⅰ、输入文本预处理 Ⅱ、引导模型预测 Ⅲ、候选集筛选(可选) Ⅳ、主模型验证 Ⅴ、生成输出与循环 骗你的,其实我在意透了 —— 25.4.4 一、…

ffmpeg时间基与时间戳

时间基、时间戳 时间基:表示时间单位的分数,用来定义视频或音频流中时间的精度。其形式是一个分数,分子通常为 1,而分母则表示每秒的单位数。 时间戳:代表在时间轴里占了多少个格子,是特定的时间点。 时间…

激光加工中平面倾斜度的矫正

在激光加工中,加工平面的倾斜度矫正至关重要,直接影响加工精度和材料处理效果。以下是系统的矫正方法和步骤: 5. 验证与迭代 二次测量:加工后重新检测平面度,确认残余误差。 反馈优化:根据误差分布修正补偿…

算法刷题记录——LeetCode篇(2.2) [第111~120题](持续更新)

更新时间:2025-04-04 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 114. 二叉树展开为链表 给你二…

C语言学习笔记-9

九、结构体 构造类型: 不是基本类型的数据结构也不是指针类型, 它是若干个相同或不同类型的数据构成的集合 结构体类型: 结构体是一种构造类型的数据结构,是一种或多种基本类型或构造类型的数据的集合。 1.结构体类型定义 定…

Test——BUG篇

目录 一软件测试的生命周期 二BUG 1概念 2描述Bug 3Bug级别 4Bug的生命周期 三与开发人员发生争执怎么办 ​编辑1先自省:是否Bug描述不清晰 2站在用户角度考虑并抛出问题 3Bug定级有理有据 4不仅要提出问题,还要给出解决方案 5Bug评审 5.1…

【Block总结】HWAB,半小波注意力块|即插即用

论文信息 标题: HALF WAVELET ATTENTION ON M-NET+ FOR LOW-LIGHT IMAGE ENHANCEMENT 地址: arXiv:2203.01296 日期: 2022年3月 创新点 改进的分层架构 M-Net+: 提出了一个专为低光图像增强设计的改良分层模型 M-Net+。该架构旨在缓解采样过程中的空间信息损失问题。通过采用…

Spring 中的事务

🧾 一、什么是事务? 🧠 通俗理解: 事务 一组操作,要么全部成功,要么全部失败,不能只做一半。 比如你转账: A 账户扣钱B 账户加钱 如果 A 扣了钱但 B 没收到,那就出问…

Flutter极速接入IM聊天功能并支持鸿蒙

Flutter极速接入IM聊天功能并支持鸿蒙 如果你们也是Flutter项目,想快速接入聊天,包括聊天的UI界面,强烈推荐这一家。因为我们已经完成了集成,使用非常稳定,集成也非常快捷方便。 而且,就在今天&#xff0c…

C# 类库生成后自动复制到指定目录

C# 类库生成后自动复制到指定目录 在C#中,当你开发了一个类库项目(通常是.NET Core或.NET Framework项目),你可能会希望在构建(Build)完成后自动将生成的DLL文件复制到指定的目录。有几种方法可以实现这个需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…

13-产品经理-产品多分支平台管理

禅道16.0版本开始,优化和增强了产品的分支/平台功能,主要特点如下: 多分支/平台功能兼容各种大小型项目,项目/迭代可以关联对应产品的某个分支/平台。分支/平台支持灵活管理,可以把分支/平台理解为时间层面的概念&…