我必须在普通形式的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。使用按钮,随机球部件工作正常,但无论我尝试什么,手动球部件将无法工作,因为表格从不注册按钮按下。
答案 0 :(得分:1)
您只需将Form.KeyPreview
设置为true:
this.KeyPreview = true;