在C#winform的文本框中使用另一种语言

本文关键字:另一种 语言 C#winform 文本 | 更新日期: 2023-09-27 18:26:26

我知道这在这里和其他博客中是一个备受讨论的话题,但没有任何技术能帮助我。

我想在文本框中键入马拉雅拉姆语。到目前为止我已经做到了。我安装了字体‘AnjaliOldLipi’。我可以在记事本上用马拉雅拉姆语打字。但我不能在Winform应用程序中执行同样的操作。文本框中显示为英文。

我尝试了以下代码,但没有结果。

private void richTextBox_test_Leave(object sender, EventArgs e)
{
    System.Globalization.CultureInfo TypeOfLanguage = new 
    System.Globalization.CultureInfo("en-us");
    InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(TypeOfLanguage);
}
private void richTextBox_test_Enter(object sender, EventArgs e)
{
    MessageBox.Show("textbox ebntereed");
    System.Globalization.CultureInfo TypeOfLanguage = new System.Globalization.CultureInfo("ms-MY");
    InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(TypeOfLanguage);
    richTextBox_test.Font = new Font("AnjaliOldLipi", 12);
}

然后我尝试了以下代码。现在,当我进入文本框时,默认键盘正在更改(我可以在任务栏上看到它)。仍然在打字时,文本显示为英文。我需要按"Ctrl+Shift"来用"马拉雅拉姆语"写作。我不知道为什么,但我需要在不按任何键盘按钮的情况下用"马拉雅拉姆语"写作。

在C#winform的文本框中使用另一种语言

在成功的程序中,简单就是一切,不需要复杂,把精力放在更苛刻的事情上,试试这个:

using System;
using System.Windows.Forms;
using System.Globalization;
namespace TestingTextBoxAutoLangSwitch
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // Switching to Arabic Jordan
        private void textBox2_Enter_1(object sender, EventArgs e)
        {
            Application.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("ar-jo"));
        }
        // Switching back to English USA
        private void textBox2_Leave(object sender, EventArgs e)
        {
            Application.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("en-us"));
        }
    }
}

我使用以下代码:首先,你必须找到你想要的文化语言的名称。方法"GetInutLanguage ByName"将返回您请求的语言然后,您将检查是否安装了请求的语言,如果安装了,则返回请求的语言。然后很容易地更改输入语言。。。

private static InputLanguage GetInutLanguageByName(string layOut)
    {
        foreach (InputLanguage lng in InputLanguage.InstalledInputLanguages)
        {
            if (lng.Culture.DisplayName == layOut)
            {
                return lng;
            }
        }
        return null;
    }
private void SetKeyboardLayout(InputLanguage Layout)
    {
        InputLanguage.CurrentInputLanguage = Layout;
    }
private void FirstNameTextBox_Enter(object sender, EventArgs e)
    {
        SetKeyboardLayout(GetInutLanguageByName("Persian"));
    }

.NET应用程序是unicode。转到控制面板的"区域和语言选项",将默认输入语言更改为马来语。你的应用程序应该紧随其后。(这假定输入数据的存储也是Unicode)。

如果你想在飞行中做到这一点:

 System.Globalization.CultureInfo maylay = new System.Globalization.CultureInfo("ms");
 System.Threading.Thread.CurrentThread.CurrentCulture = malay;

对于用马拉雅拉姆语打字,有一些现成的键盘是免费的。我用的是"马拉雅拉姆语印度语输入2"键盘。它非常适合我。还听说另一个键盘"Varamozhi"有很多功能。其他一些要点是,当保存到数据库时,您需要将此马拉雅拉姆语保存为unicode。SQL查询相同如下:

    "Insert into table_1 values (N'"+textBox1.Text+"')";

我的问题的答案如下:

    private void textBox1_Enter(object sender, EventArgs e)
    {
        SetKeyboardLayout(GetInputLanguageByName("mal"));
    }
    private void textBox1_Leave(object sender, EventArgs e)
    {
        SetKeyboardLayout(GetInputLanguageByName("eng"));
    }
    public static InputLanguage GetInputLanguageByName(string inputName)
    {
        foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
        {
            if (lang.Culture.EnglishName.ToLower().StartsWith(inputName))
                return lang;
        }
        return null;
    }
    public void SetKeyboardLayout(InputLanguage layout)
    {
        InputLanguage.CurrentInputLanguage = layout;
    }