我在做个项目,用treeView表示每个章节的知识点,现在要得到被选中节点的Text,我的树最多只有两层(父节点是章节,子节点是该章节的知识点),有两个问题。 一、我用下面代码检查这棵树有没有选中某个章节,没有的话则提示信息,但调试的时候我勾选了某个章节,但得到的this.treeViewChpKnlg.SelectedNode有时候还是null,不知道为什么?怎样才能得到所有被选中的根节点? if (null == this.treeViewChpKnlg.SelectedNode) //this.treeViewChpKnlg是一个treeView
{
MessageBox.Show("请选择试题所属的章节知识点!");
return;
}
二、有时候有些章节的节点被选到了,却不在this.treeViewChpKnlg.SelectedNode里面,为什么?如下的代码,有时候我勾选了第一章和第二章,在this.treeViewChpKnlg.SelectedNode里面只有第二章的,到底this.treeViewChpKnlg.SelectedNode是指被选择的节点的集合还是第一个被选中的节点? TreeNode selectedFatherNode = this.treeViewChpKnlg.SelectedNode; //获得被选中的根节点
while (selectedFatherNode != null)
{
TreeNode childNode = null; //根节点的被选中的子节点 childNode = selectedFatherNode.FirstNode;
while (childNode != null) //找该节点的所有被选择的子节点
{
if (childNode.Checked)
{
//处理数据
}
childNode = childNode.NextNode;
}
selectedFatherNode = selectedFatherNode.NextNode; //下一个被选中的章节节点
}
{
MessageBox.Show("请选择试题所属的章节知识点!");
return;
}
二、有时候有些章节的节点被选到了,却不在this.treeViewChpKnlg.SelectedNode里面,为什么?如下的代码,有时候我勾选了第一章和第二章,在this.treeViewChpKnlg.SelectedNode里面只有第二章的,到底this.treeViewChpKnlg.SelectedNode是指被选择的节点的集合还是第一个被选中的节点? TreeNode selectedFatherNode = this.treeViewChpKnlg.SelectedNode; //获得被选中的根节点
while (selectedFatherNode != null)
{
TreeNode childNode = null; //根节点的被选中的子节点 childNode = selectedFatherNode.FirstNode;
while (childNode != null) //找该节点的所有被选择的子节点
{
if (childNode.Checked)
{
//处理数据
}
childNode = childNode.NextNode;
}
selectedFatherNode = selectedFatherNode.NextNode; //下一个被选中的章节节点
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if(e.Node.Checked)
MessageBox.Show(e.Node.Text);
}
private void getCheckedNode(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
if (node.Checked)
//处理该节点.
if (node.Nodes.Count > 0)
getCheckedNode(node.Nodes);
}
}调用: getCheckedNode(this.treeViewChpKnlg.Nodes);