This code limits the focus in a big MSFlexGrid to a certain range of columns and rows. It limits movement by using the
entercell method. It controls the use of
enterkey,
arrowkey, or mouse clicking with simple, on-cell direct editing:
Const XTRA_COLS = 3 'including fixed column
Const XTRA_ROWS = 15 'including fixed row
Private Sub flxGrdDemo_EnterCell()
With flxGrdDemo
If .Col > .Cols - XTRA_COLS Then
.Col = 1
If .Row + 1 <= .Rows - XTRA_ROWS Then
.Row = .Row + 1
Else
.Row = 1
.Col = 1
End If
End If
End With
End Sub
Private Sub FlxGrdDemo_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyReturn
' When the user hits the return key
' this code'll move the next cell or row.
With flxGrdDemo
If .Col + 1 <= .Cols - XTRA_COLS Then
.Col = .Col + 1
ElseIf .Row + 1 <= .Rows - XTRA_ROWS Then
.Row = .Row + 1
.Col = 1
Else
.Row = 1
.Col = 1
End If
End With
Case vbKeyBack
' Delete the previous character when the
' backspace key is used.
With flxGrdDemo
If Trim(.Text) <> "" Then _
.Text = Mid(.Text, 1, Len(.Text) - 1)
End With
Case Is < 32
' Avoid unprintable characters.
Case Else 'Else print everything
With flxGrdDemo
.Text = .Text & Chr(KeyAscii)
End With
End Select
End Sub
Private Sub FlxGrdDemo_KeyUp(KeyCode As _
Integer, Shift As Integer)
Select Case KeyCode
' Copy
Case vbKeyC And Shift = 2 ' Control + C
Clipboard.Clear
Clipboard.SetText flxGrdDemo.Text
KeyCode = 0
' Paste
Case vbKeyV And Shift = 2 'Control + V
flxGrdDemo.Text = Clipboard.GetText
KeyCode = 0
' Cut
Case vbKeyX And Shift = 2 'Control + X
Clipboard.Clear
Clipboard.SetText flxGrdDemo.Text
flxGrdDemo.Text = ""
KeyCode = 0
' Delete
Case vbKeyDelete
flxGrdDemo.Text = ""
End Select
End Sub