前提:在父节点下添加 子节点 名称默认为:新建文件夹
然后节点名称 处于编辑状态
  private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)//编辑后的事件
        {
            
            string str = e.Label;//获取当前编辑后的新文本
            
            string str1 = Convert.ToString(e.Node);//获取当前为编辑之前的节点文本(新建文件夹)
            if (str == "")//如果编辑节点后为空 则节点返回院来名称(新建文件夹)
            {
                e.Node.Text = "新建文件夹";
                MessageBox.Show("请输入目录名");
               e.Node.BeginEdit(); 
                return;
            }
           else if (str1 == "新建文件夹")//如果没有编辑则执行如下语句:可是这个部分在执行过程中总是跳过??
             {
                 e.Node.Text = "新建文件夹";
                 textBox_path.Text = GetPathname(treeView1.SelectedNode.Parent.FullPath) + '\\' + str1;
                
            }
            else
            {
                treeView1.LabelEdit = false;                textBox_path.Text = GetPathname(treeView1.SelectedNode.Parent.FullPath) + '\\' + str;  
             
            }
           
           
           
        }

解决方案 »

  1.   

    把else if中的else去掉,这个条件判断没必然关系。
      

  2.   

    先帮你理一下代码:private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)//编辑后的事件
    {
        string str = e.Label;//获取当前编辑后的新文本
        string str1 = Convert.ToString(e.Node);//获取当前为编辑之前的节点文本(新建文件夹)    if (str == "")//如果编辑节点后为空 则节点返回院来名称(新建文件夹)
        {
            e.Node.Text = "新建文件夹";
            MessageBox.Show("请输入目录名");
            e.Node.BeginEdit();
            return;
        }
        
        if (str1 == "新建文件夹")//如果没有编辑则执行如下语句:可是这个部分在执行过程中总是跳过??
        {
            e.Node.Text = "新建文件夹";
            textBox_path.Text = GetPathname(treeView1.SelectedNode.Parent.FullPath) + '\\' + str1;
        }
        else
        {
            treeView1.LabelEdit = false;
            textBox_path.Text = GetPathname(treeView1.SelectedNode.Parent.FullPath) + '\\' + str;
        }
    }
    然后我们看,当 str != "" 时,进行 if (str1 == "新建文件夹") 判断,根据你的说明:“如果没有编辑则执行如下语句”,那么判断条件应该改成 if (str == str1),有没有编辑和它之前的值是不是 "新建文件夹" 没有任何关系
      

  3.   

    我按照你的方法进行了修改,但是依然没有效果 
    用断点跟踪了一下,当执行完判断后 直接跳到else 没有进行循环
      

  4.   

    private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)//编辑后的事件
    {
        string str = e.Label;//获取当前编辑后的新文本
        string str1 = Convert.ToString(e.Node);//获取当前为编辑之前的节点文本(新建文件夹)    if (string.IsNullOrEmpty(str))//如果编辑节点后为空 则节点返回院来名称(新建文件夹)
        {
            e.Node.Text = "新建文件夹";
            MessageBox.Show("请输入目录名");
            e.Node.BeginEdit();
            return;
        }
        else
      {
        if (str1 == "新建文件夹")//如果没有编辑则执行如下语句:可是这个部分在执行过程中总是跳过??
        {
            e.Node.Text = "新建文件夹";
            textBox_path.Text = GetPathname(treeView1.SelectedNode.Parent.FullPath) + '\\' + str1;
        }
        else
        {
            treeView1.LabelEdit = false;
            textBox_path.Text = GetPathname(treeView1.SelectedNode.Parent.FullPath) + '\\' + str;
        }
      }
    }
      

  5.   


    你可以仔细看一下,我的观点和 #2 是一样的,第一个 if 和后面的没有关系。因为如果第一个 if 执行的话,后面不可能执行,根本不用 else。
    而 else if 和 else 实际上是一个逻辑对。