Export (0) Print
Expand All

ToolStripManager Class

Controls ToolStrip rendering and rafting, and the merging of MenuStrip, ToolStripDropDownMenu, and ToolStripMenuItem objects. This class cannot be inherited.

System.Object
  System.Windows.Forms.ToolStripManager

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

public sealed class ToolStripManager

The ToolStripManager type exposes the following members.

  NameDescription
Public propertyStatic memberRendererGets or sets the default painting styles for the form.
Public propertyStatic memberRenderModeGets or sets the default theme for the form.
Public propertyStatic memberVisualStylesEnabledGets or sets a value indicating whether a ToolStrip is rendered using visual style information called themes.
Top

  NameDescription
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Public methodStatic memberFindToolStripFinds the specified ToolStrip or a type derived from ToolStrip.
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodStatic memberIsShortcutDefinedRetrieves a value indicating whether the specified shortcut key is used by any of the ToolStrip controls of a form.
Public methodStatic memberIsValidShortcutRetrieves a value indicating whether a defined shortcut key is valid.
Public methodStatic memberLoadSettings(Form)Loads settings for the given Form using the full name of the Form as the settings key.
Public methodStatic memberLoadSettings(Form, String)Loads settings for the specified Form using the specified settings key.
Public methodStatic memberMerge(ToolStrip, String)Combines two ToolStrip objects of the same type.
Public methodStatic memberMerge(ToolStrip, ToolStrip)Combines two ToolStrip objects of different types.
Public methodStatic memberRevertMerge(String)Undoes a merging of two ToolStrip objects, returning the ToolStrip with the specified name to its state before the merge and nullifying all previous merge operations.
Public methodStatic memberRevertMerge(ToolStrip)Undoes a merging of two ToolStrip objects, returning the specified ToolStrip to its state before the merge and nullifying all previous merge operations.
Public methodStatic memberRevertMerge(ToolStrip, ToolStrip)Undoes a merging of two ToolStrip objects, returning both ToolStrip controls to their state before the merge and nullifying all previous merge operations.
Public methodStatic memberSaveSettings(Form)Saves settings for the given Form using the full name of the Form as the settings key.
Public methodStatic memberSaveSettings(Form, String)Saves settings for the specified Form using the specified settings key.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

  NameDescription
Public eventStatic memberRendererChangedOccurs when the value of the Renderer property changes.
Top

ToolStripManager supports ToolStrip-related tasks for entire applications, such as merging, settings, and renderer options. The overloaded Merge method combines ToolStrip controls with each other, and the overloaded RevertMerge method undoes a merge operation.

Use the ToolStripRenderer class with the ToolStripManager class to gain even more control and customizability over painting and layout style.

The following code example demonstrates all the typical scenarios of menu item merging.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

public enum MergeSample
{
    None,
    Append,
    InsertInSameLocation,
    InsertInSameLocationPreservingOrder,
    ReplacingItems,
    MatchOnly
}
public class Form1 : Form
{
    ContextMenuStrip cmsBase;
    ContextMenuStrip cmsItemsToMerge;

    public Form1()
    {
        InitializeComponent();

        if (components == null)
        {
            components = new Container();
        }
        cmsBase = new ContextMenuStrip(components);
        cmsItemsToMerge = new ContextMenuStrip(components);

        // cmsBase is the base ContextMenuStrip.
        cmsBase.Items.Add("one");
        cmsBase.Items.Add("two");
        cmsBase.Items.Add("three");
        cmsBase.Items.Add("four");


        // cmsItemsToMerge contains the items to merge.
        cmsItemsToMerge.Items.Add("one");
        cmsItemsToMerge.Items.Add("two");
        cmsItemsToMerge.Items.Add("three");
        cmsItemsToMerge.Items.Add("four");

        // Distinguish the merged items by setting the shortcut display string. 
        foreach (ToolStripMenuItem tsmi in cmsItemsToMerge.Items)
        {
            tsmi.ShortcutKeyDisplayString = "Merged Item";
        }
        // Associate the ContextMenuStrip with the form so that it displays when 
        // the user clicks the right mouse button. 
        this.ContextMenuStrip = cmsBase;

        CreateCombo();

    }


