C# treeView 获取被选中节点问题

huagong_adu 2009-11-05 02:09:03
我在做个项目,用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; //下一个被选中的章节节点
}
...全文
3108 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 2009-11-05
  • 打赏
  • 举报
回复
遍历。。。。。。
h_w_king 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huagong_adu 的回复:]
我现在是想在勾选完所有的章节知识点之后遍历所有被勾选的 章节节点 和 知识点节点 的Text,不是响应每次勾选变化的结果,怎样才能得到被选中的节点,treeView里面有这个属性或方法吗,我找到的this.treeViewChpKnlg.SelectedNode不知道是不是,用起来好像又不太对。
[/Quote]
this.treeViewChpKnlg.SelectedNode肯定不是,用遍历的方法。


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);
huagong_adu 2009-11-05
  • 打赏
  • 举报
回复
我现在是想在勾选完所有的章节知识点之后遍历所有被勾选的 章节节点 和 知识点节点 的Text,不是响应每次勾选变化的结果,怎样才能得到被选中的节点,treeView里面有这个属性或方法吗,我找到的this.treeViewChpKnlg.SelectedNode不知道是不是,用起来好像又不太对。
ztenv 2009-11-05
  • 打赏
  • 举报
回复
楼上正解,SelectedNode是当前获取焦点的结点而非TreeNode.Checked=true时的结点。。。。。。
h_w_king 2009-11-05
  • 打赏
  • 举报
回复
或者通过遍历,得到所有勾选的节点.
h_w_king 2009-11-05
  • 打赏
  • 举报
回复
selectNode表示当前选中的节点,和勾选了某个节点关系。可以用:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if(e.Node.Checked)
MessageBox.Show(e.Node.Text);
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