2012-08-30 51 views
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,但是,什么都不做。

tabPageDuckBill是显示的设计时/默认tabPage。为什么会F10工作带我到“其他”标签页,但F9然后不能回到原来的?

+0

你的F9键坏了吗? – Servy

+0

你需要捣碎F10才能使其工作?当您在方法中设置断点时,F9是否会导致它启动? –

+0

还有其他的预览键和捕捉F9吗? –

回答

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;,但是,它展现了你提到的行为。

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); 
} 
相关问题