Почему этот код работает только в одном случае?
Я установил свою форму 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);
}