问题描述
//删除节点按钮privatevoidbutton3_Click(objectsender,EventArgse){try{TreeNodeactiveNode=treeView1.SelectedNode;if(activeNode==null){return;}#region删除当前选择的节点XmlNodexmlNode=activeNode.TagasXmlNode;XmlNodeparentNode=xmlNode.ParentNode;if(parentNode==null){MessageBox.Show("父节点为空,不能删除当前节点","不能为空");return;}parentNode.RemoveChild(xmlNode);treeView1.SelectedNode.Remove();#endregion}catch(Exceptionex){MessageBox.Show(ex.Message);}}
运行完XmlNodexmlNode=activeNode.TagasXmlNode;这一行后xmlNode中的值始终是NULL,然后就报错了
解决方案
解决方案二:
privatevoidtreeView1_AfterSelect(objectsender,TreeViewEventArgse){try{TreeNodeactiveNode=treeView1.SelectedNode;stringpattth="//"+activeNode.Text;XmlNodexxNode=document.SelectSingleNode(pattth);foreach(XmlNodenodeinxxNode.ChildNodes){switch(node.Name){case"名称":tbName.Text=node.InnerText;break;case"等级":tbValue.Text=node.InnerText;break;case"类型":tbType.Text=node.InnerText;break;default:break;}}}catch(Exceptionex){}}
解决方案三:
activeNode是null,调试一下不就知道了?
解决方案四:
XmlNodexmlNode=activeNode.TagasXmlNode;这一句应该通过你的变量document来取得,类似于XmlNodexmlNode=document.SelectSingleNode("//"+activeNode.Text);不过你要设法保证treeView跟xml的被删除层级与节点的对应,否则可能会误删同名其他节点。