#c# #winforms
#c# #winforms
Вопрос:
Как я могу свернуть все узлы, кроме выбранной в данный момент ветки?
Вот что у меня есть
private void treeview1_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode node = e.Node;
treeView1.CollapseAll();
while (node.Parent != null)
{
node.Expand();
node = node.Parent;
}
}
Корневой узел разрушается независимо. Если я расширяюсь, я вижу, что дочерний элемент иногда расширяется.
В идеальном мире, если я выбираю узел, он немедленно расширяется, и любой узел за пределами этой ветви сворачивается. С тем, как я пытаюсь это сделать сейчас, я не смог бы использовать e.Node.Развернуть(); в начале либо.
Ответ №1:
Если вам нужно развернуть только одну ветвь того же уровня, обработайте TreeView.AfterExpand
событие, чтобы свернуть соседние узлы:
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{
// If you need to exclude the root nodes, return if the e.Node.Parent == null.
var nodes = e.Node.Parent == null ? treeView1.Nodes : e.Node.Parent.Nodes;
if (nodes.Count > 1)
foreach (var tn in nodes
.Cast<TreeNode>()
.Where(n => n != e.Node amp;amp; n.IsExpanded))
tn.Collapse();
}
Чтобы автоматически развернуть узел (особенно, когда TreeView.ShowPlusMinus
свойство отключено), обработайте TreeView.AfterSelect
событие для расширения выбранного узла:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Nodes.Count > 0 amp;amp; !e.Node.IsExpanded) e.Node.Expand();
}
Комментарии:
1. Спасибо, это именно то, что я искал.