.NET的Windows应用程序对中文输入法支持的问题 【转载】

该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!

陈希章

原文地址:http://www.cnblogs.com/chenxizhang/archive/2009/03/12/1409763.html
原文标题:.NET的Windows应用程序对中文输入法支持的问题 【转载】
原文发表:2009/3/12 8:28:00

以下内容转载自:http://blog.csdn.net/netcoder/archive/2009/02/18/3907472.aspx

这不是一个新问题了,网上也不乏这方面的讨论,写出来也是为了理清自己的思路,难保以后不会碰到类似的问题。

主要有两种表现:

1、首次切换输入法失败的问题
具体表现如下:
比如有一个Form1上有一个TextBox1,两者的ImeMode属性都为NoControl。
运行程序,弹出Form1,光标停留在TextBox1中,此时按下Ctrl+Shift或者Ctrl+Space打开输入法,会发现输入法状态条是灰的,必须用鼠标点击一下输入法状态条或者再次按下Ctrl+Shift或者Ctrol+Space才能正常激活输入法输入中文.

2、输入法打开时自动切换成全角状态的问题
具体表现如下:
比如有一个Form1上有一个TextBox1和TextBox2,三者的ImeMode属性都为On。
运行程序,弹出Form1,光标停留在TextBox1中,因TextBox1的ImeMode属性为On,不会出现上述的问题(1)了,但输入法调出来的时候就是全角状态,手工切换会半角,输入几个文字,再把光标移动到TextBox2中,又变成了全角了。。。

幸运的是,对于每一个TextBox控件(不仅仅TextBox),问题(1)和(2)都只会出现一次。如果重新打开窗体,还会再次出现,很明显是.NET程序上的逻辑错误,没有处理好“第一次”的问题。
补充一点:根据网上的讨论,上述问题是否会出现还和用户具体使用的输入法有关系,极端情况是无论怎么折腾都输不进汉字。

问题的根结不在VS2005,而是在.NET Framework 2.0,微软已经为此问题提供了补丁,但根据反馈表明,问题依然存在,网上也有人提出了一些间接的解决办法,但效果差强人意。

相对简单的处理办法:

(1)对于可能会输入中文的控件,一律ImeMode属性为On

(2)对于不可以输入中文的控件(电话,QQ号等),一律ImeMode属性为Disable

作者:陈希章
出处:http://blog.csdn.net/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值