grid的编辑功能

Private Sub MSHFlexGrid1_Click()
  Call SetFlexTxtBox
End Sub

'-------------------------------------------

Private Sub FlexTxtBox_GotFocus()
    FlexTxtBox.SelStart = 0
    FlexTxtBox.SelLength = Len(FlexTxtBox.Text)
End Sub

Private Sub FlexTxtBox_KeyDown(KeyCode As Integer, Shift As Integer)
    On Error Resume Next    
    Select Case KeyCode
    Case 13      'Enter
         If MSHFlexGrid1.col < MSHFlexGrid1.Cols - MSHFlexGrid1.FixedRows Then
             KeyCode = 0
             Call FlexTxtBox_LostFocus
             MSHFlexGrid1.col = MSHFlexGrid1.col + 1
             Call SetFlexTxtBox
         Else
             If MSHFlexGrid1.row < MSHFlexGrid1.Rows - MSHFlexGrid1.FixedRows Then
                 If chkAuto.value = 1 Then
                     KeyCode = 0
                     Call FlexTxtBox_LostFocus
                     MSHFlexGrid1.row = MSHFlexGrid1.row + 1
                     MSHFlexGrid1.col = MSHFlexGrid1.FixedCols
                     Call SetFlexTxtBox
                 End If
             End If
         End If
        
    Case 27      'ESC - Undo
         With FlexTxtBox
            .Text = MSHFlexGrid1.Text
            .SelStart = Len(.Text)
         End With
    Case 37      'LEFT
         If FlexTxtBox.SelStart = 0 Or FlexTxtBox.SelLength = Len(FlexTxtBox.Text) Then
             KeyCode = 0
             If MSHFlexGrid1.col = MSHFlexGrid1.FixedCols Then Exit Sub
             Call FlexTxtBox_LostFocus
             MSHFlexGrid1.col = MSHFlexGrid1.col - 1
             Call SetFlexTxtBox
         End If
        
    Case 38      'Up
         KeyCode = 0
         If MSHFlexGrid1.row = MSHFlexGrid1.FixedRows Then Exit Sub
         Call FlexTxtBox_LostFocus
         MSHFlexGrid1.row = MSHFlexGrid1.row - 1
         Call SetFlexTxtBox
        
    Case 39      'Right
         If FlexTxtBox.SelStart = Len(FlexTxtBox.Text) Or FlexTxtBox.SelLength = Len(FlexTxtBox.Text) Then
             KeyCode = 0
             Call FlexTxtBox_LostFocus
             MSHFlexGrid1.col = MSHFlexGrid1.col + 1
             Call SetFlexTxtBox
         End If
        
    Case 40      'Down
         KeyCode = 0
         Call FlexTxtBox_LostFocus
         MSHFlexGrid1.row = MSHFlexGrid1.row + 1
         Call SetFlexTxtBox
        
    End Select
End Sub

Private Sub FlexTxtBox_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
    Case 9, 13, 27, 37, 38, 39, 40
         KeyAscii = 0
    End Select
End Sub

Private Sub FlexTxtBox_LostFocus()
    MSHFlexGrid1.TextArray(FlexTxtBox.Tag) = FlexTxtBox.Text
    FlexTxtBox.Text = ""
End Sub

Function faIndex(row As Integer, col As Integer) As Long
    faIndex = row * MSHFlexGrid1.Cols + col
End Function

Private Sub SetFlexTxtBox()
    With FlexTxtBox
        .BackColor = &HC0FFFF
        .Left = MSHFlexGrid1.CellLeft + MSHFlexGrid1.Left - 10
        .Top = MSHFlexGrid1.CellTop + MSHFlexGrid1.Top - 10
        .Width = MSHFlexGrid1.CellWidth - 5
        .Height = MSHFlexGrid1.CellHeight - 5
        .Text = MSHFlexGrid1.Text
        .Tag = faIndex(MSHFlexGrid1.row, MSHFlexGrid1.col)
        .SelStart = 0
        .SelLength = Len(FlexTxtBox.Text)
        .Visible = True
        .SetFocus
    End With
End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值