winforms TreeView垂直滚动条未展开到最后一个节点,最后一个节点是否隐藏?

mm9b1k5b  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(164)

TreeView控件出现异常行为。

正如你所看到的,树视图中的最后一个节点不知何故被隐藏了(尽管我可以用键盘上/下箭头键选择它),滚动条也没有扩展到它。在图片中,你看到的蓝线是被隐藏的选定节点,但幸运的是,仍然可以看到一些高亮显示!
即使我按下pagedown或END键,我也无法选择最后一个节点!
我试图改变树视图控件的高度以匹配节点的高度,但仍然没有成功!我的树视图在一个“面板”中。可能是问题所在吗?

UPDATE我没有做什么特别的事情。我只是在List〈〉上用一个循环填充(使用suspend和resume before和after循环),然后树视图将正常填充。

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;
}

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

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

s1ag04yj

s1ag04yj1#

你应该在添加节点之前和之后使用SuspendLayout()和ResumeLayout(),这样可以解决这个问题。
您可能还希望在SuspendLayout()之前使用BeginUpdate(),在ResumeLayout()之后使用EndUpdate()。
编辑:这是.Net 2.0中的一个已知问题。禁用视觉样式将有所帮助。如果您不想禁用视觉样式,您可以在树的末尾添加一个空节点(当可见的树视图控件无法容纳时)。请参阅MS:https://connect.microsoft.com/VisualStudio/feedback/details/94021/treeview-does-not-display-the-last-node

flvlnr44

flvlnr442#

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

相关问题