none
DATAGRID CON SOLO NUMEROS RRS feed

  • Pregunta

  • hola a todos he estado haciendo una aplicacion en visual studio 2010 y necesito de un datagrid en dos celdas donde solo me acepte numeros he tratado los codigos comunes como estos:

    Private Sub validar_keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
            Dim columna As Integer = DGFactura.CurrentCell.ColumnIndex
            If columna = 0 Or columna = 2 Or columna = 3 Then
                Dim caracter As Char = e.KeyChar
                Dim txt As TextBox = CType(sender, TextBox)
                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
                Dim dPunto As Boolean = decimales(txt.Text.ToString)
                If dPunto = True Then
                    e.Handled = True
                Else
                    e.Handled = False
                End If
            End If
        End Sub

    Sin embargo este lo usaba en otro computador con visual studio 2012.. ahora en visual studio 2010 me vota error al llar este  procedimiento..

    las normales de

    if instr("1234567890",e.keychar) > 0 then
    e.keychar=""
    end if

    no tienen efecto

    espero me puedan ayudar con ese problema..

    miércoles, 16 de noviembre de 2016 20:04

Respuestas

  • Hola Rolando Salvatierra,

    Disculpa tuve un error, el código tendría que ser de esta manera.

      Private Sub DataGridView1_EditingControlShowing(sender As .....
            RemoveHandler e.Control.KeyPress, AddressOf soloNumeros
    
            If DataGridView1.CurrentCell.ColumnIndex = 0 Or
                DataGridView1.CurrentCell.ColumnIndex = 1 Then
    
                AddHandler e.Control.KeyPress, AddressOf soloNumeros
            End If
        End Sub

    Y el otro si es lo mismo.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 16 de noviembre de 2016 20:48
  • Dim txt = TryCast(e.Control, TextBox)
            RemoveHandler txt.KeyPress, AddressOf soloNumeros
            If DgvItems.CurrentCell.ColumnIndex = 0 Or
          DgvItems.CurrentCell.ColumnIndex = 1 Then
    
    
                If txt IsNot Nothing Then
                    AddHandler txt.KeyPress, AddressOf soloNumeros
                End If
            Else
    
            End If
    Lo deje asi y si funciona... muchas gracias por la ayuda...
    miércoles, 16 de noviembre de 2016 21:14

Todas las respuestas

  • Hola Rolando Salvatierra,

    Si estás agregando los valores directamente al dataGridView podrías usar el evento EditingControlShowing, donde tendrías que aplicar la validación para tomar solo los números.

    Algo como :

    Private Sub DataGridView1_EditingControlShowing(sender As Object, e ..............
        If DataGridView1.CurrentCell.ColumnIndex = 0 Or
           DataGridView1.CurrentCell.ColumnIndex = 1 Then
    
            Dim txt = TryCast(e.Control, TextBox)
    
            If txt IsNot Nothing Then
                AddHandler txt.KeyPress, AddressOf soloNumeros
            End If
        End If
    End Sub

    Dónde : 0 y 1 representan los índices de las columnas que solo permitirán ingresar números.

    Y para la validación :

    Private Sub soloNumeros(sender As Object, e As KeyPressEventArgs)
        e.Handled = Not Char.IsNumber(e.KeyChar) And e.KeyChar <> Convert.ToChar(Keys.Back)
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 16 de noviembre de 2016 20:22
  • muchas gracias voy a probar lo que me dices y si funciona la marco como respuesta.
    miércoles, 16 de noviembre de 2016 20:27
  • bueno lo he provado.. pero no se limita el solonumeros a las celdas que deben llevar numero sino a todas las celdas... como hago para anularla en el editingcontrolshowing??? o mejor dicho como hago para anular el procedimento?

    miércoles, 16 de noviembre de 2016 20:34
  • Hola Rolando Salvatierra,

    Disculpa tuve un error, el código tendría que ser de esta manera.

      Private Sub DataGridView1_EditingControlShowing(sender As .....
            RemoveHandler e.Control.KeyPress, AddressOf soloNumeros
    
            If DataGridView1.CurrentCell.ColumnIndex = 0 Or
                DataGridView1.CurrentCell.ColumnIndex = 1 Then
    
                AddHandler e.Control.KeyPress, AddressOf soloNumeros
            End If
        End Sub

    Y el otro si es lo mismo.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 16 de noviembre de 2016 20:48
  • Dim txt = TryCast(e.Control, TextBox)
            RemoveHandler txt.KeyPress, AddressOf soloNumeros
            If DgvItems.CurrentCell.ColumnIndex = 0 Or
          DgvItems.CurrentCell.ColumnIndex = 1 Then
    
    
                If txt IsNot Nothing Then
                    AddHandler txt.KeyPress, AddressOf soloNumeros
                End If
            Else
    
            End If
    Lo deje asi y si funciona... muchas gracias por la ayuda...
    miércoles, 16 de noviembre de 2016 21:14