当用户键入到VB.Net文本框中时,我想要检测按键(假设我在写入文本后无法从文本框中读取文本)。这对英语很容易(通过使用e.KeyChar或Keys。[A,B,C,...等])。但是,如果我将Windows中的默认键盘从英语更改为另一种语言(如阿拉伯语或波斯语),仍然会检测到英文字符(尽管正在输入阿拉伯语或波斯语)。在VB.NET中检测非英文KeyPress
回答
键码仅仅是从键盘接收到的信号 - 操作系统将这些解释为当前输入语言。
如果要测试输入的最后一个字符是否属于特定语言,您需要直接从文本框中测试字符(检查该值是否落入正确的Unicode范围内)。
恐怕我需要知道它在文本框中的字符。 – Muhammad
您可以通过创建一个将ASCII键码映射到您在键盘上看到的波斯字符的表来实现。
VB:
'Create a look-up table
Dim Chars(256) As String
Chars(Asc('Q')) = 'ض';
Chars(Asc('W'))= 'ص';
Chars(Asc('E')) = 'ث';
' and so on...
'Now get it
Dim persianChar As String = Chars(e.KeyValue); 'You have your character
C#:
//Create a look-up table
char[] chars = new char[256];
chars['Q'] = 'ض';
chars['W'] = 'ص';
chars['E'] = 'ث';
// and so on...
//Now get it
char persianChar = chars[e.KeyValue]; //You have your character
我曾经想过做这样的事情,但问题是我必须映射我工作的每种语言。没有办法检测出输入内容和语言的内容吗? – Muhammad
这种硬伤只能很容易,如果你使用的KeyDown代替KeyPress事件解释。 KeyDown事件报告虚拟键,它们的名字是根据原IBM PC键盘的布局,英文版的。 Keys
类型在.NET框架中声明它们。
然后,Windows使用选定的键盘布局进一步处理KeyDown事件。潜在的winapi功能是ToUnicodeEx()。它有很多参数,关键的是lpKeyState(记录修改键和死键状态)和dwhkl(选定的键盘布局)。更改机器上的键盘布局会修改最后一个参数。然后,它返回KeyPress事件,如果keystroke表示键入键,则它的e.KeyCode参数是utf-16 Unicode代码点。
不要试图自己解释KeyDown事件。您应该重写ProcessCmdKey()以检测快捷键(如Ctrl + F1)。始终使用KeyPress事件来输入密钥。
谢谢你的解释,但是我恐怕大部分都在我的头上;恐怕你需要把它降到我的理解水平。 我的理解是,使用ToUnicodEx可以检测键盘语言,从而能够将按键映射到键盘语言中的字符? 你能写几行吗? – Muhammad
“双手”也过了我的头。使用KeyPress事件。 –
- 1. 检测非英文格式
- 2. 检测文本是否为非英文
- 3. PHP检测如果非英文
- 4. python3检测unicode非英语?
- 5. Firefox中的jQuery @ Keypress检测
- 6. 在Python中检测非英文字符的字符串
- 7. 使用jQuery在IFRAME中检测keyPress
- 8. jQuery - keydown/keypress/keyup ENTERKEY检测?
- 9. Visual Basic脚本 - KeyPress检测?
- 10. 检测字符串中的非英文字符
- 11. 检测文本中的英文单词
- 12. 在vb.net中检测文本的宽度
- 13. 在VB.NET中检测文本封装
- 14. 在文本框中检测粘贴 - vb.net
- 15. VB.NET如何强制Asc在非英文系统上使用英文代码页
- 16. 如何检测UITextField中的KeyPress事件?
- 17. PHP - 检测非英文字母和过滤输入
- 18. 检索非英文字符的网址
- 19. 在javascript中测试小写和大写非英文字符
- 20. Android,从keyPress检测COM端口
- 21. 在MySQL数据库中检索非英文字符插入值
- 22. 检测重复的英文名称
- 23. 从非英文文件名和非英文文本中读取C++
- 24. 在Python中转换非英文字符
- 25. 在python中,提取非英文单词
- 26. 在android中支持非英文字符
- 27. 在MySQL中订购非英文字母
- 28. 在Android中注入非英文字符
- 29. 在C中处理非英文字符#
- 30. 在控制台mfc程序中检测到escape keypress
键码被检测到。这些由操作系统解释为不同的语言。 – Oded