为什么onKeyDown或onEditorKeyDown无法捕获“Enter”按?

时间:2011-11-02 17:21:30

标签: c# winforms events devexpress key

我有一个自定义控件MyLookUpEdit,它继承了Devexpress LookUpEdit。

在MyLookUpEdit中,我有以下方法:

protected override bool ProcessDialogKey(Keys keyData)

我在表单上使用这个自定义控件(我们称之为nameLookUpEdit)。当我浏览控件时,我看到ProcessDialogKey被调用,它根据tabIndex聚焦到下一个控件。

现在我们希望当按下enter时,我们的控件的行为与按下的tab完全相同。我想我应该在MyLookUpEdit中添加以下方法之一:

protected override void OnKeyDown(KeyEventArgs e)

protected override void OnEditorKeyDown(KeyEventArgs e)

并捕获回车键,因此显式调用ProcessDialogKey:

{
            if(e.KeyData == Keys.Enter)
            {
                ProcessDialogKey(Keys.Tab);
            }
            base....
        }

但是当我测试它时,我发现当nameLookUpEdit当前正在聚焦时,我按下回车键,onKeyDown和onEditorKeyDown都不会被调用。

为什么会这样?

让输入行为与标签相同的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

尝试覆盖ProcesscmdKey?

编辑:添加了返回语句的正确性。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Enter)
    {
        //do stuff
    }
    return base.ProcessCmdKey(ref msg, keyData);
}