我想在编辑VSFlexGrid单元格的时候,每按一下键盘就将单元格的数据和其他数据运算,显示出来,但是我用断点看了一下,修改单元格的内容时,虽然显示内容改了,但是用
VSFlexGrid1.TextMatrix(row,col)看时并没有改变。比如说:VSFlexGrid1.TextMatrix(1,1)的内容原来是100,我在编辑VSFlexGrid1.TextMatrix(1,1)时,再输入一个0,变成1000,虽然再编辑时显示的是1000,但是VSFlexGrid1.TextMatrix(1,1)的内容还是100没变,好象是要将焦点切换到另一单元格时,VSFlexGrid1.TextMatrix(row,col)内容才改变,谁有办法实现在VSFlexGrid中编辑时每按下一个键盘中的每一个按键VSFlexGrid1.TextMatrix(row,col)内容也跟着变。下面是我的代码:
Private Sub VSFlexGrid1_Click()
  
  Clk = True    With VSFlexGrid1      .EditCell
      .EditSelStart = 0
      .EditSelLength = Len(.EditText)    End With
    
       
End SubPrivate Sub VSFlexGrid1_KeyDownEdit(ByVal Row As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)           '   If KeyCode >= 48 And KeyCode <= 57 Then         If VSFlexGrid1.TextMatrix(Row, Col) <> "" Then
    
             For i = 1 To VSFlexGrid1.Rows - 2
        
                 VSFlexGrid1.TextMatrix(i, VSFlexGrid1.cols - 1) = VSFlexGrid1.TextMatrix(i, SLcol) * VSFlexGrid1.TextMatrix(i, DJcol) * VSFlexGrid1.TextMatrix(i, ZKcol)                                                  //注:在编辑时按下键盘的按键时这里相应的单元格的内容不便       
             Next
        
            amount = 0
        
             For i = 1 To VSFlexGrid1.Rows - 2
        
                  If VSFlexGrid1.TextMatrix(i, VSFlexGrid1.cols - 1) <> "" Then
        
                       amount = amount + VSFlexGrid1.TextMatrix(i, VSFlexGrid1.cols - 1)
        
                     End If
              Next
        
            VSFlexGrid1.TextMatrix(VSFlexGrid1.Rows - 1, VSFlexGrid1.cols - 2) = "合计:"
            VSFlexGrid1.TextMatrix(VSFlexGrid1.Rows - 1, VSFlexGrid1.cols - 1) = amount
    
         End If          ' VSFlexGrid1.Refresh
      
End Sub

解决方案 »

  1.   

    它没有真正的change事件,所以编辑时值都没有生效.但有清晰的BeforeEdit和AfterEdit事件,你想法等于是在打破它的机制,建议不要这样做.不知道你有什么目的,或许你可以考虑使用KeyPressEdit,KeyDownEdit,KeyUpEdit事件.假如你不怕带来不支持中文等一些个问题,你可以采取类似如下的方式,keycode区间等问题你自己再写吧.Private Sub fg_Click()
            With fg
                .EditCell
            End With
    End SubPrivate Sub fg_KeyUpEdit(ByVal Row As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)
            With fg
                .TextMatrix(Row, Col) = .TextMatrix(Row, Col) & Chr(KeyCode)
                Debug.Print .TextMatrix(Row, Col)
            End With
    End Sub
      

  2.   

    用& 的是可以实现按下一个键,TextMatrix改变了,但是如果我用鼠标选中内容再按键盘输入就出问题了,比如,原来是内容是100,再按一个零,显示的结果是0,而实际得到的是1000,而我计算中想要的是显示的数字
      

  3.   

    对了我还想问一下,能不能这样实现,每按一下键盘上的按键就将焦点移到另一个TextMatrix(row,col)中,这样TextMatrix就保存了,然后马上将焦点返回原来的地方,如果是这样代码如何实现
      

  4.   

    我要实现的是将数据库中的内容显示到VSFlexGrid中,同时内容可以编辑,然后将其中的三列用来运算,把结果显示在最后一列,当编辑其中三列中的一列时,只要按下键盘就马上将运算结果显示在最后列,从感官上的效果就是,编辑三列中的一列时,最后一列的运算结果也跟着变
      

  5.   

    代码类似如下:
    Private Sub fg_KeyUpEdit(ByVal Row As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)
            With fg
                If (KeyCode >= 48 And KeyCode <= 57) Then
                    .Select Row - 1, Col - 1, Row - 1, Col
                    .Select Row, Col, Row, Col
                    SendKeys "{Right}"
                End If
            End With
    End SubPrivate Sub fg_SelChange()
            With fg
                .EditCell
            End With
    End Sub