C# TreeView节点编辑的问题

npu123456 2014-07-22 07:54:42
TreeView节点编辑的时候,要判断修改后的值是否跟选中节点的值重复。如果重复,则恢复为原来的值。我的代码如下,但是在值重复之后没有变回原来的值。求大神指点。是不是在执行AfterLabelEdit之后又执行了其它事件?并且我发现在AfterLabelEdit之后Viewresult.SelectedNode也改变了,变为下面的一个节点。
private void Viewresult_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)//此事件未被调用//2014.7.22修改
{
int index = 0;
index = Viewresult.SelectedNode.Index;
Dictionary<string, string[]> dt = new Dictionary<string, string[]>();
dt.Add("AIRSYS2",new string[2] {"AIRSYS2_FILE_INFORMATION","FILE_NAME"});
dt.Add("AIRSYS3", new string[2] { "AIRSYS3_FILE_INFORMATION", "FILE_NAME" });
dt.Add("AIRSYS4", new string[2] { "AIRSYS4_FILE_INFORMATION", "FILE_NAME" });
dt.Add("FLOWNET", new string[2] {"NETWORK_DETAIL","NETWORK_NAME"});
//string oldValue = e.Node.Text;
//保证同一级下不重名
List<string> l = new List<string>();
l.Clear();
foreach (TreeNode tn in Viewresult.SelectedNode.Parent.Nodes)
{
if (!l.Contains(tn.Text))
{
l.Add(tn.Text);
}
}
string newValue = e.Label;
if (e.Label != null)
{
if (newValue.Length != 0)
{
string command = "";
string solverName=GetRootNodeSolver (Viewresult.SelectedNode);
if (dt.ContainsKey(solverName))//
{
if (!l.Contains(newValue))
{
command = "USE " + FrmLogin.databaseName + ";UPDATE "+dt[solverName][0]+" SET "+dt[solverName][1]+"='" + newValue + "' WHERE ID='" + Viewresult.SelectedNode.Tag.ToString() + "' ;";
MysqlOperation.RunCommand(command, FrmLogin.serverIP); ;
UserAdmin.Log.OperationLog.AddOperationLog(GUID.GenerateGUID.ReturnGUID(), FrmLogin.loginUserDetail.UserID, "7", "重命名网络:由" + oldNodeValue + "到" + newValue, "", Viewresult.SelectedNode.Tag.ToString(), UserAdmin.Log.OperationLog.GetLocalIP());//存储日志,存储重命名过程,目标是网络ID,2014.5.24
//Viewresult.SelectedNode.EndEdit(true);
//Viewresult.LabelEdit = false;
}
else
{
if (newValue != oldNodeValue)
{
MessageBox.Show("命名不能与兄弟节点重名!");
}
//Viewresult.SelectedNode.EndEdit(true);
Viewresult.SelectedNode.Text = oldNodeValue;
//Viewresult.LabelEdit = false;
}
}

}
else
{
Viewresult.SelectedNode.EndEdit(true);
MessageBox.Show("命名长度不能为0!");
//Viewresult.SelectedNode.Text = oldNodeValue;
//Viewresult.LabelEdit = false;
}
}

string text = oldNodeValue;
string tag = Viewresult.SelectedNode.Tag.ToString();
foreach (Form form in MdiChildren)
{
if (form.Text == text && form.Tag.ToString() == tag)
{
form.Text = newValue;
}
}
}
...全文
291 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
npu123456 2014-07-26
  • 打赏
  • 举报
回复
感谢楼上的回答,已经使用另一种方法。不过5楼的方法看起来还行。
Mo_DeNo 2014-07-22
  • 打赏
  • 举报
回复
我做的时候是判断如果重复,就在AfterEdit事件里把e.CancelEdit=true就行了,直接取消编辑,就会变成修改之前的值。
npu123456 2014-07-22
  • 打赏
  • 举报
回复
意思就是重命名的时候,判断如果同一级节点已经有新名称,则节点的text改为原来的值。如果同一节点没有新名称,则修改为新名称。
涛锅 2014-07-22
  • 打赏
  • 举报
回复
感觉你贴个界面图直观一点
npu123456 2014-07-22
  • 打赏
  • 举报
回复
求大神指点!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