为窗体添加菜单

时间:2022-09-07 20:54:59
为窗体添加菜单

   4.1 添加主菜单

   在.NET的System.Windows.Forms.Form(窗体)类中,有一个类型为MainMenu的属Menu,你只需要把一个MainMenu对象赋值给窗体的Menu属性即可以为窗体添加主菜单。

  当使有MainMenu()构造生成主菜单对象时,主菜单对象中没有任何菜单,你可以直接通过主菜单对象(MainMenu)的MenuItems集合来管理(添加或者删除)菜单项,然后该对象直接赋给窗体的Menu属性即可在窗体上看到主菜单。如下面的语句为当前窗体添加有一个菜单项“File”的主菜单:

MainMenu Menu1=new MainMenu();

Menu1.MenuItems.Add(new MenuItem(“File”));

this.Menu=Menu1;

  当使用MainMenu(MenuItem[])构造函数生成主菜单对象时,主菜单对象将包含由参数菜单项对象中指定的一系列子菜单。如下面的代码为当前窗体添加有两个菜单项(“File”及“Edit”)的主菜单:

MainMenu Menu1=new MainMenu(new MenuItem[]{new MenuItem(“File”),new MenuItem(“Edit”)});

this.Menu=Menu1;

  访问一个窗体的主菜单有两种方法:

  首先,可以通过一个主菜单(MainMenu)对象的MenuItems集合进行。通过MenuItems集合的索引,可以定位到一个具体的菜单项。然后你可以给菜单项添加事件响应方法或是改变菜单项的一些属性等操作。例如,下面我们把主菜单对象mainMenu1赋以窗体后,你可以通过下面语句访问主菜单第一项的文本属性值:

mainMenu1.MenuItems[0].Text=“Files”;

  其次,你也可以通过窗体(Form)的Menu属性对主菜单的项进行操作。Form类的Menu属性返回的是一个MainMenu对象,由于对象是引类型数据,因此两种操作的实质上都是指向同一个对象的。如上面表示第一项主菜单项文本的语句也可以如下表示:

this.Menu.MenuItems[0].Text=“Files”;

  一般情况下,如果你用Visual Studio .Net开发你的程序,在工具栏中有一个MainMenu的控件,用于添加主菜单,你可以直接把该控件添加到设计窗体中,然后非常简单的菜单项上输入菜单文本就可以啦。如下所示:

为窗体添加菜单

  4.2 添加子菜单

   在.Net中,菜单项对象模型其实是一个树状的。一个菜单可以通过在其MenuItems集合中添加菜单项,使其拥有下级子菜单;子菜单同样还可以通过相同的方法添加更下一级子菜单。

  一个菜单项对象的MenItems将返回一个Menu.MenuItemCollection集合,通过这个集合可以非常方便的管理其中的元素,例如:要添加一个子菜单只需要使用集合的Add()或者AddRange()方法,删除一个项只需要使用Remove()或者是RemoveAt()即可。

  下面的代码将为窗体添加一个主菜单,并在主菜单的第一项添加子菜单:

MainMenu Menu1=new MainMenu(new MenuItem[]{new MenuItem(“File”),new MenuItem(“Edit”),new MenuItem(“Tools”)});

this.Menu=Menu1;

MenuItem subMenu1=new MenuItem(“New”);

MenuItem subMenu2=new MenuItem(“Open”);

MenuItem subMenu3=new MenuItem(“Save”);

this.Menu.MenuItems[0].MenuItems.Add(subMenu1);

this.Menu.MenuItems[0].MenuItems.AddRange(new MenuItems[]{subMenu2,subMenu3});//使用AddRange()方法添加集合元素

  其中this.Menu.MenuItem[0]表示主菜单项1,而this.Menu.MenuItem[0].MenuItems表示主菜单项1下面的子菜单。

  4.3 添加弹出式菜单

   在.Net中,System.Windows.Forms.Control类是除菜单外的所有窗体控件及可视化元素的基类,在该类中有一个ContextMenu类型的属性ContextMenu,通过设置该属性可以为控件或窗体添加弹出式菜单。方法非常简单,你只需要创建一个ContextMenu对象,并把该对象赋给窗体或控件的ContextMenu属性即可。

  前面我们介绍了ContextMenu类有两个构造函数,使用两个构造函数,与MainMenu类似,我们可以通过下面两种方法为控件或窗体添加弹出式菜单。

  第一种方法,使用ContextMenu()产生一个不含任何菜单项的ContextMenu(弹出菜单)对象,然后通过该对象的MenuItems属性管理菜单项,如下面的语句为窗体及按钮添加同样的弹出菜单:

ContextMenu Menu1=new ContextMenu();

Menu1.MenuItems.Add(new MenuItem(“弹出菜单一"));

Menu1.MenuItems.Add(new MenuItem(“弹出菜单二"));

this.ContextMenu=Menu1;

button1.ContextMenu=Menu1;

  第二种方法是使用ContextMenu(MenuItem[] menus)构造函数直接生成具有一系列菜单项的弹出式菜单。如下面的例子:

MenuItem menu1=new MenuItem("弹出菜单一");//生成一个菜单项

MenuItem menu2=new MenuItem("弹出菜单二");

MenuItem menu3=new MenuItem("-");//菜单分隔线

MenuItem menu4=new MenuItem("弹出菜单三");

this.ContextMenu=new ContextMenu(new MenuItem[]{menu1,menu2,menu3,menu4,menu5});//为当前窗体添加弹出式菜单

  在使用过程中,你还可以通过ContextMenu对象的RightToLeft设置菜单的排列方式,通过SourceControl查看所显示弹出菜单所对应的控件等,还可以通过直接使用对象的Show()方法强制显示弹出菜单等。

  以主菜单(MainMenu)对象相似,要访问一个弹出菜单的具体菜项,你可以直接通过Menu.MenuItemCollection集合进行。如下面的语句:

Menu1.MenuItems[0].Text="Test";

 或

this.ContextMenu.MenuItems[0].Text="Test";