Autosize the columns and rows in MSFlexGrid

Public Function FG_AutosizeRows(myGrid As MSFlexGrid, _
                                Optional ByVal lFirstRow As Long = -1, _
                                Optional ByVal lLastRow As Long = -1, _
                                Optional bCheckFont As Boolean = False)

    Dim lCol As Long, lRow As Long, lCurCol As Long, lCurRow As Long
    Dim lCellHeight As Long, lRowHeight As Long
    Dim bFontBold As Boolean
    Dim dFontSize As Double
    Dim sFontName As String
    If bCheckFont Then
        bFontBold = Me.FontBold
        sFontName = Me.FontName
        dFontSize = Me.FontSize
    End If
    With myGrid
        If bCheckFont Then
            lCurCol = .Col
            lCurRow = .Row
        End If
        If lFirstRow = -1 Then lFirstRow = 0
        If lLastRow = -1 Then lLastRow = .Rows - 1
        For lRow = lFirstRow To lLastRow
            lRowHeight = 0
            If bCheckFont Then .Row = lRow
            For lCol = 0 To .Cols - 1
                If bCheckFont Then
                    .Col = lCol
                    Me.FontBold = .CellFontBold
                    Me.FontName = .CellFontName
                    Me.FontSize = .CellFontSize
                End If
                lCellHeight = Me.TextHeight(.TextMatrix(lRow, lCol))
                If lCellHeight > lRowHeight Then lRowHeight = lCellHeight
            Next lCol
            .RowHeight(lRow) = lRowHeight + Me.TextHeight("Wg") / 5
        Next lRow
        If bCheckFont Then
            .Row = lCurRow
            .Col = lCurCol
        End If
    End With
    If bCheckFont Then
        Me.FontBold = bFontBold
        Me.FontName = sFontName
        Me.FontSize = dFontSize
    End If
End Function
Public Function FG_AutosizeCols(myGrid As MSFlexGrid, _
                                Optional ByVal lFirstCol As Long = -1, _
                                Optional ByVal lLastCol As Long = -1, _
                                Optional bCheckFont As Boolean = False)
    Dim lCol As Long, lRow As Long, lCurCol As Long, lCurRow As Long
    Dim lCellWidth As Long, lColWidth As Long
    Dim bFontBold As Boolean
    Dim dFontSize As Double
    Dim sFontName As String
    If bCheckFont Then
        ' save the forms font settings
        bFontBold = Me.FontBold
        sFontName = Me.FontName
        dFontSize = Me.FontSize
    End If
    With myGrid
        If bCheckFont Then
            lCurRow = .Row
            lCurCol = .Col
        End If
        If lFirstCol = -1 Then lFirstCol = 0
        If lLastCol = -1 Then lLastCol = .Cols - 1
        For lCol = lFirstCol To lLastCol
            lColWidth = 0
            If bCheckFont Then .Col = lCol
            For lRow = 0 To .Rows - 1
                If bCheckFont Then
                    .Row = lRow
                    Me.FontBold = .CellFontBold
                    Me.FontName = .CellFontName
                    Me.FontSize = .CellFontSize
                End If
                lCellWidth = Me.TextWidth(.TextMatrix(lRow, lCol))
                If lCellWidth > lColWidth Then lColWidth = lCellWidth
            Next lRow
            .ColWidth(lCol) = lColWidth + Me.TextWidth("W")
        Next lCol
        If bCheckFont Then
            .Row = lCurRow
            .Col = lCurCol
        End If
    End With
    If bCheckFont Then
        ' restore the forms font settings
        Me.FontBold = bFontBold
        Me.FontName = sFontName
        Me.FontSize = dFontSize
    End If
End Function
例:
Private Sub Command1_Click()
    Call FG_AutosizeRows(MSFlexGrid1, -1, -1, True)
End Sub
Private Sub Command2_Click()
    Call FG_AutosizeCols(MSFlexGrid1, -1, -1, True)
End Sub
Private Sub Form_Load()
    Dim fso As New FileSystemObject
    Dim txtf As TextStream
    Dim path As String, Line As String
    Dim Cells() As String, Idx As Integer
    path = App.path
    If Right(path, 1) <> "/" Then path = path & "/"
    Set txtf = fso.OpenTextFile(path & "score.txt", ForReading)
    With MSFlexGrid1
        .AllowUserResizing = flexResizeColumns ' 可以改变列宽
        .Cols = 5       ' 列数 = 5
        .Rows = 1       ' 行数暂订 1
        .FixedCols = 0  ' 固定列 = 0
        ' 标题头
        .TextMatrix(0, 0) = "学号"
        .TextMatrix(0, 1) = "姓名"
        .TextMatrix(0, 2) = "语文"
        .TextMatrix(0, 3) = "数学"
        .TextMatrix(0, 4) = "英语"
        .ColAlignment(0) = flexAlignRightCenter
        .ColAlignment(2) = flexAlignRightCenter
        .ColAlignment(3) = flexAlignRightCenter
        .ColAlignment(4) = flexAlignRightCenter
    End With
    Idx = 1
    While Not txtf.AtEndOfStream
        Line = txtf.ReadLine
        Cells = Split(Line, ",")
        MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 ' 增一行
        ' 将Cells(0,4) 指定给TextMatrix(Idx, 0,4)
        For I = 0 To UBound(Cells)
            MSFlexGrid1.TextMatrix(Idx, I) = Cells(I)
        Next
        Idx = Idx + 1
    Wend
    txtf.Close
End Sub
'Refer to Microsoft Script Runtime
数据来自www.vbgood.com  score.txt
850301,陈桶一,90,76,98
850302,黄光权,58,77,75
850303,胡生妙,41,14,33
850304,王为全,95,97,87
850305,李日正,59,66,57
850306,刘德昌,28,11,33
850307,方正一,98,100,100
850308,刘康保,0,0,10
850309,谢掬花,95,74,89
850310,王美兰,41,46,49
850311,徐小当,91,99,84
850312,叶小毛,0,10,0
850313,林东海,92,92,88
850314,林大阳,35,19,29
850315,钟德级,98,90,91
850316,刘力锦,47,50,55
850317,方小房,94,94,100
850318,刘纪成,79,85,77
850319,李普三,84,74,58
850320,刘一心,54,57,64
850321,方日通,83,80,94
850322,刘顺成,71,65,73
850323,谢利利,20,25,10
850324,王涵合,93,100,90
850325,徐佳佳,68,56,39
850326,李红仁,25,24,0
850327,林大玉,87,77,92
850328,林玉成,64,90,59
850329,钟百达,0,0,20


Most samples in this complete thread can also be used for the MSHFlexGrid, in the functions just change the As MSFlexGrid to As MSHFlexGrid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值