https://www.twblogs.net/a/5c46a628bd9eee35b21efde4
在界面輸入時,有時需要限定輸入法。
在不自定義正則表達式或者其它輸入處理的情況下,切換中英文時與當前語言欄匹配,有以下的幾種系統方案:
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, // 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屬性
詳情可參考:https://blog.csdn.net/iluna/article/details/4903479
C#如何判断当前输入法是中文输入还是英文输入,注意:是判断,而不是去切换中英文输入
沒有留言:
張貼留言