【问题标题】:TreeView vertical scrollbar does not expand to the last node, last node is hidden?TreeView垂直滚动条没有展开到最后一个节点,最后一个节点被隐藏了?
【发布时间】:2011-12-02 11:11:04
【问题描述】:

我遇到了来自 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)

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

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

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

修复 我使用了 BeginUpdate() 和 EndUpdate() 方法,问题就解决了!!!

【问题讨论】:

  • 你能展示设计器文件代码如何初始化控件吗?至少我们可以重现这种行为并检查问题所在。
  • @Reniuz 请检查更新的问题!
  • 最好将您的解决方案发布为已接受的答案,而不是在问题中。

标签: c# winforms treeview controls scrollbar


【解决方案1】:

您应该在添加节点之前和之后使用 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

【讨论】:

  • @Sean87 尝试禁用视觉样式。
  • 嗯,我不知道谁对你的答案投了反对票,但如果他能添加评论或至少回答会更好!来吧,人们停止投票和逃跑。
  • 不...我认为这是一个非常严重的案例!
  • 嗯,我用的是.Net 4,是不是也一样?!
  • 幸运的是问题现在解决了,我不得不在填充和更改节点颜色之前和之后使用 BeginUpdate 和 EndUpdate 方法!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多