【发布时间】:2019-05-16 16:59:14
【问题描述】:
我有一个包含很多控件的父窗体。我想要做的是过滤该表单的所有按键。问题是如果焦点在窗体上的某个控件上,那么父窗体就没有得到按键事件,那么如何捕获按键事件呢?
【问题讨论】:
我有一个包含很多控件的父窗体。我想要做的是过滤该表单的所有按键。问题是如果焦点在窗体上的某个控件上,那么父窗体就没有得到按键事件,那么如何捕获按键事件呢?
【问题讨论】:
在您的表单上将 KeyPreview 设置为 true,您将捕捉到它们:MSDN
【讨论】:
这仅适用于表单,但如果任何其他组件处于焦点位置则无效
public partial class ChildForm : Form
{
public ChildForm()
{
KeyPress += KeyPressHandler;
}
public KeyPressHandler(object sender, KeyPressEventArgs e)
{
if (_parent != null)
{
_parent.NotifyKeyPress(e);
}
}
}
即使在其他组件处于焦点时也可以使用
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F1)
{
MessageBox.Show("You pressed the F1 key");
return true; // indicate that you handled this keystroke
}
// Call the base class
return base.ProcessCmdKey(ref msg, keyData);
}
【讨论】: