При кодировании маленькой игры я столкнулся с проблемой; мои формы KeyDown
и KeyUp
события не срабатывают вообще.Событие KeyDown не срабатывает?
Это кода формы:
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()
, я уже установил там точку останова, и событие никогда не запускается.
Edit: После некоторых тестов я пришел к выводу, что проблема в моей ControllableBlock
. Но я понятия не имею, почему, но я над этим работаю. Если я прокомментирую все, что связано с player
, события начинают стрелять.
Edit 2: Похоже, эта проблема меня наследуя моей ControllableBlock
от Control
. Если я наследую его от Panel
, он отлично работает. Почему это? Не могу я запустить событие, если я унаследовал от управления? Класс ControllableBlock
пуст, так что он даже не делает ничего, кроме наследования от Control
.
Edit 3: Теперь, когда я начал щедроты, я хотел бы уточнить, что я не ищу решение о том, как сделать огнь событий, я ищу для причина, почему они не срабатывают, если я наследую от Control
.
'player.Obstacles.Add (препятствие)', что здесь происходит? Я попытался воспроизвести вашу проблему, но все обработчики событий с 'this.KeyPreview = true' работают хорошо (кроме клавиш со стрелками - подумают об обходном пути здесь). Без этой строки, действительно, не происходит никаких событий – Nogard
Я не знаю, почему ваш не работает, но мои работы. Просто создайте новый элемент управления, когда будет показана форма, сфокусируйте это управление так, как показано на рисунке: + = (s, e) => {myControl.Focus(); }; 'и затем нажмите несколько клавиш вниз, это сработает. Если вы хотите сфокусировать свой контроль нажатием мыши, я думаю, что это не сфокусировано именно так, и вы думали, что это не сработало? –