Практическое руководство. Задание средства визуализации компонента ToolStrip для приложения
Настройка внешнего вида элементов управления ToolStrip может производиться отдельно для каждого из них или для всех элементов управления ToolStrip, используемых в приложении.
Пример
В примере кода ниже показано, как выборочно применить пользовательское средство отрисовки к элементу управления ToolStrip и элементу управления MenuStrip.
Чтобы использовать этот пример, скомпилируйте и запустите приложение, а затем выберите область пользовательской отрисовки в элементе управления ComboBox. Нажмите Применить, чтобы задать средство отрисовки.
Чтобы увидеть пользовательскую отрисовку элемента меню, выберите MenuStrip параметр из ComboBox управлять, щелкните применить, а затем откройте файл пункта меню.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
// This example demonstrates how to apply a
// custom professional renderer to an individual
// ToolStrip or to the application as a whole.
class Form6 : Form
{
ComboBox targetComboBox = new ComboBox();
public Form6()
{
// Alter the renderer at the top level.
// Create and populate a new ToolStrip control.
ToolStrip ts = new ToolStrip();
ts.Name = "ToolStrip";
ts.Items.Add("Apples");
ts.Items.Add("Oranges");
ts.Items.Add("Pears");
// Create a new menustrip with a 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 the "File" menu.
fileMenuItem.DropDownItems.Add("Open");
fileMenuItem.DropDownItems.Add("Save");
fileMenuItem.DropDownItems.Add("Save As...");
fileMenuItem.DropDownItems.Add("-");
fileMenuItem.DropDownItems.Add("Exit");
// Add a Button control to apply renderers.
Button applyButton = new Button();
applyButton.Text = "Apply Custom Renderer";
applyButton.Click += new EventHandler(applyButton_Click);
// Add the ComboBox control for choosing how
// to apply the renderers.
targetComboBox.Items.Add("All");
targetComboBox.Items.Add("MenuStrip");
targetComboBox.Items.Add("ToolStrip");
targetComboBox.Items.Add("Reset");
// Create and set up a TableLayoutPanel control.
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);
// Create a GroupBox for the TableLayoutPanel control.
GroupBox gb = new GroupBox();
gb.Text = "Apply Renderers";
gb.Dock = DockStyle.Fill;
gb.Controls.Add(tlp);
// Add the GroupBox to the form.
this.Controls.Add(gb);
// Add the ToolStrip to the form's Controls collection.
this.Controls.Add(ts);
// Add the MenuStrip control last.
// This is important for correct placement in the z-order.
this.Controls.Add(ms);
}
// This event handler is invoked when
// the "Apply Renderers" button is clicked.
// Depending on the value selected in a ComboBox control,
// it applies a custom renderer selectively to
// individual MenuStrip or ToolStrip controls,
// or it applies a custom renderer to the
// application as a whole.
void applyButton_Click(object sender, EventArgs e)
{
ToolStrip ms = ToolStripManager.FindToolStrip("MenuStrip");
ToolStrip ts = ToolStripManager.FindToolStrip("ToolStrip");
if (targetComboBox.SelectedItem != null)
{
switch (targetComboBox.SelectedItem.ToString())
{
case "Reset":
{
ms.RenderMode = ToolStripRenderMode.ManagerRenderMode;
ts.RenderMode = ToolStripRenderMode.ManagerRenderMode;
// Set the default RenderMode to Professional.
ToolStripManager.RenderMode = ToolStripManagerRenderMode.Professional;
break;
}
case "All":
{
ms.RenderMode = ToolStripRenderMode.ManagerRenderMode;
ts.RenderMode = ToolStripRenderMode.ManagerRenderMode;
// Assign the custom renderer at the application level.
ToolStripManager.Renderer = new CustomProfessionalRenderer();
break;
}
case "MenuStrip":
{
// Assign the custom renderer to the MenuStrip control only.
ms.Renderer = new CustomProfessionalRenderer();
break;
}
case "ToolStrip":
{
// Assign the custom renderer to the ToolStrip control only.
ts.Renderer = new CustomProfessionalRenderer();
break;
}
}
}
}
}
// This type demonstrates a custom renderer. It overrides the
// OnRenderMenuItemBackground and OnRenderButtonBackground methods
// to customize the backgrounds of MenuStrip items and ToolStrip buttons.
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);
}
}
}
}
Чтобы применить пользовательское средство отрисовки ко всем элементам управления ToolStrip, используемым в приложении, задайте свойство ToolStripManager.Renderer.
Чтобы применить пользовательское средство отрисовки к отдельному элементу управления ToolStrip, задайте свойство ToolStrip.Renderer.
Компиляция кода
Для этого примера требуются:
- ссылки на сборки System.Design, System.Drawing и System.Windows.Forms.
Сведения о выполнении сборки этого примера из командной строки для Visual Basic или Visual C#, см. в разделе построение из командной строки или командной строки создания с помощью csc.exe. Можно также сборке этого примера в Visual Studio путем вставки кода в новый проект.