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()方法,问题消失了!!!
2条答案
按热度按时间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
flvlnr442#
我发现在填充树视图以及对其节点进行任何更改之前和之后,必须使用
treeView.BeginUpdate()
和treeView.EndUpdate()
方法。