dotnetmonitor.com

 
Index
Previous
Next

 

Use RenderMode to pick between stock renderers.

Use ToolStrip.Renderer to assign a custom renderer.

Ensure that RenderMode == ManagerRenderMode (default)

 

Sample

Form 6

Custom Renderer

Setting Renderer per toolstrip

Setting Renderer per application

 

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);

}

}

 

}

Painting
When should I use Paint/OnPaint and when should I override the ToolStripRenderer?
Do I need to worry about double buffering?
Parenting
Partial Trust
Usage