zurück zum Thema:
die von fin dargestellte Lösung prüft erst, wenn die Eingabe schon beendet ist. Mein Ansatz ist, erst gar keine unerlaubten Zeichen zuzulassen:
Ich verwende daher die Behandlung des Ereignisses EditingControlShowing des DGV. Dies tritt ein, wenn ein Steuerelement zur Bearbeitung einer Zelle angezeigt wird.
Zunächst prüfe ich, ob es sich um eine DataGridViewTextBox handelt, und ob die aktive Spalte die ist, in der nur Zahlen erlaubt sind. Dann wird der KeyPress-Ereignis-Handler zunächst entfernt und wieder hinzugefügt, um bei Wiederholungen sicherzugehen:
''' <summary>
''' die aktive Zelle
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub dgvVorgang_EditingControlShowing(ByVal sender As Object, _
ByVal e As _
System.Windows.Forms.DataGridV_
iewEditingControlShowingEventA_
rgs) _
Handles _
dgvVorgang.EditingControlShowi_
ng
If TypeOf (e.Control) Is DataGridViewTextBoxEditingControl Then
Dim locTB As DataGridViewTextBoxEditingControl = _
CType(e.Control, DataGridViewTextBoxEditingControl)
RemoveHandler locTB.KeyPress, AddressOf TextBox_KeyPress
If dgvVorgang.CurrentCell.ColumnIndex = 4 Then
AddHandler locTB.KeyPress, AddressOf TextBox_KeyPress
End If
End If
End Sub Dann gibt es die Behandlung des KeyPress-Ereignisses der TextBox, die die numerische Eingabe prüft:
''' <summary>
''' in einer Textbox des DataGridViews wurde ein Zeichen eingegeben
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks>
''' nur numerische Eingabe zulassen
''' </remarks>
Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As _
KeyPressEventArgs)
If Not IstNumerischeEingabe(e.KeyChar) Then
e.Handled = True
End If
End Sub ...man könnte natürlich auch schreiben "e.Handled = not IstNumerischeEingabe(e.KeyChar)"
Die Funktion IstNumerischeEingabe ...
''' <summary>
''' prüft, ob das Zeichen in einem rein numerischen Eingabefeld erlaubt ist
''' </summary>
''' <param name="Zeichen"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function IstNumerischeEingabe(ByVal Zeichen As Char) As Boolean
Return (",1234567890" & Keys.Back & Keys.Delete).Contains(Zeichen)
End Function Denk' Denk' Denk'
Beitrag wurde zuletzt am 09.05.14 um 08:08:09 editiert. |