使用箭头键移动PictureBox – 处理PictureBox中的键盘事件

我有一个PictureBox ,我使用下面的代码来移动我的对象。 我需要在表单中添加几个按钮,但是当我启动程序时,箭头键会导航按钮而不是我的输入按键。 我在Form.Load() PictureBox.Select()上尝试过很多像PictureBox.Focus()PictureBox.Select()这样的Form.Load() ,并且在这里完全禁用箭头键导航,但是我的对象不再移动了。

 private void UpdateScreen(object sender, EventArgs e) { if (Input.KeyPressed(Keys.Right) && Settings.direction != Direction.Left) { Settings.direction = Direction.Right; } else if (Input.KeyPressed(Keys.Left) && Settings.direction != Direction.Right) { Settings.direction = Direction.Left; } else if (Input.KeyPressed(Keys.Up) && Settings.direction != Direction.Down) { Settings.direction = Direction.Up; } else if (Input.KeyPressed(Keys.Down) && Settings.direction != Direction.Up) { Settings.direction = Direction.Down; } } 

如何在不影响UpdateScreen()代码的情况下禁用所有按钮的箭头键导航?

PictureBox控件不Selectable ,因此无法处理Keyboard事件。 要解决此问题,您应首先使控件可选:

 using System; using System.Windows.Forms; class SelectablePictureBox : PictureBox { public SelectablePictureBox() { SetStyle(ControlStyles.Selectable, true); SetStyle(ControlStyles.UserMouse, true); TabStop = true; } protected override void OnEnter(EventArgs e) { base.OnEnter(e); this.Invalidate(); } protected override void OnLeave(EventArgs e) { base.OnLeave(e); this.Invalidate(); } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); if (this.Focused) ControlPaint.DrawFocusRectangle(pe.Graphics, ClientRectangle); } } 

然后你可以处理它的PreviewKeyDown事件:

 private void selectablePictureBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Left) { e.IsInputKey = true; myPictureBox1.Left -= 10; } else if (e.KeyCode == Keys.Right) { e.IsInputKey = true; myPictureBox1.Left += 10; } }