This is the class i've used over and over again borrowing your code thanx anyway, to use it simply call forceNumeric(datagridview1,"textboxdg","0,3") meaning column 0 and 3. By the way
Public Sub forceNumeric(ByRef obj As Object, Optional ByVal objForm As String = "textBox", Optional ByVal whichColumn As String = "0")
If objForm.ToLower = "textbox" Then
Dim textbox As TextBox = obj
AddHandler textbox.KeyDown, AddressOf NumericChecker
ElseIf objForm.ToLower = "combobox" Then
Dim combobox As ComboBox = obj
AddHandler combobox.KeyDown, AddressOf NumericChecker
ElseIf objForm.ToLower = "textboxdg" Then
Dim dg As DataGridView = obj
AddHandler dg.EditingControlShowing, AddressOf dgNumericChecker
Me.dg = dg
Me.whichcolumn = whichColumn
End If
End Sub
Private Sub dgNumericChecker(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs)
Dim splitWhichColumn As String()
splitWhichColumn = whichcolumn.Split(",")
For i As Integer = 0 To splitWhichColumn.Length - 1
If dg.CurrentCell.ColumnIndex = CInt(splitWhichColumn(i)) And Not e.Control Is Nothing Then
Dim tb As TextBox = CType(e.Control, TextBox)
AddHandler tb.KeyPress, AddressOf TextBox_KeyPress
End If
Next
End Sub
Private Sub TextBox_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If Char.IsDigit(e.KeyChar) Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 46 Then
If Asc(e.KeyChar) = 46 Then
If CType(sender, TextBox).Text.Contains(Chr(46)) Then
e.Handled = True
Else
e.Handled = False
End If
Else
e.Handled = False
End If
Else
e.Handled = True
End If
End Sub