Hi,
mein HexEditor funktioniert inzwischen ganz manierlich. Trotzdem bin ich noch nicht ganz zufrieden.
Die einzelnen Zeichen werden in den Zellen der DatagridView
Ich möchte als Eingabe nur HexZeichen (also Ziffern und die Buchstaben a - f zulassen. Alle anderen Zeichen sollen ignoriert werden, damit keine "falschen" Eingaben möglich sind.
Nach dem Drücken der ENTER Taste soll die Eingabe akzeptiert werden.
Nach dem Drücken der ESC Taste soll die Eingabe verworfen werden (dazu habe ich mir die alten Werte im
So habe ich das versucht:
Die Sache mit ENTER und ESC klappt hervorragend. Der Edit Mode wird in der "richtigen" Weise beendet.
Aber wie kriege ich das mit den HexZeichen hin ?
In der Routine
Im
Aber so richtig brauchbar scheint das auch nicht zu sein ... den geänderten Text kann man sich allenfalls aus dem sender herausschneiden ... und damit kann ich nix verändern.
Weiß jemand wie ich "falsche" Eingaben im Edit Mode unterdrücken kann ?
LG
Peter
mein HexEditor funktioniert inzwischen ganz manierlich. Trotzdem bin ich noch nicht ganz zufrieden.
Die einzelnen Zeichen werden in den Zellen der DatagridView
dgvHexDump
dargestellt. Jede Zelle kann editiert werden ... dann bin befindet sich diese Zelle im "EditMode".Ich möchte als Eingabe nur HexZeichen (also Ziffern und die Buchstaben a - f zulassen. Alle anderen Zeichen sollen ignoriert werden, damit keine "falschen" Eingaben möglich sind.
Nach dem Drücken der ENTER Taste soll die Eingabe akzeptiert werden.
Nach dem Drücken der ESC Taste soll die Eingabe verworfen werden (dazu habe ich mir die alten Werte im
BeginEdit()
Event gemerkt. So habe ich das versucht:
VB.NET-Quellcode
- Private Sub dgvHexDump_EditingControlShowing(ByVal sender As Object,
- ByVal e As DataGridViewEditingControlShowingEventArgs) _
- Handles dgvHexDump.EditingControlShowing
- If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
- RemoveHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).PreviewKeyDown,
- AddressOf EditingControlPreviewKeyDown
- AddHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).PreviewKeyDown,
- AddressOf EditingControlPreviewKeyDown
- End If
VB.NET-Quellcode
- Private Sub EditingControlPreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs)
- Debug.WriteLine("Preview Keycode=" & e.KeyCode)
- Select Case e.KeyCode
- Case Keys.Enter : dgvHexDump.EndEdit() 'ENTER - Accept edited value
- Case Keys.Escape 'ESC - Discard edited value
- blnRestoreCell = True 'Restore cell flag (honored by EndEdit() )
- dgvHexDump.EndEdit() 'Terminate edit mode
- blnRestoreCell = False 'Reset flag
- Case Else 'Ignore all other non-hex keys
- If Not "0123456789ABCDEF".Contains(e.KeyCode.ToString) Then
- Debug.WriteLine("Suppress Keycode=" & e.KeyCode.ToString) '<-- how to handle THIS ???
- End If
- End Select
- End Sub
Die Sache mit ENTER und ESC klappt hervorragend. Der Edit Mode wird in der "richtigen" Weise beendet.
Aber wie kriege ich das mit den HexZeichen hin ?
In der Routine
dgvHexDump_EditingControlShowing
gibt weder e.Handled noch e.SuppressKey etc. Außerdem ist e.KeyCode ReadOnly ... Wie also kann ich "falsche" Zeichen unterdrücken ? Im
EditingControlShowing
gibt es auch nicht gar so viele Events die man abonnieren kann ... Das einzige was ich gefunden habe wäre: VB.NET-Quellcode
- If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
- RemoveHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).TextChanged,
- AddressOf EditingControlTextChanged
- AddHandler DirectCast(e.Control, DataGridViewTextBoxEditingControl).TextChanged,
- AddressOf EditingControlTextChanged
- End If
Aber so richtig brauchbar scheint das auch nicht zu sein ... den geänderten Text kann man sich allenfalls aus dem sender herausschneiden ... und damit kann ich nix verändern.
Weiß jemand wie ich "falsche" Eingaben im Edit Mode unterdrücken kann ?
LG
Peter
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()