以下图片有两个MSHFlexGrid要实现的功能有:1.拉动MSHFlexGrid2的底部滚动条时候,MSHFlexGrid1也要一起动。
2.改变MSHFlexGrid1列大小的时候,MSHFlexGrid2也自动改变

解决方案 »

  1.   

    '声明全局变量
    Dim blMove     As Boolean       '列宽改变标志
    Dim iColWidth()     As Integer     '存放MSFlexGrid1列宽数组
    '你可以定义2维数组,只记录那些改变的列宽
    '--------------------------------------------Private Sub Command1_Click()
    MSFlexGrid1.TopRow = MSFlexGrid1.TopRow + 1
    End SubPrivate Sub Form_Load()
        blMove = False       '开始时当然没移动了
        MSFlexGrid1.Cols = 5
        MSFlexGrid1.Rows = 100
        MSFlexGrid2.Cols = 5
        MSFlexGrid2.Rows = 100
        '在此人为添加MSFlexGrid2各列的宽度
        MSFlexGrid2.ColWidth(0) = 1000
        MSFlexGrid2.ColWidth(1) = 2000
        MSFlexGrid2.ColWidth(2) = 1000
        MSFlexGrid2.ColWidth(3) = 1000
        MSFlexGrid2.ColWidth(4) = 1000
     
        'MSFlexGrid1的各列等同MSFlexGrid2的各列宽度
        MSFlexGrid1.ColWidth(0) = 1000
        MSFlexGrid1.ColWidth(1) = 2000
        MSFlexGrid1.ColWidth(2) = 1000
        MSFlexGrid1.ColWidth(3) = 1000
        MSFlexGrid1.ColWidth(4) = 1000
       
        '在窗体属性里设置MSFlexGrid2设置的字号要比MSFlexGrid1大约1-2号,以便区分
        
        MSFlexGrid1.ScrollBars = flexScrollBarBoth '布局时人为置后'    MSFlexGrid2只设置水平滚动条,将MSFlexGrid2盖住MSFlexGrid1约1行高的位置
        MSFlexGrid2.ScrollBars = flexScrollBarHorizontal '仅仅设置水平滚动条
       MSFlexGrid2.Left = MSFlexGrid1.Left
        ReDim iColWidth(MSFlexGrid1.Cols)     '根据实际列宽重新定义记录数组的大小
            For i = 0 To MSFlexGrid1.Cols - 1
                    iColWidth(i) = MSFlexGrid1.ColWidth(i)
            Next
        For i = 0 To MSFlexGrid1.Rows - 1
            For j = 0 To MSFlexGrid1.Cols - 1
                MSFlexGrid1.TextMatrix(i, j) = i
              
            Next j
        Next i
        
        
    For i = 0 To MSFlexGrid1.Rows - 1
    Sum1 = Sum1 + MSFlexGrid1.TextMatrix(i, 1) / 10
    Sum2 = Sum2 + MSFlexGrid1.TextMatrix(i, 1) / 3
    Next i
    MSFlexGrid2.TextMatrix(0, 0) = "合计"
    MSFlexGrid2.TextMatrix(0, 1) = Sum1         '  你要在MSFlexGrid1填充数据后再固定网格...
    MSFlexGrid2.TextMatrix(0, 4) = Sum2
    '就是在填充数据代码下加上...
    MSFlexGrid1.FixedRows = 1 '固定1行
    MSFlexGrid1.FixedCols = 1 '固定1列MSFlexGrid2.FixedRows = 1 '固定1行
    MSFlexGrid2.FixedCols = 1 '固定1列    Timer1.Enabled = True
        Timer1.Interval = 100
    End SubPrivate Sub Timer1_Timer()
        Call CheckWidth     '检查是否列宽改变了
        If blMove Then       '如果改变了
            For i = 0 To MSFlexGrid1.Cols - 1
                MSFlexGrid2.ColWidth(i) = MSFlexGrid1.ColWidth(i)
            Next
        End If
      '重新记录列宽
      For i = 0 To MSFlexGrid1.Cols - 1
            iColWidth(i) = MSFlexGrid1.ColWidth(i)
      Next
      blMove = False
    End Sub  Sub CheckWidth()     '检查是否列宽改变了
            For i = 0 To MSFlexGrid1.Cols - 1
                    If MSFlexGrid1.ColWidth(i) <> iColWidth(i) Then
                              blMove = True
                              Exit For
                    End If
            Next
    End Sub
    Private Sub MSFlexGrid2_Scroll()
    On Error Resume Next
            MSFlexGrid2.Row = MSFlexGrid2.TopRow
            MSFlexGrid2.Col = MSFlexGrid2.LeftCol
    '        MSFlexGrid1.TopRow = MSFlexGrid2.TopRow  '去掉此句的目的在于MSFlexGrid2水平滚动的时候,确保MSFlexGrid1也水平滚动
            MSFlexGrid1.LeftCol = MSFlexGrid2.LeftCol
    End Sub
      

  2.   


    谢谢,你的代码正合适我用还有,你能不能将frm文件源代码贴出来或将frm文件发送到我