并不是非要这么做,只是不明白为什么?
窗体放了一个MSFlexGrid1和Text1
MSFlexGrid1最小行高400,Text1的visble属性Flase问题:
     事件:鼠标点击MSFlexGrid1的单元格,
     三种操作:1.设断点于Private Sub MSFlexGrid1_EnterCell和
                 Private Sub Text1_LostFocus()
               2.只设断点Private Sub Text1_LostFocus()
               3.不设任何断点      三种操作方式Text1的出现情况不同,
               1.Private Sub Text1_LostFocus()根本不执行,Text1一直显示
               2,3. Private Sub Text1_LostFocus()执行,Text1有时显示     尝试发现去掉
     If Me.Text1.Visible And Me.Text1.Enabled Then
         Me.Text1.SetFocus
     End If
     则三种方式一样
     
     关键问题:为什么Private Sub MSFlexGrid1_EnterCell,设断点与不设断点完全不同???
     代码如下:
Private Sub Form_Load()
     Me.MSFlexGrid1.Cols = 5
    
    Dim i As Integer
    
    For i = 0 To 4
        Me.MSFlexGrid1.ColWidth(i) = 2000
    Next
    
    For i = 1 To 10
        Me.MSFlexGrid1.AddItem ""
        
        Me.MSFlexGrid1.TextMatrix(i, 0) = "aaa"
        Me.MSFlexGrid1.TextMatrix(i, 1) = "bbb"
        Me.MSFlexGrid1.TextMatrix(i, 2) = "cc"
        Me.MSFlexGrid1.TextMatrix(i, 3) = "dd"
        Me.MSFlexGrid1.TextMatrix(i, 4) = "fff"
    Next
End SubPrivate Sub MSFlexGrid1_EnterCell()
    Me.Text1.Visible = True
    
    Me.Text1.Left = Me.MSFlexGrid1.Left + Me.MSFlexGrid1.ColPos(Me.MSFlexGrid1.ColSel) + 50    Me.Text1.Top = Me.MSFlexGrid1.Top + Me.MSFlexGrid1.RowPos(Me.MSFlexGrid1.RowSel) + 50
    Me.Text1.Width = Me.MSFlexGrid1.ColWidth(Me.MSFlexGrid1.ColSel)
    Me.Text1.Height = Me.MSFlexGrid1.RowHeight(Me.MSFlexGrid1.RowSel)    Me.Text1.Text = Me.MSFlexGrid1.TextMatrix(Me.MSFlexGrid1.RowSel, Me.MSFlexGrid1.ColSel)    CurrRow = Me.MSFlexGrid1.RowSel
    CurrCol = Me.MSFlexGrid1.ColSel
    If Me.Text1.Visible And Me.Text1.Enabled Then
        Me.Text1.SetFocus
    End If
End SubPrivate Sub Text1_LostFocus()
    Text1.Visible = False
End Sub

解决方案 »

  1.   

    是要用这个来编辑网格内容对吧。
    我写过这样的程序,开始的时候也用TEXT控件,后来就不用了,直接写就是了,在KEYPRESS事件中,配合TEXTMATRIX方法,就可以了
      

  2.   

    关键问题:为什么Private Sub MSFlexGrid1_EnterCell,设断点与不设断点完全不同???疑惑
      

  3.   

    文档中间有一篇文章,你去搜索一下,不过本身有bug,我写过更正代码的
      

  4.   

    我一般写在CLICK 事件中:Private Sub Form_Load()
         Me.MSFlexGrid1.Cols = 5
        
        Dim i As Integer
        
        For i = 0 To 4
            Me.MSFlexGrid1.ColWidth(i) = 2000
        Next
        
        For i = 1 To 10
            Me.MSFlexGrid1.AddItem ""
            
            Me.MSFlexGrid1.TextMatrix(i, 0) = "aaa"
            Me.MSFlexGrid1.TextMatrix(i, 1) = "bbb"
            Me.MSFlexGrid1.TextMatrix(i, 2) = "cc"
            Me.MSFlexGrid1.TextMatrix(i, 3) = "dd"
            Me.MSFlexGrid1.TextMatrix(i, 4) = "fff"
        Next
    End SubPrivate Sub MSFlexGrid1_click()
        Me.Text1.Visible = True
        
        Me.Text1.Left = Me.MSFlexGrid1.Left + Me.MSFlexGrid1.ColPos(Me.MSFlexGrid1.ColSel) + 50    Me.Text1.Top = Me.MSFlexGrid1.Top + Me.MSFlexGrid1.RowPos(Me.MSFlexGrid1.RowSel) + 50
        Me.Text1.Width = Me.MSFlexGrid1.ColWidth(Me.MSFlexGrid1.ColSel)
        Me.Text1.Height = Me.MSFlexGrid1.RowHeight(Me.MSFlexGrid1.RowSel)    Me.Text1.Text = Me.MSFlexGrid1.TextMatrix(Me.MSFlexGrid1.RowSel, Me.MSFlexGrid1.ColSel)    CurrRow = Me.MSFlexGrid1.RowSel
        CurrCol = Me.MSFlexGrid1.ColSel
        If Me.Text1.Visible And Me.Text1.Enabled Then
            Me.Text1.SetFocus
            SendKeys "{home}+{end}"
        End If
    End SubPrivate Sub Text1_change()
        MSFlexGrid1.Text = Text1.Text
    End Sub
      

  5.   

    偶用MSHFlexGrid没发现你说的问题。不过不能在ENTERCELL事件里实现你想做的功能。不然会有BUG的!
    也就是说当你在当前单元格里点击的时候。文本框是不会显示的!
    因为你没有离开当前单元格是不会引发ENTERCELL事件的!
      

  6.   

    焦点问题,调试中断点中断会使焦点发生变化。
    姑且可以称之为Bug,像这种Bug很多。