当表单有按钮C#时,keyDown事件没有注册

时间:2013-12-06 17:02:38

标签: c# forms

我必须在普通形式的C#中制作突破样式应用程序,如果按下按钮,球将随机移动,或者如果按下另一个按钮,则可以手动控制球。我没有任何问题,随机移动球在屏幕周围,如果表格上没有按钮,我可以让球手动在屏幕上移动。一旦我添加按钮,虽然keyDown事件永远不会被触发。我无法弄清楚如何将焦点设置为表格。

基本上,当按下我的手动按钮时,我想将焦点更改为主窗体,这样我就可以检测到按键,这些内容符合以下几点:

    private void btnMoveBallManually_Click(object sender, EventArgs e)
    {
        ball.setManualBall = true;
        Form1.ActiveForm.Focus();
    }

我已经读了很多关于焦点的事情,我现在已经完全迷失了,任何建议都会非常感激。

感谢。

好的,澄清一下。要手动控制球,我有以下代码来处理按键

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.S)
        {
            down = true;
            up = false;
            right = false;
            left = false;
        }

        if (e.KeyData == Keys.W)
        {
            up = true;
            down = false;
            right = false;
            left = false;
        }

        if (e.KeyData == Keys.A)
        {
            down = false;
            up = false;
            right = false;
            left = true;
        }

        if (e.KeyData == Keys.D)
        {
            down = false;
            up = false;
            right = true;
            left = false;
        }
    }

然后计时器中的以下代码处理实际移动球

private void gameTimer_Tick(object sender, EventArgs e)
    {
        if (ball.getManualBall == true)
        {
            if (down) { ball.moveBallDown(); }
            if (up) { ball.moveBallUp(); }
            if (left) { ball.moveballLeft(); }
            if (right) { ball.moveBallRight(); }
        }
        else if (ball.getRandomBall == true)
        {
            ball.randomlyMoveBall();
        }

        ball.checkWallCollision();

        this.Invalidate();
    }

和按下按钮将手动设置为true或将RandomBall设置为true。

如果表单上没有按钮,则两者都按要求工作,并且在运行之前手动设置上述bool。使用按钮,随机球部件工作正常,但无论我尝试什么,手动球部件将无法工作,因为表格从不注册按钮按下。

1 个答案:

答案 0 :(得分:1)

您只需将Form.KeyPreview设置为true:

this.KeyPreview = true;