【问题标题】:How to get Keypress event in Windows Panel control in C#如何在 C# 中的 Windows 面板控件中获取 Keypress 事件
【发布时间】:2011-01-09 01:57:51
【问题描述】:

我想在 c# 中的 windows 面板控件中获取按键事件,对我有任何帮助吗...

【问题讨论】:

  • 点击面板。 (面板的)属性的第二个选项卡显示它可以触发的事件。双击 KeyPressEvent 和瞧
  • @PowerRoy,这不起作用,Panel 没有公开 KeyPressEvent 方法。它只公开 PreviewKey 事件。
  • PreviewKey 如果您在其 mousedown 事件中将焦点设置到 paenl,则可以正常工作。

标签: c# winforms events keypress


【解决方案1】:

您应该处理Panel.KeyPress 事件。

示例

public void MyKeyPressEventHandler(Object sender, KeyPressEventArgs e)
{
    ... do something when key is pressed.
}

...

(MyPanel as Control).KeyPress += new KeyPressEventHandler(MyKeyPressEventHandler);

【讨论】:

  • 嗨,谢谢,实际上我没有为我的面板控制获取 Keypress Eventhandler,你能告诉我如何得到它吗?
  • 试试詹姆斯写的例子。 (MyPanel as Control).KeyPres 将在那里,如果你准确地写 (MyPanel as Control) MyPanel 是你的窗口面板控件。
  • 我知道这在游戏中有点晚了,但是面板控件不会收到没有焦点的 Key 相关事件,并且单击面板不会自然地获得焦点。您可以通过在 Panel 的 MouseDown 事件处理程序中调用 MyPanel.Focus() 来解决此问题。一旦面板获得焦点,KeyUp、KeyDown 和 KeyPress 事件就会起作用,即使没有在父窗体上激活 KeyPreview。
  • @user1689175 这是一个相当老的答案,事实上,如果您现在检查文档,他们会指出不建议使用 Panel.KeyPress。但是,您需要查看所提出的问题,没有上下文,这是一个直接的问题,得到了直接的答案。
【解决方案2】:

问题是,一开始你的主窗体得到了 KeyPress 并且会立即将此消息发送到活动控件。如果这不能处理这个按键,它将被冒泡到父控件等等。

要拦截这个链,你必须在你的Form.KeyPreviewtrue 中添加一个处理程序到Form.KeyPress。现在您可以在表单中处理按下的键了。

【讨论】:

    【解决方案3】:

    “Panel”对象无法正确接收“KeyPress”事件。

    我已经创建了Panel 重载:

    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);
    }
    

    【讨论】:

      【解决方案4】:

      面板 + 按键 - C# 讨论区 - CodeProject

      http://www.codeproject.com/Messages/704386/Panel-plus-Keypress.aspx

      【讨论】:

        猜你喜欢
        • 2016-01-02
        • 2015-06-17
        • 2014-05-12
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        相关资源
        最近更新 更多