TreeView-节点未扩展

时间:2018-07-25 12:44:53

标签: c# winforms treeview expand treenode

我有一个带有几个节点的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 which 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,但是即使我检查IF是否为空,它也会给我NullReferenceException。为什么?

1 个答案:

答案 0 :(得分: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库,但它已经是我正在开发的代码。