防止按钮被箭头键点击聚焦

本文关键字:聚焦 按钮 | 更新日期: 2023-09-27 18:25:10

如果用户按下其中一个箭头键,表单上的按钮将聚焦,我该如何防止
我正在编程一个小游戏,所以这会阻止用户移动。抱歉解释得含糊不清。

编辑:

播放器是一个PictureBox,其中有一个图形,该图形由移动

private async void Form1_KeyDown(object sender, KeyEventArgs e)

防止按钮被箭头键点击聚焦

Form.cs中覆盖ProcessCmdKey,如下所示:

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

处理这种情况的方法是设置form.KeyPreview = true(请参阅MSDN),然后在KeyPress/KeyDown事件处理程序中处理密钥:

KeyPress事件引用MSDN:

要仅在窗体级别处理键盘事件,而不允许其他控件接收键盘事件,请设置表单的KeyPress中的KeyPressEventArgs.Handled属性事件处理方法设置为true。

测试keyEvent中的箭头,以您需要的方式管理它们,并将Handled=true设置为避免默认行为(将焦点转移到下一个控件)

对我有用的是设置按钮属性"TabStop";设置为false,您还可以使用表单上控件的TabIndex属性,从技术上设置表单加载时的焦点。

TabStop-设置按TAB键是否可以设置/赋予控件焦点,并且当按TAB键时,它将根据-TabIndex-它指示下一个将获得焦点的控件。

因此,如果按钮A有tabIndex 1,按钮B有tabIndex 2,按钮C有tabIndex 3,但按钮B有tabStop=false,那么按TAB键将从按钮A转到按钮C,它将跳过按钮B。

-请记住,并非所有控件都具有";TabStop";属性,我注意到textbox、button和datagridview确实有这个属性,但像labels、groupbox和picturebox这样的东西没有TabStop,只有TabIndex。