因为MSHFlexGrid是只读的 所以想要修改MSHFlexGrid上的数据必须利用textbox控件覆盖在MSHFlexGrid上面,我用的代码如下:
Private Sub MSHFlexGrid1_Click()   If MSHFlexGrid1.Col <= MSHFlexGrid1.Cols And MSHFlexGrid1.Row <= MSHFlexGrid1.Rows Then
        '指定text1控件在mshflexgrid1表格中的大小及位置
           Text1.RightToLeft = False
        Text1.Width = MSHFlexGrid1.CellWidth
        Text1.Height = MSHFlexGrid1.CellHeight
        Text1.left = MSHFlexGrid1.CellLeft + MSHFlexGrid1.left
        Text1.top = MSHFlexGrid1.CellTop + MSHFlexGrid1.top
        '赋值给mshflexgrid1.Text
        Text1.Text = MSHFlexGrid1.Text
        'text1可见
        Text1.Visible = True
        'text1获得焦点
        Text1.SetFocus
    Else: Text1.Visible = False
    End If
'MsgBox MSHFlexGrid1.Col
'    MSHFlexGrid1.Rows = 1
InstIndex = MSHFlexGrid1.Row
DelIndex = MSHFlexGrid1.Row
End SubPrivate Sub MSHFlexGrid1_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
     If MSHFlexGrid1.Col <= MSHFlexGrid1.Cols And MSHFlexGrid1.Row <= MSHFlexGrid1.Rows Then
        Text1.left = MSHFlexGrid1.left + MSHFlexGrid1.ColPos(MSHFlexGrid1.Col)
        Text1.top = MSHFlexGrid1.top + MSHFlexGrid1.RowPos(MSHFlexGrid1.Row)
        Text1.Width = MSHFlexGrid1.ColWidth(MSHFlexGrid1.Col)
        Text1.Height = MSHFlexGrid1.RowHeight(MSHFlexGrid1.Row)
        Text1 = MSHFlexGrid1.Text
        Text1.Visible = True
        Text1.SetFocus
     End If
  End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = vbKeyEscape Then
     Text1.Visible = False
     MSHFlexGrid1.SetFocus
     Exit Sub
  End If  If KeyAscii = vbKeyReturn Then
     MSHFlexGrid1.Text = Text1.Text
     If MSHFlexGrid1.Col < MSHFlexGrid1.Cols - 1 Then
        MSHFlexGrid1.Col = MSHFlexGrid1.Col + 1
     Else
     If MSHFlexGrid1.Row < MSHFlexGrid1.Rows - 1 Then
         
       MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1
       MSHFlexGrid1.Col = 0
     Else
         Exit Sub
      End If
     End If
     Text1.left = MSHFlexGrid1.left + MSHFlexGrid1.ColPos(MSHFlexGrid1.Col)
     Text1.top = MSHFlexGrid1.top + MSHFlexGrid1.RowPos(MSHFlexGrid1.Row)
     Text1.Width = MSHFlexGrid1.CellWidth
     Text1.Height = MSHFlexGrid1.RowHeight(MSHFlexGrid1.Row)
     Text1 = MSHFlexGrid1.Text
     Text1.SetFocus
  End If
End Sub
出现的问题如下图
当数据不能全部显示也即需要滚动条时,textbox就跑到框外去了!
不知道这个问题怎么解决,请各位高人指点,多谢了!

解决方案 »

  1.   

    Private Sub MSHFlexgrid1_Scroll()
        text1.visible=false
    End Sub
      

  2.   

    在Scroll() 事件中编码,
    当Scroll事件被触发时重新定位TextBox
    同时配合Mshflexgrid的RowIsVisible ColIsVisible属性,当Textbox对应的行、列不可见时隐藏Textbox
      

  3.   

    谢谢 Leftie 和 yachong 
     结合二位的思想我将TEXTBOX定位代码添加到MSHFlexgrid1_Scroll事件中 问题解决了!
    Private Sub MSHFlexgrid1_Scroll()
        
         Text1.left = MSHFlexGrid1.left + MSHFlexGrid1.ColPos(MSHFlexGrid1.Col)
         Text1.top = MSHFlexGrid1.top + MSHFlexGrid1.RowPos(MSHFlexGrid1.Row)
    '     MsgBox MSHFlexGrid1.Col
    '     MsgBox MSHFlexGrid1.Row
         'Text1.Width = MSHFlexGrid1.ColWidth(MSHFlexGrid1.Col) '?????????????
         Text1.Width = MSHFlexGrid1.CellWidth
         Text1.Height = MSHFlexGrid1.RowHeight(MSHFlexGrid1.Row)
         Text1 = MSHFlexGrid1.Text
         Text1.SetFocus
    End Sub 再次感谢二位的回帖!!