C# 如何更改windows窗体应用程序中特定控件的输入语言?

C# 如何更改windows窗体应用程序中特定控件的输入语言?,c#,.net,winforms,C#,.net,Winforms,我希望当焦点进入文本框时,将语言更改为特定语言(例如波斯语),当焦点离开文本框时,将语言更改为之前设置的原始语言 当特定控件处于焦点时,如何更改windows窗体应用程序中的输入语言 这是我尝试过的,但我不想让用户按任何键,我想自动更改语言 private void textBox1_KeyDown(object sender, KeyEventArgs e) { if(e.Shift && e.Alt) { MessageBox.Show("**

我希望当焦点进入
文本框时,将语言更改为特定语言(例如波斯语),当焦点离开
文本框时,将语言更改为之前设置的原始语言

当特定控件处于焦点时,如何更改windows窗体应用程序中的输入语言

这是我尝试过的,但我不想让用户按任何键,我想自动更改语言

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if(e.Shift && e.Alt)
    {
        MessageBox.Show("***language of keybord changed***");
    }
}

您可以使用以编程方式更改输入语言

处理控件的事件并将
InputLanguage.CurrentInputLanguage
设置为所需的语言,以及处理控件的事件并将其设置回以前选择的输入语言就足够了

在下面的代码中,当我输入
TextBox1
时,我将输入语言设置为
Persian
,并在我离开控件时将其设置为前一种语言:

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;
}
要测试该示例,您应该在操作系统上安装
fair
作为输入语言,否则它会将该语言设置为默认输入语言。您可以使用您知道安装在操作系统上的另一种区域性输入语言


注意:如果您在表单中大量需要此类功能,您可以创建一个提供
InputLanguage
属性的组件。这样,可以在设计时设置属性。这就是像
工具提示
帮助提供者
这样的组件的工作方式。

对于在许多国家/地区寻求其他语言类似解决方案的人(例如阿拉伯语,有“ar SA”、“ar EG”等) 无论国家/地区如何,您都可以使用此选项获得正确的语言:

对于WinForms: VB:

C#:

C#:

System.Globalization.CultureInfo-original;//在事件处理程序之外
//在输入事件处理程序中:
原始=InputLanguageManager.Current.CurrentInputLanguage;
var newLang=InputLanguageManager。
现在的
可用的输入语言。
OfType()。
其中(l=>l.Name.StartsWith(“ar”))。
FirstOrDefault();
if(newLang!=null)
{
InputLanguageManager.Current.CurrentInputLanguage=newLang;
}
//在休假事件处理程序中:
InputLanguageManager.Current.CurrentInputLanguage=原件;

如果要更改系统输入语言(以便每个应用程序都使用所选语言),只需使用模拟键盘按键的:

SendKeys.Send("%+");

该字符串表示Windows中默认更改输入语言的
Alt+Shift

这是语言栏的热键,您将看不到它。如果您想了解它,请改用。您可以使用以编程方式更改输入语言。它足以处理并将其设置为所需的语言,处理事件并将其设置回以前选择的输入语言。
originalInputLang = InputLanguage.CurrentInputLanguage;
var lang = InputLanguage.InstalledInputLanguages.OfType<InputLanguage>().Where(l => l.Culture.Name.StartsWith("ar")).FirstOrDefault();
if (lang != null) {
    InputLanguage.CurrentInputLanguage = lang;
}
Dim origianl As Globalization.CultureInfo //outside the event handler



// in the entered event handler:
origianl = InputLanguageManager.Current.CurrentInputLanguage
Dim newLang = InputLanguageManager.
    Current.
    AvailableInputLanguages.
    OfType(Of Globalization.CultureInfo).
    Where(Function(i) i.Name.StartsWith("ar")).
    FirstOrDefault()
If newLang IsNot Nothing Then InputLanguageManager.Current.CurrentInputLanguage = newLang

//in the leave event handler:
InputLanguageManager.Current.CurrentInputLanguage = original
System.Globalization.CultureInfo original; // outside the event handlers

// in the enter event handler:
original = InputLanguageManager.Current.CurrentInputLanguage;
var newLang = InputLanguageManager.
    Current.
    AvailableInputLanguages.
    OfType<System.Globalization.CultureInfo>().
    Where(l => l.Name.StartsWith("ar")).
    FirstOrDefault();

if (newLang != null)
{
    InputLanguageManager.Current.CurrentInputLanguage = newLang;
}

// in the leave event handler:
InputLanguageManager.Current.CurrentInputLanguage = original;
SendKeys.Send("%+");