【发布时间】:2008-11-04 03:06:44
【问题描述】:
这两个事件是相同的还是我们在编码键盘按下时应该注意的区别?
【问题讨论】:
这两个事件是相同的还是我们在编码键盘按下时应该注意的区别?
【问题讨论】:
我在这里的回答只是基于对不同应用程序的试验,而不是编程本身。
处理按键。让它成为你逻辑的触发器。这就是用户基于与其他应用程序交互所期望的。
例如,尝试在记事本中按下一个键,您会看到 DOWN 会触发记事本中的反应。它不会等待 UP。
【讨论】:
是否是 .Net 并不重要,重要的是用户的期望。 Keydown 是响应四个箭头键的好时机。字符输入是响应可见字符输入的好时机。 Keyup 通常是响应任何将对文档产生影响的操作的好时机,但如果是用户希望立即生效的游戏,keydown 会更好。
【讨论】:
这并不是“.NET 的更好选择”。
您确实必须考虑如何响应按键。如果您想知道某人在文本框中输入的内容,通常最好等到他们发布后再决定他们在做什么。但是,如果它是一款游戏,您想在按下它的瞬间做出响应,那么您会使用 KeyDown。
KeyDown 是按键被按下的那一刻。 KeyUp 是在密钥释放之后。
【讨论】:
考虑到我以前遇到过问题的一件事:
如果您在按键按下时处理了更改窗口或更改 UI 组件焦点的操作,那么新的 UI 元素有时可能获得按键按下事件。
这发生在我上一份工作中。我们在一个表单上有一个控件,在按下键时,它会加载一个新表单。如果新表单加载得足够快,那么新表单将在用户释放键之前获得焦点,并且新表单将获得 key up 事件。我们在第二个表单上有一个 UI 控件,它对按键做出反应,它有时会被无意触发。
这个故事的寓意是;保持一致。选择其中一个并坚持下去:)
【讨论】:
key down 事件在用户按下某个键时发生,key up 事件在用户按下后松开键时发生。
因此,如果您使用 key up 事件,并且用户按下一个键并按住它 5 秒钟,那么在他们放开它之前什么都不会发生。
(注意:我对 .net 一无所知,我只是在其他库中使用过 'key up' 和 'key down' 事件。)
【讨论】:
我几乎总是使用 KeyDown,因为这样我就可以使用 e.Handled=True 并停止 keyevent 从文本框移动到容器并在我想要的事件中向下移动。您也可以在 KeyUp 中使用 e.Handled ,但是它“迟到了”,因为用户输入的密钥将显示在文本框中,如果您想阻止用户在其中输入数字,则必须手动将其取走文本框。
【讨论】:
另一件要考虑的事情:当持有修饰符时,使用 keydown 很重要。我一般使用keydown来设置像ctrlPressed=true这样的变量;然后使用 keyup 取消设置该变量ctrlPressed=false;
我通常对所有字母数字字符使用 keyPressed。
这种系统允许您启用诸如 CTRL+K+C ala Visual Studio
之类的功能【讨论】: