我想做一个XP风格的菜单控件,命名空间下有两个类,一个是继承自mainMenu(xMainMenu),一个继承自menuItem(xMenuItem),我现在想让xMainMenu在执行xMainMenu.MenuItem.Add()方法的时候加入的是我提xMenuItem,而不是普通的MenuItem。想了半天没有什么头绪,是不是要对Menu.MenuItemCollection动什么手脚呢?
namespace xMenu{
    
    public class xMainMenu:System.Windows.Forms.MainMenu{
        
    }
    
    private class xMenuItem:System.Windows.Forms.MenuItem{    }
}

解决方案 »

  1.   

    创建自己的集合类xMainMenu.xMenuItemCollection,操作对象为xMenuItem,创建xMenuItemCollection的一系列操作事件
    xMainMenu重写MenuItems,返回这个xMenuItemCollection,每当发生操作,xMainMenu对父类Menu.MenuItems进行相应操作。
    因为Menu.MenuItems并不是virtual的,所以用户将xMainMenu转换Menu后还能加入MenuItem,上述仅仅是个封装。操作集合时要进行类型判断。
    如果你想创建控件,我建议xMainMenu从ContainerComponent继承,xMenuItem从Component继承,自己重写,Menu个人以为是较难重写的控件之一