Почему этот код работает только в одном случае?

Я установил свою форму KeyPreview собственность на true,

Я добавил этот код:

private void PlatypusScheduleForm_KeyDown(object sender, KeyEventArgs e) 
{
  if (e.KeyCode == Keys.F9)
  {
    tabControlPlatypi.SelectedTab = tabPageDuckBill;
  }
  else if (e.KeyCode == Keys.F10)
  {
    tabControlPlatypi.SelectedTab = tabPagePlatypus;
  }
}

Когда я делаю пюре F10, он работает как положено; затирание F9, однако, ничего не делает.

tabPageDuckBill время разработки / по умолчанию tabPage это отображает. Почему F10 работает, чтобы перенести меня на "другую" вкладку, но F9 не вернется к оригиналу?

2 ответа

Решение

Я обнаружил, что если я просто сделал это:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.F9)
  {
      tabControl1.SelectedTab = tabPage1;
      e.SuppressKeyPress = true;
  }
  else if (e.KeyCode == Keys.F10)
  {
      tabControl1.SelectedTab = tabPage2;
      e.SuppressKeyPress = true;
  }
}

это будет переключаться вперед и назад просто отлично. Без этого e.SuppressKeyPress = true;Тем не менее, он показал поведение, которое вы упомянули.

Я сталкивался с этой же проблемой в прошлом, и проблема сохранялась даже после удаления подозрительного кода из события SelectedIndexChanged(). Затем я использовал другую технику, которая работала намного лучше. Вместо использования события формы KeyDown я переопределил событие формы ProcessCmdKey следующим образом:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if (keyData == Keys.F9)
  {
    this.tabControl1.SelectedTab = tabPage1;
    return true;    
  }
  else if (keyData == Keys.F10)
  {
    this.tabControl1.SelectedTab = tabPage2;
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
Другие вопросы по тегам