簡體   English   中英

在C#Winform的文本框中使用另一種語言

[英]Using another language in a textbox in C# winform

我知道這是這里和其他博客中討論最多的話題,但是沒有一種技術可以幫助我。

我想在文本框中輸入“ 馬拉雅拉姆語 到目前為止,我已經做到了。 我已經安裝了字體'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”編寫。

在成功的程序中,簡單就是一切,無需復雜性,省去更多艱巨的工作,然后嘗試以下操作:

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

.NET應用程序是unicode。 轉到控制面板的區域和語言選項,然后將默認輸入語言更改為馬來語。 您的應用應遵循。 (這也假定輸入數據的存儲也是Unicode)。

如果您想即時執行此操作:

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

若要輸入馬拉雅拉姆語,有一些現成的鍵盤免費提供。 我使用了鍵盤“ Malayalam Indic Input 2”。 它對我來說很完美。 還聽說另一個鍵盤“ Varamozhi”具有很多功能。 其他一些要點是,當保存到數據庫時,您需要將此malayalam保存為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"));

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM