Событие KeyDown не возникает - PullRequest
0 голосов
/ 14 октября 2011

У меня есть форма с кнопкой. Я хочу захватить событие Form.KeyDown.

private void buttonStart_Click(object sender, EventArgs e)
{
   if (!this.gameRunning)
   {
       this.buttonStrat.Text = "Pause";
       this.timer1.Enabled = true;
   }
   else
   {
       this.buttonStart.Text = "Continue";
       this.timer1.Enabled = false;
   }
   this.gameRunning = !this.gameRunning;
}

Однако я отключил buttonStart без поддержки PAUSE, и это работало хорошо. Поскольку я добавил преимущество PAUSE, событие Form.KeyDown не возникает, а buttonStart равно Focuse d. Всякий раз, когда я отключаю buttonStart, он срабатывает.

ПРИМЕЧАНИЯ:

  • Я установил Form.KeyPreview на true, кадры не поднимаются
  • Я установил Form.AcceptButton на null, кадры не поднимаются
  • Я поставил buttonStart подписку на Form.KeyDown, кадры - нет.

1 Ответ

2 голосов
/ 14 октября 2011

Я надеюсь, что это поможет вам ..


Переопределить IsInputKey Поведение


Необходимо переопределить поведение IsInputKey , чтобы сообщить, что вы хотите, чтобы клавиша со стрелкой вправо рассматривалась как InputKey, а не как специальная клавиша поведения. Для этого вы должны переопределить метод для каждого из ваших элементов управления. Я бы посоветовал вам создать ваши выигранные кнопки, скажем, MyButton

Класс ниже создает пользовательскую кнопку, которая переопределяет метод IsInputKey , так что клавиша со стрелкой вправо не обрабатывается как специальная клавиша. Оттуда вы можете легко сделать это для других клавиш со стрелками или чего-либо еще.

    public partial class MyButton : Button
    {
        protected override bool IsInputKey(Keys keyData)
        {
            if (keyData == Keys.Right)
            {
                return true;
            }
            else
            {
                return base.IsInputKey(keyData);
            }
        }
    }

После этого вы можете обрабатывать событие события keyDown в каждой отдельной кнопке или в самой форме:

В методе KeyDown кнопок попробуйте установить следующие свойства:

private void myButton1_KeyDown(object sender, KeyEventArgs e)
{
  e.Handled = true;
  //DoSomething();
}

- ИЛИ -

обрабатывает обычное поведение в форме: (не устанавливайте e.Handled = true; в кнопках)

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    //DoSomething();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...