首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

MSFlexGrid 表格的有关问题

2012-07-29 
MSFlexGrid 表格的问题1:Fix(MSFlexGrid.Height / MSFlexGrid.RowHeightMin) 想用这个算出可见范围的最大

MSFlexGrid 表格的问题
1: Fix(MSFlexGrid.Height / MSFlexGrid.RowHeightMin) 想用这个算出可见范围的最大行数,发现有时候算的很不准,不知道为什么,应该怎么算?

2: 如何解决一个老大难的问题,就是MSFlexGrid某个单元格如果内容是多行的话,格子高度也变几倍,以容纳完全显示
当某行内容超出长度,自动换行显示,高度也自动增加容纳显示,大家有现成的调用没?

[解决办法]

Public Sub AutoRowHeight(FrmName As Form, GridName As Object, Optional KdJg As Long = 0, Optional RowVisible As Integer = 0) '调用方式:Call AutoRowHeight(Me, MSHFlexGrid1,100)
'功能 :自动调整Grid各行高为最合适的高度
'参数
'FrmName 当前工作窗体
'GridName 当前调整的Grid
'KdJg 空出间隔 (可选项)
'RowVisible 调整范围 (可选项 =0只调整看见行(默认,可不写) ,=1全部调整),显示速度不一样(=1),10000条 5秒
Dim I As Integer
Dim J As Integer
Dim RowT As Long
Dim Nrow As Long
Dim NrowHeight As Long
Dim dblHeight As Long
RowT = IIf(RowVisible = 1, 0, GridName.TopRow) 'GridName.TopRow 可见第一行
With GridName
.WordWrap = True '当前单元格换行显示
.Redraw = False '冻结 MSHFlexGrid重画, 避免闪烁
For J = RowT To .Rows - 1 '可见第一行开始调整到下面不可见行止
If .RowIsVisible(J) = False And RowVisible <> 1 Then Exit For
dblHeight = 0
For I = 1 To .Cols - 1
Nrow = Fix((FrmName.TextWidth(.TextMatrix(J, I)) / (.ColWidth(I) - .ColWidth(I) Mod TextWidth("A")))) + 1 '文字行数
NrowHeight = Nrow * 1.1 * FrmName.TextHeight(.TextMatrix(J, I))
If NrowHeight > dblHeight Then
dblHeight = NrowHeight
End If
Next
.RowHeight(J) = dblHeight + KdJg
Next
.Redraw = True
End With
End Sub

热点排行