我不知道你为什么要改变默认行为,但无论如何这里是一个可能的解决方案来编辑LabelEdit设置为true的节点.
除非您的具体操作发生,否则只需捕获BeforeLabelEdit事件并取消它.以下代码为F2键按下执行此操作:
bool _allowNodeRenaming;
private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
if (!_allowNodeRenaming)
{
e.CancelEdit = true;
}
_allowNodeRenaming = false;
}
private void treeView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
_allowNodeRenaming = true;
treeView1.SelectedNode.BeginEdit();
}
}
Run Code Online (Sandbox Code Playgroud)
您必须根据需要打开和关闭 LabelEdit 属性:
private void startLabelEdit() {
treeView1.LabelEdit = true;
treeView1.SelectedNode.BeginEdit();
}
private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
treeView1.LabelEdit = false;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这有副作用,LabelEdit 属性是本机 Windows 控件的样式标志。更改它需要完全销毁窗口并从头开始重新创建它。最明显的副作用是窗口在创建后重新绘制时会出现轻微的闪烁。可能还有其他的,我自己没发现有什么问题。