[100分悬赏]关于msflexgrid删除数据的有关问题
[100分悬赏]关于msflexgrid删除数据的问题
在msflexgrid中输入数据的代码是在网上找的,我想另外加一个按delete键删除选定单元格数据的语句,但是加了之后不起作用,请各位高手给我分析一下是哪里出了冲突?
ps:我是新建了一个名字为gridtext的文本框和一个名字为mfg的msflexgrid控件。
Private Sub Form_Load()
rown = 5
With mfg
For i = 0 To 5
.ColAlignment(i) = flexAlignCenterCenter
.RowHeight(0) = 600
Next i
.ColWidth(0) = 400
End With
End Sub
Private Sub mfg_DblClick()
GridEdit Asc(" ")
End Sub
Private Sub mfg_KeyPress(KeyAscii As Integer)
GridEdit KeyAscii
End Sub
Sub GridEdit(KeyAscii As Integer)
gridtext.FontName = mfg.FontName
gridtext.FontSize = mfg.FontSize
Select Case KeyAscii
Case 0 To Asc(" ")
gridtext = mfg
gridtext.SelStart = 0
gridtext.SelLength = Len(gridtext.Text)
Case Else
gridtext = Chr(KeyAscii)
gridtext.SelStart = 1
End Select
gridtext.Left = mfg.CellLeft + mfg.Left
gridtext.Top = mfg.CellTop + mfg.Top
gridtext.Width = mfg.CellWidth
gridtext.Height = mfg.CellHeight
gridtext.Visible = True
gridtext.SetFocus
End Sub
Private Sub mfg_LeaveCell()
If gridtext.Visible Then
mfg = gridtext
gridtext.Visible = False
End If
End Sub
Private Sub mfg_GotFocus()
If gridtext.Visible Then
mfg = gridtext
gridtext.Visible = False
End If
End Sub
Private Sub gridtext_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyEscape
gridtext.Visible = False
mfg.SetFocus
Case vbKeyReturn
mfg.SetFocus
DoEvents
If mfg.Row < mfg.Rows - 1 Then
mfg.Row = mfg.Row + 1
End If
Case vbKeyDown
mfg.SetFocus
DoEvents
If mfg.Row < mfg.Rows - 1 Then
mfg.Row = mfg.Row + 1
End If
Case vbKeyUp
mfg.SetFocus
DoEvents
If mfg.Row > mfg.FixedRows Then
mfg.Row = mfg.Row - 1
End If
Case vbKeyTab
mfg.SetFocus
DoEvents
If mfg.Row > mfg.FixedRows Then
mfg.Row = mfg.Row - 1
End If
Case vbKeyDelete
mfg.Text = ""
End Select
End Sub
Private Sub gridtext_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then KeyAscii = 0
End Sub
另外我还想问一下,我如何删除指定区域的数据呢?
------解决方案--------------------
Case vbKeyDelete
gridtext = ""
这样就可以了。
------解决方案--------------------
如果楼主只删除一个单元格的数据原来代码就可以实现这个功能 ,但是必须双击选定的单元格,如果改成单击就可以选定单元格可添加如下代码:
Private Sub mfg_Click()
GridEdit Asc(" ")
End Sub
但是这段代码是否会影响其它功能我没有测试,楼主可以自己测试一下。如果要删除一个区域的数据,按目前的方式来做是不行的,因为原来的代码中的操作都是在文本框获得焦点时,而你选中一个区域的数据时并没有让文本框获得焦点,所以文本框无法检测你按下了哪个键,所以不会执行任何代码。
在msflexgrid中输入数据的代码是在网上找的,我想另外加一个按delete键删除选定单元格数据的语句,但是加了之后不起作用,请各位高手给我分析一下是哪里出了冲突?
ps:我是新建了一个名字为gridtext的文本框和一个名字为mfg的msflexgrid控件。
Private Sub Form_Load()
rown = 5
With mfg
For i = 0 To 5
.ColAlignment(i) = flexAlignCenterCenter
.RowHeight(0) = 600
Next i
.ColWidth(0) = 400
End With
End Sub
Private Sub mfg_DblClick()
GridEdit Asc(" ")
End Sub
Private Sub mfg_KeyPress(KeyAscii As Integer)
GridEdit KeyAscii
End Sub
Sub GridEdit(KeyAscii As Integer)
gridtext.FontName = mfg.FontName
gridtext.FontSize = mfg.FontSize
Select Case KeyAscii
Case 0 To Asc(" ")
gridtext = mfg
gridtext.SelStart = 0
gridtext.SelLength = Len(gridtext.Text)
Case Else
gridtext = Chr(KeyAscii)
gridtext.SelStart = 1
End Select
gridtext.Left = mfg.CellLeft + mfg.Left
gridtext.Top = mfg.CellTop + mfg.Top
gridtext.Width = mfg.CellWidth
gridtext.Height = mfg.CellHeight
gridtext.Visible = True
gridtext.SetFocus
End Sub
Private Sub mfg_LeaveCell()
If gridtext.Visible Then
mfg = gridtext
gridtext.Visible = False
End If
End Sub
Private Sub mfg_GotFocus()
If gridtext.Visible Then
mfg = gridtext
gridtext.Visible = False
End If
End Sub
Private Sub gridtext_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyEscape
gridtext.Visible = False
mfg.SetFocus
Case vbKeyReturn
mfg.SetFocus
DoEvents
If mfg.Row < mfg.Rows - 1 Then
mfg.Row = mfg.Row + 1
End If
Case vbKeyDown
mfg.SetFocus
DoEvents
If mfg.Row < mfg.Rows - 1 Then
mfg.Row = mfg.Row + 1
End If
Case vbKeyUp
mfg.SetFocus
DoEvents
If mfg.Row > mfg.FixedRows Then
mfg.Row = mfg.Row - 1
End If
Case vbKeyTab
mfg.SetFocus
DoEvents
If mfg.Row > mfg.FixedRows Then
mfg.Row = mfg.Row - 1
End If
Case vbKeyDelete
mfg.Text = ""
End Select
End Sub
Private Sub gridtext_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then KeyAscii = 0
End Sub
另外我还想问一下,我如何删除指定区域的数据呢?
------解决方案--------------------
Case vbKeyDelete
gridtext = ""
这样就可以了。
------解决方案--------------------
如果楼主只删除一个单元格的数据原来代码就可以实现这个功能 ,但是必须双击选定的单元格,如果改成单击就可以选定单元格可添加如下代码:
Private Sub mfg_Click()
GridEdit Asc(" ")
End Sub
但是这段代码是否会影响其它功能我没有测试,楼主可以自己测试一下。如果要删除一个区域的数据,按目前的方式来做是不行的,因为原来的代码中的操作都是在文本框获得焦点时,而你选中一个区域的数据时并没有让文本框获得焦点,所以文本框无法检测你按下了哪个键,所以不会执行任何代码。