Winform FlexGrid列宽适应于窗口大小

之前我们在使用FlexGrid的时候如果每个单元格的内容过长的时候,我们会调用FlexGrid自带的属性的AutoResizing和AllowResizing来调整列宽,这个往往只是调整了显示的单元格的宽度,整个FlexGrid的宽度未发生变化,本文主要介绍FlexGrid的列宽随着我们的窗口的变化而变化。

发布于 2017/09/25 00:00

ComponentOne Enterprise

概述

之前我们在使用FlexGrid的时候如果每个单元格的内容过长的时候,我们会调用FlexGrid自带的属性的AutoResizing和AllowResizing来调整列宽,这个往往只是调整了显示的单元格的宽度,整个FlexGrid的宽度未发生变化,本文主要介绍FlexGrid的列宽随着我们的窗口的变化而变化。

首先我们知道我们的列宽都是固定,也就是初始化的时候分配的列宽,由用户自定或者控件自动生成,除非用户设定dock属性是Fill,控件会填满整个窗口,在拉伸或者压缩窗口时,flexgrid才会变化,否则一直属于静态宽度,如图:

image

为了实现我们在拉伸或者压缩窗体的FlexGrid也能随之变化,自适应的调整宽度,所以我们在每次在SizeChanged事件触发时重新根据窗口的大小再次计算FlexGrid的每一列的宽度。

如下代码:

        public int oldwid = 1;//原始宽度
        public int newwid = 1;//新宽度
        public int tempwid = 1;//变更的上次的宽度

   1:  double compare = 1;//变化比例
   2:              newwid = this.Width;
   3:              Console.WriteLine(oldwid + ":" + newwid + "\n");
   4:              if (tempwid != 1)
   5:                  compare = Math.Round((1.0 * tempwid / newwid), 3);
   6:              else
   7:                  compare = Math.Round((1.0 * oldwid / newwid), 3);
   8:   
   9:              foreach (Column item in c1FlexGrid1.Cols)
  10:              {
  11:                  item.Width = (int)Math.Round((1.0 * item.WidthDisplay / compare), 0);
  12:              }
  13:              //c1FlexGrid1.ExtendLastCol = true;
  14:              tempwid = newwid;

这样当我们在拉伸压缩窗体时我们的控件会随着窗体大小变化。

image

image

如果你有疑问,可以到GCDN获得技术支持:

http://gcdn.grapecity.com.cn/showforum-68.html

GCDNhttp://gcdn.grapecity.com.cn/

官方网站/developer

标签: loading

ComponentOne Enterprise | 下载试用

ComponentOne 是一套专注于企业 .NET开发、支持 .NET Core 平台,并完美集成于 Visual Studio 的第三方控件集,包含 300 多种 .NET开发控件,提供表格数据管理、数据可视化、报表和文档、日程安排、输入和编辑、导航和布局、系统提升工具等七大功能,被誉为“.NET开发的‘瑞士军刀’”。

ComponentOne 为您提供专业的产品咨询服务,并由技术支持工程师为您1对1解答。>> 发帖提问

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态