TreeView-编辑时的默认行为不起作用

时间:2018-07-26 09:11:11

标签: c# treeview default undefined-behavior

当我在TreeView中编辑节点并按Escape键时,该节点将被保存,就像按Enter一样。

当然,我想要的是它取消了标签编辑并且该节点没有更改。我在Google上搜索了一下,发现它实际上应该是默认行为,但似乎不是我的行为。

我在代码中的任何地方都没有检查Keys.Escape,所以我不确定为什么它不起作用。

1 个答案:

答案 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以供进一步使用。