使用Label控件和MSHFlexGrid控件结合方法使MSHFlexGrid的高度适应字体大小。
1 方法介绍
1.1 Label控件
从学VB6开始就接触了Label控件,对该控件的熟悉程度毋容置疑,本文所讨论的方法既是利用该控件完成。
Label控件的AutoSize属性可以使Label自动适应其Caption属性中字符的大小,在编写程序时,可以将AutoSize属性设为True,从而使Label具有自适应的能力。
1.2 MSHFlexGrid控件
MSHFlexGrid控件是一个很好用的表格控件,拥有强大的功能、众多的属性,可以根据需要设置,这里不再详述,只说明一下其控制网格宽度的属性,即ColWidth。
例如,需要设置MSHFlexGrid第一列的宽度为500,则可以使用下面的语句:
MSHFlexGrid1.ColWidth(0)=500
注意,MSHFlexGrid的第一列的Index为0,第一行的Index为0,这个需要特别留心,特别是从Excel读入数据时,需要一定的转换,否则可能出现数据读入错误的表格的情况发生。
1.3 Label与MSHFlexGrid的结合
本小节具体讨论如何用Label控件使MSHFlexGrid具有自适应的能力。
1)新建MSHFlexGrid1和Label1,将Label1的AutoSize属性设为True,Label1的Visibel属性设为False。
2)从文件中读入数据(如何设置MSHFlexGrid1以及读入代码不再详述),在将数据读入网格的同时也将数据读入标签(即将Label1的Caption属性设为数据)。
3)判断当前列的宽度是否小于Labe1的宽度,如果是,则将其宽度设为Label1的宽度,即
if MSHFlexGrid1.ColWidth(0)<Label1.width then
MSHFlexGrid1.ColWidth(0)=Label1.width 。
4)以此类推,实现每一列的宽度的自动适应。
2 缺点与优化
2.1 缺点
由于需要将所有数据都要放到Label1的Caption中,代码运行效率将大大降低
2.2 优化
可以建立数组,记录每一列的最大宽度(即Label1的最大宽度),在程序将所有数据读入后再修改网格的宽度,这样可以提高其运行效率。
让控件网格,字体随显示器大小按比例调整,有什么好办法吗
用变量对不同的显示器分辨率赋值了。 使用一下代码获得当前的屏幕分辨率: Screen.Width / Screen.TwipsPerPixelX Screen.Height / Screen.TwipsPerPixelY 可以根据分辨率使用乘法计算某值计算出字体大小变量的值
本文链接:https://www.kinber.cn/post/3702.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: