【问题标题】:In .Net, what's the better choice to code key presses in keyboard, key-up or keydown?在.Net中,在键盘、上键或下键中编码按键的更好选择是什么?
【发布时间】:2008-11-04 03:06:44
【问题描述】:

这两个事件是相同的还是我们在编码键盘按下时应该注意的区别?

【问题讨论】:

    标签: c# .net vb.net winapi


    【解决方案1】:

    我在这里的回答只是基于对不同应用程序的试验,而不是编程本身。

    处理按键。让它成为你逻辑的触发器。这就是用户基于与其他应用程序交互所期望的。

    例如,尝试在记事本中按下一个键,您会看到 DOWN 会触发记事本中的反应。它不会等待 UP。

    【讨论】:

    • 这个 - 试着按住一个键 - 它会重复,即使你还没有放开。这些是您应该处理的事件。
    【解决方案2】:

    是否是 .Net 并不重要,重要的是用户的期望。 Keydown 是响应四个箭头键的好时机。字符输入是响应可见字符输入的好时机。 Keyup 通常是响应任何将对文档产生影响的操作的好时机,但如果是用户希望立即生效的游戏,keydown 会更好。

    【讨论】:

      【解决方案3】:

      这并不是“.NET 的更好选择”。

      您确实必须考虑如何响应按键。如果您想知道某人在文本框中输入的内容,通常最好等到他们发布后再决定他们在做什么。但是,如果它是一款游戏,您想在按下它的瞬间做出响应,那么您会使用 KeyDown。

      KeyDown 是按键被按下的那一刻。 KeyUp 是在密钥释放之后。

      【讨论】:

        【解决方案4】:

        考虑到我以前遇到过问题的一件事:

        如果您在按键按下时处理了更改窗口或更改 UI 组件焦点的操作,那么新的 UI 元素有时可能获得按键按下事件。

        这发生在我上一份工作中。我们在一个表单上有一个控件,在按下键时,它会加载一个新表单。如果新表单加载得足够快,那么新表单将在用户释放键之前获得焦点,并且新表单将获得 key up 事件。我们在第二个表单上有一个 UI 控件,它对按键做出反应,它有时会被无意触发。

        这个故事的寓意是;保持一致。选择其中一个并坚持下去:)

        【讨论】:

          【解决方案5】:

          key down 事件在用户按下某个键时发生,key up 事件在用户按下后松开键时发生。

          因此,如果您使用 key up 事件,并且用户按下一个键并按住它 5 秒钟,那么在他们放开它之前什么都不会发生。

          (注意:我对 .net 一无所知,我只是在其他库中使用过 'key up' 和 'key down' 事件。)

          【讨论】:

          • 您的键向上/向下键向后。
          • 我想你会想把第一句中的“depress”改为“release”。
          • 哦,我以为它的意思是“press”的反义词,但查了一下,它看起来像是“press”的同义词。 :/ 所以我想我会改变它,谢谢!
          【解决方案6】:

          我几乎总是使用 KeyDown,因为这样我就可以使用 e.Handled=True 并停止 keyevent 从文本框移动到容器并在我想要的事件中向下移动。您也可以在 KeyUp 中使用 e.Handled ,但是它“迟到了”,因为用户输入的密钥将显示在文本框中,如果您想阻止用户在其中输入数字,则必须手动将其取走文本框。

          【讨论】:

            【解决方案7】:

            另一件要考虑的事情:当持有修饰符时,使用 keydown 很重要。我一般使用keydown来设置像ctrlPressed=true这样的变量;然后使用 keyup 取消设置该变量ctrlPressed=false;

            我通常对所有字母数字字符使用 keyPressed。

            这种系统允许您启用诸如 CTRL+K+C ala Visual Studio

            之类的功能

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-03-12
              • 2016-08-31
              • 1970-01-01
              • 2012-09-30
              • 2021-04-21
              相关资源
              最近更新 更多