0

我已将表单的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然而,mashing什么都不做。

tabPageDuckBill是显示的设计时/默认值tabPage。为什么将F10我带到“其他”标签页,但F9又不回到原来的页面?

4

2 回答 2

1

我过去也遇到过同样的问题,即使从 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);
}
于 2012-08-30T17:25:46.017 回答
1

我发现如果我这样做:

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;,它就会表现出您提到的行为。

于 2012-08-30T17:25:54.987 回答