输入法——讨厌的全角
今天遇到的一个输入法全/半角的问题,大致情形如下:用户注册界面中对用户名及邮箱进行验证、验证条件中有一项为“半角字符”,即全角字符不合法。
并且验证错误时的提示信息也做的比较粗糙,提示的是什么“用户名允许…字符,长度是多少 ”等等,而恰好没有提示到“半角字符”。
这时候某用户开始了一遍又一遍输入他那全角的英文字符,然而总是注册失败,弄的很郁闷。
唉,用户交互没做好啊!再言之:WinForm里用错误提示大多还是用那种“小红圈”[ErrorProvider],错误提示文本被隐藏了,不能被用户直接看到。
还有当时他似乎也没有看错误提示信息哦。仔细想想 这是用户的错吗? 似乎也不能责怪用户吧!
既然遇到问题了,那就解决吧。
解决思路:当满足以下三个条件中任意一个时便自动将输入法状态改为半角。
1、窗体Activated 事件发生时。
2、Form_Keyup 事件,按下Ctrl + Space时。
3、Form_KeyUp 事件,按下Shift+Space时,呵呵,这样做似乎不太好。
这样做基本上就可以保证用户输入法状态为半角了,不知是否还有疏漏呢?
至于将输入法状态改为半角,我们有相关的API可以调用。
为了使用方便,特将这些封装到工具类中,现与大家分享。
public class ControlTools {// 声明一些API函数 [DllImport("imm32.dll")]public static extern IntPtr ImmGetContext(IntPtr hwnd); [DllImport("imm32.dll")]public static extern bool ImmGetOpenStatus(IntPtr himc);
// 暂时没有用到,觉得这个API似乎有问题。 [DllImport("imm32.dll")] public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);
[DllImport("imm32.dll")]public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2); [DllImport("imm32.dll")]public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);private const int IME_CMODE_FULLSHAPE = 0x8;private const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11; private Form mFrm; public ControlTools(Form frm) {this.mFrm = frm; }
// 输入法全角转半角public void FullToHalf() {this.mFrm.KeyPreview = true;this.mFrm.Activated += new EventHandler(mFrm_Activated);this.mFrm.KeyUp += new KeyEventHandler(mFrm_KeyUp); } private void mFrm_KeyUp(object sender, KeyEventArgs e) {if ((e.Control || e.Shift) && e.KeyCode == Keys.Space) {this.mFrm_Activated(null, null); } } private void mFrm_Activated(object sender, EventArgs e) {try { IntPtr HIme = ImmGetContext(this.mFrm.Handle);// 如果输入法处于打开状态 if (!ImmGetOpenStatus(HIme)) {return; } int iMode = 0;int iSentence = 0;// 检索输入法信息 bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);if (bSuccess) {// 如果是全角,转换成半角 if ((iMode & IME_CMODE_FULLSHAPE) > 0) { ImmSimulateHotKey(this.mFrm.Handle, IME_CHOTKEY_SHAPE_TOGGLE); } } }catch (Exception ex) { Console.WriteLine(ex.Message); } } }
输入法——讨厌的全角相关推荐
- 彻底关闭 输入法 讨厌的全角
win7 平台 转载于:https://blog.51cto.com/990487026/1874181
- 输入法中的全角和半角
遇到的问题 刚刚在使用输入法(微软拼音),不小心按了貌似是Shift+空格,然后打英文就变成了这样abcdefg,看着像有空格是吧,实际上我打的这个几个字母都是连续的 原因 经过了解才知道半角和全角的 ...
- 输入法中的全角与半角
问:输入法为什么有全角半角之分 这要从发展史说起: 1. 二进制 计算机普遍遵循冯诺依曼结构体系,它规定了计算机内部以二进制为主要数制(这和电路有关),所以计算机只认识二进制的0或1.其它符号比如十进 ...
- 输入法半角和全角的快捷转换_日语输入法究极指南
阅读数:53396 ·清音(以平假名为例,片假名是一样的) あ a い i う u え e お o か ka き ki く ku け ke こ ko さ sa し shi す su せ se そ ...
- 输入法中的全角和半角是什么,角又是什么
角是日语的角,不是中文的角,这里的意思是四边形,日语叫四角形,也有道理,有四个角嘛. 全角就是这个四边形是完全的,也就是方的,中文的字正好是方的. 半角就不用多说了,就是半个四边形,普通的英文字母正好 ...
- 输入法半角和全角的快捷转换_华宇拼音输入法 一款完全免费的国产输入法_第1页...
华宇拼音输入法历史追溯 "华宇拼音输入法"是华宇自主研发的一款文字输入软件,其历史可以追溯到二十多年前. 1999年 华宇拼音输入法初入江湖,前身是李国华博士编写的&q ...
- 输入法半角和全角的快捷转换_Windows 10—禁用Ctrl+Space输入法非输入法切换
问题 Windows 10 默认使用"Ctrl+Sapce"快捷键来开启或禁用中文输入法,如下图,并且这个快捷键怎么修改也无效.这个影响很多软件快捷键的使用. 解决方法 更新: 修 ...
- Windows10系统自带输入法如何切换全角/半角字符
有些时候因为测试需要,所以需要区分输入的全角字符和半角字符. 全角字符是指一个字符占据俩个标准字符的位置. 半角字符是指一个字符占据一个标准字符的位置. 一个字符是一个字节. 一个字节是8个比特位. ...
- Win10 取消百度输入法 Shift+Space 全角半角切换
问题描述 在百度输入法中,按下shift+空格,会自动进行全角与半角切换,这会导致在敲代码时 写着写着就出现以下情况: #include <iostream> using namespac ...
最新文章
- keras 的 example 文件 deep_dream.py 解析
- java----代理机制或动态类的生成
- 考前多熟记的知识点(1)~(3)《系统集成项目管理工程师软考辅导》
- 基于 Knative 低成本部署在线应用,灵活自动伸缩
- C#Socket开发TCP详解(二)
- 世纪佳缘,玫瑰和面包开始PK
- dbms_metadata.get_ddl的使用总结
- 【渝粤题库】陕西师范大学202421 教育管理心理学 作业 (专升本)
- goim 中的 data flow 数据流转及思考
- Ansible8:Playbook循环
- 数据结构与算法之-----总览
- 16进制转base64_《蹲坑学K8S》之19-5:二进制部署Calico网络
- Atitit 数据库view视图使用推荐规范与最佳实践与方法
- VS2008个人博客系统
- python之爬取中华诗词网
- 计算机组成原理定点源码一位乘,计算机组成原理课程设计-定点原码一位乘法器的设计.doc...
- 适配层java接口_Linux Framebuffer适配层释疑
- python合并单元格的快捷键是什么_【答疑】wps word表格如何合并单元格,快捷键是什么? - 羽兔网问答...
- 数据分析 | 多元线性回归
- 解决办法之Duplicate entry ‘1‘ for key ‘PRIMARY‘