Solución: Modifiqué un poquito el código que encontré aquí: DataGridView con solo números
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing ' referencia a la celda Dim validar As TextBox = CType(e.Control, TextBox) ' agregar el controlador de eventos para el KeyPress AddHandler validar.KeyPress, AddressOf validar_Keypress End Sub
Private Sub validar_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) ' evento Keypress ' obtener índice de la columna Dim columna As Integer = DataGridView1.CurrentCell.ColumnIndex ' comprobar si la celda en edición corresponde a la columna 1 o 2 If columna = 1 Or columna = 2 Then ' Obtener caracter Dim caracter As Char = e.KeyChar ' referencia a la celda Dim txt As TextBox = CType(sender, TextBox) ' comprobar si es un número con isNumber, si es el backspace, si el caracter ' es el separador decimal, y que no contiene ya el separador If (Char.IsNumber(caracter)) Or _ (caracter = ChrW(Keys.Back)) Or _ (caracter = ",") And _ (txt.Text.Contains(",") = False) Then e.Handled = False Else e.Handled = True End If End If End Sub
Gracias a un comentario realizado en mi anterior blog, pude rescatar estas palabras.
Aquí una solución sencilla y con control de decimales.
Private Sub ValidaNro_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) ' hay que poner en e format de cada columna un formato numérico para que controle solo números Dim FormatoColumna As String = Malla.Columns(Malla.CurrentCell.ColumnIndex).DefaultCellStyle.Format.ToString If FormatoColumna = "" Then Exit Sub Select Case e.KeyChar Case "0" To "9", vbBack e.Handled = False Case "." If FormatoColumna.Contains(".") Then e.Handled = CType(sender, TextBox).Text.Contains(".") ' verifica si ya tiene un punto decimal Else e.Handled = True End If Case Else e.Handled = True End Select End Sub Private Sub Malla_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles Malla.EditingControlShowing Dim ValidarNro As TextBox = e.Control RemoveHandler ValidarNro.KeyPress, AddressOf ValidaNro_KeyPress AddHandler ValidarNro.KeyPress, AddressOf ValidaNro_KeyPress End Sub