10

我在 c# 中有一个 Winforms 应用程序,我希望 TextBox 在获得焦点时自动更改语言。

我试过这段代码:

private void textBox1_Enter(object sender, EventArgs e)
{
    SetKeyboardLayout(GetInputLanguageByName("fa"));
}
private void textBox1_Leave(object sender, EventArgs e)
{
    SetKeyboardLayout(GetInputLanguageByName("eng"));
}
public static InputLanguage GetInputLanguageByName(string inputName)
{
    foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
    {
        if (lang.Culture.EnglishName.ToLower().StartsWith(inputName))
        {
            return lang;
        }
    }
    return null;
}
private void SetKeyboardLayout(InputLanguage layout)
{
    InputLanguage.CurrentInputLanguage = layout;
}

但是当我输入文本框时,语言并没有改变。我能做些什么?

4

2 回答 2

5

检查事项:

  1. “fa”是一种已安装的语言吗?
  2. 您是否已将 textBox1_Enter 和 textBox1_Leave 附加到由 textBox1 调度的事件?
  3. 您是否通过调试器运行它并检查调用 GetInputLanguageByName 以及在获得和失去焦点时调用正确的语言?
于 2013-06-21T12:56:18.407 回答
2

尝试这个 ..

private void textBox1_Enter(object sender, EventArgs e)
{
    SetKeyboardLayout("FA");
}


private void SetKeyboardLayout(InputLanguage layout)
{
foreach (InputLanguage Lng in InputLanguage.InstalledInputLanguages)
{
    if (Lng.Culture.EnglishName.ToUpper().StartsWith(layout.ToString()))
    {
        InputLanguage.CurrentInputLanguage = Lng;
    }

} 

}
于 2013-06-21T13:07:34.383 回答