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
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
谢谢,你的代码正合适我用还有,你能不能将frm文件源代码贴出来或将frm文件发送到我