无论当前焦点是什么,我都需要在触发时捕获F1 KeyEvent。目前我有一个基类,它定义了用于触发F1键盘的方法。在子类中,我正在侦听.KeyUp事件并将调用父级。
//基类:
protected void GetHelp(String helpIndexParam)
{
// Logic
}
//儿童班:
//Declared in constructor of child class
KeyPreview = true;
this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyEvent);
private void KeyEvent(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
base.GetHelp("20");
}
}
目前,子表单打开,我按F1,没有任何反应。只有当我单击窗体上的控件然后按F1时才会执行GetHelp("")
功能。
任何建议表示赞赏。干杯。
答案 0 :(得分:1)
在这种情况下,您可以在父表单或每个子表单中使用ProcessCmdKey方法:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.F1) {
// Show help;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
或者,由于您正在寻找F1键,您可以使用HelpRequest事件:
public Form1() {
InitializeComponent();
this.HelpRequested += Form1_HelpRequested;
}
private void Form1_HelpRequested(object sender, HelpEventArgs hlpevent) {
// Show Help
}
答案 1 :(得分:0)
我能够让它运转起来。我了解到,因为我们正在使用MDI,所以MDI本身显然正在消耗任何在儿童表单中捕获F1点击的尝试。我基本上必须设置它,以便KeyUp事件在父表单中定义而不是子表单,子表单只是从父表单填充所需的属性。这就是我如何将必要的信息传递给父母的方式。此外,我不得不把注意力集中在对儿童表单的控件上,以便整个事情可以结合在一起。
我感谢所有帮助人员。从长远来看,你们都指出了正确的道路。干杯。