Windows 系統通常安裝多種輸入法,使用者頻繁手動切換影響效率。若應用程式能根據上下文自動切換輸入法 (如 Access 資料輸入時自動切換中/英),將大幅提升專業度與使用體驗。.NET Framework 在 System.Windows.Forms.InputLanguage 類別中提供完整支援。
| 成員 | 型別 | 說明 |
|---|---|---|
| CurrentInputLanguage | static InputLanguage | 取得/設定**目前執行緒**的輸入法 |
| DefaultInputLanguage | static InputLanguage | 取得系統預設輸入法 (唯讀) |
| InstalledInputLanguages | static InputLanguageCollection | 取得系統安裝的所有輸入法集合 (唯讀) |
| LayoutName | string | 取得輸入法在語言列顯示的名稱 (如「微軟新注音」、「美式鍵盤」) |
| Culture | CultureInfo | 取得輸入法關聯的文化特性資訊 |
| Handle | IntPtr | 取得輸入法的系統控制代碼 (進階用途) |
// 列舉所有輸入法
foreach (InputLanguage il in InputLanguage.InstalledInputLanguages)
{
Console.WriteLine($"{il.LayoutName} - {il.Culture.EnglishName}");
}
// 依名稱尋找特定輸入法
InputLanguage chinese = InputLanguage.InstalledInputLanguages
.Cast()
.FirstOrDefault(il => il.LayoutName.Contains("Chinese") || il.LayoutName.Contains("微軟"));
// 切換輸入法
if (chinese != null)
InputLanguage.CurrentInputLanguage = chinese;
InputLanguageRichEditRichTextBox → 命名 richTextBox1 (Dock=Top)ComboBox → 命名 comboBox1 (DropDownStyle=DropDownList)Button → 命名 btnExit (Text=Exit)Form.Load → Form1_LoadComboBox.SelectedIndexChanged → ComboBox1_SelectedIndexChangedForm.InputLanguageChanged → Form1_InputLanguageChangedButton.Click → BtnExit_Click
[Form Load]
↓
列舉 InstalledInputLanguages → 填入 ComboBox
↓
設定 ComboBox.SelectedIndex = 目前輸入法索引
↓
[使用者切換 ComboBox] → CurrentInputLanguage = 選中項
↓
[系統熱鍵切換輸入法] → 觸發 InputLanguageChanged 事件
↓
事件處理器 → 同步更新 ComboBox.SelectedIndex
↓
[雙向同步完成]
使用者可能使用熱鍵 (Win+Space、Alt+Shift、Ctrl+Shift) 切換輸入法,此時程式必須感知變化並同步 UI 狀態,否則 ComboBox 顯示將與實際輸入法脫節。
下一篇將提供完整可編譯執行的 Form 程式碼、執行畫面截圖、進階應用場景 (智慧型欄位切換) 與 WPF 環境下的對應實作方式。