场景描述:ContextMenuStrip BMenu = new ContextMenuStrip ();
一个函数返回右键菜单:
ContextMenuStrip AMenu = GetTreeviewPopMenu();在下面用时:目的是将AMenu添加到BMenu上。                for(int i=0;i<AMenu.Items.Count;i++)
                {
                    ToolStripMenuItem tsm = (ToolStripMenuItem)AMenu.Items[i];
                    BMenu.Items.Add(tsm);
                }
                BMenu.Items.Add(CommonFunction.CreatePopSubMenu("刷新", imagelist, 0, RefreshNode_Click));问题是:
如果我BMenu.Item.Clear();时AMenu就会清空!!
怎么做才不能清空?
(在不改变GetTreeviewPopMenu函数的情况下)顶有分!! 

解决方案 »

  1.   

    ToolStripMenuItem 是引用
    所以会清空你再添加到BMenu之前再重新调用下GetTreeviewPopMenu
    ContextMenuStrip temp = GetTreeviewPopMenu(); 
    for(int i=0;i<temp.Items.Count;i++)
    {
        ToolStripMenuItem tsm = (ToolStripMenuItem)temp.Items[i];    
        BMenu.Items.Add(tsm);
    }
      

  2.   

    lovefootball :
    重新调用下GetTreeviewPopMenu 之后就已经为空了。
    还有什么好办法?
      

  3.   

    GetTreeviewPopMenu
    里面你都干了些啥,
    清空AMenu的东西??里面最好是new一个新的
    而不是重新new原来的变量
      

  4.   

    GetTreeviewPopMenu()
    {
      return Amenu;
    }
    而Amenu是在系统初始化时创建的,
    我之所以这样做就是不想每一次GetTreeviewPopMenu都创建!
      

  5.   

    那ContextMenuStrip AMenu = GetTreeviewPopMenu(); 
    这句话岂不是没有任何意义???GetTreeviewPopMenu里面还是new一个新的ContextMenuStrip 吧
    然后分别给AMenu和BMenu赋值
      

  6.   

    public class A:
    {
      public A()
      {
          ContextMenuStrip AMenu = ContextMenuStrip ();
          AMenu.Item.Add(XX);
          AMenu.Item.Add(XX);
          AMenu.Item.Add(XX);
      }  public ContextMenuStrip GetTreeviewPopMenu() 
      {
         return AMenu 
      }
    }整个就是这样的..原因就是我不想每一次都new,所以就直接返回了。