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

在C#winform的文本框中使用另一种语言,c#,winforms,C#,Winforms,我知道这是一个在这里和其他博客中讨论得很多的话题,但是没有一种技术可以帮助我 我想在文本框中键入马来语。到目前为止我都是这么做的。我已经安装了字体“AnjaliOldLipi”。我可以在记事本上输入马来语。但我不能在Winform应用程序中执行同样的操作。文本框中显示为英语 我尝试了以下代码,但没有结果 private void richTextBox_test_Leave(object sender, EventArgs e) { System.Globalization.Cultur

我知道这是一个在这里和其他博客中讨论得很多的话题,但是没有一种技术可以帮助我

我想在文本框中键入马来语。到目前为止我都是这么做的。我已经安装了字体“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”以“马来语”书写。我不知道为什么,但我需要在不按任何键盘按钮的情况下用“malayalam”书写。

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

如果您想即时执行此操作:

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

用马来语打字,有一些现成的键盘是免费的。我使用键盘“Malayalam Indi Input 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;
    }
我使用这些代码: 首先,你必须找到你想要的文化语言的名称。 方法“GetInutLanguageByName”将返回您请求的语言 然后,您将检查是否安装了请求的语言,如果是,则返回请求的语言。 然后更改输入语言非常容易

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"));

    }

简单就是成功计划的一切,不需要复杂,节省精力做要求更高的事情,尝试以下方法:

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"));
        }
    }
}

我还尝试设置InputLanguage.CurrentInputLanguage=Malayalam;我知道您的计算机(键盘)的区域设置设置为英语(每次按键时都会出现一个西文字符)。如果是这种情况,显示所需字符的最佳替代方法是“动态替换”;也就是说,一个与richTextBox TextChanged事件关联的函数,将每个输入的字符替换为您想要的字符(例如,存储在字典中)@varocarbas我喜欢你的想法,但我认为这个想法对于像马来语这样的语言来说很难实现。我对马来语字母表及其与西方字母表的差异不太熟悉。原则上,关联每个字符(“a”表示“Malayalam字符”)或每个按键笔划(按下此键时显示“Malayalam字符”而不是“a”)不应该有任何问题。但是我需要更多的信息,你能提供一个足够描述性的例子吗:当我按下这个键、这个键和这个键时,我想显示“Malayalam字符集”。@varocarbas Malayalam与英语没有什么不同。马来语中的字母在单词中也有相同的发音。同一个字母与其他字母组合使用时有多种形式。要实现如您所说的,需要更多的条件语句。谢谢你的尝试。我试过你的代码。但结果是一样的。文本采用文本框英语,但采用记事本马来语。