| 

.NET C# Java Javascript Exception

1
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?


Matthias
02.07.2012
Matthias34 1 1
2 Antworten
0
Hey,

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
03.07.2012
MyKey0815 1,6k 2 9
0
Das KeyDown-Event wird wahrscheinlich nicht funktionieren:

Daher empfehle ich dir diesen Link.
03.07.2012
KN 1,7k 1 8
KN 1,7k 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH