按下回车键时更改焦点控制

6
我有一个Windows表单,我需要当用户按下Enter键时,将焦点设置到下一个控件。 有什么办法可以实现这个功能 (不使用KeyPress事件)

1
没有 KeyPress 事件,你就无法知道用户按了 Enter 键。 - DJ Burb
ProcessCmdKey事件怎么样? - user1659922
3个回答

6

您可以捕获窗体的KeyPreview。在构造函数中将KeyPreview设置为true,然后您可以使用以下代码:

protected override bool ProcessKeyPreview(ref Message m)
{
    if (m.Msg == 0x0100 && (int)m.WParam == 13)
    {
        this.ProcessTabKey(true);
    }
    return base.ProcessKeyPreview(ref m);
}

1

您可以使用 ProcessCmdKey 检查 keyData 是否包含 Enter 键,然后使用 SelectNextControl 方法来设置您的焦点。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData.HasFlag(Keys.Enter)) 
    {
        SelectNextControl(ActiveControl,true,true,true,true);
        return true; //Stops the beeping
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

0

如果您不想使用按键事件,您将需要重写 ProcessCmdKey 方法。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Return)
    {
        MessageBox.Show("You pressed the Enter key");
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

要将焦点移到下一个控件,我必须使用SendKeys.Send("{Tab}")。 - user1659922

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接