none
Textbox Dinamicos y KeyPress RRS feed

  • Pregunta

  • Buenas a todos!
    Tengo un código en el cual creo unos textbox dinámicamente y después quiero que al introducir valores en esos textboxes solo se puedan introducir números y punto "." y coma ",".

    Como llamo al evento KeyPress de todos esos textboxes creados?
    O alguna solución para que solo deje meter esos caracteres?
    Gracias de antemano:
    Parte del código:

                       
                        'Crear nuevo TextBox de HORAS de parada 
                        Dim txthoras As New TextBox
    
                        txthoras.Font = New Font(("Tahoma"), 8, FontStyle.Bold)
                        txthoras.Width = 100
                        txthoras.Location = New Point(c, d)
                        txthoras.Enabled = True
                        'Añadir el control a la coleccion de controles del Form 
                        tp.Controls.Add(txthoras)
                        textboxhorasarray(cont) = txthoras
                        d = d + 30
    

    lunes, 5 de diciembre de 2016 11:00

Respuestas

  • Puedes crear el manejador de evento en forma dinámica, por ejemplo crea un método con el nombre que quieras

    Private Sub validar(sender As Object, e As KeyPressEventArgs)
       If Not ".,".Contains(e.KeyChar.ToString()) Then
          e.Handled = True
       End If
    End Sub

    y enlazalo en la creación del control (antes de agregarlo a la colección de controles):

    AddHandler txthoras.KeyPress, AddressOf Me.validar

    lunes, 5 de diciembre de 2016 12:17
  • Después de crear el control TextBox puedes asignarle el manejador del evento con algo como

     AddHandler miTextBox.KeyPress, AddressOf MiEvento_KeyPress

    Y crear el evento con

    Private Sub MiEvento_KeyPress(ByVal sender As Object, _
                        ByVal e As System.Windows.Forms.KeyPressEventArgs)

        Dim TextboxControl As TextBox = CType(sender, TextBox)

        If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "." Then
            ' No es un carácter de control, nº o un punto no es válido
            e.Handled = True
        ElseIf e.KeyChar = "." AndAlso (TextboxControl.SelectionStart <> 1 Or TextboxControl.Text.IndexOf(".") >= 0) Then
            ' Es un punto y no existe ya en el texto (para no repetirlo)
            e.Handled = True
        End If

    End Sub

            

    Saludos, Javier J

    lunes, 5 de diciembre de 2016 17:40

Todas las respuestas

  • Puedes utilizar el evento KeyPress del textbox para controlar los caracteres tecleados:

    Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

        Dim TextboxControl As TextBox = CType(sender, TextBox)

        If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "." Then
            ' No es un carácter de control, nº o un punto no es válido
            e.Handled = True
        ElseIf e.KeyChar = "." AndAlso (TextboxControl.SelectionStart <> 1 Or TextboxControl.Text.IndexOf(".") >= 0) Then
            ' Es un punto y no existe ya en el texto (para no repetirlo)
            e.Handled = True
        End If

    End Sub


    Saludos, Javier J

    lunes, 5 de diciembre de 2016 11:27
  • El problema es que no puedo llamar al evento KeyPress del textbox por que el textbox no lo tengo creado desde el diseñador, es decir: no puedo poner:

    Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

    puesto que el Textbox1 no existe.
    entonces... como hago para referenciarme al keypress del Textbox que creo en el load?
    No se si me explico bien.
    Gracias de antemano

    lunes, 5 de diciembre de 2016 11:44
  • Puedes crear el manejador de evento en forma dinámica, por ejemplo crea un método con el nombre que quieras

    Private Sub validar(sender As Object, e As KeyPressEventArgs)
       If Not ".,".Contains(e.KeyChar.ToString()) Then
          e.Handled = True
       End If
    End Sub

    y enlazalo en la creación del control (antes de agregarlo a la colección de controles):

    AddHandler txthoras.KeyPress, AddressOf Me.validar

    lunes, 5 de diciembre de 2016 12:17
  • Después de crear el control TextBox puedes asignarle el manejador del evento con algo como

     AddHandler miTextBox.KeyPress, AddressOf MiEvento_KeyPress

    Y crear el evento con

    Private Sub MiEvento_KeyPress(ByVal sender As Object, _
                        ByVal e As System.Windows.Forms.KeyPressEventArgs)

        Dim TextboxControl As TextBox = CType(sender, TextBox)

        If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "." Then
            ' No es un carácter de control, nº o un punto no es válido
            e.Handled = True
        ElseIf e.KeyChar = "." AndAlso (TextboxControl.SelectionStart <> 1 Or TextboxControl.Text.IndexOf(".") >= 0) Then
            ' Es un punto y no existe ya en el texto (para no repetirlo)
            e.Handled = True
        End If

    End Sub

            

    Saludos, Javier J

    lunes, 5 de diciembre de 2016 17:40