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)
是的,不起作用,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)