我自己的实现方法是,先添加节点,然后node.BeginEdit()
创建AfterLabelEdit事件,在该事件中进行排序。
但是我发现,在AfterLabelEdit事件中如果添加/移动节点就会导致莫名其妙的重新进入编辑状态
写不好的话就退不出来编辑状态了
以下简单的代码就会导致锁死在编辑状态
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            treeView1.TreeViewNodeSorter = new NodeSorter();
            treeView1.LabelEdit = true;
        }        //在编辑结束验证时触发
        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            treeView1.Sort();
        }        //点击Button创建一个新的节点,并且进入可编辑状态
        private void button1_Click(object sender, EventArgs e)
        {
            treeView1.Nodes.Add("NewNode").BeginEdit();
        }
    }    public class NodeSorter : System.Collections.IComparer
    {
        public int Compare(object x, object y)
        {
            return (x as TreeNode).Text.CompareTo((y as TreeNode).Text);
        }
    }谁对这方面有研究,能给我提点建议吗?

解决方案 »

  1.   

    得 我自己想出来勉强能用的解决办法了
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                treeView1.TreeViewNodeSorter = new NodeSorter();
                treeView1.LabelEdit = true;
            }        private bool LabelEditMessage = false;        //在编辑开始前触发
            private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
            {
                if(!LabelEditMessage)
                {
                    e.CancelEdit = true;
                    return;
                }
                LabelEditMessage = false;
            }        //在编辑结束验证时触发
            private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
            {
                treeView1.Sort();
            }        //点击Button创建一个新的节点,并且进入可编辑状态
            private void button1_Click(object sender, EventArgs e)
            {
                LabelEditMessage = true;
                treeView1.Nodes.Add("NewNode").BeginEdit();
            }
        }    public class NodeSorter : System.Collections.IComparer
        {
            public int Compare(object x, object y)
            {
                return (x as TreeNode).Text.CompareTo((y as TreeNode).Text);
            }
        }但是我始终无法让TreeView在添加节点后立即选择这个节点,他总是选择父节点。
      

  2.   

    给treenode加上name。然后操作就方便一些!
      

  3.   

    不是吧name可能是相同的呢,建议你可以先加个节点,再把节点ID存到view中,再去作一个编辑动作动也就是分两步走.
    因为增加节点Treeview会刷新。