    #region ComboBox switching code.
    private void CreateCombo()
    {
        // This ComboBox allows the user to switch between the samples.
        ComboBox sampleSelectorCombo = new ComboBox();
        sampleSelectorCombo.DataSource = Enum.GetValues(typeof(MergeSample));
        sampleSelectorCombo.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);
        sampleSelectorCombo.Dock = DockStyle.Top;
        this.Controls.Add(sampleSelectorCombo);

        TextBox textBox = new TextBox();
        textBox.Multiline = true;
        textBox.Dock = DockStyle.Left;
        textBox.DataBindings.Add("Text", this, "ScenarioText");
        textBox.ReadOnly = true;
        textBox.Width = 150;
        this.Controls.Add(textBox);
        this.BackColor = ProfessionalColors.MenuStripGradientBegin;
        this.Text = "Right click under selection.";
    }
    void comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox sampleSelectorCombo = sender as ComboBox;
        if (sampleSelectorCombo.SelectedValue != null)
        {
            CurrentSample = (MergeSample)sampleSelectorCombo.SelectedValue;
        }
    }

    private string scenarioText;

    public string ScenarioText
    {
        get { return scenarioText; }
        set
        {
            scenarioText = value;
            if (ScenarioTextChanged != null)
            {
                ScenarioTextChanged(this, EventArgs.Empty);
            }
        }
    }

    public event EventHandler ScenarioTextChanged;

    #endregion

    private void RebuildItemsToMerge()
    {
        // This handles cases where the items collection changes for the sample.
        cmsItemsToMerge.SuspendLayout();
        cmsItemsToMerge.Items.Clear();
        cmsItemsToMerge.Items.Add("one");
        cmsItemsToMerge.Items.Add("two");
        cmsItemsToMerge.Items.Add("three");
        cmsItemsToMerge.Items.Add("four");
        // Distinguish the merged items by setting the shortcut display string. 
        foreach (ToolStripMenuItem tsmi in cmsItemsToMerge.Items)
        {
            tsmi.ShortcutKeyDisplayString = "Merged Item";
        }
        cmsItemsToMerge.ResumeLayout();
    }
    #region Switching current samples.
    private MergeSample currentSample = MergeSample.None;
    private MergeSample CurrentSample
    {
        get { return currentSample; }
        set
        {
            if (currentSample != value)
            {
                bool resetRequired = false;

                if (currentSample == MergeSample.MatchOnly)
                {
                    resetRequired = true;
                }
                currentSample = value;
                // Undo previous merge, if any.
                ToolStripManager.RevertMerge(cmsBase, cmsItemsToMerge);
                if (resetRequired)
                {
                    RebuildItemsToMerge();
                }

                switch (currentSample)
                {
                    case MergeSample.None:
                        return;
                    case MergeSample.Append:
                        ScenarioText = "This sample adds items to the end of the list using MergeAction.Append.\r\n\r\nThis is the default setting for MergeAction. A typical scenario is adding menu items to the end of the menu when some part of the program is activated.";
                        ShowAppendSample();
                        break;
                    case MergeSample.InsertInSameLocation:
                        ScenarioText = "This sample adds items to the middle of the list using MergeAction.Insert.\r\n\r\nNotice here how the items are added in reverse order: four, three, two, one. This is because they all have the same merge index.\r\n\r\nA typical scenario is adding menu items to the middle or beginning of the menu when some part of the program is activated. ";
                        ShowInsertInSameLocationSample();
                        break;
                    case MergeSample.InsertInSameLocationPreservingOrder:
                        ScenarioText = "This sample is the same as InsertInSameLocation, except the items are added in normal order by increasing the MergeIndex of \"two merged items\" to be 3, \"three merged items\" to be 5, and so on.\r\n  You could also add the original items backwards to the source ContextMenuStrip.";
                        ShowInsertInSameLocationPreservingOrderSample();
                        break;
                    case MergeSample.ReplacingItems:
                        ScenarioText = "This sample replaces a menu item using MergeAction.Replace. Use this for the MDI scenario where saving does something completely different.\r\n\r\nMatching is based on the Text property. If there is no text match, merging reverts to MergeIndex.";
                        ShowReplaceSample();
                        break;
                    case MergeSample.MatchOnly:
                        ScenarioText = "This sample adds only the subitems from the child to the target ContextMenuStrip.";
                        ShowMatchOnlySample();
                        break;

                }
                // Reapply with the new settings.
                ToolStripManager.Merge(cmsItemsToMerge, cmsBase);
            }
        }
    }
    #endregion

    #region MergeSample.Append
    /* Example 1 - Add all items to the end of the list.
        * one
        * two
        * three
        * four
        * merge-one
        * merge-two
        * merge-three
        * merge-four
         */ 
    public void ShowAppendSample()
    {
        foreach (ToolStripItem item in cmsItemsToMerge.Items)
        {
            item.MergeAction = MergeAction.Append;
        }
    }
    #endregion

    #region MergeSample.InsertInSameLocation
    /*  Example 2 - Place all in the same location.
          * one
          * two
          * merge-four
          * merge-three
          * merge-two
          * merge-one
          * three
          * four

          */ 
    public void ShowInsertInSameLocationSample()
    {
        // Notice how the items are in backward order.   
        // This is because "merge-one" gets applied, then a search occurs for the new second position 
        // for "merge-two", and so on.
        foreach (ToolStripItem item in cmsItemsToMerge.Items)
        {
            item.MergeAction = MergeAction.Insert;
            item.MergeIndex = 2;
        }
    }
    #endregion

    #region MergeSample.InsertInSameLocationPreservingOrder
    /* Example 3 - Insert items in the right order.
        * one
        * two
        * merge-one
        * merge-two
        * merge-three
        * merge-four
        * three
        * four               
        */ 
    public void ShowInsertInSameLocationPreservingOrderSample()
    {

        // Undo previous merges, if any.
        ToolStripManager.RevertMerge(cmsBase, cmsItemsToMerge);

        // This is the same as above, but increases the MergeIndex so that 
        // subsequent items are placed afterwards. 
        int i = 0;
        foreach (ToolStripItem item in cmsItemsToMerge.Items)
        {
            item.MergeAction = MergeAction.Insert;
            item.MergeIndex = 2 + i++;
        }

        // Reapply with new settings.
        ToolStripManager.Merge(cmsItemsToMerge, cmsBase);
    }
    #endregion

    #region MergeSample.ReplacingItems
    /* Example 4 - 
        * merge-one
        * merge-two
        * merge-three
        * merge-four
         */ 
    public void ShowReplaceSample()
    {

        // MergeAction.Replace compares Text property values.  
        // If matching text is not found, Replace reverts to MergeIndex.                     

        foreach (ToolStripItem item in cmsItemsToMerge.Items)
        {
            item.MergeAction = MergeAction.Replace;
        }



    }
    #endregion

    #region MergeSample.MatchOnly
    /* Example 5 - Match to add subitems to a menu item.
         * Add items to the flyout menus for the original collection.
         * one -> subitem from "one merged item"
         * two -> subitem from "two merged items"
         * three -> subitem from "three merged items"
         * four -> subitem from "four merged items"
         */ 
    public void ShowMatchOnlySample()
    {

        foreach (ToolStripMenuItem item in cmsItemsToMerge.Items)
        {
            item.MergeAction = MergeAction.MatchOnly;
            item.DropDownItems.Add("subitem from \"" + item.Text + " " + item.ShortcutKeyDisplayString + "\"");
        }


    }
    #endregion

    private System.ComponentModel.IContainer components = null;
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.Text = "Form1";
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

The following code example demonstrates a call to ToolStripManager and some of its members.

			toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;
			ToolStripManager.Renderer = new RedTextRenderer();

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show:
© 2014 Microsoft