前提:在父节点下添加 子节点 名称默认为:新建文件夹
然后节点名称 处于编辑状态
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;
}
}
然后节点名称 处于编辑状态
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;
}
}
{
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),有没有编辑和它之前的值是不是 "新建文件夹" 没有任何关系
用断点跟踪了一下,当执行完判断后 直接跳到else 没有进行循环
{
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;
}
}
}
你可以仔细看一下,我的观点和 #2 是一样的,第一个 if 和后面的没有关系。因为如果第一个 if 执行的话,后面不可能执行,根本不用 else。
而 else if 和 else 实际上是一个逻辑对。