如何在 Windows 窗体应用程序中更改特定控件的输入语言
本文关键字:控件 语言 输入 Windows 窗体 应用程序 | 更新日期: 2023-09-27 18:37:25
我希望当焦点进入TextBox
时,将语言更改为特定语言(例如波斯语),当焦点离开TextBox
时,将语言更改为之前设置的原始语言。
当聚焦特定控件时,如何更改 Windows 窗体应用程序中的输入语言?
这是我尝试过的,但我不希望用户按任何键,我想自动更改语言。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if(e.Shift && e.Alt)
{
MessageBox.Show("***language of keybord changed***");
}
}
InputLanguage.CurrentInputLanguage
以编程方式更改输入语言。
只需处理控件Enter
事件并将InputLanguage.CurrentInputLanguage
设置为所需的语言,还可以处理控件Leave
事件并将其设置回上一个选定的输入语言。
在下面的代码中,我在输入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;
}
要测试该示例,您应该在操作系统上安装fa-IR
作为输入语言,否则它会将语言设置为默认输入语言。您可以使用您知道安装在操作系统上的另一种区域性输入语言。
注意: 如果您在窗体中广泛需要此类功能,则可以创建一个提供InputLanguage
属性的扩展程序提供程序组件。这样,您可以在设计时设置属性。这就是像ToolTip
或HelpProvider
这样的组件的工作方式。
对于为许多国家/地区可用的其他语言寻求类似解决方案的人(例如:阿拉伯语,有"ar-SA","ar-EG"和许多其他语言)无论在哪个国家/地区,您都可以使用它来获取正确的语言:
对于WinForms:.VB:
originalInputLang = InputLanguage.CurrentInputLanguage
Dim lang = InputLanguage.InstalledInputLanguages.OfType(Of InputLanguage).Where(Function(l) l.Culture.Name.StartsWith("ar")).FirstOrDefault()
If lang IsNot Nothing Then InputLanguage.CurrentInputLanguage = lang
C#:
originalInputLang = InputLanguage.CurrentInputLanguage;
var lang = InputLanguage.InstalledInputLanguages.OfType<InputLanguage>().Where(l => l.Culture.Name.StartsWith("ar")).FirstOrDefault();
if (lang != null) {
InputLanguage.CurrentInputLanguage = lang;
}
对于 WPF:.VB:
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
C#:
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:
SendKeys.Send("%+");
该字符串表示在 Windows 中默认更改输入语言Alt + Shift
。