C# 如何在C语言中获取Windows面板控件中的按键事件#
我想在c#中的windows面板控件中获取按键事件,是否有任何身体帮助…您应该处理该事件 范例C# 如何在C语言中获取Windows面板控件中的按键事件#,c#,winforms,events,keypress,C#,Winforms,Events,Keypress,我想在c#中的windows面板控件中获取按键事件,是否有任何身体帮助…您应该处理该事件 范例 问题是,最初您的主窗体获得了按键,并将立即将此消息发送到活动控件。如果这不能处理这个按键,它将冒泡到父控件,依此类推 要截取此链,您必须在表单中.KeyPreview到true并在表单中添加处理程序.KeyPress。现在,您可以在表单中处理按下的键。“面板”对象无法正确接收“按键”事件 我已经创建了面板重载: public class PersoPanel : Panel 并使用重写的方法Proc
问题是,最初您的主窗体获得了按键,并将立即将此消息发送到活动控件。如果这不能处理这个按键,它将冒泡到父控件,依此类推 要截取此链,您必须在
表单中.KeyPreview
到true
并在表单中添加处理程序.KeyPress
。现在,您可以在表单中处理按下的键。“面板”对象无法正确接收“按键”事件
我已经创建了面板
重载:
public class PersoPanel : Panel
并使用重写的方法ProcessCmdKey
:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
要截取按下的键:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
MessageBox.Show("You press " + keyData.ToString());
// dO operations here...
return base.ProcessCmdKey(ref msg, keyData);
}
面板+按键-C#讨论板-代码项目
你好,谢谢。实际上,我的面板控件没有使用Keypress Eventhandler。你能告诉我如何使用它吗?试试James写的例子。(MyPanel作为控件)。如果您准确地写下(MyPanel作为控件)MyPanel是您的windows面板控件的位置,KeyPres将在那里。我知道这在游戏中有点晚了,但是面板控件在没有焦点的情况下不会接收与键相关的事件,并且单击面板自然也不会给它焦点。您可以通过在面板的MouseDown事件处理程序中调用MyPanel.Focus()来解决这个问题。面板具有焦点后,即使在父窗体上未激活KeyPreview,KeyUp、KeyDown和KeyPress事件也会起作用。@user1689175这是一个相当古老的答案,事实上,如果您现在检查文档,它们表明不建议使用
面板。KeyPress
。然而,你需要看看被问的问题,没有上下文,这是一个直接的问题,给出了一个直接的答案。点击面板。(面板的)属性的第二个选项卡显示它可以触发的事件。双击KeyPressEvent并单击voila@PowerRoy,这将不起作用,面板不公开KeyPressEvent方法。它仅公开PreviewKey事件。如果在其mousedown事件中将焦点设置为paenl,PreviewKey工作正常。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
MessageBox.Show("You press " + keyData.ToString());
// dO operations here...
return base.ProcessCmdKey(ref msg, keyData);
}