Welcome to WindowsClient.net | Sign in | Join

Here are some frequently asked questions about Windows Forms and their answers.

Windows Forms FAQs

How do I globally change the painting (Renderer) for all my ToolStrips?

Use RenderMode to pick between stock renderers.

Use ToolStrip.Renderer to assign a custom renderer.

Ensure that RenderMode == ManagerRenderMode (default)

 class Form6 : Form
 {
  ComboBox targetComboBox = new ComboBox();

  public Form6()
  {
   // alter renderer at top level

   // new toolstrip
   ToolStrip ts = new ToolStrip();
   ts.Name = "ToolStrip";
   ts.Items.Add("Apples");
   ts.Items.Add("Oranges");
   ts.Items.Add("Pears");

   // new menustrip, with new window
   MenuStrip ms = new MenuStrip();
   ms.Name = "MenuStrip";
   ms.Dock = DockStyle.Top;

   // add top level items
   ToolStripMenuItem fileMenuItem = new ToolStripMenuItem("File");
   ms.Items.Add(fileMenuItem);
   ms.Items.Add("Edit");
   ms.Items.Add("View");
   ms.Items.Add("Window");

   // add subitems to "File"
   fileMenuItem.DropDownItems.Add("Open");
   fileMenuItem.DropDownItems.Add("Save");
   fileMenuItem.DropDownItems.Add("Save As...");
   fileMenuItem.DropDownItems.Add("-");
   fileMenuItem.DropDownItems.Add("Exit");

   // Add button to apply renderers
   Button applyButton = new Button();
   applyButton.Text = "Apply Custom Renderer";
   applyButton.Click += new EventHandler(applyButton_Click);

   // Add combobox
   targetComboBox.Items.Add("All");
   targetComboBox.Items.Add("MenuStrip");
   targetComboBox.Items.Add("ToolStrip");
   targetComboBox.Items.Add("Reset");

   applyButton.Click += new EventHandler(applyButton_Click);

   // Add TLP
   TableLayoutPanel tlp = new TableLayoutPanel();
   tlp.Dock = DockStyle.Fill;
   tlp.RowCount = 1;
   tlp.ColumnCount = 2;
   tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
   tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent));
   tlp.Controls.Add(applyButton);
   tlp.Controls.Add(targetComboBox);

   // Add groupbox
   GroupBox gb = new GroupBox();
   gb.Text = "Apply Renderers";
   gb.Dock = DockStyle.Fill;
   gb.Controls.Add(tlp);

   // Add groupbox to form
   this.Controls.Add(gb);

   // Add toolstrip to controls collection
   this.Controls.Add(ts);

   // Add menustrip to controls collection last - Z order!
   this.Controls.Add(ms);
  }

  void applyButton_Click(object sender, EventArgs e)
  {
   ToolStrip ms = ToolStripManager.FindToolStrip("MenuStrip");
   ToolStrip ts = ToolStripManager.FindToolStrip("ToolStrip");

   switch (targetComboBox.SelectedItem.ToString())
   {

    case "Reset":
     ms.RenderMode = ToolStripRenderMode.ManagerRenderMode;
     ts.RenderMode = ToolStripRenderMode.ManagerRenderMode;

     // default
     ToolStripManager.RenderMode = ToolStripManagerRenderMode.Professional;
     break;

    case "All":
     ms.RenderMode = ToolStripRenderMode.ManagerRenderMode;
     ts.RenderMode = ToolStripRenderMode.ManagerRenderMode;

     // default
     ToolStripManager.Renderer = new CustomProfessionalRenderer();
     break;

    case "MenuStrip":
     ms.Renderer = new CustomProfessionalRenderer();
     break;

    case "ToolStrip":
     ms.Renderer = new CustomProfessionalRenderer();
     break;
   }
  }

  void ChangeColors_Click(object sender, EventArgs e)
  {
   ToolStripManager.Renderer = new CustomProfessionalRenderer();
  }
 }

 class CustomProfessionalRenderer : ToolStripProfessionalRenderer
 {
  protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
  {
   if (e.Item.Selected)
   {
    using (Brush b = new SolidBrush(ProfessionalColors.SeparatorLight))
    {
     e.Graphics.FillEllipse(b, e.Item.ContentRectangle);
    }
   }
   else
    using (Pen p = new Pen(ProfessionalColors.SeparatorLight))
    {
     e.Graphics.DrawEllipse(p, e.Item.ContentRectangle);
    }
  }

  protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
  {
   Rectangle r = Rectangle.Inflate(e.Item.ContentRectangle, -2, -2);

   if (e.Item.Selected)
   {
    using (Brush b = new SolidBrush(ProfessionalColors.SeparatorLight))
    {
     e.Graphics.FillRectangle(b, r);
    }
   }

   else
    using (Pen p = new Pen(ProfessionalColors.SeparatorLight))
    {
     e.Graphics.DrawRectangle(p, r);
    }
  }

 }