Kryptolyser
Kryptolyser

Reputation: 29

C# MenuStrip use ToolStripProfessionalRenderer and ProfessionalColorTable as Renderer

I want to change the color of my MenuStrip with the ProfessionalColorTable but with this i cant change the colors of my arrows... I search for a way to change my MenuStrip style with the ColorTable (because I think there are more options) and also the arrow color with the ToolStripProfessionalRenderer class.

This is my code so far...

public class ArrowRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
    {
        var tsMenuItem = e.Item as ToolStripMenuItem;
        if (tsMenuItem != null)
            e.ArrowColor = Color.White;
        base.OnRenderArrow(e);
    }
}

AND

public class ColorTableMenu : ProfessionalColorTable
{
    public ColorTableMenu()
    {
        base.UseSystemColors = false;
    }
    Color color = Color.FromArgb(31, 77, 120);
    public override Color MenuItemSelected
    {
        get { return color; }
    }

    public override Color MenuItemBorder
    {
        get { return color; }
    }

    public override Color MenuItemSelectedGradientBegin
    {
        get { return color; }
    }

    ...
}

So my only way to set the renderer is

menuStrip1.Renderer = new ArrowRenderer();

OR

menuStrip1.Renderer = new ToolStripProfessionalRenderer(new ColorTableMenu);

but not both at the same time :(

Hope you can help me out, THANKS!

Upvotes: 0

Views: 1949

Answers (1)

Kryptolyser
Kryptolyser

Reputation: 29

OK found it...

public class ArrowRenderer : ToolStripProfessionalRenderer
{
    public ArrowRenderer() : base(new ColorTableMenu())
    {

    }

    protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
    {
        var tsMenuItem = e.Item as ToolStripMenuItem;
        if (tsMenuItem != null)
            e.ArrowColor = Color.White;
        base.OnRenderArrow(e);
    }
}

Upvotes: 2

Related Questions