For m_Col = 0 To Flex.Cols - 1
        If Result.ColumnType(m_Col + 1) = SQLDMO_DTypeChar Then
            Flex.ColWidth(m_Col) = 1000
        ElseIf Result.ColumnType(m_Col + 1) = SQLDMO_DTypeInt4 Then
            Flex.ColWidth(m_Col) = 1000
        ElseIf Result.ColumnType(m_Col + 1) = SQLDMO_DTypeInt1 Then
            Flex.ColWidth(m_Col) = 800
        Else
            Flex.ColWidth(m_Col) = 1500
        End If
        Flex.TextMatrix(0, m_Col) = EngToCha(Result.ColumnName(m_Col + 1))
    Next m_Col

解决方案 »

  1.   

    我写了一个专门美化MSHFlexGrid的过程,不仅可以自动调整列宽,还可以自动按照列的属性(字符或数字)调整对齐方式,不过要把窗体字体和表格字体设成一样的,而且先要Set MSHFlexGrid.DataSource=Recordset
    用法 AutoSizeFlexGrid <MSHFlexGrid的控件名称>
    Public Sub AutoSizeFlexGrid(flexObject As MSHierarchicalFlexGridLib.MSHFlexGrid)
    Dim RsFlex As ADODB.Recordset, sngMaxWidth() As Single, sngTextWidth As Single
    Dim X As Integer, Y As Integer With flexObject
        If .Cols = 0 Then Exit Sub
        .Visible = False
        ReDim sngMaxWidth(.Cols - 1)
        For Y = 0 To .Rows - 1
            For X = 0 To .Cols - 1
                sngTextWidth = .Parent.TextWidth(Trim(.TextMatrix(Y, X))) * 1
                If sngMaxWidth(X) < sngTextWidth Then sngMaxWidth(X) = sngTextWidth
            Next
        Next
        
        For X = 0 To flexObject.Cols - 1
           .ColWidth(X) = sngMaxWidth(X) + 120
        Next
        For X = 0 To .Cols - 1
            Set RsFlex = flexObject.DataSource
            If X < RsFlex.Fields.Count And Not (RsFlex.EOF Or RsFlex.BOF) Then
               Select Case TypeName(RsFlex.Fields(X).value)
                 Case "Integer", "Double", "Currency", "Byte", "Long", "Decimal", "Single"
                      .ColAlignment(X) = flexAlignRightCenter
                 Case Else
                      .ColAlignment(X) = flexAlignLeftCenter
               End Select
            End If
        Next
        .Row = 0
        .Col = 0
        If .Rows > 1 Then .Row = 1
        .ColSel = .Cols - 1
        .Visible = True
     End With
    End Sub