ghostlyt 发表于 2015-10-28 20:09:00

关于GcTextbox控件的IMEMode设定

在OCX版的Inputman7.0中,如果设置imText控件的ImeMode为平假名(ひらがな),
那么无论在该控件中怎么切换输入法,控件再次获得光标时imemode都会变为平假名。
而在GcTextBox控件中,如果从平假名切换为半角英数,光标离开后再回到该控件上,imemode仍然为半角英数。
有没有什么办法能让GcTextBox不记忆前回到输入法,而是每次获得光标时都变为初期指定的输入法?

注:在GcTextBox控件的GotFocus事件中设定为固定的ImeMode应该可以,但是由于窗体上控件太多,不想每个控件都加一个事件。

Alice 发表于 2015-10-29 11:51:00

回复 1楼ghostlyt的帖子

非常感谢您的反馈。
从您的描述来看,您的用法已经属于比较正确的用法。

Leo 发表于 2015-10-29 11:58:00

回复 1楼ghostlyt的帖子

首先你说描述的GcTextBox的行为,是.net平台下,标准控件的行为。也就是说,当控件具有输入焦点,用户又切换了一下IME,这时,在丢失焦点的时候,控件本身就记录了此时用户选择的设置,在下一次获取焦点的时候,就会按照最后一次用户的选择设置ImeMode。
你通过GotFocus事件去将GcTextBox的ImeMode设置为固定的首选ImeMode是一个比较正确的解决办法。

如果一个一个的挂事件确实比较麻烦,你可以试试这么干。
首先初始化一个所有GcTextBox控件默认ImeMode的Dictionary,这一点可以通过遍历整个窗体的控件,在窗体正式显示之前获取到正确的默认设置

然后可以通过遍历的方式挂上全部GcTextBox实例的GotFocus方法,在方法体中只用做一件事情,查表,设置ImeMode

你看这样是否能够简化你的工作。

ghostlyt 发表于 2015-10-29 12:45:00

感谢版主的回答。

如果通过继承GcTextBox进行额外的封装来解决这个问题,有没有比较合适的办法?
想在一个合适的时点记住所设定的初始ImeMode,然后在GotFocus事件中将记录的初始值设回去。

Leo 发表于 2015-10-29 13:18:00

回复 4楼ghostlyt的帖子

不过好像没有合适的时机去记录这个初始的ImeMode,除非你设置一个其他的属性,记住一个永远 不变的ImeMode,然后你使用这个新属性设置默认ImeMode。

rbgongming 发表于 2015-10-29 14:19:00

回复 4楼ghostlyt的帖子

你好,你这个问题我遇到过,你只要用OS 标准的日文输入法就可以
如果有这种输入法请清空掉Microsoft Office IME 2010、Microsoft Office IME 2007
另外你可以参照如下网址的设定方法,最简单的就是不改动,让客户使用标准的输入法
这个不光是InputMan,.net的标准控件也有这个问题。

网址:https://support.microsoft.com/ja-jp/kb/945146

希望可以帮到你

Leo 发表于 2015-10-29 15:04:00

楼上给的帖子和这位同学碰到的问题不是一码事,即便是标准的输入法,在标准的TextBox上,也会碰到这个问题,这属于.NET控件的设计,而不是bug。没有规避策的。只能写代码处理。

ghostlyt 发表于 2015-10-29 15:28:00

回复 6楼rbgongming的帖子

版主说的对,咱们所遇到的不是同一个问题。

另外,按照版主说的,添加一个额外的属性倒是个不错的办法。
我试试重载ImeModeBase,当设定ImeMode时,将设定值保存到添加的属性里,或许能解决这个问题。

Alice 发表于 2015-10-29 17:56:00

回复 8楼ghostlyt的帖子

谢谢@Leo版主和@rbgongming的热心回帖。

如果楼主依然有什么问题欢迎给我们反馈。

ghostlyt 发表于 2015-10-29 18:05:00

回复 9楼Alice的帖子

OK了,
按8楼的思路,此问题已解决。
感谢各位的关注。
页: [1] 2
查看完整版本: 关于GcTextbox控件的IMEMode设定