实现一个具有弹性且多样化的菜单、内容菜单与状态栏

 

特别值得一提的是,在Visual C# 2005中建立工具列、菜单、内容菜单(快捷菜单)、以及状态列时,建议您了解ToolStrip控件、MenuStrip控件、ContextMenuStrip控件、StatusBar控件、以及四个控件之间密不可分的关系。以下即为一例:

 

在此,我们要使用程序范例CH9_DemoForm001.cs来示范如何创建一个具有弹性且多样化的菜单、内容菜单与状态栏。从中,您将会对这三个控件的功能特性与运作方式有更清楚的认识。接下来,我们一一介绍其外观特性与设计技巧:

 

1-9

 



1-10

 

1-9所示是程序范例CH9_DemoForm001.cs的运行画面。我们发现,本窗体中的菜单非常特别,因为它除了传统形式的主菜单项目与单层或多层的下拉菜单之外,还拥有其它类型的ToolStripItem控件,包括:文本标签(ToolStripLabel)、下拉列表框(ToolStripComboBox)、按钮(ToolStripButton)、按钮与下拉列表的组合式控件(ToolStripSplitButton)以及一个文字超级链接(ToolStripLabel)。

 

基本上,我们是在设计阶段就已经构建了菜单的主体(如图1-10所示),此一菜单主体的各个菜单项目(包括主菜单项目与子菜单项目)都是一个ToolStripMenuItem对象,至于各个ToolStripItem控件则是通过程序代码来添加到MenuStrip控件中。将各个ToolStripItem控件添加到MenuStrip控件中的程序代码撰写在 CreateInitialMenus() 程序中,并且会在窗体的Load事件处理函数中加以调用,其程序代码如下所列:

 

private void CreateInitialMenus()

{

    // 先添加三个菜单项目到复选列表

    // 菜单的下拉菜单中。

    for(int i = 1;i <= 3;i++)

    {

        AddOption();

    }

       

    // 创建一个用来显示文字标签的ToolStripLabel控件。

    ToolStripLabel menuLabel = new ToolStripLabel();

    menuLabel.Text = "请选取:";

       

    // ToolStripLabel控件新增到MenuStrip控件

    // Items集合中,以便将它加至菜单中。

    MenuStrip1.Items.Add(menuLabel);

       

    // 创建一个用来显示下拉列表框

    // ToolStripComboBox 控件。

    ToolStripComboBox menuComboBox =

        new ToolStripComboBox();

    menuComboBox.Items.Add("停靠上边界");

    menuComboBox.Items.Add("停靠下边界");

    menuComboBox.Items.Add("停靠左边界");

    menuComboBox.Items.Add("停靠右边界");

    menuComboBox.SelectedIndex = 0;

    menuComboBox.ToolTipText = "选取菜单的停靠位置";

       

    // 设定当选取ToolStripComboBox控件中的不同选项时

    // 就执行事件处理函数 ComboBox_SelectedIndexChanged

    menuComboBox.SelectedIndexChanged += new

    System.EventHandler(this.ComboBox_SelectedIndexChanged);

       

    // ToolStripComboBox控件添加到MenuStrip控件

    // Items集合中,以便将它加到菜单中。

    MenuStrip1.Items.Add(menuComboBox);

       

    // 依序创建三个拥有按钮外观的ToolStripButton控件。

    ToolStripButton button1 = new ToolStripButton();

    ToolStripButton button2 = new ToolStripButton();

    ToolStripButton button3 = new ToolStripButton();

       

    // 依序设定这三个ToolStripButton控件的图片。

    button1.Image = Resources.SampleImage1;

    button2.Image = Resources.SampleImage2;

    button3.Image = Resources.SampleImage3;

       

    // 依序设定这三个ToolStripButton控件的工具提示信息。

    button1.ToolTipText = "蓝色";

    button2.ToolTipText = "红色";

    button3.ToolTipText = "绿色";

       

    // 依序设定这三个ToolStripButton控件的Name属性。

    button1.Name = "Blue";

    button2.Name = "Red";

    button3.Name = "Green";

       

    // 设定当引发这三个ToolStripButton控件的Click事件

    // 时就执行事件处理函数ColorButton_Click

    button1.Click +=

      new System.EventHandler(this.ColorButton_Click);

    button2.Click +=

      new System.EventHandler(this.ColorButton_Click);

    button3.Click +=

      new System.EventHandler(this.ColorButton_Click);

       

    // 将这三个ToolStripButton控件新增到MenuStrip控件

    // Items集合中,以便将它加至菜单中。

    MenuStrip1.Items.Add(button1);

    MenuStrip1.Items.Add(button2);

    MenuStrip1.Items.Add(button3);

       

    // 创建一个结合按钮与下拉列表

    // ToolStripSplitButton控件。

    ToolStripSplitButton colorSplitButton = new ToolStripSplitButton();

       

    // 设定ToolStripSplitButton控件的文字。

    colorSplitButton.Text = "蓝色";

       

    // 设定当单击ToolStripSplitButton控件的标准按钮时

    // 就执行事件处理函数SplitButton_Click

    colorSplitButton.ButtonClick += new

        System.EventHandler(this.SplitButton_Click);

       

    // 创建三个ToolStripMenuItem对象。

    ToolStripMenuItem tsmiColorOption1 =

        new ToolStripMenuItem();

    ToolStripMenuItem tsmiColorOption2 =

        new ToolStripMenuItem();

    ToolStripMenuItem tsmiColorOption3 =

        new ToolStripMenuItem();

       

    // 设定这三个ToolStripMenuItem对象的文字。

    tsmiColorOption1.Text = "蓝色";

    tsmiColorOption2.Text = "红色";

    tsmiColorOption3.Text = "绿色";

       

    // 设定这三个ToolStripMenuItem对象的工具提示信息。

    tsmiColorOption1.ToolTipText = "蓝色";

    tsmiColorOption2.ToolTipText = "红色";

    tsmiColorOption3.ToolTipText = "绿色";

       

    // 设定这三个ToolStripMenuItem