我使用TreeView
来显示文件夹结构。我在NodeMouseClick
事件中动态创建节点。
但即使填充了子节点,它们也不会在树视图中可见。
然而,最小化窗口并最大化它再次解决了这个问题。请让我知道我在这里做错了什么。请在下面找到我正在使用的代码:
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (treeView1.SelectedNode != null && e.Node.IsExpanded)
{
treeView1.BeginUpdate();
TreeNode node = e.Node;
while (node.Parent != null)
{
node = node.Parent;
}
VcDetailsEntity detailsEntity = connectedVCs.Where(c => c.VCName == node.Name).FirstOrDefault();
detailsEntity.VCBrowserPath = e.Node.Name;
FolderBrowser cosmosBrowser = new FolderBrowser();
List<FolderStreamEntity> folderStreams = folderBrowser.GetVcContentDetails(detailsEntity);
e.Node.Nodes.Clear();
foreach (var stream in folderStreams)
{
if (stream.IsDirectory)
{
TreeNode treeNode = new TreeNode();
treeNode.Name = stream.StreamName;
treeNode.Text = stream.QualifiedName;
treeNode.ToolTipText = stream.QualifiedName;
TreeNode dummyNode = new TreeNode();
treeNode.Nodes.Add((TreeNode)dummyNode.Clone());
TreeNode toUpdate = treeView1.Nodes.Find(e.Node.Name, true).FirstOrDefault();
toUpdate.Nodes.Add((TreeNode)treeNode.Clone());
}
}
treeView1.EndUpdate();
treeView1.Refresh();
}
}
我已经尝试过Gnial0id,wpfnoop和LarsTech提供的建议。但没有运气。暂时我已经通过以编程方式最小化和最大化表单来解决它。
答案 0 :(得分:1)
在添加新节点的代码之后立即添加下面的代码块对我来说是神奇的。
treeView1.SelectedNode = NodeToUpdate;
这里NodeToUpdate是添加新子节点的节点。
答案 1 :(得分:0)
嗯,很难从提供的代码片段中找出任何内容,因为很多部分都缺失了。另外我不太明白为什么需要TreeNode toUpdate = treeView1.Nodes.Find(e.Node.Name, true).FirstOrDefault();
然后你为什么要克隆你刚刚创建的节点等等。所以我准备了一个样本测试,它做了类似的事情并且没有体验您所描述的问题。检查出来并将其与您的代码进行比较,以找出问题所在。
using System;
using System.Windows.Forms;
namespace Samples
{
static class Test
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form = new Form();
var treeView = new TreeView { Dock = DockStyle.Fill, Parent = form };
for (int i = 1; i <= 10; i++)
{
var parent = new TreeNode { Text = "Parent#" + i };
treeView.Nodes.Add(parent);
for (int j = 1; j <= 10; j++)
{
var child = new TreeNode { Text = "Child#" + i };
var dummy = new TreeNode();
child.Nodes.Add(dummy);
parent.Nodes.Add(child);
}
}
var random = new Random();
int addCount = 0;
treeView.NodeMouseClick += (sender, e) =>
{
if (treeView.SelectedNode == e.Node && e.Node.IsExpanded)
{
treeView.BeginUpdate();
e.Node.Nodes.Clear();
int count = random.Next(20) + 1;
for (int i = 1; i <= count; i++)
{
var child = new TreeNode { Text = "AddChild#" + (++addCount) };
var dummy = new TreeNode();
child.Nodes.Add(dummy);
e.Node.Nodes.Add(child);
}
treeView.EndUpdate();
}
};
Application.Run(form);
}
}
}