我正在创建一个包含不同类型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
?
有没有办法改变这种行为?
答案 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
的实例代替。