1

我在 * winform应用程序 *tion上有一个树视图控件。在这里,我想要做的是: 折叠他级别的所有其他节点并仅消耗选定的节点。例如,假设场景: - 所有科目 + 计算机科学 + 数学

根节点是“所有科目”,两个子节点1)计算机科学和2)数学。这两个子节点还有更多的子节点

当我选择计算机科学时,数学节点应该被折叠,计算机科学节点应该被展开。 如何实现?欢迎提出实现这一目标的建议。

4

3 回答 3

1

编辑(感谢Hans Passant) HandelAfterSelectBeforeSelect事件,并折叠其他兄弟节点。像这样:

private void TreeViewAfterSelect(object sender, TreeViewCancelEventArgs e)
{
    foreach (TreeNode node in e.Node.Parent.Nodes)
    {
        if(node != e.Node)
            node.Collapse();
    }
}
于 2012-07-10T05:16:43.840 回答
0

检查树视图节点的方法Collapse()CollapseAll()Expand()ExpandAll()

treeView1.SelectedNode.Collapse();

阅读MSDN 上的CollapseCollapseAllExpand

于 2012-07-10T05:07:28.767 回答
0

基于 Ria 的解决方案,我们可以使用递归折叠兄弟节点和每个兄弟节点的子节点。以下适用于 WPF:

    private void CollapseAll(ItemsControl Items, bool Collapse)
    {
        foreach (object obj in Items.Items)
        {
            ItemsControl ChildControl = Items.ItemContainerGenerator.ContainerFromItem(obj) as ItemsControl;
            if (ChildControl != null)
            {
                CollapseAll(ChildControl, Collapse);
            }
            TreeViewItem Item = ChildControl as TreeViewItem;
            if (Item != null) Item.IsExpanded = false;
        }
    }

    private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        TreeViewItem CurrentItem = (TreeViewItem)treeView1.SelectedItem;
        if (CurrentItem == null) return;
        if (!(CurrentItem.Parent is TreeViewItem)) return;
        TreeViewItem Parent = (TreeViewItem)CurrentItem.Parent;
        if (Parent == null) return;
        foreach (TreeViewItem TreeViewItem in Parent.Items)
        {
            if (TreeViewItem != CurrentItem)
            {
                CollapseAll(TreeViewItem, true);
                TreeViewItem.IsExpanded = false;
            }
        }
    }
}
于 2015-12-04T15:39:04.957 回答