树行控件TreeView 在WinForm下 怎么实现重命名功能 本帖最后由 VRC289 于 2010-04-20 13:38:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 treeView1.LabelEdit = true;右击 treeView1.SelectNode.BeginEdit();失去焦点 保存 treeView1.SelectNode.Text; 用焦点移开事件就可以了AfterLabelEdit事件代码自已写 TreeView没有Node节点是去焦点的事件,所以必须用其他方法,这样: int nodeIndex = 0; bool nodeChanged = false; //右键点击,就进入修改状态 private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button == MouseButtons.Right) { e.Node.BeginEdit(); } } private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { nodeIndex = e.Node.Index; nodeChanged = true; e.Node.EndEdit(true ); } private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) { if (nodeChanged == true) { //在这里保存数据到数据库 MessageBox.Show(treeView1.Nodes[nodeIndex].Text); nodeChanged = false; } } 比较直接点的办法就是向数据库执行 update语句在更改前设定一个标识 bool isUpdate=fale;点修改 isUpdate=true;private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if(isUpdate) { try { //执行update } catch(Expection ex) { //message } finally { isUpdate=false } } } c# winform1.加载treeview每一个节点存储id 和name/text,并给treeview 节点加上右键菜单,里面要包含你的重命名 //程序给每个TreeNode 添加ContexMenuStrip 包含“重命名”,动作重命名如RenameTNode2.触发RenameTNode重命名事件,获得源事件对象 比如是"用户管理" 节点,记录下编号id3.事件结束 比如将“用户管理” 重命名了“会员管理” 更新后台表对应id的节点name private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Right) { this.treeView1.LabelEdit = true;//此处需加上 e.Node.BeginEdit(); } } string nodeTag = ""; bool nodeChanged = false; private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { nodeTag = e.Node.Name.ToString(); nodeChanged = true; e.Node.EndEdit(true); this.treeView1.LabelEdit = false;//此处需加上 } private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) { if (nodeChanged == true) { //在这里保存数据到数据库 MessageBox.Show(nodeTag); nodeChanged = false; } } private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) { if (nodeChanged == true) { //在这里保存数据到数据库 MessageBox.Show(nodeTag); nodeChanged = false; } }这个函数NodeMouseHover 是每次鼠标移动过就触发了吧 貌似这样不太好的 就是我没有修改 移过的时候也会触发这个时间的吧 许久没来了,给你个例子,注意MouseClick和AfterLabelEdit的使用,treeView1.LabelEdit = true;这句不可缺少:public Form1(){ InitializeComponent(); this.Load+=new EventHandler(Form1_Load); treeView1.MouseClick+=new MouseEventHandler(treeView1_MouseClick); treeView1.AfterLabelEdit+=new NodeLabelEditEventHandler(treeView1_AfterLabelEdit);}private void Form1_Load(object sender, EventArgs e){ for (int i = 0; i < 10; i++) { treeView1.Nodes.Add("tv" + i.ToString()); treeView1.Nodes[i].Nodes.Add("tvc"+i.ToString()); } treeView1.LabelEdit = true;//不可缺少}private void treeView1_MouseClick(object sender, MouseEventArgs e){ TreeView tv=(TreeView)sender;//获取treeview if (e.Button == MouseButtons.Right)//判断是否鼠标右键 { if (tv.SelectedNode != null)//判断是否存在选择节点 tv.SelectedNode.BeginEdit(); }}private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e){ string newTxt = e.Label;//获取新文本 //string id = e.Node.Text;//获取原来的文本 //进行你的更新操作} 求高手 谁能教我怎么让 一个窗体透明啊 ?? 本地好用的asp.net上传到网上不执行? 如何筛选出dataTable中的新增的行 写了一个Web Spider的程序,运行一段时间后CPU100%......找不到原因。 socket关闭时出错 asp.net word转pdf 急:在线等!子窗口如何不停的更新mdi主窗口的statusbar.text?? 求达人帮个忙 有没有人推荐个 类似于SpreadSheet的开源的表格控件啊? 请大神讲解如何将特殊的数据行转列后放在gridview中显示(数据库是oracle) 关于对象实例化的问题 关于一个简单 错误搞了很久没办法 关于url问题
treeView1.SelectNode.BeginEdit();
失去焦点
保存 treeView1.SelectNode.Text;
AfterLabelEdit事件
代码自已写
bool nodeChanged = false; //右键点击,就进入修改状态
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
e.Node.BeginEdit();
}
} private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
nodeIndex = e.Node.Index;
nodeChanged = true; e.Node.EndEdit(true );
} private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
if (nodeChanged == true)
{
//在这里保存数据到数据库
MessageBox.Show(treeView1.Nodes[nodeIndex].Text); nodeChanged = false;
}
}
点修改 isUpdate=true;private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if(isUpdate)
{
try
{
//执行update
}
catch(Expection ex)
{
//message
}
finally
{
isUpdate=false
}
}
}
//程序给每个TreeNode 添加ContexMenuStrip 包含“重命名”,动作重命名如RenameTNode
2.触发RenameTNode重命名事件,获得源事件对象 比如是"用户管理" 节点,记录下编号id
3.事件结束 比如将“用户管理” 重命名了“会员管理” 更新后台表对应id的节点name
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{ this.treeView1.LabelEdit = true;//此处需加上
e.Node.BeginEdit();
}
}
string nodeTag = "";
bool nodeChanged = false; private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
nodeTag = e.Node.Name.ToString();
nodeChanged = true;
e.Node.EndEdit(true);
this.treeView1.LabelEdit = false;//此处需加上
} private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
if (nodeChanged == true)
{
//在这里保存数据到数据库
MessageBox.Show(nodeTag);
nodeChanged = false;
} }
{
if (nodeChanged == true)
{
//在这里保存数据到数据库
MessageBox.Show(nodeTag);
nodeChanged = false;
} }这个函数NodeMouseHover 是每次鼠标移动过就触发了吧 貌似这样不太好的 就是我没有修改 移过的时候也会触发这个时间的吧
{
InitializeComponent();
this.Load+=new EventHandler(Form1_Load);
treeView1.MouseClick+=new MouseEventHandler(treeView1_MouseClick);
treeView1.AfterLabelEdit+=new NodeLabelEditEventHandler(treeView1_AfterLabelEdit);
}private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
treeView1.Nodes.Add("tv" + i.ToString());
treeView1.Nodes[i].Nodes.Add("tvc"+i.ToString());
}
treeView1.LabelEdit = true;//不可缺少
}private void treeView1_MouseClick(object sender, MouseEventArgs e)
{
TreeView tv=(TreeView)sender;//获取treeview
if (e.Button == MouseButtons.Right)//判断是否鼠标右键
{
if (tv.SelectedNode != null)//判断是否存在选择节点
tv.SelectedNode.BeginEdit();
}
}
private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
string newTxt = e.Label;//获取新文本
//string id = e.Node.Text;//获取原来的文本 //进行你的更新操作}