【发布时间】:2015-09-23 14:25:20
【问题描述】:
我使用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 提供的建议。但没有运气。我暂时通过以编程方式最小化和最大化表单来解决它。
【问题讨论】:
-
你试过 Suspend/ResumeLayout 方法吗?
-
代码似乎有效。问题可能出在其他地方。
-
也许尝试 Invalidate() 而不是 Refresh()?无效重绘整个控件,只刷新客户区。
-
Windows 版本很重要。请尝试通过在对话调用之后移动 BeginUpdate() 调用来限制风险。并完全删除 Begin/EndUpdate() 并在您的问题中说明这是否有任何影响。
-
尝试了所有这些建议。但没有帮助。暂时,我通过一次以编程方式最小化和最大化窗口来管理它。之后它永远有效。
标签: c# winforms treeview refresh