当我在TreeView中编辑节点并按Escape键时,该节点将被保存,就像按Enter一样。
当然,我想要的是它取消了标签编辑并且该节点没有更改。我在Google上搜索了一下,发现它实际上应该是默认行为,但似乎不是我的行为。
我在代码中的任何地方都没有检查Keys.Escape
,所以我不确定为什么它不起作用。
答案 0 :(得分:0)
我不知道为什么默认行为不适用于我,但这是我现在解决的方法:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
...
...
case Keys.Escape:
{
if (mTreeView.LabelEdit)
{
mCanceledEdit = true;
mTreeView.EndEdit(true);
return true;
}
return false;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
private void mTreeView_AfterLabelEdit(object sender, Crownwood.DotNetMagic.Controls.LabelEditEventArgs e)
{
if(mCanceledEdit == true)
{
e.Cancel = true;
mAppData.MainForm.UpdateData();
mCanceledEdit = false;
return;
}
...
...
}
说明: 我编写了一个事件处理程序,以了解何时按下某个键以及何时将其作为Escape键,以及它是否在标签编辑期间发生,我将成员变量mCanceledEdit设置为true并结束了节点编辑。
然后在执行其他任何操作之前,在AfterLabelEdit中检查mCanceledEdit是否为true,如果是,则取消节点编辑而不保存更改,并将变量设置为false以供进一步使用。