【问题标题】:How to catch ESC key press with WndProc?如何使用 WndProc 捕捉 ESC 按键?
【发布时间】:2010-03-21 13:33:37
【问题描述】:

如何使用 WndProc 捕捉 ESC KeyPress?

【问题讨论】:

  • 我假设你的意思是当你的表单有焦点时,在这种情况下我会选择 tommeib 的解决方案。如果没有,您应该提供更多信息。
  • 这与 OP 无关,但对于在 WinForms 程序中处理 Esc 的其他人来说,通常最好的方法是重写 ProcessCmdKey。请参阅 Hans Passant 在此线程上的答案:stackoverflow.com/questions/10468200/key-events-processcmdkey

标签: c# .net winforms


【解决方案1】:

另一个选项(用于表单):

protected override bool ProcessKeyPreview(ref System.Windows.Forms.Message m)
{
  int VK_ESCAPE = 27;
  if (m.Msg == Win32Constants.WM_KEYDOWN && (int)m.WParam == VK_ESCAPE)
  {
    // ...
  }
  return base.ProcessKeyPreview(ref m);
}

【讨论】:

  • WM_KEYDOWN0x0100,顺便说一句。
【解决方案2】:

你为什么要这样做?为什么不将Form的PreviewKey属性设置为true并为KeyUp设置一个全局事件处理程序并检查它...

if (e.KeyCode == Keys.Esc){ //... }

【讨论】:

  • 这不适用于某些键,但似乎可以正常使用转义键。顺便说一句,我相信这是 KeyPreview。
  • Sank's,我已经这样做了。我只是在寻找替代方法)
【解决方案3】:

您需要捕获WM_CHAR 消息并检查WParam

【讨论】:

    【解决方案4】:

    (msg==WM_KEYDOWN) && (wParam==VK_ESCAPE) ... ops 是 c#... 抱歉,这是 win32 api 方式

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 2011-01-16
      • 2012-09-21
      • 1970-01-01
      • 2012-02-28
      • 2011-03-03
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多