TreeView - 节点未展开

问题描述 投票:0回答:1

我有一个包含多个节点的 TreeView,如果删除了特殊节点(您将在代码中看到),则更新 TreeView 后应展开父节点。

这是我尝试的方法:

public void Remove(){
    ...
    ...
    else if ((NodeType)n.Tag == NodeType.Attribute) //Here I simply check if it's the "special" parent
    {
       Commands.CommandAttributeRemove cmd = (Commands.CommandAttributeRemove)mAppData.CommandFactory.Create("AttributeRemove");
       cmd.Data = n.Text;
       cmd.ObjectClass = mObjectClass;
       cmd.ObjectTypeName = n.Parent.Parent.Text;
       list.Add(cmd);
       mNodeToExpand = mTreeView.SelectedNode.Parent; //THIS LINE IS IMPORTANT... mNodeToExpand is a member variable that I use in UpdateData()
    }
    ...
    ...
    UpdateData();
}

public void UpdateData()
    {
       … //A lot of not-so-important stuff happening here (at least not important for what I want, I think)
       ...
        //Update Selected Items (for the case that objects were deleted) and UpdateSelection
        OnSelect();

        //UpdateSelection();
        this.Update();

现在这是有趣的事情:

   if (mNodeToExpand != null)
        {
            mNodeToExpand.Expand();
            mNodeToExpand = null;
        }
}

这就是我试图实现我想要的目标的方法,但是该节点没有扩展(它仍然有其他子节点)。

Remove()
中我也尝试了
mTreeView.SelectedNode.Parent.Nodes.Add(new Node("Blabla"));
但它甚至没有添加节点。

if(mNodeToExpand!=null)
中,我还尝试将 selectedNode 设置为 mNodeToExpand,但它给了我一个 NullReferenceException,即使我在 IF 中检查它是否为空。为什么?

c# winforms treeview expand treenode
1个回答
0
投票

这不可能是这样。 FullPath 显然是树视图中节点的路径,因此,例如,如果您有 Node2,它是 Node1 的子节点,那么 Node1 的 FullPath 是“Node1”,Node2 的 FullPath 是“Node1//Node2”……现在是这样是因为某种奇怪的原因,我的 mNodeToExpand 丢失了 FullPath 的信息,突然间它只是“Node2”而不是“Node1//Node2”...因此它没有展开,导致 TreeView 找不到具有此信息的节点FullPath… 现在我所做的是将 FullPath 存储在一个字符串中,当我想要扩展它时,我会搜索具有此 FullPath 的节点,然后扩展返回的内容。这太愚蠢了,因为想象一个包含 1 000 000 个节点的列表。这可能需要很长时间。我开始真的不喜欢这个 Crownwoods.DotNetMagic 库,但它已经是我正在处理的现有代码。

© www.soinside.com 2019 - 2024. All rights reserved.