【问题标题】:Problems Detecting Alt Key on the Control.KeyUp event在 Control.KeyUp 事件中检测 Alt 键时出现问题
【发布时间】:2011-01-14 15:37:15
【问题描述】:

我有一个带有 KeyDown 和 KeyUp 事件的控件,如下所示。我遇到的问题是“x”在 KeyDown 中为 TRUE,但在 KeyUp 中始终为 FALSE。我正在尝试检测 Alt 键(您可能已经猜到了)。

有没有我不知道的问题。我的意思是,当我按下 Alt 时,它检测到它可以,但在键盘上它是错误的。

任何建议/想法

谢谢

    private void MyControl_KeyDown(object sender, KeyEventArgs e)
    {
        bool x;
        x = ((int) (e.KeyData & Keys.Alt) != 0);
        x = (e.KeyData & Keys.Alt) == Keys.Alt;
        x = e.Alt;
    }
    private void MyControl_KeyUp(object sender, KeyEventArgs e)
    {
        bool x;
        x = ((int) (e.KeyData & Keys.Alt) != 0);
        x = (e.KeyData & Keys.Alt) == Keys.Alt;
        x = e.Alt;
    }

【问题讨论】:

    标签: c# events keyboard


    【解决方案1】:

    您是否尝试检测 Alt+[letter] 事件?是这样,试试这个:

            private void YourControl_KeyDown(object sender, KeyEventArgs e)
            {
              if((e.Alt) & (e.KeyCode  == Keys.X))
              {
                MessageBox.Show("Alt-X pressed");
              }
            }
    

    对于 Alt,试试这个:

        private void YourControl_KeyDown(object sender, KeyEventArgs e)
        { 
            if (e.KeyCode  == Keys.Menu)
            {
                //YourCode
                e.Handled = true;
            }
        }
    
        private void YourControl_KeyUp(object sender, KeyEventArgs e)
        { 
            if (e.KeyData == Keys.Menu)
            {
                //YourCode
                e.Handled = true;
            }
        }
    

    【讨论】:

    • 不,我只是想检测 Alt 键而已,没有组合。
    • 我在上面的答案中添加了 Alt 的代码。因为 Alt 用于显示菜单,所以您必须执行 e.Handled=true ,除非您只想捕获 50% 的 Alt 按下。 KeyUp 的检查与 KeyDown 的检查略有不同(见上文)。这对你有用吗?
    【解决方案2】:

    我希望你不只是在你的类中设置一个 bool 成员变量来响应 Alt 键被按下。

    如果您想知道在执行代码以响应其他事件(例如鼠标事件)时 Alt 键是否按下,请使用 Control.ModifierKeys 属性,因为它更可靠。这也意味着您没有多余的成员变量。

    如果您实际上是在尝试检测用户是否自己按下了修改键,那么@bluecoder 的解决方案可能就是您想要的。

    【讨论】:

      【解决方案3】:

      如果您想检测真正的按键(Alt 或任何其他键),您可以使用此代码。此代码适用于 KeyUp、KeyDown 和其他按键事件

      private void YourControl_KeyDown(object sender, KeyEventArgs e)
      {
         Key _key = e.Key != Key.System ? e.Key : e.SystemKey;
         // _key is your real pressed key
      }
      

      【讨论】:

        猜你喜欢
        • 2020-06-27
        • 2014-03-11
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        • 2012-05-26
        相关资源
        最近更新 更多