捕捉F1 keyeevent时,形式有焦点
本文关键字:焦点 F1 keyeevent 捕捉 | 更新日期: 2023-09-27 17:49:14
我需要在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("")
函数才会执行。
感谢任何建议。欢呼。
在这种情况下,您可以在父表单或每个子表单中使用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
}
我能让它工作。我了解到,因为我们使用的是MDI,所以MDI本身显然会消耗子窗体中捕获F1单击的任何尝试。我基本上必须设置它,以便在父窗体中定义KeyUp事件,而不是在子窗体中定义KeyUp事件,并且子窗体将简单地从父窗体中填充所需的属性。这就是我如何将必要的信息传递给家长的。此外,我必须将焦点设置在子窗体上的控件上,这样整个事情就可以结合在一起了。
我感谢所有的帮助伙计们。从长远来看,你们都为我指明了正确的道路。欢呼。