Search code examples
c#winformsbackcolortoolstripmenu

c# winforms toolstripmenuitem change background


OK, someone please tell me why this is not working.

I have a simple MenuStrip in winforms app (c#). It has ToolStripMenuItems.

In the properties window of the designer, I select BackColor = White. In Desginer.cs file I can see it.

Running the app, the background color is Control (grey).

What is going? Why is the backcolor not white?

Thanks

EDIT

This is the code from the Designer.cs:

   this.menuRefresh.BackColor = System.Drawing.Color.White;

Refresh item should be white

EDIT2:

In the code, after loading the form (in the constructor and also in Form_Load event I've placed this:

 menuRefresh.BackColor = Color.White;

Also not helping.


Solution

  • You need to implement a simple renderer class to achieve this. Here is an example:

    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
          InitializeComponent(); 
          menuStrip1.Renderer = new MyRenderer(); 
        } 
    
        private class MyRenderer : ToolStripProfessionalRenderer 
        { 
            protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)      
            { 
                Rectangle rc = new Rectangle(Point.Empty, e.Item.Size); 
                Color c = e.Item.Selected ? Color.Azure : Color.Beige; 
                using (SolidBrush brush = new SolidBrush(c)) 
                    e.Graphics.FillRectangle(brush, rc); 
            } 
        } 
    }