.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
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的:([随笔分类]Microsoft,.NET)