Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中获取Windows面板控件中的按键事件#_C#_Winforms_Events_Keypress - Fatal编程技术网

C# 如何在C语言中获取Windows面板控件中的按键事件#

C# 如何在C语言中获取Windows面板控件中的按键事件#,c#,winforms,events,keypress,C#,Winforms,Events,Keypress,我想在c#中的windows面板控件中获取按键事件,是否有任何身体帮助…您应该处理该事件 范例 问题是,最初您的主窗体获得了按键,并将立即将此消息发送到活动控件。如果这不能处理这个按键,它将冒泡到父控件,依此类推 要截取此链,您必须在表单中.KeyPreview到true并在表单中添加处理程序.KeyPress。现在,您可以在表单中处理按下的键。“面板”对象无法正确接收“按键”事件 我已经创建了面板重载: public class PersoPanel : Panel 并使用重写的方法Proc

我想在c#中的windows面板控件中获取按键事件,是否有任何身体帮助…

您应该处理该事件

范例


问题是,最初您的主窗体获得了按键,并将立即将此消息发送到活动控件。如果这不能处理这个按键,它将冒泡到父控件,依此类推

要截取此链,您必须在
表单中.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);
}