C# 禁用通过窗体中的箭头键选择控件

C# 禁用通过窗体中的箭头键选择控件,c#,winforms,C#,Winforms,在Windows窗体上按箭头键时,如何禁用控件选择? 例如,当我在组合框聚焦时上下按,它会选择一些元素,或者如果有聚焦的工具栏,它会选择不同的按钮 有没有办法禁用此行为?您可以截获箭头键,而不做出反应: protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (!msg.HWnd.Equals(this.Handle) && (keyData == Keys.Le

在Windows窗体上按箭头键时,如何禁用控件选择? 例如,当我在组合框聚焦时上下按,它会选择一些元素,或者如果有聚焦的工具栏,它会选择不同的按钮


有没有办法禁用此行为?

您可以截获箭头键,而不做出反应:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (!msg.HWnd.Equals(this.Handle) && 
        (keyData == Keys.Left || keyData == Keys.Right ||
        keyData == Keys.Up || keyData == Keys.Down))
        return true;
    return base.ProcessCmdKey(ref msg, keyData);
}

您可能希望首先将焦点放在无害的地方,否则,您可以强制将其“锁定”到您不需要活动的控件上。

您可以截获箭头键,而不进行任何反应:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (!msg.HWnd.Equals(this.Handle) && 
        (keyData == Keys.Left || keyData == Keys.Right ||
        keyData == Keys.Up || keyData == Keys.Down))
        return true;
    return base.ProcessCmdKey(ref msg, keyData);
}

您可能希望首先将焦点放在无害的地方,否则,您可以强制将其“锁定”到您不希望活动的控件上。

@HansPassant确实如此。我的表单截取箭头键,但我将它们的事件用于另一个函数。问题是,当我意识到其他事情时,如果有一个集中的控件,它会执行上面描述的行为,再加上我的功能!我只是想让它实现我的功能而不是别的。所以你只想禁用特定控件的箭头键反应?@DonBoitnott不完全是这样。我想禁用除此(或窗体)之外的每个控件的箭头键反应。请参阅编辑…添加窗体句柄检查。这意味着如果呼叫不是来自表单,并且是箭头键。。。“什么也不做!”汉帕桑说。我的表单截取箭头键,但我将它们的事件用于另一个函数。问题是,当我意识到其他事情时,如果有一个集中的控件,它会执行上面描述的行为,再加上我的功能!我只是想让它实现我的功能而不是别的。所以你只想禁用特定控件的箭头键反应?@DonBoitnott不完全是这样。我想禁用除此(或窗体)之外的每个控件的箭头键反应。请参阅编辑…添加窗体句柄检查。这意味着如果呼叫不是来自表单,并且是箭头键。。。什么也不做。