声明一个ArrayList
给你的树添加一个AfterSelect事件
判断节点是否选中
如果选中,放进ArrayList中
如果撤销选中,从ArrayList中remove掉

解决方案 »

  1.   

    不好意思
    是AfterSelect事件private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
    if(e.Node.Checked)
    {
    if(!arrayList.Contains(e.Node))
    {
    arrayList.Add(e.Node);
    }
    }
    else
    {
    if(arrayList.Contains(e.Node))
    {
    arrayList.Remove(e.Node);
    }
    }
    }
      

  2.   

    不遍历好像不行,我是这样做的
    /// <value>选中的接点</value>
    private  ArrayList _checkedlist = new ArrayList();
    public ArrayList CheckedList
    {  
    get
    {  
    _checkedlist.Clear();
    GetCheckedNode(this.Nodes);
    return _checkedlist;
    }
    }///<summary>获得选中的节点</summary>
    /// <param name="tnc">起始节点.</param>
    /// <returns>.</returns>
    private void GetCheckedNode(TreeNodeCollection tnc)
    {
    foreach(TreeNode tmpNd in tnc )
    {
    if ( tmpNd.CheckBox && tmpNd.Checked)
    {
    _checkedlist .Add(tmpNd);


    if(tmpNd.Nodes.Count!=0)
    {
    GetCheckedNode(tmpNd.Nodes);
    }
    }

    }
      

  3.   

    如果树深度不深,节点也不是很多,我觉得还是遍历一下
    比较方便,另外当check父节点的时候把它下面的所有子节点都check,
    去掉时要做反过程,向列表中加东西还是要遍历一下子树,去掉父点时也要
    遍历子树,不过使用arraylist的方法在树节点很多时可以提高速度,也是不错的
    方法