我必须加载一个Xml文档并在winform的树视图中显示。这是一段代码。请告诉我们错误。
private void AddingNodesToTree(ref XmlNode xnode, ref TreeNode tnode)
{
TreeNode subNode = treeNodes.Add(xnode.Name);
subNode.Tag = xnode;
foreach (XmlNode subElement in xnode.ChildNodes)
{
AddingNodesToTree(subNode.Nodes, subElement);
}
}
之后我在该树中选择节点以显示所选节点的属性:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
XmlNode xNode = e.Node.Tag as XmlNode;
if (xNode != null)
{
foreach (XmlNode subNode in xNode.ChildNodes)
{
listBox1.Items.Add(subNode.Name);
}
}
}
此代码中可能出现的错误是什么?请纠正。
答案 0 :(得分:1)
一方面,在您对AddingNodesToTree
的递归调用中,您没有在参数上指定ref
。尽管如此,他们还不清楚为什么他们会参与这些参数。您对递归调用的参数似乎也是错误的类型。是实际上是一个递归调用,还是你调用了一个你没有显示的重载?
第二个明显的问题是您没有在tnode
中使用AddingNodesToTree
参数。应该这一行:
TreeNode subNode = treeNodes.Add(xnode.Name);
实际上就是这样:
TreeNode subNode = tnode.Add(xnode.Name);
最后,你还没有告诉我们实际上有什么不对。您的代码是否无法编译,或者无法按预期工作?如果是前者,编译器错误是什么?如果是后者,请详细说明实际行为与预期行为的对比。
答案 1 :(得分:0)
我猜你有编译错误
private void AddingNodesToTree(ref XmlNode xnode, ref TreeNode tnode)
{
TreeNode subNode = treeNodes.Add(xnode.Name);
subNode.Tag = xnode;
foreach (XmlNode subElement in xnode.ChildNodes)
{
// you call it with the wrong params?
AddingNodesToTree(subNode.Nodes, subElement);
//should be
AddingNodesToTree(ref subElement, ref subNode);
}
}
答案 2 :(得分:0)
我的猜测:您希望显示节点的属性,因此迭代xNode.Attributes而不是xNode.ChildNodes。 (可选)在添加属性之前清除列表视图。