使用计时器检测Keypress

时间:2013-02-23 22:17:01

标签: c# .net winforms

代码:

    private void sprites_updater_Tick(object sender, EventArgs e)
    {
        s++;
        int x = player.Location.X;
        int y = player.Location.Y;
        if (s == 1)
      if (ModifierKeys.HasFlag(Keys.A))
            {
                player.Location = new Point(x - 5, y);
            }
            s = 0;
            sprites_updater.Start();

        }

因此,在使用计时器代码时,我在上面写了相同的内容(ModifierKeys.HasFlag(Keys.A)),但它没有用。为什么?! 顺便说一句,有没有办法在WinForms面板中显示3D摄像头视角而不使用XNA,WPF或任何其他东西(只有.NET)?!

1 个答案:

答案 0 :(得分:1)

获取键盘笔划并在以后处理它们的最佳方法是使用KeyDown,KeyUp和flags捕获表单中的Keyboards事件:

bool isAPressed;
...

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    switch(e.KeyCode)
    {
        case Key.A:
            isAPressed = true;
            break;
        case Key.XXXX:
            ...
    }
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    switch(e.KeyCode)
    {
        case Key.A:
            isAPressed = false;
            break;
        case Key.XXXX:
            ...
    }
}

然后您可以在计时器中使用此信息:

private void sprites_updater_Tick(object sender, EventArgs e)
{
    s++;
    int x = player.Location.X;
    int y = player.Location.Y;
    if (s == 1)
    if (isAPressed)
        {
            player.Location = new Point(x - 5, y);
        }
        s = 0;
        sprites_updater.Start();
    }

这特别有利于以这种方式处理球员移动(箭头)。