Метод события C # KeyPress не регистрируется в Visual Studio? Или код? - PullRequest
1 голос
/ 20 августа 2011

Когда я запускаю свою игру (змея), я полагаю, что могу перемещать змею по форме с помощью клавиш w, a, s и d. (Банкомат, я только написал код для левого и правого движения, просто имеет точку отсчета). Однако при запуске программы ничего не происходит. Я пытался использовать точки останова, однако, похоже, что моя программа даже не читает метод нажатия клавиш, хотя я нажимаю клавиши.

Вот метод Move в классе змей.

public void Move(int pixels)
{
    if (pixels < 0)
    {
        xPosition_ = xPosition_ -= SNAKE_WIDTH;
    }
    else if (pixels > 0)
    {
        xPosition_ = xPosition_ += SNAKE_WIDTH;
    }
}

А вот и метод нажатия клавиш.

private void GameScreen_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 'a')
    {
        snake.Move(-1);
    }
    if (e.KeyChar == 'd')
    {
        snake.Move(1);
    }
    this.Refresh();
}

графика хорошо отрисовывается в элементе управления PictureBox.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 20 августа 2011

Одной из возможных проблем является то, что ваш обработчик событий фактически не подключен к событию KeyPress. Вам нужно подключить событие KeyPress к вашему обработчику событий, чтобы оно заработало; просто назвать его GameScreen_KeyPress недостаточно. Например, вот как вы могли бы сделать это в конструкторе GameScreen:

public void GameScreen()
{
    this.KeyPress += new EventHandler(GameScreen_KeyPress);
}

Вот статья MSDN на эту тему: Как использовать события в приложении Windows Forms .

1 голос
/ 20 августа 2011

Лучший способ сделать это - переопределить ProcesCmdKey для вашей формы, как показано в примере ниже:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    MessageBox.Show("Pressed: " + keyData);
    return base.ProcessCmdKey(ref msg, keyData);
}
0 голосов
/ 20 августа 2011

Есть ли у KeyPreview значение true в форме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...