【问题标题】:How to ensure that the selected node's sub-treeview is visible?如何确保所选节点的子树视图可见?
【发布时间】:2016-05-15 13:45:42
【问题描述】:

我有一个扩展的树形视图。如果我键入第一个字符以快速访问某个节点,则所选节点显示在树视图框架的底部,但其自己的子树视图不可见。如何保证选中节点的整个子树视图可见?

现在:

|_a
|_[b]
=============treeview's frame bottom margin

预期结果:

|_a
|_[b]
  |_1
  |_2
  | |_k
  |_3
=============

【问题讨论】:

  • 我在显示整个树视图时已经使用了 ExpandAll。但是如何对选定节点的子节点使用 EnsureVisible?
  • 试试:yourTreeView.SelectedNode.Expand() 中的yourTreeView_AfterSelect 或者直接按右光标键。还有一个node.LastNode方法..

标签: c# treeview


【解决方案1】:

这应该始终保留所选节点的最后一个子节点:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    treeView1.SelectedNode.Expand();
    treeView1.SelectedNode.LastNode.EnsureVisible();
}

要找到最后一个孩子的最后一个孩子等,您可以编写一个 recursive LastChildNode 函数:

TreeNode LastChildNode(TreeNode node)
{
    if (node.Nodes.Count > 0) return LastChildNode(node.LastNode);
    else return node;
}

要使用它,您可以将AfterSelect 代码更改为:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    TreeNode lastChild = LastChildNode(treeView1.SelectedNode.LastNode);
    if (lastChild != null) lastChild.EnsureVisible();
}

【讨论】:

  • 感谢您的回复。我是初学者,如何准确使用 LastChildNode 函数以确保最后一个子节点可见?
  • 不幸的是程序崩溃了。这是错误:pastebin.com/aVnJabbK
  • 那么您需要添加一项或多项检查。请使用调试器找出哪个对象为空。可能是 Selectednode(当没有选择任何内容时)冷是 LastNode(如果没有子节点),可能是 lastChild(如果函数失败)..
  • 糟糕,函数出错了。已更正
  • 我复制了更新后的代码,但它仍然崩溃。代码应该获取所选节点上的最后一个子节点并确保它是可见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2014-12-19
相关资源
最近更新 更多