删除treeView中的子节点

时间:2013-07-27 16:16:30

标签: c# visual-studio-2010 treeview

我的代码是:

private void removeToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (treeView1.SelectedNode != null)
    {
         if (treeView1.SelectedNode.Parent == null) treeView1.SelectedNode.Remove();
         else if (treeView1.SelectedNode.Parent.Nodes.Count == 1) treeView1.SelectedNode.Parent.Remove();
         else treeView1.SelectedNode.Remove();
    }
     XDocument doc = XDocument.Load("test.xml");
     if (treeView1.SelectedNode.Parent != null)
     {
         var xElement = (from q in doc.Elements("dogs").Elements("dog")
                        where q.Attribute("id").Value == treeView1.SelectedNode.Tag.ToString()
                        select q);
            foreach (var a in xElement)
                a.Remove();
            doc.Save("test.xml");
}

我想在我的文件中搜索id值,如果程序找到它,它会将它与所选节点的标记进行比较,如果找到它,它将删除该节点。每当我尝试删除任何节点时,都会出现错误NullReferenceException was unhandled

1 个答案:

答案 0 :(得分:3)

致电时:

treeView1.SelectedNode.Remove();

这会将treeView1.SelectedNode设置为null或将SelectedNode设置为已删除节点的父节点或下一个可用节点。

此代码也会将您删除的节点的父节点设置为null。这两种情况可能是您例外的根本原因。我建议只需设置一个临时变量来指向要删除的节点:

TreeNode node = treeView1.SelectedNode;
treeView1.SelectedNode.Remove();

然后只需将您的代码更改为:

TreeNode node = treeView1.SelectedNode;
if (treeView1.SelectedNode != null)
{
    if (treeView1.SelectedNode.Parent == null) 
        treeView1.SelectedNode.Remove();
    else if (treeView1.SelectedNode.Parent.Nodes.Count == 1) 
        treeView1.SelectedNode.Parent.Remove();
    else 
        treeView1.SelectedNode.Remove();
}

XDocument doc = XDocument.Load("test.xml");

var xElement = (from q in doc.Elements("dogs").Elements("dog")
                where q.Attribute("id").Value == node.Tag.ToString()
                select q);
foreach (var a in xElement)
    a.Remove();
doc.Save("test.xml");