2017-04-01 16 views
0

我正在尝试使用导航键从用户获取输入命令。例如: - 当用户按Right导航键时,应该调用一个方法来执行某个任务。下面是一段代码,我试图用这个目的:如何在Windows窗体中使用导航键作为输入

private void MainForm_Load(object sender, EventArgs e) 
{ 
    KeyPreview = true; 
    this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.MainForm_KeyPress); 
} 

private void MainForm_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    switch (e.KeyChar) 
    { 
     case (char)Keys.Right: 
      NextMenuItem_Click(sender, EventArgs.Empty); 
      break; 
    } 
} 

注意,这工作得很好了其他键,如字母,数字,钥匙和连回车键。但不知何故,不适用于左,右,上,下导航键。

请指导我。我会很高兴和感激你:-) 您的反应将不胜感激! (我用的Visual Studio 2017年

回答

2

使用的,而不是你的交换机和处理KeyDown事件,而不是KeyPress事件:

switch (e.KeyCode) 
{ 
    case Keys.Right: 
     NextMenuItem_Click(sender, EventArgs.Empty); 
     e.Handled = true; 
     e.Suppressed = true; 
     break; 
} 

而且我不认为你需要设置KeyPreview选项。 您的代码存在的问题是您尝试将右键解析为char,但该键无法按预期工作。

+0

好的,谢谢先生@MetaColon ...得到了点:-) 我现在意识到我的错误! –

1

在处理KeyDown事件而不是KeyPressed时,您只能访问字母和数字旁边的其他键。 然后你可以利用Keys枚举。

private void Mainform_KeyDown(object sender, KeyEventArgs e) 
{ 
    switch (e.KeyCode) 
    { 
     case Keys.Right: 
      e.Handled = true; 
      e.Suppressed = true; 
      NextMenuItem_Click(sender, EventArgs.Empty); 
      break; 
    } 
} 
+0

请注意@MetaColon处理和抑制按键。但是,不要忘记切换您的事件类型。 – oelsardine

+0

谢谢,我监督了这一点。 – MetaColon

相关问题