none
Cambiar tamaño textbox RRS feed

  • Pregunta

  • Estoy probando esta rutina para cambiar el tamaño de fuente de unos textbox pero no me funciona, le paso de parámetro page o el nombre del panel o de un tabpage pero nada.
        Private Sub ponFuente(ByVal xctrl As Control)
            Dim ctrl As Control
            For Each ctrl In xctrl.Controls
                 If TypeOf ctrl Is TextBox Then
                    Dim txt As TextBox = TryCast(ctrl, TextBox)
                    txt.Font.Size = 4
                Else
                    ponFuente(ctrl) 'llamar Recursivamente
                End If
            Next
        End Sub

    sábado, 2 de julio de 2016 20:12

Respuestas

  • Por cierto he probado este ultimo método y no me pasa la llamada da error

    Hola, ¿Qué error obtienes?

    Quizá la definición de Shared te está trayendo problemas,

    Private Function ObtenerControles(Of T As Control)(contenedor As Control) As List(Of T)
            Dim controles As New List(Of T)()
    
            For Each control As Control In contenedor.Controls
                If TypeOf control Is T Then
                    controles.Add(DirectCast(control, T))
                End If
    
                controles.AddRange(ObtenerControles(Of T)(control))
            Next
    
            Return controles
        End Function
    
        Private Sub btnCambiarTamanio_Click(sender As Object, e As EventArgs) Handles btnCambiarTamanio.Click
    
            Dim controles As List(Of TextBox) = Me.ObtenerControles(Of TextBox)(Me)
    
            For Each control As TextBox In controles
                control.Font = New Font("Arial", 20)
            Next
    
        End Sub

    Coméntanos como te fue,

    • Marcado como respuesta Cid105 martes, 5 de julio de 2016 12:54
    lunes, 4 de julio de 2016 15:19

Todas las respuestas

  • Hola Cid105,

    No entiendo que quieres hacer con lo de recursividad, ya que siempre hará lo mismo.

    Con respecto a tu código, ya no deberías declarar el Control :

       Private Sub ponFuente(ByVal xctrl As Control)
            For Each ctrl In xctrl.Controls
                If TypeOf ctrl Is TextBox Then
                    Dim txt As TextBox = TryCast(ctrl, TextBox)
                    txt.Font.Size = 4
                End If
            Next
        End Sub

    Y solo enviarías el control contenedor, en este caso Me hace alusión al WebForms.

     Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ponFuente(Me)
        End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    sábado, 2 de julio de 2016 21:16
  • Cid105,

    Entiendo que el tema de recursividad va en la idea de recorrer la colección de controles de tipo TextBox incluso en los contenedores subyacentes y para conseguirlo hay muchas formas, una que me gusta mucho es a través de generics.

    La idea es implementar un método que retorne una colección de controles de un tipo determinado sobre los cuales modificar el valor de cualquiera de sus propiedades, claro, la colección retorna todos los controles (de un tipo) incluso de los contenedores subyacentes:

    Public Shared Function ObtenerControles(Of T As Control)(contenedor As Control) As List(Of T)
    		Dim controles As New List(Of T)()
    		For Each control As Control In contenedor.Controls
    			If TypeOf control Is T Then
    				controles.Add(DirectCast(control, T))
    			End If
    
    			controles.AddRange(ObtenerControles(Of T)(control))
    		Next
    
    		Return controles
    	End Function

    Nota que el método retorna una colección de controles de un tipo especificado, para nuestro caso de tipo TextBox, hacer uso del método es simple:

    Me.ObtenerControles(Of TextBox)().ForEach(Function(c) InlineAssignHelper(c.Font, New Font("Arial", 20)))

    domingo, 3 de julio de 2016 1:04
  • Hola Gracias por las respuestas, el problema no es con la recursividad, sencillamente no cambi el tamañode las fuentes en ningún lado...
    lunes, 4 de julio de 2016 10:15
  • Por cierto he probado este ultimo método y no me pasa la llamada da error
    lunes, 4 de julio de 2016 10:29
  • Por cierto he probado este ultimo método y no me pasa la llamada da error

    Hola, ¿Qué error obtienes?

    Quizá la definición de Shared te está trayendo problemas,

    Private Function ObtenerControles(Of T As Control)(contenedor As Control) As List(Of T)
            Dim controles As New List(Of T)()
    
            For Each control As Control In contenedor.Controls
                If TypeOf control Is T Then
                    controles.Add(DirectCast(control, T))
                End If
    
                controles.AddRange(ObtenerControles(Of T)(control))
            Next
    
            Return controles
        End Function
    
        Private Sub btnCambiarTamanio_Click(sender As Object, e As EventArgs) Handles btnCambiarTamanio.Click
    
            Dim controles As List(Of TextBox) = Me.ObtenerControles(Of TextBox)(Me)
    
            For Each control As TextBox In controles
                control.Font = New Font("Arial", 20)
            Next
    
        End Sub

    Coméntanos como te fue,

    • Marcado como respuesta Cid105 martes, 5 de julio de 2016 12:54
    lunes, 4 de julio de 2016 15:19
    1. Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar2.ValueChanged
    2. boxTextoOriginal.Font = New Font("Lucida Sans Unicode", TrackBar2.Value) '// Set Font Name and Size.
    3. End Sub

    RicoPollo

    • Propuesto como respuesta viajeroh martes, 5 de julio de 2016 13:44
    lunes, 4 de julio de 2016 15:28
  • Gracias esto si me funciona
    martes, 5 de julio de 2016 12:54