在界面輸入時,有時須要限定輸入法。git
在不自定義正則表達式或者其它輸入處理的狀況下,切換中英文時與當前語言欄匹配,有如下的幾種系統方案:github
使用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的設置,能夠統一同一進程內的輸入法。好比切換成英文輸入法後,當前程序週期內一直是英文輸入狀態。windows
System.Windows.Input.InputMethod,API原文給的註釋是:api
能夠提供用於管理和使用文本服務框架,它提供的替換文字,如語音和手寫的輸入法支持的交互功能框架
1. InputMethod下有依賴屬性PreferredImeConversionMode,能夠限定輸入字符類型,同時切換語言欄的中英文狀態。spa
-- 此屬性設置了限定輸入字符後,能夠經過人工切換輸入法,切換回其它輸入法。.net
2.InputMethod.IsInputMethodEnabled,也能夠設置中英文輸入法限定code
-- 一旦設置了,輸入控件的輸入法不可人工切換。除非從新設置IsInputMethodEnabled值。orm
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, // 0x00000010 15 /// <summary>輸入的方法不會執行任何輸入的轉換。</summary> 16 NoConversion = 32, // 0x00000020 17 /// <summary>輸入的法使用 EUDC (最終用戶定義的字符) 轉換模式。</summary> 18 Eudc = 64, // 0x00000040 19 /// <summary>輸入的法使用符號轉換模式。</summary> 20 Symbol = 128, // 0x00000080 21 /// <summary>輸入的法使用固定的轉換模式。</summary> 22 Fixed = 256, // 0x00000100 23 /// <summary>輸入的法使用字母數字的轉換模式。</summary> 24 Alphanumeric = 512, // 0x00000200 25 /// <summary>輸入的方法並不關心使用哪一種輸入的轉換方法;實際的轉換方法是不肯定的。</summary> 26 DoNotCare = -2147483648, // -0x80000000 27 }
以上倆方案的Demo:https://github.com/Kybs0/InputLanguageTestDemo
PS:若是是winform程序,能夠直接設置Control.ImeMode屬性