本帖最后由 VRC289 于 2010-04-20 13:38:21 编辑

解决方案 »

  1.   

    treeView1.LabelEdit = true;右击
     treeView1.SelectNode.BeginEdit();
    失去焦点
     保存 treeView1.SelectNode.Text;
      

  2.   

    用焦点移开事件就可以了
    AfterLabelEdit事件
    代码自已写
      

  3.   

    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;
                }
            }
      

  4.   

    比较直接点的办法就是向数据库执行 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
                           }
                     }
            }
      

  5.   

    c# winform1.加载treeview每一个节点存储id 和name/text,并给treeview 节点加上右键菜单,里面要包含你的重命名
      //程序给每个TreeNode 添加ContexMenuStrip 包含“重命名”,动作重命名如RenameTNode
    2.触发RenameTNode重命名事件,获得源事件对象 比如是"用户管理" 节点,记录下编号id
    3.事件结束 比如将“用户管理” 重命名了“会员管理” 更新后台表对应id的节点name
      

  6.   


      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;
                }        }
      

  7.   

            private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
            {
                if (nodeChanged == true)
                {
                    //在这里保存数据到数据库
                   
                    MessageBox.Show(nodeTag);
                    nodeChanged = false;
                }        }这个函数NodeMouseHover  是每次鼠标移动过就触发了吧 貌似这样不太好的  就是我没有修改  移过的时候也会触发这个时间的吧
      

  8.   

    许久没来了,给你个例子,注意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;//获取原来的文本    //进行你的更新操作}