ToolStripItem Class
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Represents the abstract base class that manages events and layout for all the elements that a ToolStrip or ToolStripDropDown can contain.
public ref class ToolStripItem abstract : System::ComponentModel::Component, IDisposable, System::Windows::Forms::IDropTarget
public ref class ToolStripItem abstract : System::Windows::Forms::BindableComponent, IDisposable, System::Windows::Forms::IDropTarget
public abstract class ToolStripItem : System.ComponentModel.Component, IDisposable, System.Windows.Forms.IDropTarget
public abstract class ToolStripItem : System.Windows.Forms.BindableComponent, IDisposable, System.Windows.Forms.IDropTarget
type ToolStripItem = class
inherit Component
interface IDropTarget
interface IComponent
interface IDisposable
type ToolStripItem = class
inherit BindableComponent
interface IDropTarget
interface IComponent
interface IDisposable
Public MustInherit Class ToolStripItem
Inherits Component
Implements IDisposable, IDropTarget
Public MustInherit Class ToolStripItem
Inherits BindableComponent
Implements IDisposable, IDropTarget
- Inheritance
- Inheritance
- Derived
- Implements
The following code example demonstrates how to implement a custom ToolStripItem control.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace RolloverItemDemoLib
{
// This class implements a ToolStripItem that highlights
// its border and text when the mouse enters its
// client rectangle. It has a clickable state which is
// exposed through the Clicked property and displayed
// by highlighting or graying out the item's image.
public class RolloverItem : ToolStripItem
{
private bool clickedValue = false;
private bool rolloverValue = false;
private Rectangle imageRect;
private Rectangle textRect;
// For brevity, this implementation limits the possible
// TextDirection values to ToolStripTextDirection.Horizontal.
public override ToolStripTextDirection TextDirection
{
get
{
return base.TextDirection;
}
set
{
if (value == ToolStripTextDirection.Horizontal)
{
base.TextDirection = value;
}
else
{
throw new ArgumentException(
"RolloverItem supports only horizontal text.");
}
}
}
// For brevity, this implementation limits the possible
// TextImageRelation values to ImageBeforeText and TextBeforeImage.
public new TextImageRelation TextImageRelation
{
get
{
return base.TextImageRelation;
}
set
{
if (value == TextImageRelation.ImageBeforeText ||
value == TextImageRelation.TextBeforeImage)
{
base.TextImageRelation = value;
}
else
{
throw new ArgumentException(
"Unsupported TextImageRelation value.");
}
}
}
// This property returns true if the mouse is
// inside the client rectangle.
public bool Rollover
{
get
{
return this.rolloverValue;
}
}
// This property returns true if the item
// has been toggled into the clicked state.
// Clicking again toggles it to the
// unclicked state.
public bool Clicked
{
get
{
return this.clickedValue;
}
}
// The method defines the behavior of the Click event.
// It simply toggles the state of the clickedValue field.
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
this.clickedValue ^= true;
}
// The method defines the behavior of the DoubleClick
// event. It shows a MessageBox with the item's text.
protected override void OnDoubleClick(EventArgs e)
{
base.OnDoubleClick(e);
string msg = String.Format("Item: {0}", this.Text);
MessageBox.Show(msg);
}
// This method defines the behavior of the MouseEnter event.
// It sets the state of the rolloverValue field to true and
// tells the control to repaint.
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
this.rolloverValue = true;
this.Invalidate();
}
// This method defines the behavior of the MouseLeave event.
// It sets the state of the rolloverValue field to false and
// tells the control to repaint.
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
this.rolloverValue = false;
this.Invalidate();
}
// This method defines the painting behavior of the control.
// It performs the following operations:
//
// Computes the layout of the item's image and text.
// Draws the item's background image.
// Draws the item's image.
// Draws the item's text.
//
// Drawing operations are implemented in the
// RolloverItemRenderer class.
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.Owner != null)
{
// Find the dimensions of the image and the text
// areas of the item.
this.ComputeImageAndTextLayout();
// Draw the background. This includes drawing a highlighted
// border when the mouse is in the client area.
ToolStripItemRenderEventArgs ea = new ToolStripItemRenderEventArgs(
e.Graphics,
this);
this.Owner.Renderer.DrawItemBackground(ea);
// Draw the item's image.
ToolStripItemImageRenderEventArgs irea =
new ToolStripItemImageRenderEventArgs(
e.Graphics,
this,
imageRect );
this.Owner.Renderer.DrawItemImage(irea);
// If the item is on a drop-down, give its
// text a different highlighted color.
Color highlightColor =
this.IsOnDropDown ?
Color.Salmon : SystemColors.ControlLightLight;
// Draw the text, and highlight it if the
// the rollover state is true.
ToolStripItemTextRenderEventArgs rea =
new ToolStripItemTextRenderEventArgs(
e.Graphics,
this,
base.Text,
textRect,
this.rolloverValue ? highlightColor : base.ForeColor,
base.Font,
base.TextAlign);
this.Owner.Renderer.DrawItemText(rea);
}
}
// This utility method computes the layout of the
// RolloverItem control's image area and the text area.
// For brevity, only the following settings are
// supported:
//
// ToolStripTextDirection.Horizontal
// TextImageRelation.ImageBeforeText
// TextImageRelation.ImageBeforeText
//
// It would not be difficult to support vertical text
// directions and other image/text relationships.
private void ComputeImageAndTextLayout()
{
Rectangle cr = base.ContentRectangle;
Image img = base.Owner.ImageList.Images[base.ImageKey];
// Compute the center of the item's ContentRectangle.
int centerY = (cr.Height - img.Height) / 2;
// Find the dimensions of the image and the text
// areas of the item. The text occupies the space
// not filled by the image.
if (base.TextImageRelation == TextImageRelation.ImageBeforeText &&
base.TextDirection == ToolStripTextDirection.Horizontal)
{
imageRect = new Rectangle(
base.ContentRectangle.Left,
centerY,
base.Image.Width,
base.Image.Height);
textRect = new Rectangle(
imageRect.Width,
base.ContentRectangle.Top,
base.ContentRectangle.Width - imageRect.Width,
base.ContentRectangle.Height);
}
else if (base.TextImageRelation == TextImageRelation.TextBeforeImage &&
base.TextDirection == ToolStripTextDirection.Horizontal)
{
imageRect = new Rectangle(
base.ContentRectangle.Right - base.Image.Width,
centerY,
base.Image.Width,
base.Image.Height);
textRect = new Rectangle(
base.ContentRectangle.Left,
base.ContentRectangle.Top,
imageRect.X,
base.ContentRectangle.Bottom);
}
}
}
#region RolloverItemRenderer
// This is the custom renderer for the RolloverItem control.
// It draws a border around the item when the mouse is
// in the item's client area. It also draws the item's image
// in an inactive state (grayed out) until the user clicks
// the item to toggle its "clicked" state.
internal class RolloverItemRenderer : ToolStripSystemRenderer
{
protected override void OnRenderItemImage(
ToolStripItemImageRenderEventArgs e)
{
base.OnRenderItemImage(e);
RolloverItem item = e.Item as RolloverItem;
// If the ToolSTripItem is of type RolloverItem,
// perform custom rendering for the image.
if (item != null)
{
if (item.Clicked)
{
// The item is in the clicked state, so
// draw the image as usual.
e.Graphics.DrawImage(
e.Image,
e.ImageRectangle.X,
e.ImageRectangle.Y);
}
else
{
// In the unclicked state, gray out the image.
ControlPaint.DrawImageDisabled(
e.Graphics,
e.Image,
e.ImageRectangle.X,
e.ImageRectangle.Y,
item.BackColor);
}
}
}
// This method defines the behavior for rendering the
// background of a ToolStripItem. If the item is a
// RolloverItem, it paints the item's BackgroundImage
// centered in the client area. If the mouse is in the
// item's client area, a border is drawn around it.
// If the item is on a drop-down or if it is on the
// overflow, a gradient is painted in the background.
protected override void OnRenderItemBackground(
ToolStripItemRenderEventArgs e)
{
base.OnRenderItemBackground(e);
RolloverItem item = e.Item as RolloverItem;
// If the ToolSTripItem is of type RolloverItem,
// perform custom rendering for the background.
if (item != null)
{
if (item.Placement == ToolStripItemPlacement.Overflow ||
item.IsOnDropDown)
{
using (LinearGradientBrush b = new LinearGradientBrush(
item.ContentRectangle,
Color.Salmon,
Color.DarkRed,
0f,
false))
{
e.Graphics.FillRectangle(b, item.ContentRectangle);
}
}
// The RolloverItem control only supports
// the ImageLayout.Center setting for the
// BackgroundImage property.
if (item.BackgroundImageLayout == ImageLayout.Center)
{
// Get references to the item's ContentRectangle
// and BackgroundImage, for convenience.
Rectangle cr = item.ContentRectangle;
Image bgi = item.BackgroundImage;
// Compute the center of the item's ContentRectangle.
int centerX = (cr.Width - bgi.Width) / 2;
int centerY = (cr.Height - bgi.Height) / 2;
// If the item is selected, draw the background
// image as usual. Otherwise, draw it as disabled.
if (item.Selected)
{
e.Graphics.DrawImage(bgi, centerX, centerY);
}
else
{
ControlPaint.DrawImageDisabled(
e.Graphics,
bgi,
centerX,
centerY,
item.BackColor);
}
}
// If the item is in the rollover state,
// draw a border around it.
if (item.Rollover)
{
ControlPaint.DrawFocusRectangle(
e.Graphics,
item.ContentRectangle);
}
}
}
#endregion
}
// This form tests various features of the RolloverItem
// control. RolloverItem conrols are created and added
// to the form's ToolStrip. They are also created and
// added to a button's ContextMenuStrip. The behavior
// of the RolloverItem control differs depending on
// the type of parent control.
public class RolloverItemTestForm : Form
{
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.Button button1;
private string infoIconKey = "Information icon";
private string handIconKey = "Hand icon";
private string exclIconKey = "Exclamation icon";
private string questionIconKey = "Question icon";
private string warningIconKey = "Warning icon ";
private System.ComponentModel.IContainer components = null;
public RolloverItemTestForm()
{
InitializeComponent();
// Set up the form's ToolStrip control.
InitializeToolStrip();
// Set up the ContextMenuStrip for the button.
InitializeContextMenu();
}
// This utility method initializes the ToolStrip control's
// image list. For convenience, icons from the SystemIcons
// class are used for this demonstration, but any images
// could be used.
private void InitializeImageList(ToolStrip ts)
{
if (ts.ImageList == null)
{
ts.ImageList = new ImageList();
ts.ImageList.ImageSize = SystemIcons.Exclamation.Size;
ts.ImageList.Images.Add(
this.infoIconKey,
SystemIcons.Information);
ts.ImageList.Images.Add(
this.handIconKey,
SystemIcons.Hand);
ts.ImageList.Images.Add(
this.exclIconKey,
SystemIcons.Exclamation);
ts.ImageList.Images.Add(
this.questionIconKey,
SystemIcons.Question);
ts.ImageList.Images.Add(
this.warningIconKey,
SystemIcons.Warning);
}
}
private void InitializeToolStrip()
{
this.InitializeImageList(this.toolStrip1);
this.toolStrip1.Renderer = new RolloverItemRenderer();
RolloverItem item = this.CreateRolloverItem(
this.toolStrip1,
"RolloverItem on ToolStrip",
this.Font,
infoIconKey,
TextImageRelation.ImageBeforeText,
exclIconKey);
this.toolStrip1.Items.Add(item);
item = this.CreateRolloverItem(
this.toolStrip1,
"RolloverItem on ToolStrip",
this.Font,
infoIconKey,
TextImageRelation.ImageBeforeText,
exclIconKey);
this.toolStrip1.Items.Add(item);
}
private void InitializeContextMenu()
{
Font f = new System.Drawing.Font(
"Arial",
18f,
FontStyle.Bold);
ContextMenuStrip cms = new ContextMenuStrip();
this.InitializeImageList(cms);
cms.Renderer = new RolloverItemRenderer();
cms.AutoSize = true;
cms.ShowCheckMargin = false;
cms.ShowImageMargin = false;
RolloverItem item = this.CreateRolloverItem(
cms,
"RolloverItem on ContextMenuStrip",
f,
handIconKey,
TextImageRelation.ImageBeforeText,
exclIconKey);
cms.Items.Add(item);
item = this.CreateRolloverItem(
cms,
"Another RolloverItem on ContextMenuStrip",
f,
questionIconKey,
TextImageRelation.ImageBeforeText,
exclIconKey);
cms.Items.Add(item);
item = this.CreateRolloverItem(
cms,
"And another RolloverItem on ContextMenuStrip",
f,
warningIconKey,
TextImageRelation.ImageBeforeText,
exclIconKey);
cms.Items.Add(item);
cms.Closing += new ToolStripDropDownClosingEventHandler(cms_Closing);
this.button1.ContextMenuStrip = cms;
}
// This method handles the ContextMenuStrip
// control's Closing event. It prevents the
// RolloverItem from closing the drop-down
// when the item is clicked.
void cms_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked)
{
e.Cancel = true;
}
}
// This method handles the Click event for the button.
// it selects the first item in the ToolStrip control
// by using the ToolStripITem.Select method.
private void button1_Click(object sender, EventArgs e)
{
RolloverItem item = this.toolStrip1.Items[0] as RolloverItem;
if (item != null)
{
item.Select();
this.Invalidate();
}
}
// This utility method creates a RolloverItem
// and adds it to a ToolStrip control.
private RolloverItem CreateRolloverItem(
ToolStrip owningToolStrip,
string txt,
Font f,
string imgKey,
TextImageRelation tir,
string backImgKey)
{
RolloverItem item = new RolloverItem();
item.Alignment = ToolStripItemAlignment.Left;
item.AllowDrop = false;
item.AutoSize = true;
item.BackgroundImage = owningToolStrip.ImageList.Images[backImgKey];
item.BackgroundImageLayout = ImageLayout.Center;
item.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
item.DoubleClickEnabled = true;
item.Enabled = true;
item.Font = f;
// These assignments are equivalent. Each assigns an
// image from the owning toolstrip's image list.
item.ImageKey = imgKey;
//item.Image = owningToolStrip.ImageList.Images[infoIconKey];
//item.ImageIndex = owningToolStrip.ImageList.Images.IndexOfKey(infoIconKey);
item.ImageScaling = ToolStripItemImageScaling.None;
item.Owner = owningToolStrip;
item.Padding = new Padding(2);
item.Text = txt;
item.TextAlign = ContentAlignment.MiddleLeft;
item.TextDirection = ToolStripTextDirection.Horizontal;
item.TextImageRelation = tir;
return item;
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// toolStrip1
//
this.toolStrip1.AllowItemReorder = true;
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(845, 25);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.Text = "toolStrip1";
//
// button1
//
this.button1.Location = new System.Drawing.Point(12, 100);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(86, 23);
this.button1.TabIndex = 1;
this.button1.Text = "Click to select";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// RolloverItemTestForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.ClientSize = new System.Drawing.Size(845, 282);
this.Controls.Add(this.button1);
this.Controls.Add(this.toolStrip1);
this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Name = "RolloverItemTestForm";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new RolloverItemTestForm());
}
}
}
Option Strict On
Option Explicit On
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
' This class implements a ToolStripItem that highlights
' its border and text when the mouse enters its
' client rectangle. It has a clickable state which is
' exposed through the Clicked property and displayed
' by highlighting or graying out the item's image.
Public Class RolloverItem
Inherits ToolStripItem
Private clickedValue As Boolean = False
Private rolloverValue As Boolean = False
Private imageRect As Rectangle
Private textRect As Rectangle
' For brevity, this implementation limits the possible
' TextDirection values to ToolStripTextDirection.Horizontal.
Public Overrides Property TextDirection() As ToolStripTextDirection
Get
Return MyBase.TextDirection
End Get
Set
If value = ToolStripTextDirection.Horizontal Then
MyBase.TextDirection = value
Else
Throw New ArgumentException( _
"RolloverItem supports only horizontal text.")
End If
End Set
End Property
' For brevity, this implementation limits the possible
' TextImageRelation values to ImageBeforeText and TextBeforeImage.
Public Shadows Property TextImageRelation() As TextImageRelation
Get
Return MyBase.TextImageRelation
End Get
Set
If Value = TextImageRelation.ImageBeforeText OrElse _
Value = TextImageRelation.TextBeforeImage Then
MyBase.TextImageRelation = Value
Else
Throw New ArgumentException("Unsupported TextImageRelation value.")
End If
End Set
End Property
' This property returns true if the mouse is
' inside the client rectangle.
Public ReadOnly Property Rollover() As Boolean
Get
Return Me.rolloverValue
End Get
End Property
' This property returns true if the item
' has been toggled into the clicked state.
' Clicking again toggles it to the
' unclicked state.
Public ReadOnly Property Clicked() As Boolean
Get
Return Me.clickedValue
End Get
End Property
' The method defines the behavior of the Click event.
' It simply toggles the state of the clickedValue field.
Protected Overrides Sub OnClick(e As EventArgs)
MyBase.OnClick(e)
Me.clickedValue = Me.clickedValue Xor True
End Sub
' The method defines the behavior of the DoubleClick
' event. It shows a MessageBox with the item's text.
Protected Overrides Sub OnDoubleClick(e As EventArgs)
MyBase.OnDoubleClick(e)
Dim msg As String = String.Format("Item: {0}", Me.Text)
MessageBox.Show(msg)
End Sub
' This method defines the behavior of the MouseEnter event.
' It sets the state of the rolloverValue field to true and
' tells the control to repaint.
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
Me.rolloverValue = True
Me.Invalidate()
End Sub
' This method defines the behavior of the MouseLeave event.
' It sets the state of the rolloverValue field to false and
' tells the control to repaint.
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
Me.rolloverValue = False
Me.Invalidate()
End Sub
' This method defines the painting behavior of the control.
' It performs the following operations:
'
' Computes the layout of the item's image and text.
' Draws the item's background image.
' Draws the item's image.
' Draws the item's text.
'
' Drawing operations are implemented in the
' RolloverItemRenderer class.
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
If (Me.Owner IsNot Nothing) Then
' Find the dimensions of the image and the text
' areas of the item.
Me.ComputeImageAndTextLayout()
' Draw the background. This includes drawing a highlighted
' border when the mouse is in the client area.
Dim ea As New ToolStripItemRenderEventArgs(e.Graphics, Me)
Me.Owner.Renderer.DrawItemBackground(ea)
' Draw the item's image.
Dim irea As New ToolStripItemImageRenderEventArgs(e.Graphics, Me, imageRect)
Me.Owner.Renderer.DrawItemImage(irea)
' If the item is on a drop-down, give its
' text a different highlighted color.
Dim highlightColor As Color = CType(IIf(Me.IsOnDropDown, Color.Salmon, SystemColors.ControlLightLight), Color)
' Draw the text, and highlight it if the
' the rollover state is true.
Dim rea As New ToolStripItemTextRenderEventArgs( _
e.Graphics, _
Me, _
MyBase.Text, _
textRect, _
CType(IIf(Me.rolloverValue, highlightColor, MyBase.ForeColor), Color), _
MyBase.Font, _
MyBase.TextAlign)
Me.Owner.Renderer.DrawItemText(rea)
End If
End Sub
' This utility method computes the layout of the
' RolloverItem control's image area and the text area.
' For brevity, only the following settings are
' supported:
'
' ToolStripTextDirection.Horizontal
' TextImageRelation.ImageBeforeText
' TextImageRelation.ImageBeforeText
'
' It would not be difficult to support vertical text
' directions and other image/text relationships.
Private Sub ComputeImageAndTextLayout()
Dim cr As Rectangle = MyBase.ContentRectangle
Dim img As Image = MyBase.Owner.ImageList.Images(MyBase.ImageKey)
' Compute the center of the item's ContentRectangle.
Dim centerY As Integer = CInt((cr.Height - img.Height) / 2)
' Find the dimensions of the image and the text
' areas of the item. The text occupies the space
' not filled by the image.
If MyBase.TextImageRelation = _
TextImageRelation.ImageBeforeText AndAlso _
MyBase.TextDirection = ToolStripTextDirection.Horizontal Then
imageRect = New Rectangle( _
MyBase.ContentRectangle.Left, _
centerY, _
MyBase.Image.Width, _
MyBase.Image.Height)
textRect = New Rectangle( _
imageRect.Width, _
MyBase.ContentRectangle.Top, _
MyBase.ContentRectangle.Width - imageRect.Width, _
MyBase.ContentRectangle.Height)
ElseIf MyBase.TextImageRelation = _
TextImageRelation.TextBeforeImage AndAlso _
MyBase.TextDirection = ToolStripTextDirection.Horizontal Then
imageRect = New Rectangle( _
MyBase.ContentRectangle.Right - MyBase.Image.Width, _
centerY, _
MyBase.Image.Width, _
MyBase.Image.Height)
textRect = New Rectangle( _
MyBase.ContentRectangle.Left, _
MyBase.ContentRectangle.Top, _
imageRect.X, _
MyBase.ContentRectangle.Bottom)
End If
End Sub
End Class
' This is the custom renderer for the RolloverItem control.
' It draws a border around the item when the mouse is
' in the item's client area. It also draws the item's image
' in an inactive state (grayed out) until the user clicks
' the item to toggle its "clicked" state.
Friend Class RolloverItemRenderer
Inherits ToolStripSystemRenderer
Protected Overrides Sub OnRenderItemImage(ByVal e As ToolStripItemImageRenderEventArgs)
MyBase.OnRenderItemImage(e)
Dim item As RolloverItem = CType(e.Item, RolloverItem)
' If the ToolSTripItem is of type RolloverItem,
' perform custom rendering for the image.
If (item IsNot Nothing) Then
If item.Clicked Then
' The item is in the clicked state, so
' draw the image as usual.
e.Graphics.DrawImage(e.Image, e.ImageRectangle.X, e.ImageRectangle.Y)
Else
' In the unclicked state, gray out the image.
ControlPaint.DrawImageDisabled(e.Graphics, e.Image, e.ImageRectangle.X, e.ImageRectangle.Y, item.BackColor)
End If
End If
End Sub
' This method defines the behavior for rendering the
' background of a ToolStripItem. If the item is a
' RolloverItem, it paints the item's BackgroundImage
' centered in the client area. If the mouse is in the
' item's client area, a border is drawn around it.
' If the item is on a drop-down or if it is on the
' overflow, a gradient is painted in the background.
Protected Overrides Sub OnRenderItemBackground(ByVal e As ToolStripItemRenderEventArgs)
MyBase.OnRenderItemBackground(e)
Dim item As RolloverItem = CType(e.Item, RolloverItem)
' If the ToolSTripItem is of type RolloverItem,
' perform custom rendering for the background.
If (item IsNot Nothing) Then
If item.Placement = ToolStripItemPlacement.Overflow OrElse item.IsOnDropDown Then
Dim b As New LinearGradientBrush(item.ContentRectangle, Color.Salmon, Color.DarkRed, 0.0F, False)
Try
e.Graphics.FillRectangle(b, item.ContentRectangle)
Finally
b.Dispose()
End Try
End If
' The RolloverItem control only supports
' the ImageLayout.Center setting for the
' BackgroundImage property.
If item.BackgroundImageLayout = ImageLayout.Center Then
' Get references to the item's ContentRectangle
' and BackgroundImage, for convenience.
Dim cr As Rectangle = item.ContentRectangle
Dim bgi As Image = item.BackgroundImage
' Compute the center of the item's ContentRectangle.
Dim centerX As Integer = CInt((cr.Width - bgi.Width) / 2)
Dim centerY As Integer = CInt((cr.Height - bgi.Height) / 2)
' If the item is selected, draw the background
' image as usual. Otherwise, draw it as disabled.
If item.Selected Then
e.Graphics.DrawImage(bgi, centerX, centerY)
Else
ControlPaint.DrawImageDisabled(e.Graphics, bgi, centerX, centerY, item.BackColor)
End If
End If
' If the item is in the rollover state,
' draw a border around it.
If item.Rollover Then
ControlPaint.DrawFocusRectangle(e.Graphics, item.ContentRectangle)
End If
End If
End Sub
End Class
' This form tests various features of the RolloverItem
' control. RolloverItem conrols are created and added
' to the form's ToolStrip. They are also created and
' added to a button's ContextMenuStrip. The behavior
' of the RolloverItem control differs depending on
' the type of parent control.
Public Class RolloverItemTestForm
Inherits Form
Private toolStrip1 As System.Windows.Forms.ToolStrip
Private WithEvents button1 As System.Windows.Forms.Button
Private infoIconKey As String = "Information icon"
Private handIconKey As String = "Hand icon"
Private exclIconKey As String = "Exclamation icon"
Private questionIconKey As String = "Question icon"
Private warningIconKey As String = "Warning icon "
Private components As System.ComponentModel.IContainer = Nothing
Public Sub New()
InitializeComponent()
' Set up the form's ToolStrip control.
InitializeToolStrip()
' Set up the ContextMenuStrip for the button.
InitializeContextMenu()
End Sub
' This utility method initializes the ToolStrip control's
' image list. For convenience, icons from the SystemIcons
' class are used for this demonstration, but any images
' could be used.
Private Sub InitializeImageList(ts As ToolStrip)
If ts.ImageList Is Nothing Then
ts.ImageList = New ImageList()
ts.ImageList.ImageSize = SystemIcons.Exclamation.Size
ts.ImageList.Images.Add(Me.infoIconKey, SystemIcons.Information)
ts.ImageList.Images.Add(Me.handIconKey, SystemIcons.Hand)
ts.ImageList.Images.Add(Me.exclIconKey, SystemIcons.Exclamation)
ts.ImageList.Images.Add(Me.questionIconKey, SystemIcons.Question)
ts.ImageList.Images.Add(Me.warningIconKey, SystemIcons.Warning)
End If
End Sub
Private Sub InitializeToolStrip()
Me.InitializeImageList(Me.toolStrip1)
Me.toolStrip1.Renderer = New RolloverItemRenderer()
Dim item As RolloverItem = Me.CreateRolloverItem(Me.toolStrip1, "RolloverItem on ToolStrip", Me.Font, infoIconKey, TextImageRelation.ImageBeforeText, exclIconKey)
Me.toolStrip1.Items.Add(item)
item = Me.CreateRolloverItem(Me.toolStrip1, "RolloverItem on ToolStrip", Me.Font, infoIconKey, TextImageRelation.ImageBeforeText, exclIconKey)
Me.toolStrip1.Items.Add(item)
End Sub
Private Sub InitializeContextMenu()
Dim f As New System.Drawing.Font("Arial", 18.0F, FontStyle.Bold)
Dim cms As New ContextMenuStrip()
Me.InitializeImageList(cms)
cms.Renderer = New RolloverItemRenderer()
cms.AutoSize = True
cms.ShowCheckMargin = False
cms.ShowImageMargin = False
Dim item As RolloverItem = Me.CreateRolloverItem( _
cms, _
"RolloverItem on ContextMenuStrip", _
f, _
handIconKey, _
TextImageRelation.ImageBeforeText, _
exclIconKey)
cms.Items.Add(item)
item = Me.CreateRolloverItem( _
cms, _
"Another RolloverItem on ContextMenuStrip", _
f, _
questionIconKey, _
TextImageRelation.ImageBeforeText, _
exclIconKey)
cms.Items.Add(item)
item = Me.CreateRolloverItem( _
cms, _
"And another RolloverItem on ContextMenuStrip", _
CType(f, Drawing.Font), _
warningIconKey, _
TextImageRelation.ImageBeforeText, _
exclIconKey)
cms.Items.Add(item)
AddHandler cms.Closing, AddressOf cms_Closing
Me.button1.ContextMenuStrip = cms
End Sub
' This method handles the ContextMenuStrip
' control's Closing event. It prevents the
' RolloverItem from closing the drop-down
' when the item is clicked.
Private Sub cms_Closing(sender As Object, e As ToolStripDropDownClosingEventArgs)
If e.CloseReason = ToolStripDropDownCloseReason.ItemClicked Then
e.Cancel = True
End If
End Sub
' This method handles the Click event for the button.
' it selects the first item in the ToolStrip control
' by using the ToolStripITem.Select method.
Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
Dim item As RolloverItem = CType(Me.toolStrip1.Items(0), RolloverItem)
If (item IsNot Nothing) Then
item.Select()
Me.Invalidate()
End If
End Sub
' This utility method creates a RolloverItem
' and adds it to a ToolStrip control.
Private Function CreateRolloverItem( _
ByVal owningToolStrip As ToolStrip, _
ByVal txt As String, _
ByVal f As Font, _
ByVal imgKey As String, _
ByVal tir As TextImageRelation, _
ByVal backImgKey As String) As RolloverItem
Dim item As New RolloverItem()
item.Alignment = ToolStripItemAlignment.Left
item.AllowDrop = False
item.AutoSize = True
item.BackgroundImage = owningToolStrip.ImageList.Images(backImgKey)
item.BackgroundImageLayout = ImageLayout.Center
item.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText
item.DoubleClickEnabled = True
item.Enabled = True
item.Font = f
' These assignments are equivalent. Each assigns an
' image from the owning toolstrip's image list.
item.ImageKey = imgKey
'item.Image = owningToolStrip.ImageList.Images[infoIconKey];
'item.ImageIndex = owningToolStrip.ImageList.Images.IndexOfKey(infoIconKey);
item.ImageScaling = ToolStripItemImageScaling.None
item.Owner = owningToolStrip
item.Padding = New Padding(2)
item.Text = txt
item.TextAlign = ContentAlignment.MiddleLeft
item.TextDirection = ToolStripTextDirection.Horizontal
item.TextImageRelation = tir
Return item
End Function
Protected Overrides Sub Dispose(disposing As Boolean)
If disposing AndAlso (components IsNot Nothing) Then
components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
#Region "Windows Form Designer generated code"
Private Sub InitializeComponent()
Me.toolStrip1 = New System.Windows.Forms.ToolStrip()
Me.button1 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
' toolStrip1
'
Me.toolStrip1.AllowItemReorder = True
Me.toolStrip1.Location = New System.Drawing.Point(0, 0)
Me.toolStrip1.Name = "toolStrip1"
Me.toolStrip1.Size = New System.Drawing.Size(845, 25)
Me.toolStrip1.TabIndex = 0
Me.toolStrip1.Text = "toolStrip1"
'
' button1
'
Me.button1.Location = New System.Drawing.Point(12, 100)
Me.button1.Name = "button1"
Me.button1.Size = New System.Drawing.Size(86, 23)
Me.button1.TabIndex = 1
Me.button1.Text = "Click to select"
Me.button1.UseVisualStyleBackColor = True
'
' RolloverItemTestForm
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 14F)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.AutoSize = True
Me.ClientSize = New System.Drawing.Size(845, 282)
Me.Controls.Add(button1)
Me.Controls.Add(toolStrip1)
Me.Font = New System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0)
Me.Name = "RolloverItemTestForm"
Me.Text = "Form1"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
#End Region
End Class
Public Class Program
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(New RolloverItemTestForm())
End Sub
End Class
A ToolStripItem is an element such as a button, combo box, text box, or label that can be contained in a ToolStrip control or a ToolStripDropDown control, which is similar to a Windows shortcut menu. The ToolStrip class manages the painting and keyboard and mouse input, including drag-and-drop input, for these elements, and the ToolStripItem class manages events and layout within the elements themselves.
ToolStripItem classes either inherit directly from ToolStripItem, or they inherit indirectly from ToolStripItem through ToolStripControlHost or ToolStripDropDownItem.
ToolStripItem controls must be contained in a ToolStrip, MenuStrip, StatusStrip, or ContextMenuStrip and cannot be added directly to a form. The various container classes are designed to contain an appropriate subset of ToolStripItem controls.
Note A given ToolStripItem cannot have more than one parent ToolStrip. You must copy of the ToolStripItem and add it to other ToolStrip controls.
The following table shows the elements that derive from the ToolStripItem class and which therefore can be hosted in a ToolStrip or ToolStripDropDown.
Element | Description |
---|---|
ToolStripButton | A toolbar button that supports images and text. |
ToolStripLabel | A text label typically used in a status bar or ToolStrip as a comment or title. |
ToolStripSeparator | A non-selectable space or space with a vertical bar that visually groups elements. |
ToolStripControlHost | A ToolStripItem that hosts a ToolStripComboBox, ToolStripTextBox, ToolStripProgressBar, other Windows Forms controls, or custom controls. A ToolStripComboBox is a text box in which the user can enter text, along with a list from which the user can select text to fill the text box. A ToolStripTextBox enables the user to enter text. A ToolStripProgressBar represents a Windows progress bar control contained in a StatusStrip. |
ToolStripDropDownItem | A ToolStripItem that hosts a ToolStripMenuItem, ToolStripSplitButton, and ToolStripDropDownButton. A ToolStripMenuItem is a selectable option displayed on a menu or context menu. A ToolStripSplitButton is a combination of a regular button and a drop-down button. A ToolStripDropDownButton is a button that supports drop-down functionality. |
ToolStripStatusLabel | A panel in a StatusStrip control. |
Tool |
Initializes a new instance of the ToolStripItem class. |
Tool |
Initializes a new instance of the ToolStripItem class with the specified display text, image, event handler, and name. |
Tool |
Initializes a new instance of the ToolStripItem class with the specified name, image, and event handler. |
Accessibility |
Gets the AccessibleObject assigned to the control. |
Accessible |
Gets or sets the default action description of the control for use by accessibility client applications. |
Accessible |
Gets or sets the description that will be reported to accessibility client applications. |
Accessible |
Gets or sets the name of the control for use by accessibility client applications. |
Accessible |
Gets or sets the accessible role of the control, which specifies the type of user interface element of the control. |
Alignment |
Gets or sets a value indicating whether the item aligns towards the beginning or end of the ToolStrip. |
Allow |
Gets or sets a value indicating whether drag-and-drop and item reordering are handled through events that you implement. |
Anchor |
Gets or sets the edges of the container to which a ToolStripItem is bound and determines how a ToolStripItem is resized with its parent. |
Auto |
Gets or sets a value indicating whether the item is automatically sized. |
Auto |
Gets or sets a value indicating whether to use the Text property or the ToolTipText property for the ToolStripItem ToolTip. |
Available |
Gets or sets a value indicating whether the ToolStripItem should be placed on a ToolStrip. |
Back |
Gets or sets the background color for the item. |
Background |
Gets or sets the background image displayed in the item. |
Background |
Gets or sets the background image layout used for the ToolStripItem. |
Binding |
Gets or sets the collection of currency managers for the IBindableComponent. (Inherited from BindableComponent) |
Bounds |
Gets the size and location of the item. |
Can |
Gets a value indicating whether the component can raise an event. (Inherited from Component) |
Can |
Gets a value indicating whether the item can be selected. |
Command |
Gets or sets the ICommand whose Execute(Object) method will be called when the ToolStripItem's Click event is invoked. |
Command |
Gets or sets the parameter that is passed to the ICommand that's assigned to the Command property. |
Container |
Gets the IContainer that contains the Component. (Inherited from Component) |
Content |
Gets the area where content, such as text and icons, can be placed within a ToolStripItem without overwriting background borders. |
Data |
Gets the collection of data-binding objects for this IBindableComponent. (Inherited from BindableComponent) |
Default |
Gets a value indicating whether to display the ToolTip that is defined as the default. |
Default |
Gets a value indicating what is displayed on the ToolStripItem. |
Default |
Gets the default margin of an item. |
Default |
Gets the internal spacing characteristics of the item. |
Default |
Gets the default size of the item. |
Design |
Gets a value that indicates whether the Component is currently in design mode. (Inherited from Component) |
Dismiss |
Gets a value indicating whether items on a ToolStripDropDown are hidden after they are clicked. |
Display |
Gets or sets whether text and images are displayed on a ToolStripItem. |
Dock |
Gets or sets which ToolStripItem borders are docked to its parent control and determines how a ToolStripItem is resized with its parent. |
Double |
Gets or sets a value indicating whether the ToolStripItem can be activated by double-clicking the mouse. |
Enabled |
Gets or sets a value indicating whether the parent control of the ToolStripItem is enabled. |
Events |
Gets the list of event handlers that are attached to this Component. (Inherited from Component) |
Font |
Gets or sets the font of the text displayed by the item. |
Fore |
Gets or sets the foreground color of the item. |
Height |
Gets or sets the height, in pixels, of a ToolStripItem. |
Image |
Gets or sets the image that is displayed on a ToolStripItem. |
Image |
Gets or sets the alignment of the image on a ToolStripItem. |
Image |
Gets or sets the index value of the image that is displayed on the item. |
Image |
Gets or sets the key accessor for the image in the ImageList that is displayed on a ToolStripItem. |
Image |
Gets or sets a value indicating whether an image on a ToolStripItem is automatically resized to fit in a container. |
Image |
Gets or sets the color to treat as transparent in a ToolStripItem image. |
Is |
Gets a value indicating whether the object has been disposed of. |
Is |
Gets a value indicating whether the container of the current Control is a ToolStripDropDown. |
Is |
Gets a value indicating whether the Placement property is set to Overflow. |
Margin |
Gets or sets the space between the item and adjacent items. |
Merge |
Gets or sets how child menus are merged with parent menus. |
Merge |
Gets or sets the position of a merged item within the current ToolStrip. |
Name |
Gets or sets the name of the item. |
Overflow |
Gets or sets whether the item is attached to the ToolStrip or ToolStripOverflowButton or can float between the two. |
Owner |
Gets or sets the owner of this item. |
Owner |
Gets the parent ToolStripItem of this ToolStripItem. |
Padding |
Gets or sets the internal spacing, in pixels, between the item's contents and its edges. |
Parent |
Gets or sets the parent container of the ToolStripItem. |
Placement |
Gets the current layout of the item. |
Pressed |
Gets a value indicating whether the state of the item is pressed. |
Renderer |
Returns the parent ToolStrip's renderer. |
Right |
Gets or sets a value indicating whether items are to be placed from right to left and text is to be written from right to left. |
Right |
Mirrors automatically the ToolStripItem image when the RightToLeft property is set to Yes. |
Selected |
Gets a value indicating whether the item is selected. |
Show |
Gets a value indicating whether to show or hide shortcut keys. |
Site |
Gets or sets the ISite of the Component. (Inherited from Component) |
Size |
Gets or sets the size of the item. |
Tag |
Gets or sets the object that contains data about the item. |
Text |
Gets or sets the text that is to be displayed on the item. |
Text |
Gets or sets the alignment of the text on a ToolStripLabel. |
Text |
Gets the orientation of text used on a ToolStripItem. |
Text |
Gets or sets the position of ToolStripItem text and image relative to each other. |
Tool |
Gets or sets the text that appears as a ToolTip for a control. |
Visible |
Gets or sets a value indicating whether the item is displayed. |
Width |
Gets or sets the width in pixels of a ToolStripItem. |
Create |
Creates a new accessibility object for the ToolStripItem. |
Create |
Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject) |
Dispose() |
Releases all resources used by the Component. (Inherited from Component) |
Dispose(Boolean) |
Releases the unmanaged resources used by the ToolStripItem and optionally releases the managed resources. |
Do |
Begins a drag operation. |
Do |
Begins a drag-and-drop operation. |
Equals(Object) |
Determines whether the specified object is equal to the current object. (Inherited from Object) |
Get |
Retrieves the ToolStrip that is the container of the current ToolStripItem. |
Get |
Serves as the default hash function. (Inherited from Object) |
Get |
Obsolete.
Retrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject) |
Get |
Retrieves the size of a rectangular area into which a control can be fit. |
Get |
Returns an object that represents a service provided by the Component or by its Container. (Inherited from Component) |
Get |
Gets the Type of the current instance. (Inherited from Object) |
Initialize |
Obsolete.
Obtains a lifetime service object to control the lifetime policy for this instance. (Inherited from MarshalByRefObject) |
Invalidate() |
Invalidates the entire surface of the ToolStripItem and causes it to be redrawn. |
Invalidate(Rectangle) |
Invalidates the specified region of the ToolStripItem by adding it to the update region of the ToolStripItem, which is the area that will be repainted at the next paint operation, and causes a paint message to be sent to the ToolStripItem. |
Is |
Determines whether a character is an input character that the item recognizes. |
Is |
Determines whether the specified key is a regular input key or a special key that requires preprocessing. |
Memberwise |
Creates a shallow copy of the current Object. (Inherited from Object) |
Memberwise |
Creates a shallow copy of the current MarshalByRefObject object. (Inherited from MarshalByRefObject) |
On |
Raises the AvailableChanged event. |
On |
Raises the BackColorChanged event. |
On |
Raises the BindingContextChanged event. (Inherited from BindableComponent) |
On |
Occurs when the Bounds property changes. |
On |
Raises the Click event. |
On |
Raises the CommandCanExecuteChanged event. |
On |
Raises the CommandChanged event. |
On |
Raises the CommandParameterChanged event. |
On |
Raises the DisplayStyleChanged event. |
On |
Raises the DoubleClick event. |
On |
Raises the DragDrop event. |
On |
Raises the DragEnter event. |
On |
Raises the DragLeave event. |
On |
Raises the DragOver event. |
On |
Raises the EnabledChanged event. |
On |
Raises the FontChanged event. |
On |
Raises the ForeColorChanged event. |
On |
Raises the GiveFeedback event. |
On |
Raises the Layout event. |
On |
Raises the LocationChanged event. |
On |
Raises the MouseDown event. |
On |
Raises the MouseEnter event. |
On |
Raises the MouseHover event. |
On |
Raises the MouseLeave event. |
On |
Raises the MouseMove event. |
On |
Raises the MouseUp event. |
On |
Raises the OwnerChanged event. |
On |
Raises the FontChanged event when the Font property has changed on the parent of the ToolStripItem. |
On |
Raises the Paint event. |
On |
Raises the BackColorChanged event. |
On |
Raises the ParentChanged event. |
On |
Raises the EnabledChanged event when the Enabled property value of the item's container changes. |
On |
Raises the ForeColorChanged event. |
On |
Raises the RightToLeftChanged event. |
On |
Raises the QueryContinueDrag event. |
On |
Called in the context of OnClick(EventArgs) to invoke Execute(Object) if the context allows. |
On |
Raises the RightToLeftChanged event. |
On |
Raises the SelectedChanged event. |
On |
Raises the TextChanged event. |
On |
Raises the VisibleChanged event. |
Perform |
Generates a |
Process |
Processes a command key. |
Process |
Processes a dialog key. |
Process |
Processes a mnemonic character. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Reset |
This method is not relevant to this class. |
Select() |
Selects the item. |
Set |
Sets the size and location of the item. |
Set |
Sets the ToolStripItem to the specified visible state. |
To |
Returns a String containing the name of the Component, if any. This method should not be overridden. |
Available |
Occurs when the value of the Available property changes. |
Back |
Occurs when the value of the BackColor property changes. |
Binding |
Occurs when the binding context has changed. (Inherited from BindableComponent) |
Click |
Occurs when the ToolStripItem is clicked. |
Command |
Occurs when the CanExecute(Object) status of the ICommand that's assigned to the Command property has changed. |
Command |
Occurs when the assigned ICommand of the Command property has changed. |
Command |
Occurs when the value of the CommandParameter property has changed. |
Display |
Occurs when the DisplayStyle has changed. |
Disposed |
Occurs when the component is disposed by a call to the Dispose() method. (Inherited from Component) |
Double |
Occurs when the item is double-clicked with the mouse. |
Drag |
Occurs when the user drags an item and the user releases the mouse button, indicating that the item should be dropped into this item. |
Drag |
Occurs when the user drags an item into the client area of this item. |
Drag |
Occurs when the user drags an item and the mouse pointer is no longer over the client area of this item. |
Drag |
Occurs when the user drags an item over the client area of this item. |
Enabled |
Occurs when the Enabled property value has changed. |
Fore |
Occurs when the ForeColor property value changes. |
Give |
Occurs during a drag operation. |
Location |
Occurs when the location of a ToolStripItem is updated. |
Mouse |
Occurs when the mouse pointer is over the item and a mouse button is pressed. |
Mouse |
Occurs when the mouse pointer enters the item. |
Mouse |
Occurs when the mouse pointer hovers over the item. |
Mouse |
Occurs when the mouse pointer leaves the item. |
Mouse |
Occurs when the mouse pointer is moved over the item. |
Mouse |
Occurs when the mouse pointer is over the item and a mouse button is released. |
Owner |
Occurs when the Owner property changes. |
Paint |
Occurs when the item is redrawn. |
Query |
Occurs when an accessibility client application invokes help for the ToolStripItem. |
Query |
Occurs during a drag-and-drop operation and allows the drag source to determine whether the drag-and-drop operation should be canceled. |
Right |
Occurs when the RightToLeft property value changes. |
Selected |
Occurs when the value of the Selected property changes. |
Text |
Occurs when the value of the Text property changes. |
Visible |
Occurs when the value of the Visible property changes. |
IDrop |
Raises the DragDrop event. |
IDrop |
Raises the DragEnter event. |
IDrop |
Raises the DragLeave event. |
IDrop |
Raises the |
Product | Versions |
---|---|
.NET Framework | 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
Windows Desktop | 3.0, 3.1, 5, 6, 7, 8, 9 |
.NET feedback
.NET is an open source project. Select a link to provide feedback: