一、首先定义全局变量

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 }

那么,一个简单的窗体改变大小,其里面的控件会根据其窗体等比例改变,就不会出现格式乱套的情况了。

转载于:https://www.cnblogs.com/scc-/p/10831357.html

C#窗体内控件大小随窗体等比例变化相关推荐

  1. VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用

    代码如下: Option Explicit Private ObjOldWidth     As Long       '保存窗体的原始宽度 Private ObjOldHeight     As L ...

  2. C#如何实现窗体控件大小随窗体大小变化(包括字体)

    如图,拖动窗体即可改变控件大小(包括字体) 窗体尺寸:345*315 窗体尺寸:603*509 项目资源如下 源码如下 using System; using System.Collections.G ...

  3. wpf 控件大小随窗体大小改变而改变

    WPF可以直接通过设置图形类控件的水平和垂直Alighment为Stretch实现 用一个ViewBox装上所有的Window内容然后当window缩放时就可以一起放大缩小了 ViewBox的显示机制 ...

  4. VC/MFC 控件置顶 窗体内控件置顶

    窗体内指定某个控件置顶,使用SetWindowPos函数.但不能这样用    ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOS ...

  5. MFC Tab背景颜色及窗体内控件背景颜色更改

    整体效果图如下: 1.Tab标签页改变背景颜色 主要参照的是以下链接中的案例进行的修改,有需要的可以参考:http://download.csdn.net/detail/u014272404/9797 ...

  6. C# Winform Panel 内控件大小不随Panel大小改变设置

    (1)将Anchor属性设置为:None (2)将AutoSize属性设置为:False 不过还存在一个问题点,就是Button的位置还是会随着Panel大小变化而改变.

  7. access窗体转换html,Access窗体之间控件的传值三种方式

    Access窗体间的数据是如何传递的?前面有发过子窗体的数据传递.今天讲解3种方法传递窗体里的数据: 如有窗体"传递窗体"和"接收窗体"两个窗体,通过" ...

  8. matlab GUI窗口最大化,以及控件大小和字体自适应

    1.GUI 窗口最大化 双击除控件外的空白处(视图)>属性检查器>resize>on即可. 设置完这个,当放大的时候,会发现我们控件的位置没有变化.此时我们需要设置一个. 工具> ...

  9. 控件-Win Forms窗体控件

    在项目开发中,界面设计是一个很重要的方面.好的界面应该使操作者容易掌握.赏心悦目,把操作看作是一种享受而不是负担.Visual C#.Net提供了丰富的控件,大大简化了界面设计过程. 在桌面应用程序中 ...

最新文章

  1. C#Array(数组) 一维、多维数组
  2. Network Request Failed
  3. R语言入门(3)——R包的使用
  4. DVWA模块使用教程(二)
  5. [每日一氵] Python 写程序专用 log 分享
  6. 富爸爸系列:富爸爸穷爸爸实践
  7. 操作系统经典独木桥问题
  8. 世界顶级公司的前端面试都问些什么
  9. 2019互联网行业面试资料合集
  10. http劫持的原理与过程,HTTP被劫持怎么办?
  11. 山东理工大学pta答案 C语言,山东理工大学高分子化学题库附答案.docx
  12. 《千与千寻》高清下载
  13. quartz集群模式下qrtz_triggers表trigger_state变ERROR分析
  14. python开发可以用idea吗_IntelliJ IDEA 开发Python配置
  15. 产品群面:在无领导小组讨论中脱颖而出!
  16. 三坐标检测之工件检测选择合适测针
  17. Photoshop动画制作
  18. 《JavaWeb从入门到改行》多重外键关系在java中的处理方案
  19. 如何选择适合自己门店的收银系统呢?
  20. 中国石油大学《微观经济学》第二次在线作业

热门文章

  1. 从 github 执行 git clone 一个大的项目时提示 error: RPC failed
  2. [MySQL]--gt;查询5天之内过生日的同事中的闰年2月29日问题的解决过程
  3. 【C语言学习】国嵌21__指针基础
  4. ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程应用程序域(七)...
  5. Exchange 默认数据库删除问题
  6. rocksdb写放大_Rocksdb的优劣及应用场景分析
  7. java的部署目录在哪里_Java:Tomcat的部署实例之资源目录
  8. Redis分布式锁的实现原理
  9. leader选举的原理
  10. PrepareStatement 和Statement 的区别?