none
Cómo puedo cambiar el color del borde de un control TextBox

    Pregunta

  • Muchas gracias por tu pronta  respuesta la probaré haber si me funciona, adaptándola a la forma como quiero que me funcione..y otra pregunta si no es mucha molestia, como hago para que haga Focus en un TextBox, el borde quede color amarillo y al salir del Focus, vuelva a su estado normal, quiero algo parecido a lo de Facebook. Tengo entendido que con un Rectangule Shape, lo puedo hacer pero no encontré la forma de hacerlo funcionar..Gracias
    martes, 19 de marzo de 2013 15:25

Respuestas

  • "Harold Pineda" preguntó:

    > como hago para que haga Focus en un TextBox, el borde quede color
    > amarillo y al salir del Focus, vuelva a su estado normal, quiero
    > algo parecido a lo de Facebook. Tengo entendido que con un
    > Rectangule Shape, lo puedo hacer pero no encontré la forma de
    > hacerlo funcionar.
    >
    > Pero yo quiero saberla en código Visual Basic

    Mientras que encuentras otra solución más favorable, mira a ver si te sirve la siguiente, escrita en Visual Basic .NET:

        Private Sub TextBox2_Enter(sender As Object, e As EventArgs) Handles TextBox2.Enter
    
            ' Referenciamos el control TextBox que ha desencadenado el evento
            Dim tb As TextBox = DirectCast(sender, TextBox)
    
            DrawRectangle(tb, Color.Red)
    
        End Sub
    
        Private Sub TextBox2_Leave(sender As Object, e As EventArgs) Handles TextBox2.Leave
    
            ' Referenciamos el control TextBox que ha desencadenado el evento
            Dim tb As TextBox = DirectCast(sender, TextBox)
    
            DrawRectangle(tb, Me.BackColor)
    
        End Sub
    
        Private Sub DrawRectangle(tb As TextBox, clr As Color)
    
            If (tb Is Nothing) Then Return
    
            Dim d As Integer = 2

    Dim pt As New Point(tb.Location.X - d, tb.Location.Y - d) Dim sz As New Size(tb.Width + (2 * d), tb.Height + (2 * d)) Using g As Graphics = Me.CreateGraphics() Dim rect As New Rectangle(pt, sz) Dim p As New Pen(clr, 2) g.DrawRectangle(p, rect) p.Dispose() End Using End Sub

    Es decir, cuando el foco entra en el control TextBox2, se dibuja en el formulario un rectángulo en rojo (para que lo puedas observar mejor) alrededor del propio control TextBox, y cuando pierda el control el foco, se volverá a dibujar otro rectángulo, pero en éste caso, será del mismo color que la propiedad BackColor del formulario.

    Si quieres que el código te sirva para otros controles TextBox, en éste caso tendrás que crearte una clase que herede de la clase TextBox:

    Public Class TextBoxEx Inherits TextBox Protected Overrides Sub OnEnter(e As EventArgs) MyBase.OnEnter(e) DrawRectangle(Color.Red) End Sub Protected Overrides Sub OnLeave(e As EventArgs) MyBase.OnLeave(e)

    ' Formulario contenedor del control
    Dim frm As Control = Me.Parent
    DrawRectangle(frm.BackColor) End Sub Private Sub DrawRectangle(clr As Color) Dim d As Integer = 2

    Dim pt As New Point(Me.Location.X - d, Me.Location.Y - d) Dim sz As New Size(Me.Width + (2 * d), Me.Height + (2 * d)) ' Formulario contenedor del control ' Dim frm As Control = Me.Parent Using g As Graphics = frm.CreateGraphics() Dim rect As New Rectangle(pt, sz) Dim p As New Pen(clr, 2) g.DrawRectangle(p, rect) p.Dispose() End Using End Sub End Class

    Una vez que hayas compilado tu proyecto, en lugar de insertar en el formulario controles TextBox, inserta aquellos llamados TextBoxEx.

    Adapta el ejemplo a tus necesidades.

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.




    martes, 19 de marzo de 2013 17:53
    Moderador
  • "Miguel Nureña" preguntó:

    > implemente esta nueva clase, y me sale un error en esta linea
    >
    > Using g As  Graphics = frm.CreateGraphics()
    >
    > Error: Referencia a objeto no establecida como instancia de un objeto.
    >
    > uso visual 2012. con el .net framework 4

    Hola, Miguel:

    Si el valor de la variable objeto llamada 'frm' es Nothing, es normal que obtengas ese error cuando desees acceder a sus propiedades o métodos, utilices Visual Basic 6.0 o cualquier otra versión de Visual Basic .NET, por lo que de acuerdo al ejemplo de más arriba tendrías que actuar de la siguiente manera:

        ' Obtener el formulario contenedor del control
        '
        Dim frm As Control = Me.Parent
    
        If (Not frm Is Nothing) Then
            ' Si el valor no es Nothing crear el objeto Graphics
            Using g As Graphics = frm.CreateGraphics()
                Dim rect As New Rectangle(pt, sz)
                Dim p As New Pen(clr, 2)
                g.DrawRectangle(p, rect)
                p.Dispose()
            End Using
    
        Else
           MessageBox.Show("El control no dispone de un contenedor.")
    
        End If
    


    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    lunes, 28 de agosto de 2017 7:38
    Moderador

