我定义了一个用户控件,
外观有三个区域
caption区域,header区域和item区域
要求在三个不同区域点击右键的时候,有不同的右键菜单弹出。
而且这三个右键菜单不是固定在控件里的,可以让使用该控件的程序自行定制
就等于说,在使用该控件的程序里,可以自行定制点击不同的区域弹出什么样的右键菜单!
请问这个要求怎么样实现?

解决方案 »

  1.   

    private ContextMenu cm1 = new ContextMenu();
    private MenuItem menuItem =null;
    MenuItem m1
    {
    get{}
    set{
    menuItem = value;
    //然后在帮定到 cm1.Add(menuItem)需要的菜单
    }
    }如果需要内部做些操作
    public delegate void click(); //声明代理事件
    public event void MenuClick(); 
    注册到菜单上,然后在回送给调用者未测试.
      

  2.   

    to 要求在三个不同区域点击右键的时候,有不同的右键菜单弹出。
    而且这三个右键菜单不是固定在控件里的,可以让使用该控件的程序自行定制
    设置一个空的ContextMenu,三个区域(如果没有控件,最好用Panel来代替)的ContextMenu都设为它
    然后根据mousedown的位置,先判断出哪一区域,动态添加MenuItem,并为每个Item设置事件,就行了。
      

  3.   

    caption区域,header区域和item区域public MyControl: UserControl
    {
      Control _Caption;
      Control _Header;
      Control _Item;  public CaptionContextMenu
      {
        get{return _Caption.ContextMenu;}
        set{_Caption.ContextMenu =value;}
      }
      public HeaderContextMenu
      {
        get{return _Header.ContextMenu;}
        set{_Header.ContextMenu =value;}
      }
      public ItemContextMenu
      {
        get{return _Item.ContextMenu;}
        set{_Item.ContextMenu =value;}
      }
    }
      

  4.   

    如果要指定菜单在属性窗口的显示方式的话,可以这样做:[Browsable(true), Category("MyControl")]
    public CaptionContextMenu
    .......