c# - 如何删除未选择的 TreeView 节点

标签 c# treeview

如何删除未选择的 TreeView 节点。即使我循环两次,在所有未选择的树节点被删除之前,仍然需要点击按钮三次。 这是什么:

    private void buttonShowSelected_Click(object sender, EventArgs e)
            { 
                for (int i = 0; i < treeViewFilter.Nodes.Count; i++)
                {
                    DeleteUnselectedNodes();               
                }
            }


 private void DeleteUnselectedNodes()
 {
     for (int i = 0; i < treeViewFilter.Nodes.Count; i++)
     {
         TreeNode aNode = treeViewFilter.Nodes[i];
         treeViewFilter.SelectedNode = aNode.FirstNode;

         if (!aNode.Checked)
         {
             treeViewFilter.Nodes.Remove(aNode);
         }
     }
 }

最佳答案

您的循环不检查任何子节点。递归函数或堆栈可以工作:

var nodes = new Stack<TreeNode>(treeViewFilter.Nodes.Cast<TreeNode>());
while (nodes.Count > 0) {
  var n = nodes.Pop();
  if (!n.Checked) {
    if (n.Parent != null) {
      n.Parent.Nodes.Remove(n);
    } else {
      treeViewFilter.Nodes.Remove(n);
    }
  } else {
    foreach (TreeNode tn in n.Nodes) {
      nodes.Push(tn);
    }
  }
}

关于c# - 如何删除未选择的 TreeView 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315353/

相关文章:

c# - System.NullReferenceException 创建 viewModel

c# - task.Status == RanToCompletion 和 task.IsCompleted 的比较

c# - 如何用新创建的节点替换 TreeView 的选定节点

c#-3.0 - 如何从 TreeNode.FullPath 数据获取实际的树节点?

c# - PM 给我 ERROR : Type is not resolved for member. .on any migration command

C# 从 StringBuilder 解析 Xml

c# - 绑定(bind)源刷新

c# - 如何使用 ICollectionView 过滤 wpf TreeView 层次结构?

c# - WPF Treeview项目选择问题

c# - Treeview IsExpanded无法启动