我在做个项目,用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;          //下一个被选中的章节节点
                }

解决方案 »

  1.   

    selectNode表示当前选中的节点,和勾选了某个节点关系。可以用:
      private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                if(e.Node.Checked)
                    MessageBox.Show(e.Node.Text);
            }
      

  2.   

    楼上正解,SelectedNode是当前获取焦点的结点而非TreeNode.Checked=true时的结点
      

  3.   

    我现在是想在勾选完所有的章节知识点之后遍历所有被勾选的 章节节点 和 知识点节点 的Text,不是响应每次勾选变化的结果,怎样才能得到被选中的节点,treeView里面有这个属性或方法吗,我找到的this.treeViewChpKnlg.SelectedNode不知道是不是,用起来好像又不太对。
      

  4.   

    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);