【发布时间】:2011-11-20 10:42:40
【问题描述】:
您可能会发现是否已按下 CapsLock 键以订阅 KeyDown/KeyUp 事件。然后根据该输入切换 CapsLock 的状态。这种方法的问题是您需要 CapsLock 键的初始状态才能开始切换。
其中一个应用可能是在登录页面上给用户一个通知(这是我需要的)。
顺便说一句,我使用的是 Silverlight 5。
编辑
here 发布的解决方案说:
但是,您可以通过使用来确定 Capslock 是否开启 实际在 onKeyDown 发送的 KeyEventArgs.PlatformKeyCode。您可以 在此处查找大写锁定的虚拟键代码: http://msdn.microsoft.com/en-us/library/ms927178.aspx
使用此解决方案,您无法确定 CapsLock 状态,因为KeyEventArgs.PlatformKeyCode 返回“表示按下或释放键的整数值(取决于引发的事件)”。因此,如果 CapsLock 处于打开状态并且按下键 A 则 KeyEventArgs.PlatformKeyCode = 65,另一方面,如果 CapsLock 处于关闭状态并且按下键 A 则 KeyEventArgs.PlatformKeyCode = 65。
换句话说,您无法根据KeyEventArgs.PlatformKeyCode 属性确定是否启用了CapsLock。
this问题的答案似乎也有解决方案,它检查了两件事:
- 输入的字母为大写且未按下 Shift 键
- 输入的字母为小写并按下 Sift
这两种情况都意味着 CapsLock 处于打开状态,但这种解决方案也存在问题,给定一个 KeyEventArgs,您可以知道键盘上按下的键,但无法知道该键输出的 Char。
【问题讨论】:
-
或许可以看到这篇文章:forums.silverlight.net/post/185708.aspx
-
相关帖子:How to determine if the Caps Lock is toggled in a Silverlight Application?。从我目前所读到的内容看来,如果不使用 Silverlight 中的键事件,就不可能检测到大写锁定。 :(
-
但是你真的不想在用户开始输入密码框之前提醒他们大写锁定已打开。也许我的用户名全部大写,所以我希望大写锁定并且不要打扰我。但是,当我输入密码时,我看不到它处于打开状态,因此一个很好的警报(如在 Windows 中)会很有帮助。
-
@Bryant 你说得对,在按下任何键之前不需要显示这个,所以我改变了问题的标题。
标签: c# silverlight keyboard silverlight-5.0