afterlabeledit treeview handler c#

mjs*_*jsr 4 c# treeview label winforms

我需要根据用户在节点标签版本中编写的内容,用其他文本重写该标签.用户编写"NewNodeName"的示例我希望完成编辑后的节点文本为"S:NewNodeName".我尝试这两个代码,我不知道为什么都不工作

  private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
    {
        e.Node.Text = "S :"+ e.Label;
    }
Run Code Online (Sandbox Code Playgroud)

并且:

        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
    {
        treeView1.SelectedNode.Text = "S :"+ e.Label;
    }
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

是的,不起作用,Text属性此事件运行获取标签值.这就是e.Cancel的原因.因此,您分配的Text值将被提升此事件后运行的代码再次覆盖.本机Windows控件内部的代码.

没有AfterAfterLabelEdit事件,你不能在事件处理程序中改变e.Label,你需要一个技巧.事件停止运行更改Text属性.使用Control.BeginInvoke()优雅地完成.像这样:

    private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
        this.BeginInvoke((MethodInvoker)delegate { e.Node.Text = "S: " + e.Node.Text; });
    }
Run Code Online (Sandbox Code Playgroud)