none
¿Cómo puedo juntar estos dos códigos para cambiar colores en un ContextMenuStrip? ¿Cómo los compagino? RRS feed

  • Pregunta

  • Verán, para cambiar el color de algunos elementos lo hago reemplazando propiedades (allí hay solo una, pero podría agregar otras, según lo que se necesite), con este código:

    Public Class ColorTable
        Inherits ProfessionalColorTable
    
        Dim Color1 = Color.FromArgb(30, 38, 44)
        Dim Color2 = Color.FromArgb(75, 81, 88)
    
        Public Overrides ReadOnly Property MenuBorder() As Color
            Get
                Return Color1
            End Get
        End Property
    End Class
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Menus.Renderer = New ToolStripProfessionalRenderer(New ColorTable())
    End Sub

    Pero para cambiar el color del cursor del menú (el rectángulo resaltado) lo hago con este otro código, reemplazando un método:

      Friend Class Renderizador
        Inherits ToolStripProfessionalRenderer
    
        '*** Para cambiar de color el cursor del menú.
    
        Protected Overrides Sub OnRenderMenuItemBackground(e As ToolStripItemRenderEventArgs)
          If Not e.Item.Selected Then
            MyBase.OnRenderMenuItemBackground(e)
          Else
            Dim Rectangulo As Rectangle = New Rectangle(Point.Empty, e.Item.Size)
            e.Graphics.FillRectangle(Brushes.Red, Rectangulo)
            e.Graphics.DrawRectangle(Pens.Black, 1, 0, Rectangulo.Width - 2, Rectangulo.Height - 1)
          End If
        End Sub
      End Class
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Menus.Renderer = New Renderizador
    End Sub

    Como se observa ambas clases heredan una clase distinta pero ambas se ejecutan a través de la propiedad Render (en el evento Load). Los códigos anteriores funcionan por separado, es decir al llamar a uno u otro mediante la propiedad render se excluyen mutuamente (prevalece el último, en buen cristiano se chanca su valor), la consulta es cómo hago que funcionen juntos para obtener todos los cambios o cómo hago para cambiar propiedades y también cambiar el color del cursor (selector, del menú), a la vez.









    • Editado James2016-2 jueves, 17 de septiembre de 2020 3:51
    jueves, 17 de septiembre de 2020 3:42

Respuestas

Todas las respuestas

  • Deleted
    • Marcado como respuesta James2016-2 jueves, 17 de septiembre de 2020 14:43
    jueves, 17 de septiembre de 2020 12:03
  • Hola James2016-2, 

      

    ¿Alguna novedad sobre la consulta realizada? 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 17 de septiembre de 2020 13:09
    Moderador
  • Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Menus.Renderer = New Renderizador(New ColorTable())
    End Sub

    Hola, gracias por la respuesta, me marca en rojo el argumento, creo que hay que redefinir el constructor pero no sé que ponerle, este es lo que sale:

    jueves, 17 de septiembre de 2020 14:35
  • Ok, gracias EricRR.
    • Editado James2016-2 jueves, 17 de septiembre de 2020 14:41
    jueves, 17 de septiembre de 2020 14:41
  • Hola Wɐltər, yo de nuevo, generé el constructor automáticamente y le puso el código necesario y funcionó. Gracias nuevamente.
    jueves, 17 de septiembre de 2020 14:42