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

标签 c# .net winforms

我希望当焦点进入 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 作为输入语言,否则会将语言设置为默认输入语言。您可以使用操作系统上安装的另一种文化输入语言。

注意:如果您在表单中广泛需要这样的功能,作为一个想法,您可以创建一个 Extender Provider提供 InputLanguage 属性的组件。这样您就可以在设计时设置属性。这就是 ToolTipHelpProvider 等组件的工作方式。

关于c# - 如何更改特定控件的 Windows 窗体应用程序中的输入语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35813818/

相关文章:

c# - 将字符串 "20111027"转换为时区为 GMT 的 DateTime

c# - MVC 表单提交 - 重定向到无法从浏览器直接访问的操作

c# - C#.Net 中的文件复制

c# - 用 ASP .NET 重写 HTTP 方法

.net - 将 GUID 转换为 System.Drawing.Imaging.ImageFormat

c# - 不需要的文本突出显示

c# - 如何关闭 silverlight 中的应用程序

c# - .gif 中的动画未显示在 Windows 窗体中

c# - 如何创建动态构建上下文菜单单击事件

.net - 对以下示例中的单一职责原则感到困惑