Actualización: noviembre 2007
Representa la clase base abstracta que administra los eventos y el diseño de todos los elementos que ToolStrip o ToolStripDropDown puede contener.
Ensamblado: System.Windows.Forms (en System.Windows.Forms.dll)
Public MustInherit Class ToolStripItem _ Inherits Component _ Implements IDropTarget, IComponent, IDisposable
Dim instance As ToolStripItem
public abstract class ToolStripItem : Component, IDropTarget, IComponent, IDisposable
public ref class ToolStripItem abstract : public Component, IDropTarget, IComponent, IDisposable
public abstract class ToolStripItem extends Component implements IDropTarget, IComponent, IDisposable
public abstract class ToolStripItem extends Component implements IDropTarget, IComponent, IDisposable
Un ToolStripItem es un elemento como un botón, un cuadro combinado, un cuadro de texto o una etiqueta que pueden estar contenidos en un control ToolStrip o ToolStripDropDown, que es similar a un menú de acceso directo de Windows. La clase ToolStrip administra el dibujo y la entrada de datos mediante teclado y mouse, incluyendo la entrada de tipo arrastrar y colocar, para estos elementos, y la clase ToolStripItem administra los eventos y el diseño dentro de los elementos en sí.
Las clases ToolStripItem heredan directamente de ToolStripItem o heredan indirectamente de ToolStripItem a través de ToolStripControlHost o ToolStripDropDownItem.
Los controles ToolStripItem se deben contener en ToolStrip, MenuStrip, StatusStrip o ContextMenuStrip y no se deben agregar directamente a un formulario. Las distintas clases de contenedor están diseñadas para contener un subconjunto adecuado de controles ToolStripItem.
Nota Un ToolStripItem determinado no puede tener más de un ToolStrip primario. Debe copiar ToolStripItem y agregarlo a otros controles ToolStrip.
En la tabla siguiente se muestran los elementos que derivan de la clase ToolStripItem y que, por tanto, puede estar alojados en un ToolStrip o en un ToolStripDropDown.
|
Elemento |
Descripción |
|---|---|
|
Un botón de barra de herramientas que admite imágenes y texto. |
|
|
Una etiqueta de texto suele utilizarse en una barra de estado o en un ToolStrip como un comentario o título. |
|
|
Un espacio no seleccionable o un espacio con una barra vertical que agrupa visualmente elementos. |
|
|
Un ToolStripItem que aloja un ToolStripComboBox, un ToolStripTextBox, un ToolStripProgressBar, otros controles de formularios Windows Forms o controles personalizados. Un ToolStripComboBox es un cuadro de texto en el que el usuario puede escribir texto, junto con una lista en la que el usuario puede seleccionar texto para rellenar el cuadro de texto. Un ToolStripTextBox permite al usuario escribir texto. Un ToolStripProgressBar representa un control de barra de progreso de Windows contenido en un StatusStrip. |
|
|
Un ToolStripItem que aloja un ToolStripMenuItem, ToolStripSplitButton y ToolStripDropDownButton. Un ToolStripMenuItem es una opción seleccionable que se muestra en un menú o en un menú contextual. Un ToolStripSplitButton es una combinación de un botón normal y un botón de lista desplegable. Un ToolStripDropDownButton es un botón que admite funcionalidad desplegable. |
|
|
Un panel de un control StatusStrip. |
En el ejemplo de código siguiente se muestra cómo implementar un control ToolStripItem personalizado.
Option Strict On Option Explicit On Imports System 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 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
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 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()); } } }
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.ToolStripItem
System.Windows.Forms.ToolStripButton
System.Windows.Forms.ToolStripControlHost
System.Windows.Forms.ToolStripDropDownItem
System.Windows.Forms.ToolStripLabel
System.Windows.Forms.ToolStripSeparator
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.