运行窗体效果如下:

默认点击最大化效果如下:

修改后最大化效果如下:控件自动缩放,

步骤实现如下:

1.在窗体中放一个容器(Panel),将容器的Dock属性设置为Fill。窗体中所有控件都放入这个容器中。

2.创建一个窗体类,该窗体类继承于原始窗体类,原来的窗体继承创建的窗体类:如下图所示

新建一个 NForm 窗体类,继承默认窗体类 Form ,而原来的 Form1 :Form 窗体类继承的默认窗体类修改为 Form1 :NForm 自定义新建的窗体类。

新建窗体类代码如下:

  public partial class NForm : Form{#region 控件缩放double formWidth;//窗体原始宽度double formHeight;//窗体原始高度double scaleX;//水平缩放比例double scaleY;//垂直缩放比例Dictionary<string, string> controlInfo = new Dictionary<string, string>();//控件中心Left,Top,控件Width,控件Height,控件字体Size/// <summary>/// 获取所有原始数据/// </summary>protected void GetAllInitInfo(Control CrlContainer){if (CrlContainer.Parent == this){formWidth = Convert.ToDouble(CrlContainer.Width);formHeight = Convert.ToDouble(CrlContainer.Height);}foreach (Control item in CrlContainer.Controls){if (item.Name.Trim() != "")controlInfo.Add(item.Name, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2) + "," + item.Width + "," + item.Height + "," + item.Font.Size);if ((item as UserControl) == null && item.Controls.Count > 0)GetAllInitInfo(item);}}private void ControlsChangeInit(Control CrlContainer){scaleX = (Convert.ToDouble(CrlContainer.Width) / formWidth);scaleY = (Convert.ToDouble(CrlContainer.Height) / formHeight);}private void ControlsChange(Control CrlContainer){double[] pos = new double[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Sizeforeach (Control item in CrlContainer.Controls){if (item.Name.Trim() != ""){if ((item as UserControl) == null && item.Controls.Count > 0)ControlsChange(item);string[] strs = controlInfo[item.Name].Split(',');for (int j = 0; j < 5; j++){pos[j] = Convert.ToDouble(strs[j]);}double itemWidth = pos[2] * scaleX;double itemHeight = pos[3] * scaleY;item.Left = Convert.ToInt32(pos[0] * scaleX - itemWidth / 2);item.Top = Convert.ToInt32(pos[1] * scaleY - itemHeight / 2);item.Width = Convert.ToInt32(itemWidth);item.Height = Convert.ToInt32(itemHeight);try{item.Font = new Font(item.Font.Name, float.Parse((pos[4] * Math.Min(scaleX, scaleY)).ToString()));}catch{}            }}}#endregionprotected override void OnSizeChanged(EventArgs e){base.OnSizeChanged(e);if (controlInfo.Count > 0){ControlsChangeInit(this.Controls[0]);ControlsChange(this.Controls[0]);}}}

新建的窗体类中主要包括自定义几个方法,用以实现控件自适应

(1)获取控件初始信息;GetAllInitInfo()              

(2)获取窗体缩放比例;ControlsChaneInit()             

(3)窗体改变时修改控件大小。ControlsChange()

最后。在窗体类的构造函数中调用获取初始数据的方法:

 public Form1(){InitializeComponent();GetAllInitInfo(this.Controls[0]);}

这样,一个自适应窗体就实现了,再也不用担心最大化和拖拽后窗体控件位置错位的尴尬了。如果对你有用,请赞一个,欢迎评论留言,更多资料信息请关注  QQ 733530469

Winform 窗体控件最大化自适应相关推荐

  1. winformbutton边框怎么改_C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法

    C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 1.新建组件这里可以自定义一个Panel控件起名为PanelEx 2.增加一个BoderColor属性和BoderSize属性 pr ...

  2. 如何在多线程中调用winform窗体控件2——实例篇

    如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...

  3. C#winform窗体控件之toolStrip

    C#winform窗体控件之toolStrip 在做窗体时我们可能需要一个工具栏,那这时最简单的方法就是添加一个toolStrip控件. 如何完成一个上图的工具栏呢? 首先,需要添加一个toolStr ...

  4. winform窗体控件

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

  5. Winform窗体控件自适应大小

    自己写的winform窗体自适应大小代码,代码比较独立,很适合贴来贴去不会对原有程序造成影响,可以直接继承此类或者把代码复制到自己的代码里面直接使用 借鉴了网上的一些资料,最后采用重写WndProc方 ...

  6. winform窗体控件多,加载慢、卡顿的解决办法

    protected override CreateParams CreateParams{get{CreateParams cp = base.CreateParams;cp.ExStyle |= 0 ...

  7. Visual Studio Winform窗体控件Menustrip

    首先介绍一下我们在使用这种编程软件时就会就会涉及到很多的控件与功能的了解,自己就是在做机房重构的时候因为用的是Visual Studio这个软件不知道怎么添加窗体的菜单,之前刚入门的时候是用的VB进行 ...

  8. C# 遍历窗体控件顺序问题

    今天在做C# winform 窗体控件遍历时遇到控件顺序的问题,也就是控件被遍历的先后问题.实际情况如下所述. 窗体界面如下: 界面构成是:主界面有一个 Panel (Panel_14),Panel_ ...

  9. Qt Creator 窗体控件自适应窗口大小布局

    常见的软件窗口大小改变(最大化.手动改变时)需要窗口的部件能够自适应布局,而在Qt的应用程序界面设计中,对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的.网上百度了很多,多数说的很含糊,还有 ...

最新文章

  1. NoSQL数据库探讨 - 为什么要用非关系数据库?
  2. Android系统启动-init篇
  3. python 示例_带有示例的Python File write()方法
  4. linux smb 启动失败,[已解决]windows能看到smb,但是打不开
  5. spring容器扩展功能之一:spring加载ApplicationContext.xml的四种方式
  6. 冒泡排序法应用排身高
  7. 事件冒泡与事件捕获,附实例
  8. am335x mysql_Ubuntu下编译ARM平台QtEmbedded的MySQL和MySQL插件
  9. Python可以这样学(第九季 机器学习案例与实战)-董付国-专题视频课程
  10. 老男孩高端linux培训2014业务服务范围
  11. iOS多线程之5.GCD的基本使用
  12. python的输入输出语句_Python基本输出语句/输入语句/变量解析
  13. 知识点收录01---关于Tomcat的一些知识点
  14. BDA,CDA,CPDA哪个证相对可靠?哪个含金量高?具体考试内容?
  15. LEWITT莱维特STREAM4x5、DGT260声卡安装调试教程
  16. 第一步:文献阅读与翻译
  17. 利用APPInventor开发手机APP,实现OBLOQ-IOT与Arduino设备通信
  18. UE4HTTP下载网速过慢问题
  19. 【MQTT】SpringBoot整合MQTT(EMQX)
  20. MAME模拟器debug帮助文档汉化二(常规指令)

热门文章

  1. Python3 实现淘女郎照片爬虫
  2. 基于AMESim的高功率密度LFP-C锂离子电池热失控仿真
  3. 6.S081 lab6 cow
  4. 平板电脑 android系统升级,【重磅升级】开源平板电脑(FSPAD-733)升级至Andriod6.0系统...
  5. oracle数据库实现汇总报表的方法
  6. JiaoZiVideoPlayer饺子视频播放器
  7. 郑豪8.31月K收官提防大洗盘,日K箱体先高空,黄金亚欧盘最新操作建议
  8. 干货 | 以模型为中心,携程契约系统的演进
  9. png图片crc32爆破宽和高
  10. Windows 上用putty 和 SwitchySharp [转自同事]