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("%+");