C# 切换中英文输入法

在界面输入时,有时需要限定输入法。 在不自定义正则表达式或者其它输入处理的情况下,切换中英文时与当前语言栏匹配,有以下的几种系统方案: InputLanguage方案 使用System.Windows.Forms.InputLanguage,判断/设置当前输入法状态 复制代码 1 /// 2 /// 获取当前输入法 3 /// 4 /// 5 private string GetCultureType() 6 { 7 var currentInputLanguage = InputLanguage.CurrentInputLanguage; 8 var cultureInfo = currentInputLanguage.Culture; 9 //同 cultureInfo.IetfLanguageTag; 10 return cultureInfo.Name; 11 } 复制代码 复制代码 1 /// 2 /// 切换输入法 3 /// 4 /// 语言项,如zh-CN,en-US 5 private void SwitchToLanguageMode(string cultureType) 6 { 7 var installedInputLanguages = InputLanguage.InstalledInputLanguages; 8 9 if (installedInputLanguages.Cast().Any(i => i.Culture.Name == cultureType)) 10 { 11 InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo(cultureType)); 12 CurrentLanguage = cultureType; 13 } 14 } 复制代码 通过InputLanguage的设置,可以统一同一进程内的输入法。比如切换成英文输入法后,当前程序周期内一直是英文输入状态。 InputMethod附加属性PreferredImeConversionMode System.Windows.Input.InputMethod,API原文给的注释是: 可以提供用于管理和使用文本服务框架,它提供的替换文字,如语音和手写的输入法支持的交互功能 而,InputMethod下有依赖属性PreferredImeConversionMode,可以限定输入字符类型,同时切换语言栏的中英文状态。 适合程序周期内,不同输入框分别有不同输入法的情况。比如下面俩个文本框的输入法限定: 复制代码 1 //通过InputMethod.PreferredImeConversionMode附加属性,设置输入框的输入法输入转换模式,即限定输入字符类型 2 InputMethod.SetPreferredImeConversionMode(InputTestTextBox0, ImeConversionModeValues.Alphanumeric); 3 InputMethod.SetPreferredImeConversionMode(InputTestTextBox1, ImeConversionModeValues.Native); 复制代码 枚举值列表如下: 复制代码 1 /// 描述要执行的一种输入法输入转换模式。 2 [Flags] 3 public enum ImeConversionModeValues 4 { 5 /// 输入的法使用本机字符 (平假名、 朝鲜语、 繁体中文) 转换模式。 6 Native = 1, 7 /// 输入的法使用片假名转换模式。 8 Katakana = 2, 9 /// 输入的法使用全形转换模式。 10 FullShape = 4, 11 /// 输入的法使用罗马字符转换模式。 12 Roman = 8, 13 /// 输入的法使用字符代码转换模式。 14 CharCode = 16, // 0x00000010 15 /// 输入的方法不会执行任何输入的转换。 16 NoConversion = 32, // 0x00000020 17 /// 输入的法使用 EUDC (最终用户定义的字符) 转换模式。 18 Eudc = 64, // 0x00000040 19 /// 输入的法使用符号转换模式。 20 Symbol = 128, // 0x00000080 21 /// 输入的法使用固定的转换模式。 22 Fixed = 256, // 0x00000100 23 /// 输入的法使用字母数字的转换模式。 24 Alphanumeric = 512, // 0x00000200 25 /// 输入的方法并不关心使用哪种输入的转换方法;实际的转换方法是不确定的。 26 DoNotCare = -2147483648, // -0x80000000 27 } 复制代码 以上俩方案的Demo:https://github.com/Kybs0/InputLanguageTestDemo PS:如果是winform程序,可以直接设置Control.ImeMode属性 详情可参考:https://blog.csdn.net/iluna/article/details/4903479https://www.cnblogs.com/kybs0/p/10298697.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信