.NET中对于输入法的控制

我们有些项目,经常做日本的外包。
其中常常提及输入法的问题,比如一个输入姓名文本框,要求光标进去的时候,自动切换成日文的输入法。
怎么做呢?
一般的控件都有一个属性
ImeMode.
MSDN(ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemwindowsformsimemodeclasstopic.htm)
中的解释如下
指定一个该值是用来确定在定了时该对象的入法编辑 (IME) 的状
入法编辑 (IME) 户输入和编辑中文、日和朝鲜语字符。IME 是用于写中文、日和朝鲜语脚本的基本件。写体系具有的字符比可规键盘编码的字符要多。言的 IME 使用描述个字符或成字符的基字符序列,以便允入范围较广的一字符。基字符可以是来自朝文音的成分字母、日语汉字字符的拼音成分,或者中文字符的各种组


 

名称

Alpha

字母数字字符 (SBC)。此仅对鲜语和日 IME 有效。

AlphaFull

字母数字双字字符。此仅对鲜语和日 IME 有效。

Disable

IME 被禁用。如果使用此置,无法从键盘 IME,而且 IME 窗口藏状

Hangul

SBC。此仅对鲜语 IME 有效。

HangulFull

DBC。此仅对鲜语 IME 有效。

Hiragana

平假名 DBC。此仅对 IME 有效。

Inherit

承父控件的 IME 模式。

Katakana

片假名 DBC。此仅对 IME 有效。

KatakanaHalf

片假名 SBC。此仅对 IME 有效。

NoControl

无(默)。

Off

IME 关闭。此模式指示 IME 关闭意味着该对象的行方式与英语输入模式相同。此仅对体中文和繁体中文 IME 有效。

On

IME 已打。此指示 IME 已打,可以入中文或日特定的字符。此仅对体中文和繁体中文 IME 有效。

 

就是说比如你要这个控件获取焦点的时候输入法自动变成日文的,把它设置成Hiragana就可以了,我试了一下没有效果,郁闷。
可见光设置这个属性,基本上没有什么用处,发现还要跟当前线程的当前言有关系,我把InputLanguage改成日文的,把ImeMode设置成Hiragana,效果就出来了
所以变更当前的线程语言+IME属性的控制才是解决方法。
基本的思路
在控件获取焦点的时候,切换当前
线程的当前言和IMEMode属性中设置的值相对应。
失去焦点的时候,还原输入法。
我们先定义一个MyTextBox的类。

1Public Class MyTextBox
2    Inherits TextBox
3End Class
 


输入法控制具体的函数如下:
 1Private Sub controlIme()  2        Select Case Me.ImeMode  3            Case ImeMode.Alpha, ImeMode.AlphaFull, ImeMode.Hiragana, ImeMode.Katakana, ImeMode.KatakanaHalf  4                '日文输入  5                System.Windows.Forms.Application.CurrentInputLanguage = InputLanguage.FromCulture(New System.Globalization.CultureInfo("ja-JP"))  6            Case ImeMode.Hangul, ImeMode.HangulFull  7                '朝鲜语??  8                System.Windows.Forms.Application.CurrentInputLanguage = InputLanguage.FromCulture(New System.Globalization.CultureInfo("ko-KR"))  9            Case ImeMode.Disable 10                ' 11            Case ImeMode.Inherit 12                ' 13            Case ImeMode.NoControl 14                ' 15            Case ImeMode.Off 16                ' 17            Case ImeMode.On 18                ' 19 20        End Select 21    End Sub
以上问题都解决了,比如日文输入,把这个控件的IMEMode改成Hiragana就可以了。
程序效果:


其他输入法的问题都可以从这个例子中得到启示。

测试发现在中文环境的机器上没有效果,日文环境一般没有任何问题.
我试了一下,发现如果系统默认的输入法是中文的,则设置Hiragana没有效果,控件获取焦点后输入法都会变成ON.
解决方法是把系统默认的输入法改掉,改成英文或日文的就可以了:



源码
posted @ 2005-12-21 21:52 MasterCai 阅读(...) 评论(...) 编辑 收藏