admin管理员组文章数量:1611397
NET中,对于输入法的控制是比较鸡肋的一个功能,经常不能达到精确控制。
在XP中,使用以下代码 ,可以记录用户最后切换 的输入法,在某些特定的位置关闭输入法以免输入错误的全角数字及其它中文输入法下的问题。
但在WIN7中内置了两个拼音输入法,这两个输入法很奇怪,会和英文输入法混为一体,在这三种输入法中切换,不会引发InputLanguageChanged。
处于拼音输入法时,使用InputLanguage.CurrentInputLanguage = null 或InputLanguage.CurrentInputLanguage = DefaultInputLanguage,都不能使用输入法变成英文输入法。而且这两个输入法也不会出现 在InstalledInputLanguages 中。
我想,应该是微软天真的认为所有人都会用这两个输入法,永远不用切换输入法,而且可以完美的和IMEMODE结合在一起。不得已,在WIN7中添加了一行,强行对IMEMODE进行切换。虽然不能切换输入法,但可以关闭拼音输入法的中文输入状态。
当然,最好的办法还是不要使用这个拼音输入法。搜狗拼音会比它们好得多。
int imeIndex = 0;
protected virtual void IMEControl(DataGridViewColumn col)
{
//不是默认输入法即认为是切换了输入法
if (col.Index<2)
{
if (InputLanguage.CurrentInputLanguage != null && InputLanguage.CurrentInputLanguage.GetHashCode() != InputLanguage.DefaultInputLanguage.GetHashCode())
{
imeIndex = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage);
}
if (InputLanguage.InstalledInputLanguages.Count > imeIndex)
InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages[imeIndex];
else
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
//dataGridView1.ImeMode = System.Windows.Forms.ImeMode.On ;
}
else
{
if (InputLanguage.CurrentInputLanguage != null && InputLanguage.CurrentInputLanguage.GetHashCode() != InputLanguage.DefaultInputLanguage.GetHashCode())
{
imeIndex = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage);
}
InputLanguage.CurrentInputLanguage = null ;
// dataGridView1.ImeMode = System.Windows.Forms.ImeMode.Off;
}
}
版权声明:本文标题:WIN7中使用c#控制微软拼音输入法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728616510a1166062.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论