遍历树节点以查找最高级别的父标记数据,如何保存初始树节点信息?

时间:2014-05-06 19:22:40

标签: c# forms treeview

我的TreeNode中有TreeView个对象,它是当前选定的节点。我想遍历此节点以找到其最高级别的父级并从中获取一些信息(即其Tag变量中的数据)。

我怎样才能轻松地做到这一点,同时保持我的inNode仍然等于函数传递给它的那个?

private void openNodeWindow(TreeNode inNode)
{
    // Find the top level window type this is in.
    TreeNode curNode = inNode; 
    WindowType topLevelType = WindowType.NO_WINDOW;

    // As long as there is a parent to this Node
    while (curNode.Parent != null && 
        // As long as that parent has a specified window type
        (WindowType)curNode.Parent.Tag != WindowType.NO_WINDOW)
    {
        topLevelType = (WindowType)curNode.Tag;
        curNode = curNode.Parent;
    }

    // Do stuff with the topLevelType variable now
    // Also having inNode set back to what it was originally
}

1 个答案:

答案 0 :(得分:-1)

克隆对象而不是设置引用 http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.clone(v=vs.110).aspx

// TreeNode curNode = inNode; // set by reference
TreeNode curNode = (TreeNode) inNode.Clone(); // clone (set by value)

现在修改curNode对象时,应该不修改inNode。

编辑这似乎只是浅色副本。

  

(来自msdn TreeNode.Clone方法)

     

备注:克隆树节点的树结构及其下方   被复制了。分配给正在克隆的TreeNode的任何子树节点   包含在新树节点和子树中。

     

克隆方法   执行节点的浅表副本。如果Tag属性的值   是一种引用类型,原始和克隆的副本都将指向   Tag值的相同单个实例。

您可以尝试制作对象的深层副本,更多参考方法。

或者您可以“备份”要保留的值,并在使用完curNode后将它们复制回inNode对象