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});//为当前窗体添加弹出式菜单