在编码一个小游戏的时候,遇到了一个问题;我的表单KeyDown
和KeyUp
事件根本不会触发。
这是表单的代码:
public class GameForm : Form
{
private ControllableBlock player;
public GameForm()
{
KeyDown += Game_KeyDown;
KeyUp += Game_KeyUp;
player = new ControllableBlock();
Controls.Add(player);
}
private void Game_KeyDown(object sender, KeyEventArgs e)
{
player.ReactToKey(e.KeyCode);
}
private void Game_KeyUp(object sender, KeyEventArgs e)
{
player.ReactToKey(e.KeyCode);
}
}
还有很多事情要做,但我只粘贴了相关代码。
我已经尝试过设置this.KeyPreview = true;
和调用this.Focus();
,都不起作用。问题不在于ReactToKey()
方法,我已经在那里设置了一个断点,并且该事件永远不会被触发。
编辑:经过一些测试,我得出的结论是问题出在我的ControllableBlock
. 然而,我不知道为什么,但我正在努力。如果我注释掉与 相关的所有内容,player
事件就会开始触发。
编辑 2:似乎问题是我ControllableBlock
从Control
. 如果我从 继承它Panel
,它工作正常。
为什么是这样?如果我从控件继承,我不能触发事件吗?
这个ControllableBlock
类现在是空的,所以它甚至不做任何事情,除了继承自Control
.
编辑3:既然我已经开始了赏金,我想澄清一下,我不是在寻找如何让事件触发的解决方案,我正在寻找他们为什么不触发的原因我继承自Control
.