我遇到来自TreeView控件的奇怪行为。
如您所见,树视图中的最后一个节点以某种方式隐藏(虽然我可以使用键盘向上/向下箭头键选择它)并且滚动条不会扩展到它。在图片中,您看到的蓝线是隐藏的选定节点,但幸运的是仍然可以看到一些亮点!
即使按下向下翻页键或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()方法,问题就消失了!!!
答案 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()
方法,并对其节点进行任何更改。