.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的类。
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.
解决方法是把系统默认的输入法改掉,改成英文或日文的就可以了:
源码