上下放两个mshflexgrid,当上面表格列宽被拖宽时,下面表格如何同步改变呢?
我用上面表格显示明细,下面表格显示合计,我将各列的列宽设成一样,可是当用户改变上面明细表的列宽时,上下两个表格就不一样了,所以我想实现当上面表格列宽改变时,下面表格也跟着同步变,如何实现呢?

解决方案 »

  1.   

    msflexgrid是没有检测列头变化的事件的,不要一味只想在控件本身打注意这个解决办法有多个
    1,写subclass进行监视
    2,检测鼠标的变化现在介绍你一个非常简单的第3个办法,你加一个Trimer控件在form上,然后你看下面这段代码,自己看结果吧
    Private Sub Form_Load()
      Me.MSFlexGrid1.Cols = 5
      Me.MSFlexGrid2.Cols = 5
      Me.Timer1.Enabled = True
      Me.Timer1.Interval = 10
    End SubPrivate Sub Timer1_Timer()
      Dim i As Integer
      For i = 0 To Me.MSFlexGrid1.Cols - 1
        Me.MSFlexGrid2.ColWidth(i) = Me.MSFlexGrid1.ColWidth(i)
      Next
    End Sub
      

  2.   

    那你就别用VB咯,VB本身就是个影响效率的东西嘛用C最好了,效率最高没语言了
      

  3.   

    如果列数不是太多,这样做还是可以的,可以把TIMER的时间间隔设置大一点Timer1.Interval =200
      

  4.   

    谢谢两位老师。我只是担心timer对机器效率有影响,没有别的意思呀。要为好多机器想置都不高,我可以试试,想再听听其他老师的建议,我会尽快结贴。
      

  5.   

    2楼的方法是可以的,但是这个效率有影响。稍稍改动一下:
    Private Sub Timer1_Timer()if MSFlexGrid1列宽改变 then
      Dim i As Integer
      For i = 0 To Me.MSFlexGrid1.Cols - 1
        Me.MSFlexGrid2.ColWidth(i) = Me.MSFlexGrid1.ColWidth(i)
      Next
    end if
    End Sub
      

  6.   

    2楼的方法是可以的,但是这个效率有影响。稍稍改动一下:
    Private Sub Timer1_Timer()if MSFlexGrid1列宽改变 then
      Dim i As Integer
      For i = 0 To Me.MSFlexGrid1.Cols - 1
        Me.MSFlexGrid2.ColWidth(i) = Me.MSFlexGrid1.ColWidth(i)
      Next
    end if
    End Sub
    -----------------------
    这些代码我是知道的,关键是
    我就是想问如何检测到mshflexgrid的列宽发生改变呀?
    检测哪个事件呀?
      

  7.   

    楼上的,请问你如何判断MSFlexGrid1列宽改变????偶没语言了现在的机器本身配置多高你们知道Trimer和pic不要滥用,用一个Trimer你都担心这样了,那我简直没话了
      

  8.   

    这些代码我是知道的,关键是
    我就是想问如何检测到mshflexgrid的列宽发生改变呀?
    检测哪个事件呀?
    //我已经告诉过你没有事件检测,有,还要用Trimer做什么拜托各位答题前自己都测试下
      

  9.   

    楼主是怎么了?你在Timer事件里检查MSFlexGrid1列宽改变不就可以了吗?
      

  10.   

    'Form1上放 MSFlexGrid1 和MSFlexGrid2
    '复制下列代码,即可验证
    '--------------------------------------------
    '声明全局变量
    Dim blMove As Boolean  '列宽改变标志
    Dim iColWidth() As Integer '存放MSFlexGrid1列宽数组
    '你可以定义2维数组,只记录那些改变的列宽
    '--------------------------------------------Private Sub Form_Load()
      blMove = False '开始时当然没移动了
      MSFlexGrid1.Cols = 5
      MSFlexGrid1.Rows = 100
      MSFlexGrid2.Cols = 5
      MSFlexGrid2.Rows = 100  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 & "," & j
          MSFlexGrid2.TextMatrix(i, j) = i & "," & j
        Next j
      Next i
      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