我的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
}
答案 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对象