分享

C# 切换中英文输入法

 鸿蛟家平 2019-04-29
原文:

在界面输入时,有时需要限定输入法。

在不自定义正则表达式或者其它输入处理的情况下,切换中英文时与当前语言栏匹配,有以下的几种系统方案:

InputLanguage方案

使用System.Windows.Forms.InputLanguage,判断/设置当前输入法状态

复制代码
 1     /// <summary> 2     /// 获取当前输入法 3     /// </summary> 4     /// <returns></returns> 5     private string GetCultureType() 6     { 7         var currentInputLanguage = InputLanguage.CurrentInputLanguage; 8         var cultureInfo = currentInputLanguage.Culture; 9         //同 cultureInfo.IetfLanguageTag;10         return cultureInfo.Name;11     }
复制代码
复制代码
 1     /// <summary> 2     /// 切换输入法 3     /// </summary> 4     /// <param name="cultureType">语言项,如zh-CN,en-US</param> 5     private void SwitchToLanguageMode(string cultureType) 6     { 7         var installedInputLanguages = InputLanguage.InstalledInputLanguages; 8  9         if (installedInputLanguages.Cast<InputLanguage>().Any(i => i.Culture.Name == cultureType))10         {11             InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo(cultureType));12             CurrentLanguage = cultureType;13         }14     }
复制代码

通过InputLanguage的设置,可以统一同一进程内的输入法。比如切换成英文输入法后,当前程序周期内一直是英文输入状态。

InputMethod附加属性

System.Windows.Input.InputMethod,API原文给的注释是:

可以提供用于管理和使用文本服务框架,它提供的替换文字,如语音和手写的输入法支持的交互功能

1. InputMethod下有依赖属性PreferredImeConversionMode,可以限定输入字符类型,同时切换语言栏的中英文状态。

-- 此属性设置了限定输入字符后,可以通过人工切换输入法,切换回其它输入法。

2.InputMethod.IsInputMethodEnabled,也可以设置中英文输入法限定

-- 一旦设置了,输入控件的输入法不可人工切换。除非重新设置IsInputMethodEnabled值。

 InputMethod适合程序周期内,不同输入框分别有不同输入法的情况。

比如下面俩个文本框的输入法限定:

1     //通过InputMethod.PreferredImeConversionMode附加属性,设置输入框的输入法输入转换模式,即限定输入字符类型2     InputMethod.SetPreferredImeConversionMode(InputTestTextBox0, ImeConversionModeValues.Alphanumeric);3     InputMethod.SetPreferredImeConversionMode(InputTestTextBox1, ImeConversionModeValues.Native);

ImeConversionModeValues枚举值列表如下:

复制代码
 1   /// <summary>描述要执行的一种输入法输入转换模式。</summary> 2   [Flags] 3   public enum ImeConversionModeValues 4   { 5     /// <summary>输入的法使用本机字符 (平假名、 朝鲜语、 繁体中文) 转换模式。</summary> 6     Native = 1, 7     /// <summary>输入的法使用片假名转换模式。</summary> 8     Katakana = 2, 9     /// <summary>输入的法使用全形转换模式。</summary>10     FullShape = 4,11     /// <summary>输入的法使用罗马字符转换模式。</summary>12     Roman = 8,13     /// <summary>输入的法使用字符代码转换模式。</summary>14     CharCode = 16, // 0x0000001015     /// <summary>输入的方法不会执行任何输入的转换。</summary>16     NoConversion = 32, // 0x0000002017     /// <summary>输入的法使用 EUDC (最终用户定义的字符) 转换模式。</summary>18     Eudc = 64, // 0x0000004019     /// <summary>输入的法使用符号转换模式。</summary>20     Symbol = 128, // 0x0000008021     /// <summary>输入的法使用固定的转换模式。</summary>22     Fixed = 256, // 0x0000010023     /// <summary>输入的法使用字母数字的转换模式。</summary>24     Alphanumeric = 512, // 0x0000020025     /// <summary>输入的方法并不关心使用哪种输入的转换方法;实际的转换方法是不确定的。</summary>26     DoNotCare = -2147483648, // -0x8000000027   }
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多