Hallo, ich will in einem DataGridView die Eingabe (DataGridViewTextBoxColumn) auf die Ziffern 0 bis 9, Komma und Back beschränken.
Bisher habe ich für eine TextBox das Event _KeyPress und den folgenden Code verwendet: if ((!Regex.IsMatch(e.KeyChar.ToString(), @"^[0-9,]+$")) && (e.KeyChar != (int)Keys.Back)) e.Handled = true;
Das hat sehr gut funktioniert. Im DataGridView kann ich nur das Ereignis _CellValueChanged nutzen:
if (e.ColumnIndex == columnPreis.Index) { // ???? }
Wie kann ich darin die Eingabe auswerten und diese auf die Ziffern 0 bis 9, Komma und Back beschränken?
ich nutze für das Umwandeln von "," nach "." folgenden Code in einem DGV:
''' <summary> ''' Mit dem Überschreiben der ProcessCmdKey-Funktion kann man beeinflussen, welcher ''' Tasten-Code an das Steuerelement geliefert werde soll ''' </summary> ''' <param name="msg"></param> ''' <param name="keyData"></param> ''' <returns></returns> ''' <remarks></remarks> Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Try
If dgvIncidentsPositions.NewRowIndex > 0 Then
' Überprüfen in welcher Spalte man sich aktuell befindet Select Case dgvIncidentsPositions.Columns(dgvIncidentsPositions.CurrentCell.ColumnIndex).Name
' Artikelnummer: Case "ArticelNumberDataGridViewTextBoxColumn"
Select Case keyData
' Punkt schreiben, wenn Komma eingegeben wurde (10er-Block) Case Keys.Decimal keyData = Keys.OemPeriod msg.WParam = Keys.OemPeriod
' Bei Enter, mit Tab in die nächste Spalte springen Case Keys.Enter SendKeys.Send("{Tab}") Return True
End Select
Case "PositionCountDataGridViewTextBoxColumn"
If dgvIncidentsPositions.CurrentRow.Index + 1 = dgvIncidentsPositions.RowCount - 1 Then Select Case keyData ' Bei Enter, mit Tab in die nächste Spalte springen Case Keys.Enter AddNewPosition(True) 'SendKeys.Send("{Down}") 'SendKeys.Send("{Left}") Return True
End Select
End If
Case Else
End Select
End If
Catch ex As Exception
End Try
' Übergeben des aktuellen Zeichens Return MyBase.ProcessCmdKey(msg, keyData)
End Function
Vielleicht geht´s auch einfacher - aber das hier funktioniert bei uns ganz gut