winform c#中的关键事件问题

时间:2017-02-02 14:06:49

标签: c# visual-studio-2015

在我的项目中,我需要修改这个预先制作的代码来改变游戏的布局。因此,我想在我的表单上添加关键事件,以便导航到“WASD”,而不是使用按钮来移动蛇。但问题是,一旦我将该函数添加到表单并测试它以显示在控制台上,它什么都没有,而不是事件错误。我不是这方面的专家,所以我希望有人能够引导我走上正确的道路,谢谢。

这是我项目的代码和截图。

public Form1()
    {
        InitializeComponent();

        backgroundMusic.PlayLooping();


        this.AutoSize = true;
        boardPanel.AutoSize = true;

        //Set up the main board
        mainBoard = new Board(this);

        //Set up the game timer at the given speed
        clock = new Timer();
        clock.Interval = speed; //Set the clock to tick every 500ms
        clock.Tick += new EventHandler(refresh); //Call the refresh method at every tick to redraw the board and snake.

        duration = 0;
        score = 0;
        level = 1;
        modeLBL.Text = mode;

        gotoNextLevel(level);

    }

    private void keyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.W)
        {
            Console.WriteLine("W is pressed");
        }
    }
}

表单的设计视图。 Design view of the form

1 个答案:

答案 0 :(得分:3)

您的问题是,Control上的Form通常会有焦点并捕获所有关键事件。

要在子控件具有焦点时按下某个键,Form引发KeyDown事件,请将Form的{​​{3}}属性设置为true:

public Form1()
{
    InitializeComponent();

    backgroundMusic.PlayLooping();

    this.AutoSize = true;
    this.KeyPreview = true; // <-- add this line