Windows应用程序表单:在添加新项目后清除并重新填充TreeView后,保留所选节点C#

时间:2017-06-13 00:59:57

标签: c# windows treeview windows-applications

我有一个允许用户将新项添加到TreeView控件中的应用程序。选择项目时,父节点将显示其子节点,但在将新项目(单击按钮)添加到Treeview控件时会折叠。我希望它能够保持扩展,直到用户再次与它进行交互。

# IF-ELSE to handle the 'autorunsc' output, which is UTF16
if command_name == 'autorunsc':
    result = subprocess.Popen([file_path] + command_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    text = result.stdout.read().decode('UTF16')
    for line in text:
        output_file.write(line)
else:
    subprocess.call([file_path] + command_args, stdout=output_file, stderr=output_file) 

2 个答案:

答案 0 :(得分:0)

我看到TreeView已清除,然后填充了节点列表。如评论中所述,您可以检查IsExpanded属性,然后决定在TreeNode上调用Expand。

另一种方式:当您添加许多新TreeNode时,我会假设这些节点没有先前的状态来检查IsExpanded,在这种情况下,您可以尝试类似下面的内容,新节点以扩展状态添加。注意Beginupdate / EndUpdate调用。

    private void TravelTreeView()
    {
        // better to do this to avoid too many repaints
        TreeView1.BeginUpdate();

        TreeView1.Nodes.Clear();
        //Items is the class I created and ObjectList is the List<>
        foreach (Items obj in ObjectList)
        {
           TreeNode node = new TreeNode();

           node.Text = obj.Name;
           //Imagelist has 7 images
           node.SelectedImageIndex = 0;
           node.ImageIndex = obj.NameImage;
           node.Nodes.Add(obj.AgeImage, "Age: " + obj.Age, 5);
           node.Nodes.Add(obj.ZodiacImage, "Zodiac: " + obj.Zodiac, 6);
           node.Nodes.Add(obj.JobImage, "Job: " + obj.Job, 7);

           // add an expanded Node
           node.Expand();

           TreeView1.Nodes.Add(node);
       }
       // we are done with the updates to TreeView
       TreeView1.EndUpdate();
    }

答案 1 :(得分:0)

WinForms确实保留了控件的状态。这里的问题似乎是你清理项目然后迭代你的对象,然后重新加载TreeView。在这种情况下,项目将被折叠,这是默认值。

我建议采用以下方法,

[x for x in a if x not in "[]"]

有关TreeNodeCollection上的ContainsKey方法的信息