繁体   English   中英

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

[英]Move PictureBox using Arrow Keys - Handle keyboard events in PictureBox

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

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM