我有一个System.Windows.Forms.TreeView
停靠在面板内。我正在设置以编程方式选择的节点。我将使用什么方法或属性让树视图将所选内容滚动到视图中?
Brad
问问题
21071 次
5 回答
41
node.EnsureVisible();
例如:
if(treeView.SelectedNode != null) treeView.SelectedNode.EnsureVisible();
(见MSDN)
于 2009-01-19T15:19:05.537 回答
1
我对此也有疑问,并发现 treeview.ExpandAll() 忽略了 EnsureVisible() 效果并避免滚动到节点位置。
如果您想要一个完整的扩展树并在您选择的节点上滚动,只需在 ExpandAll() 之后调用 EnsureVisible()。
于 2016-03-22T21:41:07.210 回答
1
要确保所选项目的可见性:
private void EnsureItemVisible()
{
if(treeView1.SelectedNode == null)
{
return;
}
for (int i = treeView1.SelectedNode.Index + treeView1.VisibleCount / 2; i >= 0; i--)
{
if (treeView1.Nodes.Count > i && treeView1.Nodes[i] != null)
{
treeView1.Nodes[i].EnsureVisible();
break;
}
}
for (int i = treeView1.SelectedNode.Index - treeView1.VisibleCount / 2; i < treeView1.Nodes.Count; i++)
{
if (i >= 0 && treeView1.Nodes[i] != null)
{
treeView1.Nodes[i].EnsureVisible();
break;
}
}
}
处理 TreeView 选择已更改:
private void TreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
EnsureItemVisible();
}
于 2020-04-04T19:08:34.983 回答
0
node.EnsureVisible()
对于只有一层节点的树,我遇到了一些问题。
要解决此问题,请使用BindingIndex
标识选定的节点。然后选定的节点将在视图中滚动。
该示例显示myTable
了一个 LINQ 查询。
node.BindingIndex = Convert.ToInt32(mytable.Id);
我希望这对你们中的一些人有所帮助。
于 2011-11-26T09:53:36.253 回答
0
我发现可靠工作的是:
- 展开所需节点
- 通过树的最后一个节点上的 EnsureVisible() 强制滚动到 END
- 通过该节点上的 EnsureVisible() 滚动回所需节点
这导致所需的节点和展开的子节点被放置在树视图显示区域的顶部。
TVFolders.BeginUpdate();
TVFolders.Nodes.Clear();
TreeNode tn = new TreeNode()
{
Text = RootFolderPath,
Name = RootFolderPath
};
TVFolders.Nodes.Add(tn);
// load the treeview (also tracks the last node added to the tree as lastNode)
PopulateTreeView(TVFolders.Nodes[0], RootFolderPath, 6, true);
// if user/caller has specified a start path, select and expand it
if (_SelectedPath != null)
{
// find the node corresponding to the requested path
TreeNode[] tns = TVFolders.Nodes.Find(_SelectedPath, true);
// assumes first return is the "best" one
if (tns.Length > 0)
{
// select the requested node
TVFolders.SelectedNode = tns[0];
// expand to show children
TVFolders.SelectedNode.Expand();
// scroll to the last node on the tree (may push our node off top)
if (lastNode != null)
{
lastNode.EnsureVisible();
}
// scroll to our node, which will now be at the top of the display area
TVFolders.SelectedNode.EnsureVisible();
}
}
TVFolders.Visible = true;
TVFolders.EndUpdate();
于 2020-09-30T18:19:27.140 回答