我们有些项目,经常做日本的外包。
其中常常提及输入法的问题,比如一个输入姓名文本框,要求光标进去的时候,自动切换成日文的输入法。
怎么做呢?
一般的控件都有一个属性
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 on 2005-12-21 21:52 MasterCai 阅读(1354) 评论(4)  编辑 收藏 所属分类: VB.Net

  回复  引用    
2005-12-29 08:20 | RoninBlade [未注册用户]
我的系统是日文,用的日文的Visual Stadio,直接设置ime-mode就可以了。并不用这么复杂啊。
  回复  引用    
2005-12-29 08:45 | haha1234 [未注册用户]
因为你的默认输入法是日文的,这是一个巧合,所以设置一下imemode就可以了!
但是日本客户的机器上默认输入法不一定是日文的,极有可能是英文的!
通过这种方法,可以做到万无一失!
  回复  引用    
2005-12-29 08:57 | RoninBlade [未注册用户]
但是日本客户的机器上默认输入法不一定是日文的,极有可能是英文的!
通过这种方法,可以做到万无一失!
——————————————————————————————————
我在日本软件公司,我周围的人的WindowsXP里面都是日文输入法。所谓英文输入法,也是日文输入法的一部分,没有所谓的默认英文输入法的问题。
另外,我的机器里装有中文输入法,我有你的程序进行了测试。如果我把输入法放到中文,TextBox获得焦点的时候,并不能变成日文输入法,不知道有什么解决办法没有?
  回复  引用    
2005-12-29 12:12 | rerere444 [未注册用户]
楼上的可能对默认输入法理解有误!
你说“英文输入法,也是日文输入法的一部分”,实际上这个并不是英文输入法。
请看文章中最后一个图,作者装有3套输入法,英文、日文和中文,日文下又有两种,
中文下有好几种,英文只有一种。默认的输入法是指大类!

还有一个问题
“我把输入法放到中文TextBox获得焦点的时候,并不能变成日文输入法”,
正常的现象是这个控件第一次获取焦点的时候,会切换到日文输入法!

实际上控件有记忆的功能,如果你人为的在这个控件获取焦点的时候,改变输入法,则当然不会变成日文输入了!因为这个时候这个控件的IMeMode被你改掉了,不是原来的Hiragana了,可能是ON!





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-12-23 20:47 编辑过


相关链接: