我有一个允许用户将新项添加到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)
答案 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方法的信息