pdf文件放手机桌面:[转 修改]MSHFlexGrid控件列宽自动调整

来源:百度文库 编辑:中财网 时间:2024/04/27 14:04:47

原文转自:http://blog.sina.com.cn/s/blog_444bf7660100g7mi.html

今天在单位里没事帮朋友做了个建议通讯录,呵呵,没什么技术含量,不过里面有个控件还是值得介绍的。那就是MSHFlexGrid控件。

我写了个能自动调整列宽的模块,在这里介绍给大家:

Public Sub AdjustColWidth(frmCur As Form, gridCur As Object, Optional bNullRow As Boolean = True, Optional dblIncWidth As Double = 0)
'--------------------------------------------------------------------
'功能:
'       自动调整Grid各列列宽为最合适的宽度
'参数:
'       [frmCur].........................................当前工作窗体
'       [gridCur]........................................当前要调整的Grid
'--------------------------------------------------------------------
Dim i, j As Integer
Dim dblWidth As Double
    With gridCur
        For i = 0 To .Cols - 1
            dblWidth = 0
            If .ColWidth(i) <> 0 Then
                For j = 0 To .Rows - 1
                    If frmCur.TextWidth(.TextMatrix(j, i)) > dblWidth Then
                        dblWidth = frmCur.TextWidth(.TextMatrix(j, i))
                    End If
                Next
                .ColWidth(i) = dblWidth + dblIncWidth + 100
            End If
        Next
    End With
 
End Sub

把这段代码单独写到模块中,在在窗体中调用既可。还请大家多提点意见。

我的修改:

'个人意见,不一定对,仅供参考:
'(1)两个可选参数感觉没必要
'(2)如果第一列不调整可将设为i=1 to .cols-1
'(3)如果前面操作已使某列变宽,调整前需先将该列列宽返回初始宽度(可取为标题文本宽度),否则会调整后的宽度会受前面操作的影响。我取得是标题列宽值与单元格内容值的最大者为最终的列宽
'(4)调用方式:call AdjustColWidth(me, MSHFlexGrid1)
'谢谢共享!多交流。
Public Sub AdjustColWidth(frmCur As Form, gridCur As Object)
'--------------------------------------------------------------------
'功能:
'       自动调整Grid各列列宽为最合适的宽度' 
      '参数:
'       [frmCur]............................当前工作窗体
'       [gridCur]...........................当前要调整的Grid
'--------------------------------------------------------------------
Dim i, j As Integer
Dim dblWidth As Double
    With gridCur

'第一列不做修改
        For i = 1 To .Cols - 1
        '将列宽初始化为列标题宽度,以消除前面操作的影响
            .ColWidth(i) = frmCur.TextWidth(.ColHeaderCaption(0, i))
            dblWidth = 0
            If .ColWidth(i) <> 0 Then
                For j = 0 To .Rows - 1
                    If frmCur.TextWidth(.TextMatrix(j, i)) > dblWidth Then
                        dblWidth = frmCur.TextWidth(.TextMatrix(j, i))
                    End If
                Next

        '取标题列宽值与单元格内容值的最大者为最终的列宽
                .ColWidth(i) = IIf(.ColWidth(i) > dblWidth + 100, .ColWidth(i), dblWidth + 100)
            End If
        Next
    End With
End Sub