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

时间:2011-12-02 11:11:04

标签: c# winforms treeview controls scrollbar

我遇到来自TreeView控件的奇怪行为。

enter image description here

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

即使按下向下翻页键或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)

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

我发现在填充树视图之前和之后我必须使用treeView.BeginUpdate()treeView.EndUpdate()方法,并对其节点进行任何更改。