【问题标题】:Focus should not move on arrow keys in C#焦点不应移动到 C# 中的箭头键上
【发布时间】:2011-03-29 20:52:08
【问题描述】:

我正在为 PTZ 开发一个应用程序,我已经采用了一个网格,当我按下向上箭头键时,然后在 UP Arroa 键的 KeyDown 事件上,我开始我的运动,而在 KeyUp 上,即使我正在停止运动。但是当我按下箭头键时,它的 KeyDown 事件被调用,然后焦点被移动到另一个控件,所以它的 KeyUp 没有被调用......所以我想在箭头键上停止这个焦点移动,这样我就可以得到这两个事件...... ..那么如何做到这一点。

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    我建议您阅读WPF Routed Events system。具体来说,如果您查看隧道或"Preview" events,您会发现您应该能够捕获并抑制导致您出现问题的关键事件。

    【讨论】:

      【解决方案2】:

      我猜你可以覆盖它。

      这可能会有所帮助: How to disable navigation on WinForm with arrows in C#?

      【讨论】:

      • 他没有使用 WinForms(问题被标记为 WPF),所以事件处理不一样。有趣的是,还有 Preview 事件。
      • 我无意让任何问题看起来更好或更糟。答案可以根据自己的优点而定。但是您的回答确实引导人们采用类似但不正确的方法来处理 WPF 中的这种情况,我认为这种澄清值得评论。
      • 这就是它的意图(弱酱)。
      【解决方案3】:

      您可以使用来自Diamonddrake 的代码 sn-p,如下所示: 将 sn-p 粘贴到表单正文中,例如其他方法

          protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
              {
                  if ((keyData == Keys.Right) || (keyData == Keys.Left) ||
                      (keyData == Keys.Up) || (keyData == Keys.Down))
                  {
                      //Do custom stuff or nothing.
                      //true if key was processed by control, false otherwise
                      return true;
                  }
                  else
                  {
                      return base.ProcessCmdKey(ref msg, keyData);
                  }
              }
      

      请注意,对于像 ComboBox 这样的某些控件,可能需要使用上下键在 Item 之间上下滚动,因此如果您想使用它们,请删除这部分 sn-p (keyData == Keys.Up) || (keyData == Keys.Down)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 2017-12-02
        相关资源
        最近更新 更多