从选中的节点向上遍历父节点,如果父节点不是treeView.TopNode就记录父节点的所以,或者对他做处理!获取父节点的所以用:trvItem.SelectedNode.Parent.Index

解决方案 »

  1.   

    如果你当前节点为nodeprivate GetParent(node)
    {
    if(node.parent!=null)
    {
    node=node.parent;
    //添加你的想要得到结果的操作
    .
    .
    .
    GetParent(node);
    }
    }
      

  2.   

    对,在使用前要判断
    treeView1.SelectedNode.Parent是否为null.
      

  3.   

    再请教一个问题如何实现treeview中选中(或取消选中)某个节点的所有子节点后,
    让此节点自动的选中(或取消选中)??高手帮帮忙! 急!!!!!!!
      

  4.   

    看看,在webform中的情况(在winform中我是用贴图的方法解决的)
    写的不好,希望高手改进,但是,结果肯定是正确的
    #region 判断节点选中情况
    private void ChkNode(TreeNode node)
    {
    //如果CheckBox为真
    if(node.Checked==true)
    {
    //设置子节点的CheckBox为真
    if(node.Nodes.Count>0)
    {
    foreach(TreeNode nodeChild in node.Nodes)
    {
    nodeChild.Checked=true; //递归遍历
    ChkNode(nodeChild);
    }
    }
    //如果存在的父节点是大于树的第一层,设置父节点的CheckBox为真
    if(IsMoreThanFirstLayer(GetNodeIndex(node.GetNodeIndex())))
    {
    if((node=tvwPower.GetNodeFromIndex(GetNodeIndex(node.GetNodeIndex())))!=null)
    {
    //调用函数
    ChkParentT(node);
    }
    }
    }
    else if(node.Checked==false)
    {
    //设置子节点的CheckBox为假
    if(node.Nodes.Count>0)
    {
    foreach(TreeNode nodeChild in node.Nodes)
    {
    nodeChild.Checked=false; //递归遍历
    ChkNode(nodeChild);
    }
    }
    //如果存在的父节点是大于树的第一层,设置父节点的CheckBox为假
    if(IsMoreThanFirstLayer(GetNodeIndex(node.GetNodeIndex())))
    {
    if((node=tvwPower.GetNodeFromIndex(GetNodeIndex(node.GetNodeIndex())))!=null)
    {
    //调用函数
    ChkParentF(node);
    }
    }
    }
    } #endregion #region 判断父节点中的选中CheckBox
    private void ChkParentT(TreeNode node)
    {
    node.Checked=true;
    //如果存在的父节点是大于树的第一层
    if(IsMoreThanFirstLayer(GetNodeIndex(node.GetNodeIndex())))
    {
    if((node=tvwPower.GetNodeFromIndex(GetNodeIndex(node.GetNodeIndex())))!=null)
    {
    //当此节点存在父节点时,递归遍历
    ChkParentT(node);
    }
    }
    }
    #endregion #region 判断父节点中的不选中CheckBox
    private void ChkParentF(TreeNode node)
    {
    //计数器
    int j=0;
    foreach(TreeNode nodeChild in node.Nodes)
    {
    //如果子节点的CheckBox为假,计数器加一
    if(nodeChild.Checked==false)
    {
    j++;
    }
    if(j==node.Nodes.Count)
    {
    node.Checked=false;
    }
    }
    //如果存在的父节点是大于树的第一层,则,递归遍历
    if(IsMoreThanFirstLayer(GetNodeIndex(node.GetNodeIndex())))
    {
    if((node=tvwPower.GetNodeFromIndex(GetNodeIndex(node.GetNodeIndex())))!=null)
    {
    ChkParentF(node);
    }
    }
    }
    #endregion #region 得到当前节点的父节点的索引
    /// <summary>
    /// 得到当前节点的父节点的索引
    /// </summary>
    /// <param name="strIndex">当前节点的索引</param>
    /// <returns>父节点索引</returns>
    private string GetNodeIndex(string strIndex)
    {
    int i=strIndex.LastIndexOf(".");
    string strReturn=strIndex.Substring(0,i);
    return strReturn;
    }
    #endregion #region 判断当前节点是不是在大于树的第一层(即第二、三层......)
    /// <summary>
    /// 判断当前节点是不是在大于树的第一层(即第二、三层......)
    /// </summary>
    /// <param name="strIndex">当前节点的索引</param>
    /// <returns></returns>
    private bool IsMoreThanFirstLayer(string strIndex)
    {
    int iCount=0;
    int iTemp=0;
    int i=0;
    foreach(char chr in strIndex)
    {
    if(chr=='.')
    {
    iCount=iCount+1;
    if(iCount==1)
    {
    iTemp=i;
    }
    }
    i++;
    }
    if(iTemp>0)
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    #endregion
      

  5.   

    另外我想请教一下  Hexudong1979(何须懂何必懂) 
    你说的:在winform中我是用贴图的方法解决的
    如何使用??