我正在使用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);
}
任何帮助都会非常感激。
答案 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语句。