2013-06-21 32 views
7

我在c#中有一个Winforms应用程序,我希望文本框在焦点时自动更改语言。如何自动更改文本框的语言

我试过这段代码:

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; 
} 

但是,当我输入文本框,语言不会改变。我能做什么?

+6

“它不工作”是不是说明问题的一种可接受的方式。请提供更多细节。 –

+2

当我输入文本框时,语言不会改变。 – amirhossein

+0

然后在你的问题中这么说,这样人们就不必阅读评论来找出问题。 –

回答

4

检查事项:

  1. 是 “FA” 已安装的语言?
  2. 你是否附加了textBox1_Enter和textBox1_Leave到由textBox1调度的事件?
  3. 你是否通过调试器运行它,并检查GetInputLanguageByName是否被调用,并且获得焦点并丢失时调用正确的语言?
+1

答案1是的。 “fa”是一种已安装的语言,但我最常用的是“波斯语”; 2的答案是否定的,我没有附加事件,但我现在做了。这确实奏效。我非常感谢你的回答。 – amirhossein

0

试试这个..

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)) 
    { 
     InputLanguage.CurrentInputLanguage = Lng; 
    } 

} 

}