C#KeyDown无法正常工作

时间:2017-09-05 17:37:55

标签: c# winforms

我有一个想要在按下按键时重新定位的图片框。 我正在做一场乒乓球比赛。使用下面的代码我想制作播放器1的拨片,这是一个在按下键时应该上下移动的图片框。以下代码似乎不起作用:

public partial class Form1 : Form
{
    bool upPressed, downPressed;

    public Form1()
    {
        InitializeComponent();
    }

    private void PongTimer_Tick(object sender, EventArgs e)
    {
        if(upPressed){
            paddlePlayer1.Location = new Point(paddlePlayer1.Location.X, paddlePlayer1.Location.Y + 5);
        }
        if (downPressed)
        {
            MessageBox.Show("Numlock");
        }
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if(e.KeyCode == Keys.Up){ 
            upPressed = true; 
        }
        if (e.KeyCode == Keys.NumLock)
        {
            downPressed = true;
        }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if(e.KeyCode == Keys.Up){ 
            upPressed = false;
        }
    }
}

我使用Numlock来查看问题是否在图片中,事实并非如此。我已经将KeyPreview属性推向了真实,但这也没有解决它。计时器工作正常。

我希望这里有人可以告诉我我做错了什么。

1 个答案:

答案 0 :(得分:0)

这是移动PictureBox的代码示例:

  1. 在表单上拖放PictureBox(在本例中为Form1)。
  2. 将PictureBox的背景颜色更改为例如红色。 (这种方式在运行时可见)。
  3. 实现Form1的KeyDown事件(在本例中为Form1_KeyDown)。
  4. 运行该应用程序。
  5. 开始按箭头键,PictureBox将移动。
  6.     private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            int x = pictureBox1.Location.X;
            int y = pictureBox1.Location.Y;
    
            if (e.KeyCode == Keys.Right) { x += 1; }
            else if (e.KeyCode == Keys.Left) { x -= 1; }
            else if (e.KeyCode == Keys.Up) { y -= 1; }
            else if (e.KeyCode == Keys.Down) { y += 1; }
    
            pictureBox1.Location = new Point(x, y);
        }
    
相关问题