C#窗体内控件大小随窗体等比例变化
一、首先定义全局变量
1 private float X;//当前窗体的宽度
2 private float Y;//当前窗体的高度
3 private bool IsFirst = true;
二、定义一下两个函数
1 /// <summary>
2 /// 将控件的宽,高,左边距,顶边距和字体大小暂存到tag属性中
3 /// </summary>
4 /// <param name="cons">递归控件中的控件</param>
5 private void setTag(Control cons)
6 {
7 foreach (Control con in cons.Controls)
8 {
9 con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
10 if (con.Controls.Count > 0)
11 setTag(con);
12 }
13 }
14 //根据窗体大小调整控件大小
15 private void setControls(float newx, float newy, Control cons)
16 {
17 //遍历窗体中的控件,重新设置控件的值
18 foreach (Control con in cons.Controls)
19 {
20
21 string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//获取控件的Tag属性值,并分割后存储字符串数组
22 float a = System.Convert.ToSingle(mytag[0]) * newx;//根据窗体缩放比例确定控件的值,宽度
23 con.Width = (int)a;//宽度
24 a = System.Convert.ToSingle(mytag[1]) * newy;//高度
25 con.Height = (int)(a);
26 a = System.Convert.ToSingle(mytag[2]) * newx;//左边距离
27 con.Left = (int)(a);
28 a = System.Convert.ToSingle(mytag[3]) * newy;//上边缘距离
29 con.Top = (int)(a);
30 Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小
31 con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
32 if (con.Controls.Count > 0)
33 {
34 setControls(newx, newy, con);
35 }
36 }
37 }
三、给窗体添加事件
1 private void Form1_Load(object sender, EventArgs e)
2 {
3 X = this.Width;//获取窗体的宽度
4 Y = this.Height;//获取窗体的高度
5 setTag(this);//调用方法
6 }
这里需要注意一下,是否第一次运行程序
1 private void Form1_Resize(object sender, EventArgs e)
2 {
//如果是第一次运行,需要把下面的if语句取消注释,否则会没反应,其以后再运行或调试的时候,就把它注释即可
3 //if (IsFirst) { IsFirst = false; return; }
4 float newx = (this.Width) / X; //窗体宽度缩放比例
5 float newy = (this.Height) / Y;//窗体高度缩放比例
6 setControls(newx, newy, this);//随窗体改变控件大小
7 }
那么,一个简单的窗体改变大小,其里面的控件会根据其窗体等比例改变,就不会出现格式乱套的情况了。
C#窗体内控件大小随窗体等比例变化的更多相关文章
- C#控件大小随窗体大小等比例变化
相信很多博友在开发初次接触学习C# winForm时,当窗体大小变化时,窗体内的控件并没有随着窗体的变化而变化,最近因为一个项目工程的原因,也需要解决这个问题.通过查阅和学习,这个问题得到了解决,或许 ...
- C:\\MFC控件大小随窗体大小而改变
一.大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小. 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(): 注意 ...
- winform 控件大小随着窗体自适应
3个方法: #region 控件缩放变量 double formWidth;//窗体原始宽度 double formHeight;//窗体原始高度 doubl ...
- wpf 控件大小随窗体大小改变而改变
WPF可以直接通过设置图形类控件的水平和垂直Alighment为Stretch实现用一个ViewBox装上所有的Window内容然后当window缩放时就可以一起放大缩小了ViewBox的显示机制是, ...
- Qt窗体内控件自适应调整大小
http://stackoverflow.com/questions/3492739/auto-expanding-layout-with-qt-designer After creating you ...
- VS中 Winform查看窗体内控件之间的相互关系
视图----其他窗口----文档大纲 这样可以查看之前的窗体布局关系
- 最佳实践扩展Windows窗体DataGridView控件 .net 4.5 附示例代码
Windows窗体DataGridView控件的性能调优.net 4.5 在处理大量数据时, DataGridView 控制可以消耗大量的内存开销,除非你仔细地使用它. 在客户有限的内存,你可以避 ...
- C# ——窗体和控件随着分辨率的变化自适应大小
一.说明 我们自己编写程序的界面,会遇到各种屏幕分辨 率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比 ...
- [改善] dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题
问题:dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题 修改源码:ceffmx.pas 找到 procedure TCustomChromiumFMX.Resize; 修 ...
- 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)
实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...
随机推荐
- 力扣551(java)-学生出勤记录Ⅰ(简单)
题目: 给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent,缺勤'L':Late,迟到'P':Pres ...
- 力扣385(java)-迷你语法分析器(中等)
题目: 给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger . 列表中的每个元素只可能是整数或整数嵌套列表 示例 1: 输入:s = &q ...
- 暑期集训 Day11 —— 模拟赛复盘
${\color{Green} \mathrm{Problem\ 1 :Subarray }} $ 签到失败... 直接二进制分组,找出所有二进制位=0 的方法. 死因: 二进制分组没想出来... $ ...
- 转载 | 基于阿里云Serverless函数计算开发的疫情数据统计推送机器人
简介: 本文选自函数计算征集令优秀征文! 一.Serverless函数计算 什么是Serverless? 在<Serverless Architectures>中对 Serverless ...
- 5G新基建 边缘计算乘风破浪
作者 | 张羽辰(同昭)阿里云交付专家 导读:如今,几乎所有的事情都离不开软件,当你开车时,脚踩上油门,实际上是车载计算机通过力度感应等计算输出功率,最终来控制油门,你从未想过这会是某个工程师的代码. ...
- “让专业的人做专业的事”,畅捷通与阿里云的云原生故事 | 云原生 Talk
简介: 如何借助阿里云强大的 IaaS 和 PaaS 能力去构建新一代的 SaaS 企业应用,从而给客户提供更好.更强的服务,这是畅捷通一直在思考和实践的方向.最终,畅捷通选定阿里云企业级分布式应用服 ...
- 技术干货 | 阿里云数据库PostgreSQL 13大版本揭秘
简介: 阿里云RDS PostgreSQL是一款兼容开源PostgreSQL的全托管云数据库产品,自2015年首次发布以来,根据用户需求不断升级迭代,已支持9.4.10.11.12等多个版本,覆盖了高 ...
- Go Mysql Driver 集成 Seata-Golang 解决分布式事务问题
简介: 2020 年 4 月,我们开始尝试实现 go 语言的分布式事务框架 Seata-Golang.众所周知,Seata AT 模式以无业务代码侵入的特点,被广大开发者推崇.Java 版 Seata ...
- dotnet 理解 IConfigurationProvider 的 GetChildKeys 方法用途
我最近遇到了一个有趣的 Bug 让我调试了半天,这个 Bug 的现象是我的好多个模块都因为读取不到配置信息而炸掉,开始我没有定位到具体的问题,以为是我的配置服务器挂掉了.经过了半天的调试,才找到了是我 ...
- WPF 多线程下跨线程处理 ObservableCollection 数据
本文告诉大家几个不同的方法在 WPF 里,使用多线程修改或创建 ObservableCollection 列表的数据 需要明确的是 WPF 框架下,非 UI 线程直接或间接访问 UI 是不合法的,设计 ...