C# 切換中英文輸入法

在界面輸入時,有時須要限定輸入法。git

在不自定義正則表達式或者其它輸入處理的狀況下,切換中英文時與當前語言欄匹配,有如下的幾種系統方案:github

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的設置,能夠統一同一進程內的輸入法。好比切換成英文輸入法後,當前程序週期內一直是英文輸入狀態。windows

InputMethod附加屬性

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屬性

詳情可參考:https://blog.csdn.net/iluna/article/details/4903479

相關文章
相關標籤/搜索