Todas las respuestas

  • hola

    esta pregunta se realizo anteriormente en el foro

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/e3bd6745-f6ed-495d-a1ae-f4ada709509d/

    en tu caso cambiarias el color segun se lancen los eventos Enter o Leave del textbox

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 19 de marzo de 2013 16:40
  • Hola Leandro:

    Efectivamente esa pregunta esta en el foro. Pero yo quiero saberla en código Visual Basic, en Visual Studio 2010. La respuesta esta en Lenguage C#, pero mi aplicación orientada a Ingeniería Civil, la estoy haciendo en Lenguage Visual Basic. Si me pudieras ayudar con dicho código te lo agradecería de mano... Ah por si no esta bien formulada la pregunta, yo quiero que cambie de color el borde del TextBox, es cuando recibe el Foco... Muchas Gracias...

    martes, 19 de marzo de 2013 17:27
  • "Harold Pineda" preguntó:

    > como hago para que haga Focus en un TextBox, el borde quede color
    > amarillo y al salir del Focus, vuelva a su estado normal, quiero
    > algo parecido a lo de Facebook. Tengo entendido que con un
    > Rectangule Shape, lo puedo hacer pero no encontré la forma de
    > hacerlo funcionar.
    >
    > Pero yo quiero saberla en código Visual Basic

    Mientras que encuentras otra solución más favorable, mira a ver si te sirve la siguiente, escrita en Visual Basic .NET:

        Private Sub TextBox2_Enter(sender As Object, e As EventArgs) Handles TextBox2.Enter
    
            ' Referenciamos el control TextBox que ha desencadenado el evento
            Dim tb As TextBox = DirectCast(sender, TextBox)
    
            DrawRectangle(tb, Color.Red)
    
        End Sub
    
        Private Sub TextBox2_Leave(sender As Object, e As EventArgs) Handles TextBox2.Leave
    
            ' Referenciamos el control TextBox que ha desencadenado el evento
            Dim tb As TextBox = DirectCast(sender, TextBox)
    
            DrawRectangle(tb, Me.BackColor)
    
        End Sub
    
        Private Sub DrawRectangle(tb As TextBox, clr As Color)
    
            If (tb Is Nothing) Then Return
    
            Dim d As Integer = 2

    Dim pt As New Point(tb.Location.X - d, tb.Location.Y - d) Dim sz As New Size(tb.Width + (2 * d), tb.Height + (2 * d)) Using g As Graphics = Me.CreateGraphics() Dim rect As New Rectangle(pt, sz) Dim p As New Pen(clr, 2) g.DrawRectangle(p, rect) p.Dispose() End Using End Sub

    Es decir, cuando el foco entra en el control TextBox2, se dibuja en el formulario un rectángulo en rojo (para que lo puedas observar mejor) alrededor del propio control TextBox, y cuando pierda el control el foco, se volverá a dibujar otro rectángulo, pero en éste caso, será del mismo color que la propiedad BackColor del formulario.

    Si quieres que el código te sirva para otros controles TextBox, en éste caso tendrás que crearte una clase que herede de la clase TextBox:

    Public Class TextBoxEx Inherits TextBox Protected Overrides Sub OnEnter(e As EventArgs) MyBase.OnEnter(e) DrawRectangle(Color.Red) End Sub Protected Overrides Sub OnLeave(e As EventArgs) MyBase.OnLeave(e)

    ' Formulario contenedor del control
    Dim frm As Control = Me.Parent
    DrawRectangle(frm.BackColor) End Sub Private Sub DrawRectangle(clr As Color) Dim d As Integer = 2

    Dim pt As New Point(Me.Location.X - d, Me.Location.Y - d) Dim sz As New Size(Me.Width + (2 * d), Me.Height + (2 * d)) ' Formulario contenedor del control ' Dim frm As Control = Me.Parent Using g As Graphics = frm.CreateGraphics() Dim rect As New Rectangle(pt, sz) Dim p As New Pen(clr, 2) g.DrawRectangle(p, rect) p.Dispose() End Using End Sub End Class

    Una vez que hayas compilado tu proyecto, en lugar de insertar en el formulario controles TextBox, inserta aquellos llamados TextBoxEx.

    Adapta el ejemplo a tus necesidades.

     


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.




    martes, 19 de marzo de 2013 17:53
    Moderador
  • La respuesta esta en Lenguage C#, pero mi aplicación orientada a Ingeniería Civil, la estoy haciendo en Lenguage Visual Basic.

    no veo que tenga que ver la ing Civil con VB.Net digo se podria haber realizada tambien en c# y que sea Ing Civil no lo afecta

    recuerda que existen conversores

    http://converter.telerik.com/

    que ayudan a pasar de un lenguaje a otro

    es cuando recibe el Foco

    por eso decia puedes usar el evento GetFocus o Enter

    y si quieres volverlo a la normalidad usarias lostFocus o Leave estos son eventos del textbox

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    martes, 19 de marzo de 2013 18:06
  • Muchas gracias por tu respuesta me ha sido de ayuda aunque es algo alrga de código, pero me ha servido.
    miércoles, 20 de marzo de 2013 3:29
  • "Harold Pineda" escribió:

    > Muchas gracias por tu respuesta me ha sido de ayuda
    > aunque es algo alrga de código, pero me ha servido.

    ¿Qué esperabas? ¿Cambiar el color del borde de un control TextBox en dos líneas de código? :-D

    Estamos hablando de implementar una clase derivada, la cual contiene los métodos justos y necesarios para hacer correctamente su trabajo, y eso ocupa más de dos líneas de código.


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.


    miércoles, 20 de marzo de 2013 6:43
    Moderador
  • perdon por revivir este pregunta, pero es que implemente esta nueva clase, y me sale un error en esta linea

    Using g As  Graphics = frm.CreateGraphics()

    Error: Referencia a objeto no establecida como instancia de un objeto.

    uso visual 2012. con el .net framework 4


    Leer un msj de ERROR, te da la posibilidad de entender que esta pasando.! http://programacionx.net


    lunes, 28 de agosto de 2017 1:51
  • "Miguel Nureña" preguntó:

    > implemente esta nueva clase, y me sale un error en esta linea
    >
    > Using g As  Graphics = frm.CreateGraphics()
    >
    > Error: Referencia a objeto no establecida como instancia de un objeto.
    >
    > uso visual 2012. con el .net framework 4

    Hola, Miguel:

    Si el valor de la variable objeto llamada 'frm' es Nothing, es normal que obtengas ese error cuando desees acceder a sus propiedades o métodos, utilices Visual Basic 6.0 o cualquier otra versión de Visual Basic .NET, por lo que de acuerdo al ejemplo de más arriba tendrías que actuar de la siguiente manera:

        ' Obtener el formulario contenedor del control
        '
        Dim frm As Control = Me.Parent
    
        If (Not frm Is Nothing) Then
            ' Si el valor no es Nothing crear el objeto Graphics
            Using g As Graphics = frm.CreateGraphics()
                Dim rect As New Rectangle(pt, sz)
                Dim p As New Pen(clr, 2)
                g.DrawRectangle(p, rect)
                p.Dispose()
            End Using
    
        Else
           MessageBox.Show("El control no dispone de un contenedor.")
    
        End If
    


    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    lunes, 28 de agosto de 2017 7:38
    Moderador