Winform动态设置TableLayoutPanel等宽高

简介: 转自博客: http://blog.csdn.net/langyuewu/article/details/38865423最近有个项目要修改,看完后果断决定重构,里面很多不规范的地方,布局大部分都是计算出来的,但是基本没有采用布局控件,不能自适应,其中有类似九宫格的布局方式,放在WPF,那真是一个控件秒秒钟能搞定的事情,好多年没做winform了,拿回来还是很容易上手。
转自博客:
http://blog.csdn.net/langyuewu/article/details/38865423

最近有个项目要修改,看完后果断决定重构,里面很多不规范的地方,布局大部分都是计算出来的,但是基本没有采用布局控件,不能自适应,其中有类似九宫格的布局方式,放在WPF,那真是一个控件秒秒钟能搞定的事情,好多年没做winform了,拿回来还是很容易上手。在winform里,最适合就是TableLayoutPanel了,本来简单的内容想不写,不过可能有人需要用到就放上来。

        废话说那么多了,进入正题,其实动态布局很简单,就是SizeType.Percent,大小100F就好了,代码如下。


[csharp]  view plain copy
  1. private void InitLayoutDemo()  
  2.         {  
  3.             TableLayoutPanel demoLayoutPanel = new TableLayoutPanel();  
  4.             demoLayoutPanel.Dock = DockStyle.Fill;  
  5.             this.Controls.Add(demoLayoutPanel);  
  6.             int row = 3, col = 3;  
  7.             DynamicLayout(demoLayoutPanel, row, col);  
  8.             for (int i = 0; i 
  9.             {  
  10.                 for (int j = 0; j 
  11.                 {  
  12.                     Button btn = new Button();  
  13.                     btn.Text = string.Format("({0},{1})", i, j);  
  14.                     btn.Dock = DockStyle.Fill;  
  15.                     demoLayoutPanel.Controls.Add(btn);  
  16.                     demoLayoutPanel.SetRow(btn, i);  
  17.                     demoLayoutPanel.SetColumn(btn, j);  
  18.                 }  
  19.             }  
  20.         }  
  21.   
  22.         ///   
  23.         /// 动态布局  
  24.         ///   
  25.         /// 布局面板  
  26.         /// 行  
  27.         /// 列  
  28.         private void DynamicLayout(TableLayoutPanel layoutPanel, int row, int col)  
  29.         {  
  30.             layoutPanel.RowCount = row;    //设置分成几行  
  31.             for (int i = 0; i 
  32.             {  
  33.                 layoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));  
  34.             }  
  35.             layoutPanel.ColumnCount = col;    //设置分成几列  
  36.             for (int i = 0; i 
  37.             {  
  38.                 layoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));  
  39.             }  
  40.         }  

注意,我这里TableLayoutPanel也是动态添加的,如果TableLayoutPanel是已经拖放到Form里面的,把原来的行列删剩一行一列,且保证都是百分比100%。
相关文章
|
Android开发
Android 11 修改libcore update-api 遇到的问题
Android 11 修改libcore update-api 遇到的问题
473 1
|
9月前
|
机器学习/深度学习 资源调度 算法
机器学习领域必知数学符号与概念(一)
本文介绍了一些数学符号以及这些符号的含义。
691 65
|
6月前
|
SQL 安全 数据处理
《敏感数据的保护伞:SQL数据脱敏全解析》
在数据驱动的时代,敏感数据的安全保护至关重要,而数据脱敏成为关键解决方案。数据脱敏通过特定算法将敏感信息转化为低风险数据,既保障安全又保留数据价值。SQL作为强大的数据处理语言,在数据脱敏中发挥核心作用,从查询、更新到转换,提供全流程技术支持。本文深入探讨数据脱敏的概念、重要性及实施步骤,结合SQL功能解析实际应用,并分析性能优化、复杂逻辑处理及合规性保障等挑战与策略,为数据安全筑起坚实防线。
226 27
|
缓存
【POI】导出xls文件报错:The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook
使用POI导出xls文件,由于数据过多,导致导出xls报错如下: The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook   原因: 代码中创建 HSSFCellStyle cellStyle = hssfWorkbook.createCellStyle(); 次数过多,导致报错。
6903 0
Element UI 表单【详解】-- 表单校验,表单元素排列在一行,常用表单元素等
Element UI 表单【详解】-- 表单校验,表单元素排列在一行,常用表单元素等
477 0
|
存储 自然语言处理 关系型数据库
Springboot2.x整合ElasticSearch7.x实战(二)
Springboot2.x整合ElasticSearch7.x实战(二)
141 0
|
存储 开发框架 .NET
C#中将DataTable转化成ListT的方法解析
C#中将DataTable转化成ListT的方法解析
944 0
|
JSON 前端开发 数据库
SpringSecurity实现前后端分离登录授权详解
在介绍完SpringSecurity实现前后端分离认证之后,然后就是SpringSecurity授权,在阅读本文章之前可以先了解一下作者的上一篇文章SpringSecurity认证SpringSecurity实现前后端分离登录token认证详解_山河亦问安的博客-CSDN博客。
343 0
|
XML JSON 数据处理
C# | 导出DataGridView中的数据到Excel、CSV、TXT
从DataGridView中导出数据到Excel、CSV、TXT是开发中非常常见的一种需求。本文将讲解如何高效的完成对这三种格式的单向导出。 倘若直接写三种格式的导出必定会产生大量的重复代码,而从表中获取结构化数据的思路是基本一致的,因此有一个思路是先将DataGridView中的数据转换为DataTable对象,再进一步导出成我们的目标格式。 本文将介绍如何将DataGridView中的数据转换为DataTable格式,并提供将DataTable转换为Excel、CSV、TXT三种格式的例子。
1103 0
C# | 导出DataGridView中的数据到Excel、CSV、TXT
|
资源调度 JavaScript API
vue封装axios请求接口并添加前置拦截器和响应拦截器
vue封装axios请求接口并添加前置拦截器和响应拦截器
229 0