Windows 系統通常安裝多種輸入法 (IME)。資料錄入時頻繁手動切換 (如中英文、全半形) 降低效率。參考 Access 等專業應用:根據欄位屬性 (如「姓名」自動切中文、「電話」自動切英文) 自動切換 IME,大幅提升使用者體驗。
System.Windows.Forms.InputLanguage密封類別,提供靜態屬性與方法管理當前執行緒的輸入法:
CurrentInputLanguage (get/set):取得/設定當前執行緒 IME。DefaultInputLanguage (get):系統預設 IME。InstalledInputLanguages (get):InputLanguageCollection,列舉系統安裝的所有 IME。LayoutName (get):IME 在系統托盤顯示的名稱 (如「Microsoft Pinyin」)。建立 WinForms 專案,放置 RichTextBox (輸入區)、ComboBox (IME 清單)、Button (離開)。
private void Form1_Load(object sender, EventArgs e)
{
var ilc = InputLanguage.InstalledInputLanguages;
foreach (InputLanguage il in ilc)
comboBox1.Items.Add(il.LayoutName);
// 設定預設選項為當前執行緒 IME
comboBox1.SelectedIndex = ilc.IndexOf(InputLanguage.CurrentInputLanguage);
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var il = InputLanguage.InstalledInputLanguages[comboBox1.SelectedIndex];
InputLanguage.CurrentInputLanguage = il;
}
// 表單建構子或 InitializeComponent 中訂閱事件
this.InputLanguageChanged += new InputLanguageChangedEventHandler(ChangeInput);
private void ChangeInput(object sender, InputLanguageChangedEventArgs e)
{
int idx = InputLanguage.InstalledInputLanguages.IndexOf(e.InputLanguage);
if (idx >= 0 && idx < comboBox1.Items.Count)
comboBox1.SelectedIndex = idx;
}
InputLanguageChanged 事件在 表單層級 觸發,可捕捉任何方式導致的 IME 變更。InstalledInputLanguages 為唯讀集合,索引與 ComboBox.Items 索引一一對應。TextBox) 設定專屬 IME,可處理控制項的 Enter/Leave 事件,設定 InputLanguage.CurrentInputLanguage (影響整個執行緒),或使用更底層的 ImmAssociateContext (需 P/Invoke) 實現控制項級隔離。
private void txtChinese_Enter(object sender, EventArgs e)
{
SetInputLanguage("Microsoft Pinyin"); // 或 "Chinese (Traditional) - New Phonetic"
}
private void txtEnglish_Enter(object sender, EventArgs e)
{
SetInputLanguage("US");
}
private void SetInputLanguage(string layoutName)
{
foreach (InputLanguage il in InputLanguage.InstalledInputLanguages)
{
if (il.LayoutName.IndexOf(layoutName, StringComparison.OrdinalIgnoreCase) >= 0)
{
InputLanguage.CurrentInputLanguage = il;
break;
}
}
}
善用 InputLanguage 類別,只需數十行代碼即可賦予 WinForms 應用專業級的智慧輸入法體驗。核心在於 載入時同步、使用者手動切換時套用、系統熱鍵切換時回寫 UI 三者形成閉環。