如何消除按键时的延迟?

时间:2019-05-17 16:12:31

标签: c# winforms

我试图在屏幕上绘制一个矩形并使其移动,但是当我按下一个键时,它会延迟然后走动。

让我们想象一下,我想按“ W”键前进,然后突然想通过按“ A”键向左转,当我按“ A”键时,这会给我一个延迟。这是下面的矩形形式发生的情况

enter image description here

我尝试将计时器作为一种解决方案,但我做不到。

    public Form1()
    {
        InitializeComponent();
        r = new Rectangle(new Point(4, 4), new Size(8, 8));
    }

    private Rectangle r;
    private Keys keys;

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        timer1.Enabled = false;
    }

    private void Timer1_Tick(object sender, EventArgs e)
    {
        switch (keys)
        {
            case Keys.W:
                r.Y -= 5;
                break;
            case Keys.S:
                r.Y += 5;
                break;
            case Keys.D:
                r.X += 5;
                break;
            case Keys.A:
                r.X -= 5;
                break;
            default:
                break;
        }
        this.Invalidate();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.FillRectangle(new SolidBrush(Color.Red), r);
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        timer1.Enabled = true;
        keys = e.KeyCode;            
    }

我想通过按任意键无延迟地移动矩形

1 个答案:

答案 0 :(得分:0)

启用计时器后,只需立即调用计时器处理程序即可。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    timer1.Enabled = true;
    Timer1_Tick(this, new EventArgs());
}