1 全部删除
TreeView 是根据数据库的内容动态创建的2层 TreeView。程序运行过程中,可能会对数据库的内容进行修改,因此想更新 TreeView ,暂时想法是,把所有节点删除,然后重新创建。 但如何全部删除?只有遍历所有的节点然后删除么?2 删除父节点同时删除其子节点
问题: mynode.Remove() ; 为什么加上这句话就会出错,有时又不会出错????不加的话,遍历就没问题,每个节点都出现一次。奇怪!代码如下:
//判断选定的节点是否存在下一级节点
if ( mySelectedNode.Nodes.Count == 0 )
{
}
else
{
  if (mySelectedNode.Parent == null)
  {
    foreach(TreeNode mynode in mySelectedNode.Nodes)
    { 
      Console.WriteLine("未被删除的子节点 {0} ",mynode.Text);
/*
 * 这里有问题,同一子节点可能会出现多次,第二次 Remove 的时候,就会出错。如果没
 * 有这个 Remove ,就不会出现同一子节点出现多次的现象!
 */
      mynode.Remove() ;//删除子节点
    }
  }
  //MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}mySelectedNode.Remove();//删除父节点
mySelectedNode=null;
另有2个问题,各位帮忙看看。TreeView 中,如何使右键单击和左键单击一样,单击空白处不选择任何一个node
http://community.csdn.net/Expert/topic/4975/4975490.xml?temp=.2613794
C# 中 Recordset 中的 RecordCount 为什么总是返回 -1 
http://community.csdn.net/Expert/topic/4985/4985677.xml?temp=.4153101

解决方案 »

  1.   

    foreach(TreeNode mynode in mySelectedNode.Nodes)
    {
    Console.WriteLine("未被删除的子节点 {0} ",mynode.Text);
    /*
    * 这里有问题,同一子节点可能会出现多次,第二次 Remove 的时候,就会出错。如果没
    * 有这个 Remove ,就不会出现同一子节点出现多次的现象!
    */
    mynode.Remove() ;//删除子节点
    }
    -------
    用foreach的时候,删除之后,索引值已改变,所以出错
    建议用递归
      

  2.   


    问题2还没解决。如果删除父节点的时候不删除子节点,会有什么后果?另有个问题,各位帮忙看看。TreeView 中,如何使右键单击和左键单击一样,单击空白处不选择任何一个node
    http://community.csdn.net/Expert/topic/4975/4975490.xml?temp=.2613794
      

  3.   

    to 2不是删除的问题,而是不能再foreach中去做,你可以通过for来做,参看
    http://blog.csdn.net/Knight94/archive/2006/08/20/1100236.aspx提供的删除方法。
      

  4.   

    哈哈,对啊。用 for 可以解决问题。谢 Knight94(愚翁)。另 下面这个问题您老解决过没?TreeView 中,如何使右键单击和左键单击一样,单击空白处不选择任何一个node
    http://community.csdn.net/Expert/topic/4975/4975490.xml?temp=.2613794
      

  5.   

    新方法如下,测试可用。//删除 parent 下所有的子节点
    private void delSubNodes(TreeNode parent )
    {
        if (parent==null)
        {
            return;
        }
        //判断选定的节点是否存在下一级节点
        if ( parent.Nodes.Count == 0 )
        {
        }
        else
        {
            for( int i = parent.Nodes.Count - 1; i >=0; i-- )
           {
                Console.WriteLine(" 删除: {0}",parent.Nodes[i].Text);
                parent.Nodes.RemoveAt(i);
            }
        }
    }