none
PERSONALIZAR TOOLSTRIP RRS feed

  • Pregunta

  • Hola amigos. quisiera saber como puedo personalizar mi barra toolstrip, color de fondo, bordes, color de fondo de los botones desplegables y demás.

    ya ha probado varias formas y no doy con la solución.

    desde ya muchas gracias

    miércoles, 8 de abril de 2015 18:57

Respuestas

  • Para hacer lo que quieres necesitas crearte una implementación propia de ToolStripRenderer y asignársela al ToolStrip a través de la propiedad Renderer.

    En este ejemplo asigno a los elementos de tipo ToolStripButton el color verde al fondo cuando se pasa por encima del botón y el rojo cuando el botón está seleccionado.

    Public Class ToolStripForm
    
        Public Sub New()
            InitializeComponent()
            ToolStrip1.Renderer = New CustomRenderer()
        End Sub
    
        Public Class CustomRenderer
            Inherits ToolStripProfessionalRenderer
    
            Protected Overloads Overrides Sub OnRenderButtonBackground(ByVal e As ToolStripItemRenderEventArgs)
    
                Dim customColor As Color = Color.Empty
    
                If TypeOf e.Item Is ToolStripButton Then
                    Dim boton As ToolStripButton = CType(e.Item, ToolStripButton)
                    If (boton.CheckState = CheckState.Checked) Then
                        customColor = Color.Red
                    Else
                        If e.Item.Selected Then
                            customColor = Color.Green
                        End If
                    End If
                End If
                If customColor.IsEmpty() Then
                    MyBase.OnRenderMenuItemBackground(e)
                Else
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(customColor), rectangle)
                End If
    
            End Sub
        End Class
    
    End Class

    • Marcado como respuesta fertenaglia jueves, 9 de abril de 2015 20:43
    jueves, 9 de abril de 2015 13:30
  • No tienes más que sobreescribir el método OnRenderMenuItemBackground:

            Protected Overrides Sub OnRenderMenuItemBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderMenuItemBackground(e)
                End If
            End Sub

    • Marcado como respuesta fertenaglia viernes, 10 de abril de 2015 11:38
    jueves, 9 de abril de 2015 21:19
  • Con el statusStrip funciona de igual forma. Puedes crear una nueva clase Renderer o utilizar la misma:

    StatusStrip1.Renderer = New CustomRenderer()

    Si lo que quieres es modificar la apariencia de los botones DropDownButton o SplitButton:

            Protected Overrides Sub OnRenderDropDownButtonBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderDropDownButtonBackground(e)
                End If
            End Sub
    
            Protected Overrides Sub OnRenderSplitButtonBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderDropDownButtonBackground(e)
                End If
            End Sub
    Para otras personalizaciones puedes sobreescribir otros métodos de la clase ToolStripRenderer

    • Marcado como respuesta fertenaglia viernes, 10 de abril de 2015 14:30
    viernes, 10 de abril de 2015 12:10
  • Comprueba el valor de la propiedad Pressed:

            Protected Overrides Sub OnRenderDropDownButtonBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Or e.Item.Pressed Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderDropDownButtonBackground(e)
                End If
            End Sub

    • Marcado como respuesta fertenaglia viernes, 10 de abril de 2015 21:50
    viernes, 10 de abril de 2015 19:38

