我想要当焦点进入中时TextBox,将语言更改为特定语言(例如波斯语),当焦点离开时TextBox,将语言更改为之前设置的原始语言。
当特定控件集中时,如何更改Windows Forms应用程序中的输入语言?
这是我尝试的方法,但是我不希望用户按任何键,而是要自动更改语言。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if(e.Shift && e.Alt)
{
MessageBox.Show("***language of keybord changed***");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用来以编程方式更改输入语言InputLanguage.CurrentInputLanguage。
足以处理Enter控件的事件并将其设置InputLanguage.CurrentInputLanguage为所需的语言,还可以处理Leave控件的事件并将其设置回先前选择的输入语言。
在下面的代码,我设置了输入语言Persian,当我进入TextBox1并将其设置为之前的语言,当我离开的控制:
InputLanguage original;
private void textBox1_Enter(object sender, EventArgs e)
{
original = InputLanguage.CurrentInputLanguage;
var culture = System.Globalization.CultureInfo.GetCultureInfo("fa-IR");
var language = InputLanguage.FromCulture(culture);
if (InputLanguage.InstalledInputLanguages.IndexOf(language) >= 0)
InputLanguage.CurrentInputLanguage = language;
else
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
}
private void textBox1_Leave(object sender, EventArgs e)
{
InputLanguage.CurrentInputLanguage = original;
}
Run Code Online (Sandbox Code Playgroud)
要测试该示例,您应该fa-IR在操作系统上安装输入语言,否则它将把语言设置为默认输入语言。您可以使用您已知安装在操作系统上的其他区域性输入语言。
注意:如果您在表单中广泛需要这种功能,则可以创建一个提供属性的Extender Provider组件作为一个想法InputLanguage。这样,您可以在设计时设置属性。这就是组件喜欢ToolTip或HelpProvider工作的方式。