因为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就跑到框外去了!
不知道这个问题怎么解决,请各位高人指点,多谢了!
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就跑到框外去了!
不知道这个问题怎么解决,请各位高人指点,多谢了!
text1.visible=false
End Sub
当Scroll事件被触发时重新定位TextBox
同时配合Mshflexgrid的RowIsVisible ColIsVisible属性,当Textbox对应的行、列不可见时隐藏Textbox
结合二位的思想我将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 再次感谢二位的回帖!!