相信很多博友在开发初次接触学习C# winForm时,当窗体大小变化时,窗体内的控件并没有随着窗体的变化而变化,最近因为一个项目工程的原因,也需要解决这个问题。通过查阅和学习,这个问题得到了解决,或许不是很好的处理方式,但是也值得借鉴。。。

下面我将建立一个Demo来大概解释下这个方法的实现:(注:我使用的是的VS2010)

Step1:打开VS2010,建立一个C#Winform项目(注:这里我将其命名为test1,博友们可以自由发挥哈!)

建立之后拖拽控件达到如图所示效果:

Step2:右击,查看代码,在代码界面添加

1.定义全局变量

  1. private float X;//当前窗体的宽度
  2. private float Y;//当前窗体的高度

2.功能函数setTag

  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 > )
  11. setTag(con);
  12. }
  13. }

3.功能函数setControls

  1. //根据窗体大小调整控件大小
  2. private void setControls(float newx, float newy, Control cons)
  3. {
  4. //遍历窗体中的控件,重新设置控件的值
  5. foreach (Control con in cons.Controls)
  6. {
  7.  
  8. string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//获取控件的Tag属性值,并分割后存储字符串数组
  9. float a = System.Convert.ToSingle(mytag[]) * newx;//根据窗体缩放比例确定控件的值,宽度
  10. con.Width = (int)a;//宽度
  11. a = System.Convert.ToSingle(mytag[]) * newy;//高度
  12. con.Height = (int)(a);
  13. a = System.Convert.ToSingle(mytag[]) * newx;//左边距离
  14. con.Left = (int)(a);
  15. a = System.Convert.ToSingle(mytag[]) * newy;//上边缘距离
  16. con.Top = (int)(a);
  17. Single currentSize = System.Convert.ToSingle(mytag[]) * newy;//字体大小
  18. con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
  19. if (con.Controls.Count > )
  20. {
  21. setControls(newx, newy, con);
  22. }
  23. }
  24. }

4.在窗体的Load事件中添加

  1. private void Form1_Load(object sender, EventArgs e)
  2. {
  3. X = this.Width;//获取窗体的宽度
  4. Y = this.Height;//获取窗体的高度
  5. setTag(this);//调用方法
  6. }

5.在窗体的Resize事件中添加

  1. private void Form1_Resize(object sender, EventArgs e)
  2. {
  3. float newx = (this.Width) / X; //窗体宽度缩放比例
  4. float newy = (this.Height) / Y;//窗体高度缩放比例
  5. setControls(newx, newy, this);//随窗体改变控件大小
  6. }

Step3: 点击启动调试,至此该功能已经实现,是不是发现控件都可以等比例变化了!(over)

总结:当然这只是一个小Demo,在实际应用中,还需要各位博友的脑洞打开,才能更好的和各位的代码契合,更好的应用到实际的项目中去。这也是我的第一篇博文,虽然篇幅不长,但是内容还算充实吧!希望以后各位多多支持~

C#控件大小随窗体大小等比例变化的更多相关文章

  1. [改善] dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题

    问题:dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题 修改源码:ceffmx.pas 找到 procedure TCustomChromiumFMX.Resize; 修 ...

  2. Delphi让控件随着窗口的大小而改变

    Delphi让控件随着窗口的大小而改变方法1:设置Anchors属性,把akLeft,akTop,akRight,akBottom都设为True.方法2:设置Align属性,其值为alClient.

  3. Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)

    PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...

  4. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  5. 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体

    在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体ShowAllPage sAllPage = new ShowAllPage();   ...

  6. C:\\MFC控件大小随窗体大小而改变

    一.大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小. 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(): 注意 ...

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

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

  8. 【MFC系列】MFC快速设置控件文本字体、大小、颜色、背景

    以静态文本为例,分享一下怎么修改文本字体.大小.颜色.背景等参数.其他文本.控件等可参照修改. 1.修改字体.大小 这个很简单,首先在Dlg类中声明一个CFont类型的成员变量: 然后在类的初始化函数 ...

  9. swfupload控件文件上传大小限制设置

    swfupload控件,是我在开发过程中用到的上传文件的控件,非常实用和方便.但最近碰到一些问题,解决之后进行一下整理. 因为用户上传文件的大小限制增加,导致原本上传控件时,文件的大小需要进行调整和限 ...

随机推荐

  1. Recover a file even if it was not committed but it has to have been added when you use git reset head by mistake.

    git init echo hello >> test.txt git add test.txt Now the blob is created but it is referenced ...

  2. UI线程与worker线程

    也谈谈我对UI线程和worker线程的理解 UI线程又叫界面线程,能够响应操作系统的特定消息,包括界面消息.鼠标键盘消息.自定义消息等,是在普通的worker线程基础上加上消息循环来实现的,在这个消息 ...

  3. Attempt to call getDuration without a valid mediaplayer

    最近在做一个播放器的小例子,中途遇到 了这个错: Attempt to call getDuration without a valid mediaplayer 解决参考方案如下: 一是如果media ...

  4. var_dump(php)

    var_dump -- 打印变量的相关信息 描述 void var_dump ( mixed expression [, mixed expression [, ...]] ) 此函数显示关于一个或多 ...

  5. Fix The thread xxx has exited with code 259 (0×103)

    When run the test case in VS2013, you may encounter below problem After test case end, it will show ...

  6. 分享:一个基于NPOI的excel导入导出组件(强类型)

    一.引子 新进公司被安排处理系统的数据报表任务——对学生的考试成绩进行统计并能导出到excel.虽然以前也有弄过,但感觉不是很好,所以这次狠下心,多花点时间作个让自己满意的插件. 二.适用领域 因为需 ...

  7. webview的配置

    WebSettings的常用方法介绍 WebSettings 通过webview获得WebSettings 调用WebSettings 的方法,配置webview WebSettings webSet ...

  8. mud目录命令说明

      目錄結構 以下列出的是 ES2 mudlib 根目錄下標準的子目錄結構,以及簡短的說明. /adm 儲存由系統管理者所管理的程式與資料檔. /std 儲存標準物件的程式碼. /obj 儲存通用物件 ...

  9. Dnsmasq(局域网DNS,DHCP)

    安装:yum -y install dnsmasq   dnsmasq配置文件: /etc/dnsmasq.conf 默认指定DNS服务器(优先级)文件:/etc/resolv.conf 默认host ...

  10. 用“U盘”重新安装(MSDN)原版Windows XP sp3操作系统(图文)

    安装微软(MSDN)原版Windows XP sp3系统的方法不少,可以说是很多,但是我就用“U盘”安装.用“U盘”装XP系统也不是什么稀罕事,不会的,就按照下面我常用的“U盘”装原版Windows ...