ToolStripItem 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示抽象基底類別,用於管理 ToolStrip 或 ToolStripDropDown 可包含之所有項目的事件和配置。
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
- 繼承
- 繼承
- 衍生
- 實作
範例
下列程式碼範例示範如何實作自訂 ToolStripItem 控制項。
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
備註
ToolStripItem是一個元素,例如按鈕、下拉式方塊、文字方塊或標籤,可以包含在控制項或 ToolStripDropDown 控制項中 ToolStrip ,類似于 Windows 快顯功能表。 類別 ToolStrip 會管理這些元素的繪製和鍵盤和滑鼠輸入,包括拖放輸入,而 ToolStripItem 類別會管理元素本身內的事件和配置。
ToolStripItem 類別直接繼承自 ToolStripItem ,或間接繼承自 ToolStripItem 或 ToolStripControlHostToolStripDropDownItem 。
ToolStripItem 控制項必須包含在 ToolStrip 、 MenuStrip 、 StatusStrip 或 ContextMenuStrip 中,而且無法直接新增至表單。 各種容器類別的設計目的是要包含適當的控制項子集 ToolStripItem 。
注意 指定的 ToolStripItem 不能有一個以上的父 ToolStrip 代 。 您必須複製 , ToolStripItem 並將它新增至其他 ToolStrip 控制項。
下表顯示衍生自 類別的專案 ToolStripItem ,因此可以裝載于 ToolStrip 或 ToolStripDropDown 中。
元素 | 描述 |
---|---|
ToolStripButton | 支援影像和文字的工具列按鈕。 |
ToolStripLabel | 文字標籤通常用於狀態列或 ToolStrip 做為批註或標題。 |
ToolStripSeparator | 不可選取的空間或空格,其垂直列會以視覺化方式群組專案。 |
ToolStripControlHost | 裝載 ToolStripItemToolStripComboBox 、 ToolStripTextBox 、 ToolStripProgressBar 、其他Windows Forms控制項或自訂控制項的 。 ToolStripComboBox是一個文字方塊,使用者可以在其中輸入文字,以及使用者可以從中選取要填入文字方塊的文字清單。 可 ToolStripTextBox 讓使用者輸入文字。 表示 ToolStripProgressBar 包含在 中的 StatusStrip Windows 進度列控制項。 |
ToolStripDropDownItem | , ToolStripItem 裝載 ToolStripMenuItem 、 ToolStripSplitButton 和 ToolStripDropDownButton 。 ToolStripMenuItem是顯示在功能表或操作功能表上的可選取選項。 ToolStripSplitButton是一般按鈕和下拉式按鈕的組合。 ToolStripDropDownButton是支援下拉式功能的按鈕。 |
ToolStripStatusLabel | 控制項中的 StatusStrip 面板。 |
建構函式
ToolStripItem() |
初始化 ToolStripItem 類別的新執行個體。 |
ToolStripItem(String, Image, EventHandler) |
使用指定的名稱、影像和事件處理常式,初始化 ToolStripItem 類別的新執行個體。 |
ToolStripItem(String, Image, EventHandler, String) |
使用指定的顯示文字、影像、事件處理常式和名稱,初始化 ToolStripItem 類別的新執行個體。 |
屬性
AccessibilityObject |
取得指定給控制項的 AccessibleObject。 |
AccessibleDefaultActionDescription |
取得或設定協助用戶端應用程式所使用的控制項的預設動作描述。 |
AccessibleDescription |
取得或設定將報告給協助工具用戶端應用程式的描述。 |
AccessibleName |
取得或設定協助工具用戶端應用程式使用的控制項名稱。 |
AccessibleRole |
取得或設定控制項的可存取角色,此角色可指定控制項的使用者介面項目之類型。 |
Alignment |
取得或設定值,指出項目是否會向 ToolStrip 的開頭或結尾對齊。 |
AllowDrop |
取得或設定值,指出拖放和項目的重新排列是否透過您實作的事件來加以處理。 |
Anchor |
取得或設定 ToolStripItem 繫結容器的目的邊緣,並決定 ToolStripItem 隨其父代調整大小的方式。 |
AutoSize |
取得或設定值,指出項目是否會自動調整大小。 |
AutoToolTip |
取得或設定值,這個值指出是否要針對 ToolTipText 工具提示使用 Text 屬性或 ToolStripItem 屬性。 |
Available |
取得或設定值,指出 ToolStripItem 是否應該置於 ToolStrip 上。 |
BackColor |
取得或設定項目的背景色彩。 |
BackgroundImage |
取得或設定在項目中顯示的背景影像。 |
BackgroundImageLayout |
取得或設定用於 ToolStripItem 的背景影像配置。 |
BindingContext |
取得或設定 IBindableComponent 的 Currency 管理員集合。 (繼承來源 BindableComponent) |
Bounds |
取得項目的大小和位置。 |
CanRaiseEvents |
取得值,指出元件是否能引發事件。 (繼承來源 Component) |
CanSelect |
取得值,指出是否可以選取此項目。 |
Command |
取得或設定 ICommand 叫用 ToolStripItem 事件時,將會呼叫其 Execute(Object) 方法的 Click 。 |
CommandParameter | |
Container |
取得包含 IContainer 的 Component。 (繼承來源 Component) |
ContentRectangle |
取得類似文字和圖示的內容可以放置到 ToolStripItem 內,而不需要覆寫背景框線的區域。 |
DataBindings |
取得這個 IBindableComponent 的資料繫結物件集合。 (繼承來源 BindableComponent) |
DefaultAutoToolTip |
取得值,指出是否要顯示定義為預設值的 ToolTip。 |
DefaultDisplayStyle |
取得值,表示顯示在 ToolStripItem 上的項目為何。 |
DefaultMargin |
取得項目的預設邊界。 |
DefaultPadding |
取得項目的內部間距特性。 |
DefaultSize |
取得此項目的預設大小。 |
DesignMode |
取得值,指出 Component 目前是否處於設計模式。 (繼承來源 Component) |
DismissWhenClicked |
取得值,指出按一下 ToolStripDropDown 上的項目之後,這些項目是否會隱藏。 |
DisplayStyle |
取得或設定文字和影像是否會顯示在 ToolStripItem 上的值。 |
Dock |
取得或設定停駐在其父控制項的 ToolStripItem 框線,並決定 ToolStripItem 隨其父代重新調整大小的方式。 |
DoubleClickEnabled |
取得或設定值,指出是否可以按兩下滑鼠來啟動 ToolStripItem。 |
Enabled |
取得或設定值,指出是否已啟用 ToolStripItem 的父控制項。 |
Events |
取得附加在這個 Component 上的事件處理常式清單。 (繼承來源 Component) |
Font |
取得或設定項目顯示之文字字型。 |
ForeColor |
取得或設定此項目的前景色彩。 |
Height |
取得或設定 ToolStripItem 的高度 (以像素為單位)。 |
Image |
取得或設定顯示在 ToolStripItem 上的影像。 |
ImageAlign |
取得或設定 ToolStripItem 上影像的對齊方式。 |
ImageIndex |
取得或設定此項目上顯示的影像索引值。 |
ImageKey |
取得或設定在 ImageList 中顯示在 ToolStripItem 上的影像之按鍵存取子 (Accessor)。 |
ImageScaling |
取得或設定值,表示 ToolStripItem 上的影像是否會自動調整大小,以納入容器中。 |
ImageTransparentColor |
取得或設定 ToolStripItem 影像中視為透明的色彩。 |
IsDisposed |
取得值,指出物件是否已經處置。 |
IsOnDropDown |
取得值,指出目前 Control 的容器是否為 ToolStripDropDown。 |
IsOnOverflow | |
Margin |
取得或設定此項目和相鄰項目之間的間距。 |
MergeAction |
取得或設定子功能表要如何與父功能表合併的值。 |
MergeIndex |
取得或設定目前 ToolStrip 中已合併項目的位置。 |
Name |
取得或設定項目的名稱。 |
Overflow |
取得或設定此項目是否附加至 ToolStrip 或 ToolStripOverflowButton,或是可以在這兩者之間浮動的值。 |
Owner |
取得或設定此項目的擁有人。 |
OwnerItem |
取得這個 ToolStripItem 的 ToolStripItem。 |
Padding |
取得或設定介於此項目的內容與其邊緣之間的內部間距 (單位為像素)。 |
Parent |
取得或設定 ToolStripItem 的父容器。 |
Placement |
取得此項目的目前配置。 |
Pressed |
取得值,指出是否已按下此項目的狀態。 |
Renderer |
表示抽象基底類別,用於管理 ToolStrip 或 ToolStripDropDown 可包含之所有項目的事件和配置。 |
RightToLeft |
取得或設定值,指出項目是否要從右到左放置,而文字是否要從右到左寫入。 |
RightToLeftAutoMirrorImage |
當 ToolStripItem 屬性設定為 RightToLeft 時,自動左右反轉 Yes。 |
Selected |
取得值,指出是否已選取此項目。 |
ShowKeyboardCues |
取得值,指出要顯示還是隱藏快速鍵。 |
Site | (繼承來源 Component) |
Size |
取得或設定項目的大小。 |
Tag |
取得或設定物件,其中包含有關此項目的資料。 |
Text |
取得或設定要顯示在此項目上的文字。 |
TextAlign |
取得或設定 ToolStripLabel 上文字的對齊方式。 |
TextDirection |
取得用於 ToolStripItem 上的文字之方向。 |
TextImageRelation |
取得或設定 ToolStripItem 的文字和影像彼此之間的相對位置。 |
ToolTipText |
取得或設定顯示為控制項的 ToolTip 之文字。 |
Visible |
取得或設定值,指出是否會顯示此項目。 |
Width |
取得或設定 ToolStripItem 的寬度 (以像素為單位)。 |
方法
事件
明確介面實作
IDropTarget.OnDragDrop(DragEventArgs) |
引發 DragDrop 事件。 |
IDropTarget.OnDragEnter(DragEventArgs) |
引發 DragEnter 事件。 |
IDropTarget.OnDragLeave(EventArgs) |
引發 DragLeave 事件。 |
IDropTarget.OnDragOver(DragEventArgs) |
引發 |