2012-04-24 104 views
1

我在我的winform上有一个TreeView,它使用了TreeNode的子类以及一些我希望针对每个节点存储的额外变量。用户可以使用上下文菜单从我的树中删除节点。在winforms中扩展TreeNode功能

我希望能够做的是扩展TreeNode的Remove方法,以便在删除节点之前在那里做一些额外的处理。有没有办法做到这一点?

为了澄清...

有没有办法为树节点扩展现有的删除方法使代码可以执行它的实际执行删除之前?

干杯,

编辑:我其实假设方式,我将不得不做,这是与()改为调用this.Remove一种新的方法扩展类?

编辑2:这就是我最终做的。这是不是最好的办法...

public partial class CustomTreeNode : TreeNode 
{ 
    // My custom TreeNode vars 
    public int UID; 
    public int ParentUID; 

    public CustomTreeNode(string nodeName) : base(nodeName) 
    { 
     // Set the tree node here 
    } 

    public void RemoveIt() 
    { 
     // Custom stuff 
     System.Console.WriteLine("Deleted"); 

     base.Remove(); 
    } 

} 

回答

1

在子类

public new void Remove() 
{ 
    //do your custom stuff 

    base.Remove(); // calls the TreeNode Remove method 
} 

编辑试试这个:增加了新的去除覆盖

要知道,任何时候您引用子类对象作为TreeNode,那么你的自定义删除方法将不会被调用Difference between new and override

你也可以命名为这样的其他功能:

public void SuperRemove() 
{ 
    //do your custom stuff 

    base.Remove(); // calls the TreeNode Remove method 
} 
+0

当我尝试这样做时,我得到“无法重载继承的成员'System.Windows.Forms.TreeNode.Remove()',因为它没有标记为虚拟的,抽象的或覆盖。 – Simon 2012-04-24 16:11:45

+0

哦,是的,我忘记了,编辑我的回答 – Joel 2012-04-24 16:31:06

0

您正在从上下文菜单中删除节点。为什么不向MenuItem_Click事件处理程序添加一些额外的处理?您可以在调用Remove节点之前执行任何操作。

+0

主要是因为这个动作会在我的树中发生很多,我希望对象本身能够处理它从SQL中删除,而不必为.Remove()的每个实例编写所有代码。 – Simon 2012-04-24 17:23:47