在子窗体C#上使用选项卡控件的热键

时间:2013-11-12 18:30:23

标签: c# winforms tabs

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

现在在frmPlanDetail表单上我们有一个tab控件,我试图实现热键在选项卡之间导航。我可以通过覆盖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);
}

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分:0)

处理热键的最简单方法是添加一个MenuStrip,添加一个MenuItem并为其指定热键(在你的情况下为Alt + P),并使MenuItem的可见性为false。现在连接菜单项单击事件以执行您想要执行的操作。

虽然菜单不可见,但在按热键时会触发点击事件。

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