Windows形成Treeview刷新问题

时间:2015-09-23 14:25:21

标签: c# winforms treeview refresh

我使用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提供的建议。但没有运气。暂时我已经通过以编程方式最小化和最大化表单来解决它。

2 个答案:

答案 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);
        }
    }
}