【问题标题】:Extending the TreeNode functionality in winforms在 winforms 中扩展 TreeNode 功能
【发布时间】:2014-03-11 00:46:04
【问题描述】:

我的 winform 上有一个 TreeView,它使用 TreeNode 的子类和一些我想针对每个节点存储的附加变量。用户可以使用上下文菜单从我的树中删除节点。

我想做的是扩展 TreeNode 的 Remove 方法,以便在删除节点之前在其中进行一些额外的处理。有没有办法做到这一点?

澄清一下……

有没有办法扩展 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();
    } 

}

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    在你的子类中试试这个

    public new void Remove() 
    { 
        //do your custom stuff
    
        base.Remove();  // calls the TreeNode Remove method
    }
    

    编辑:添加新的已移除覆盖

    请注意,任何时候您将子类对象引用为 TreeNode,您的自定义 Remove 方法都不会被调用 Difference between new and override

    您还可以将函数命名为其他名称:

    public void SuperRemove() 
    { 
        //do your custom stuff
    
        base.Remove();  // calls the TreeNode Remove method
    }
    

    【讨论】:

    • 当我尝试这样做时,我得到“无法覆盖继承的成员 'System.Windows.Forms.TreeNode.Remove()',因为它没有被标记为虚拟、抽象或覆盖。
    【解决方案2】:

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

    【讨论】:

    • 主要是因为这个操作会在我的树中发生很多,我希望对象本身能够处理它从 SQL 中的删除,而不必为每个 .Remove() 实例编写所有代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多