C#按键不工作

C#按键不工作,c#,winforms,C#,Winforms,我有一个picturebox,我想在按键时重新定位它。 我在打乒乓球。根据下面的代码,我想制作播放器1的拨片,它是一个图片盒,按下一个键时应该上下移动。以下代码似乎不起作用: public partial class Form1 : Form { bool upPressed, downPressed; public Form1() { InitializeComponent(); } private void PongTimer_Ti

我有一个picturebox,我想在按键时重新定位它。 我在打乒乓球。根据下面的代码,我想制作播放器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属性设置为true,但这也没有解决它。计时器工作正常


我希望这里的人能告诉我我做错了什么。

这是一个移动PictureBox的代码示例:

  • 将PictureBox拖放到表单上(在本例中为Form1)
  • 将PictureBox的背景色更改为例如红色。(这样在运行时它是可见的)
  • 执行Form1的KeyDown事件(在本例中为Form1\u KeyDown)
  • 运行应用程序
  • 开始按箭头键,PictureBox将移动


  • 这是移动PictureBox的代码示例:

  • 将PictureBox拖放到表单上(在本例中为Form1)
  • 将PictureBox的背景色更改为例如红色。(这样在运行时它是可见的)
  • 执行Form1的KeyDown事件(在本例中为Form1\u KeyDown)
  • 运行应用程序
  • 开始按箭头键,PictureBox将移动



  • 你能发布一个完整的代码示例吗?e、 g.“PongTimer”从未启动,计时器的间隔是多少?您是否尝试过PreviewKeyDown事件?如果表单中没有任何内容具有键盘焦点,则仍然可以使用。KeyPreview不足以检测光标键。您还必须重写IsInputKey()以告诉Winforms它们应该用于输入而不是导航。重写ProcessCmdKey()是更好的捕鼠器。你没有忘记启用计时器。你是否在
    Form1\u-KeyUp
    Form1\u-KeyDown
    中设置了断点来检查它是否按预期工作?我不知道如何添加完整的代码,因为我只有一个Windows窗体,我在其中拖放了picturebox和计时器。你能发布一个完整的代码示例吗?e、 g.“PongTimer”从未启动,计时器的间隔是多少?您是否尝试过PreviewKeyDown事件?如果表单中没有任何内容具有键盘焦点,则仍然可以使用。KeyPreview不足以检测光标键。您还必须重写IsInputKey()以告诉Winforms它们应该用于输入而不是导航。重写ProcessCmdKey()是更好的捕鼠器。你没有忘记启用计时器。你有没有在
    Form1\u-KeyUp
    Form1\u-KeyDown
    中设置断点来检查它是否如你所期望的那样工作?我不知道如何添加完整的代码,因为我只有一个Windows窗体,在那里我拖放了picturebox和timer.Odrai,有可能使int x和int y成为公共的并且仍然产生相同的效果吗?这是可能的,但是如果你在另一个类中需要这些变量,你应该只创建一个公共的x和y。我复制了这段代码并删除了以前的代码,然而,它仍然没有响应我的输入不幸的是,我已经做了一个完整的空白表格,并添加了一个黑色背景的图片盒,这确实有效。谢谢Odrai,有没有可能使int x和int y成为公共的,并且仍然产生相同的效果?这是可能的,但是如果你在另一个类中需要这些变量,你应该只创建一个公共的x和y。我复制了这段代码,删除了以前的代码,然而,它仍然没有响应我的输入不幸的是,我已经做了一个完整的空白表格,并添加了一个黑色背景的图片盒,这确实有效。谢谢
        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);
        }