在循环C#表单app中使用Keyboard.IsKeyDown

时间:2017-02-03 16:37:37

标签: c# winforms

我正在尝试用Windows c#形式制作一个平台游戏,在我的主游戏循环中,我有一些代码,但我似乎无法让用户输入正常工作,任何帮助将不胜感激!

这是我的代码:

while (true)// this is still in testing so it should go on forver
if (Keyboard.IsKeyDown(Key.Insert) == true)
{
btn1.Left = btn1.Left + 1;// btn is a button
Update();
}
System.Threading.Thread.Sleep(50);
}

每当我运行此程序时,程序就会变得无对应并最终崩溃 当我按下插入或我使用的任何其他键时它不起作用

1 个答案:

答案 0 :(得分:0)

假设此代码在Form中运行,您应订阅Form的{​​{3}}事件:

public partial class YourForm : Form
{
    public YourForm()
    {
        InitializeComponent();

        KeyDown += KeyDownHandler; // subscribe to event
        KeyPreview = true; // set to true so key events of child controls are caught too
    }

    private void KeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.KeyCode != Keys.Insert) return;
        btn1.Left = btn1.Left + 1;// btn is a button
        e.Handled = true; // indicate that the key was handled by you
        //Update(); // this is not necessary, after this method is finished, the UI will be updated
    }
}

因此,如果用户按下键,则会调用KeyDownHandler。无需在阻止UI线程的循环中拉出键盘状态。

如果您希望在自己的代码中编写,也可以在设计器窗口中设置对事件的订阅和KeyPreview值。

顺便说一下:Keyboard类是WPF的一部分。您不应该将其与Windows窗体混合使用。