Todas las respuestas

  • Imports System.Drawing

    Mira.. necesitas tener tu toolstrip1,2,3,... la q sea, en la parte donde es el LOAD... de tu forma puedes ingresar:

    toolstrip1.BackgroundColor = color.Gray

    toolstrip1.Button1.backgroundColor = color.DimGray

    Si no.. en las opciones puedes ver las opciones para cambiar los colores.

    jueves, 9 de abril de 2015 3:52
  • gracias amigo. eso ya lo pude hacer. el tema es que cuando apreto un boton de la toolstrip ahi se cambia de color. ese color tambien quisiera personalizarlo. al igual que los bordes y demas elementos..

    gracias por tu respuesta

    jueves, 9 de abril de 2015 11:36
  • Para hacer lo que quieres necesitas crearte una implementación propia de ToolStripRenderer y asignársela al ToolStrip a través de la propiedad Renderer.

    En este ejemplo asigno a los elementos de tipo ToolStripButton el color verde al fondo cuando se pasa por encima del botón y el rojo cuando el botón está seleccionado.

    Public Class ToolStripForm
    
        Public Sub New()
            InitializeComponent()
            ToolStrip1.Renderer = New CustomRenderer()
        End Sub
    
        Public Class CustomRenderer
            Inherits ToolStripProfessionalRenderer
    
            Protected Overloads Overrides Sub OnRenderButtonBackground(ByVal e As ToolStripItemRenderEventArgs)
    
                Dim customColor As Color = Color.Empty
    
                If TypeOf e.Item Is ToolStripButton Then
                    Dim boton As ToolStripButton = CType(e.Item, ToolStripButton)
                    If (boton.CheckState = CheckState.Checked) Then
                        customColor = Color.Red
                    Else
                        If e.Item.Selected Then
                            customColor = Color.Green
                        End If
                    End If
                End If
                If customColor.IsEmpty() Then
                    MyBase.OnRenderMenuItemBackground(e)
                Else
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(customColor), rectangle)
                End If
    
            End Sub
        End Class
    
    End Class

    • Marcado como respuesta fertenaglia jueves, 9 de abril de 2015 20:43
    jueves, 9 de abril de 2015 13:30
  • muchas gracias amigo. me ha servido mucho tu atyuda y ademas del boon lo pude hacer con un dropdown buton. lo que no me sale es cambiarle el fondo a las opciones que se desplegan del dropdownbuton. es decir a un toolStripMenuItem. me explico??

    espero tu ayuda y muchas gracias de nuevo

    jueves, 9 de abril de 2015 20:42
  • No tienes más que sobreescribir el método OnRenderMenuItemBackground:

            Protected Overrides Sub OnRenderMenuItemBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderMenuItemBackground(e)
                End If
            End Sub

    • Marcado como respuesta fertenaglia viernes, 10 de abril de 2015 11:38
    jueves, 9 de abril de 2015 21:19
  • gracias amigo me ha servido de mucho tu aporte. Te hago una ultima consulta. Necesito hacer lo mismo pero con una statusStrip (barra de estado). Osea, cambiarle el color de fondo y agregarle bordes en negro. como puedo hacerlo?

    saludos y gracias nuevamente

    viernes, 10 de abril de 2015 11:40
  • Con el statusStrip funciona de igual forma. Puedes crear una nueva clase Renderer o utilizar la misma:

    StatusStrip1.Renderer = New CustomRenderer()

    Si lo que quieres es modificar la apariencia de los botones DropDownButton o SplitButton:

            Protected Overrides Sub OnRenderDropDownButtonBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderDropDownButtonBackground(e)
                End If
            End Sub
    
            Protected Overrides Sub OnRenderSplitButtonBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderDropDownButtonBackground(e)
                End If
            End Sub
    Para otras personalizaciones puedes sobreescribir otros métodos de la clase ToolStripRenderer

    • Marcado como respuesta fertenaglia viernes, 10 de abril de 2015 14:30
    viernes, 10 de abril de 2015 12:10
  • muchas gracias amigo. me ha funcionado a la perfección. solo me queda un detalle. cuando paso el puntero del mouse por los items del menu. el color de fondo del dropdownbuton se me pone azul y no gris como yo lo definí en la personalizacion del render.

    en esta primera imagen te muestro como configure el dropdown button cuando le paso por arriba con el mouse (se pone gris)

    pero cuando paso por encima de los items del menu se me vuelve con ese gradiente azul. que supongo que es el de sistema. como puedo hacer para que esto no suceda?. que quede gris en todo momento?

    gracias y saludos

    viernes, 10 de abril de 2015 15:28
  • Comprueba el valor de la propiedad Pressed:

            Protected Overrides Sub OnRenderDropDownButtonBackground(e As ToolStripItemRenderEventArgs)
                If e.Item.Selected Or e.Item.Pressed Then
                    Dim rectangle As Rectangle = New Rectangle(0, 0, e.Item.Size.Width - 1, e.Item.Size.Height - 1)
                    e.Graphics.FillRectangle(New SolidBrush(Color.Green), rectangle)
                Else
                    MyBase.OnRenderDropDownButtonBackground(e)
                End If
            End Sub

    • Marcado como respuesta fertenaglia viernes, 10 de abril de 2015 21:50
    viernes, 10 de abril de 2015 19:38
  • gracias amigo..... me fue de gran utilidad!!!!!!!!! saludos!!!!!!!
    viernes, 10 de abril de 2015 21:51