如何删除未选择的 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/