TreeView垂直滚动条不会扩展到最后一个节点,最后一个节点是隐藏的吗?

Sae*_*ani 3 c# treeview controls scrollbar winforms

我遇到了TreeView控件的奇怪行为.

在此输入图像描述

如您所见,树视图中的最后一个节点以某种方式隐藏(虽然我可以使用键盘向上/向下箭头键选择它)并且滚动条不会扩展到它.在图片中,您看到的蓝线是隐藏的选定节点,但幸运的是仍然可以看到一些高光!

即使按下pagedown或END键,我也无法选择最后一个节点!

我试图改变树视图控件的高度以匹配节点的高度,但仍然没有成功!我的树视图位于"面板"内.这可能是问题吗?

更新 我没有做一些非凡的事情.我只是在List <>上填充一个循环(使用循环前后的暂停和恢复),然后树形视图将正常填充.

public class MyNode
{
public string Name {get;set;}
public string Result {get;set;} 
}
//suspending code here (dont have access to paste it here)
    foreach(MyNode node in myNodeList)
    {
    TreeNode tn = new TreeNode();
    tn.Text = node.Name;
    tn.Name = node.Result;
    treeView.Nodes.Add(tn);
    }
////unsuspending code here (dont have access to paste it here)
Run Code Online (Sandbox Code Playgroud)

稍后我允许用户按一个按钮突出显示结果设置为"失败"的节点:

foreach(TreeNode node in treeView.Nodes)
{
if (node.Name.ToString() == "fail") node.BackColor = Color.Red;
}
Run Code Online (Sandbox Code Playgroud)

在此之后,树视图中的最后一个节点将被隐藏!

FIX 我使用了BeginUpdate()和EndUpdate()方法,问题就消失了!

Pel*_*dao 5

您应该在添加节点之前和之后使用SuspendLayout()和ResumeLayout().这将解决问题.

您可能还希望在ResumeLayout()之后的SuspendLayout()和EndUpdate()之前使用BeginUpdate().

编辑:这是.Net 2.0中的已知问题.禁用视觉样式会有所帮助.如果您不想禁用视觉样式,可以在树的末尾添加一个空节点(当可见树视图控件中有多个适合时).请参阅MS上的问题:https://connect.microsoft.com/VisualStudio/feedback/details/94021/treeview-does-not-display-the-last-node

  • 幸运的是,问题现在已经解决了,我必须在填充和更改节点颜色之前和之后使用 BeginUpdate 和 EndUpdate 方法! (2认同)