【问题标题】:How to catch a key press on a C# .NET form如何捕捉 C# .NET 表单上的按键
【发布时间】:2019-05-16 16:59:14
【问题描述】:

我有一个包含很多控件的父窗体。我想要做的是过滤该表单的所有按键。问题是如果焦点在窗体上的某个控件上,那么父窗体就没有得到按键事件,那么如何捕获按键事件呢?

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    在您的表单上将 KeyPreview 设置为 true,您将捕捉到它们:MSDN

    【讨论】:

      【解决方案2】:

      这仅适用于表单,但如果任何其他组件处于焦点位置则无效

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

      【讨论】:

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