右键单击打开自定义ContextMenuStrip

时间:2015-05-18 00:38:49

标签: c# winforms treeview

我正在创建一个包含不同类型TreeNode的TreeView,每个TreeNodes都有自己的ContextMenuStrip菜单。 我有一个继承自ElementTreeNode的班级TreeNode。我想添加一个继承自ElementContextMenu菜单的ContextMenuStrip到右侧点击节点时应该打开它。

我的第一种方法是简单地将ElementContextMenu的实例添加到ContextMenuStrip的{​​{1}}属性中。但是我向ElementTreeNode添加了一个EventHandler,我无法以这种方式访问​​它。可能是因为属性向下转换为ElementTreeNode并因此丢失了ContextMenuStrip中仅存在的EventHandler:

ElementContextMenu

我的第二个想法是将一个属性ElementContextMenu添加到类中,然后让右键单击事件打开此菜单而不是ContextMenuStrip属性:

class ElementTreeNode : TreeNode
{
    public ElementTreeNode()
    {
        ContextMenuStrip = new ElementContextMenu();
    }
}

所以我的问题是:
当我右键点击节点时,如何打开class ElementTreeNode : TreeNode { public ElementContextMenu ElementContextMenu; public ElementTreeNode() { ElementContextMenu = new ElementContextMenu(); } } 属性而不是ElementContextMenu
有没有办法改变这种行为?

2 个答案:

答案 0 :(得分:1)

只需手动显示2400000000,不要指定ContextMenu的上下文菜单。 E.g。

TreeView

答案 1 :(得分:0)

尝试按照以下方式制作ElementTreeNode课程:

class ElementTreeNode : TreeNode
{    

  public ElementTreeNode()
  {
    ElementContextMenu = new ElementContextMenu();
  }

  public ElementContextMenu ElementContextMenu
  {
    get { 
      return ContextMenuStrip as ElementContextMenu; 
    }
    private set { 
      ContextMenuStrip = value; 
    }
  }
}

现在,只要您需要添加仅存在于ElementContextMenu类中的EventHandler或访问属性,请使用ElementContextMenu属性。

ContextMenuStrip属性的行为方式仍然相同(右键单击节点时打开上下文菜单),但它会打开ElementContextMenu的实例代替。