【问题标题】:Using another language in a textbox in C# winform在 C# winform 的文本框中使用另一种语言
【发布时间】:2013-08-05 07:51:54
【问题描述】:

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

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

【问题讨论】:

  • 我也试过设置 InputLanguage.CurrentInputLanguage = Malayalam;
  • 我了解您的计算机(键盘)的区域设置设置为英文(每次按键都会出现一个西方字符)。如果是这种情况,显示所需字符的最佳替代方法是“即时替换”;也就是说,与richTextBox TextChanged 事件相关的函数将每个输入的字符替换为您想要的字符(例如存储在字典中)。
  • @varocarbas 我喜欢你的想法,但我认为这个想法对于像马拉雅拉姆语这样的语言来说很难实现。
  • 我不太熟悉马拉雅拉姆字母及其与西方字母的区别。原则上,关联每个字符(“a”表示“马拉雅拉姆字符”)或者更好地关联每个按键(按下此键时显示“马拉雅拉姆字符”而不是“a”)应该没有任何问题。但是我需要更多信息,请您发布一个足够描述性的示例:当我按下这个键和这个键和这个键时,我想显示“马拉雅拉姆语字符集”。
  • @varocarbas 马拉雅拉姆语与英语略有不同。马拉雅拉姆语中的字母在单词中也具有相同的发音。同一个字母与其他字母组合使用时有多种形式。如您所说,要实现,需要更多的条件语句。无论如何,感谢您的尝试。

标签: c# winforms


【解决方案1】:

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

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

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

【讨论】:

  • 我试过你的代码。但同样的结果。文本框中的文本为英语,但在记事本马拉雅拉姆语中。
【解决方案2】:

对于输入马拉雅拉姆语,有一些现成的键盘免费提供。我使用了键盘“马拉雅拉姆语输入法 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;
    }

【讨论】:

    【解决方案3】:

    我使用这些代码: 首先你必须找到你想要的文化语言的名称。 方法“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"));
    
        }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-12
        • 2019-08-17
        • 2014-12-27
        • 2019-09-20
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2014-11-04
        相关资源
        最近更新 更多