我们有些项目,经常做日本的外包。
其中常常提及输入法的问题,比如一个输入姓名文本框,要求光标进去的时候,自动切换成日文的输入法。
怎么做呢?
一般的控件都有一个属性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的类。
1
Public Class MyTextBoxClass MyTextBox
2
Inherits TextBox
3
End Class
输入法控制具体的函数如下:
1
Private Sub controlIme()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 on 2005-12-21 21:52
MasterCai 阅读(1354)
评论(4) 编辑 收藏 所属分类:
VB.Net
发表评论
我的系统是日文,用的日文的Visual Stadio,直接设置ime-mode就可以了。并不用这么复杂啊。
因为你的默认输入法是日文的,这是一个巧合,所以设置一下imemode就可以了!
但是日本客户的机器上默认输入法不一定是日文的,极有可能是英文的!
通过这种方法,可以做到万无一失!
但是日本客户的机器上默认输入法不一定是日文的,极有可能是英文的!
通过这种方法,可以做到万无一失!
——————————————————————————————————
我在日本软件公司,我周围的人的WindowsXP里面都是日文输入法。所谓英文输入法,也是日文输入法的一部分,没有所谓的默认英文输入法的问题。
另外,我的机器里装有中文输入法,我有你的程序进行了测试。如果我把输入法放到中文,TextBox获得焦点的时候,并不能变成日文输入法,不知道有什么解决办法没有?
楼上的可能对默认输入法理解有误!
你说“英文输入法,也是日文输入法的一部分”,实际上这个并不是英文输入法。
请看文章中最后一个图,作者装有3套输入法,英文、日文和中文,日文下又有两种,
中文下有好几种,英文只有一种。默认的输入法是指大类!
还有一个问题
“我把输入法放到中文TextBox获得焦点的时候,并不能变成日文输入法”,
正常的现象是这个控件第一次获取焦点的时候,会切换到日文输入法!
实际上控件有记忆的功能,如果你人为的在这个控件获取焦点的时候,改变输入法,则当然不会变成日文输入了!因为这个时候这个控件的IMeMode被你改掉了,不是原来的Hiragana了,可能是ON!