0

我正在使用 C# 开发 Winform 应用程序。我有一个来自 frmPlan.frm 的表格,在那个表格上我有一些按钮/文本框和一个面板控件。当该表单加载时,我们在该面板中加载另一个表单 frmPlanDetail.frm。

现在在 frmPlanDetail 表单上,我们有一个选项卡控件,我试图实现热键在选项卡之间导航。我能够通过覆盖 frmPlanDetail.frm 中的 ProcessCmdKey 事件来实现热键。但是我面临的问题是,直到我先单击该选项卡控件,它才起作用。一旦我单击该控件以设置焦点,它就会在此之后工作,但在我最初加载表单之后就不会工作,因为那时焦点位于 frmPlam 表单上。我正在使用以下代码作为热键

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
   if (keyData == (Keys.Alt  | Keys.P))
   {
      tabCtrlIPE.SelectedIndex = 3;
   }
   return base.ProcessCmdKey(ref msg, keyData);
}

任何帮助将非常感激。

4

2 回答 2

1

处理热键的最简单方法是添加一个 MenuStrip,添加一个 MenuItem 并将其分配为您的热键(在您的情况下为 Alt + P)并将 MenuItem 的 Visibility 设置为 false。现在连接菜单项单击事件以执行您想要执行的操作。

即使菜单是不可见的,它也会在按下热键时触发点击事件。

我认为这是实现热键的直接方式,因为您不必处理处理按键事件的控件,也不必添加 if-else 阶梯或 switch 语句。

于 2014-08-26T06:09:15.103 回答
0

当您将代码放在顶级父级(最外层形式)中时,它对我来说可以正常工作:

public partial class Form1 : Form {
  public Form1(){
     InitializeComponent();
  }
  protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (keyData == (Keys.Alt  | Keys.P)) {
       tabCtrlIPE.SelectedIndex = 3;
       return true;//Prevent beep sound
    }
    return base.ProcessCmdKey(ref msg, keyData);
  }
}
于 2013-11-13T01:11:51.433 回答