2012-01-31 123 views
0

我正在使用一個winform應用程序,並且在richbox_textchange中,我想檢測輸入的文本是否是英文,因爲如果它是英文,我將執行LeftToRight鍵入其他RightToLeft鍵入。檢測非英文格式

我使用的代碼:

private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (CultureInfo.CurrentCulture.TextInfo.IsRightToLeft) 
     { 
      label1.Text = "RTL"; 
     } 
     else 
     { 
      label1.Text = "LTR"; 
     } 
    } 

,但我總是得到:LTR只,LABEL1永遠不會改變文本RTL即使我輸入阿拉伯語!

編輯:回答!

首先感謝所有幫助我在這裏,特別是俄德,這裏是解決方案,我可以找出

private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (InputLanguage.CurrentInputLanguage.Culture.TextInfo.IsRightToLeft) 
     { 
      label1.Text = "RTL"; 
     } 
     else 
     { 
      label1.Text = "LTR"; 
     } 
    } 
+1

您正在尋找'使用Xenophobia;',但它應該在所有美國版本上默認啓用。 ;-) – 2012-01-31 20:15:03

+0

阿拉伯語是一種RTL語言。 – Oded 2012-01-31 20:18:02

+0

@付款,對不起,我放錯了RTL和LTR之間,我總是得到LTR不是RTL – 2012-01-31 20:20:06

回答

2

您需要正確的命名空間添加到您的類的頂部:

using System.Globalization; 

此時,CultureInfoTextInfo類將直接可用。


更新:

看來,你正試圖找出當前輸入語言。看看InputLanguage課程及其方法。它位於System.Windows.Forms命名空間中。

InputLanguage.CurrentInputLanguage.Culture.TextInfo.IsRightToLeft 
+0

其實它沒有工作,好吧,我發現了Cultureinfo和TextInfo,但我不能使用CultureInfo.TextInfo。IsRightToLeft,他們不適合在同一行 – 2012-01-31 20:09:10

+0

@ R.Vector - 我不知道這意味着什麼。 – Oded 2012-01-31 20:09:49

+0

好吧,它是:CultureInfo.CurrentCulture.TextInfo.IsRightToLeft – 2012-01-31 20:10:33

1

的問題是,CultureInfo.CurrentCulture.TextInfo.IsRightToLeft將返回關於當前系統設置,而不是被輸入到文本框中的具體文本信息。

你不知道你是否已經在文本框中輸入了英文,阿拉伯文或西里爾文,並且它不關心。所有它關心的是您的計算機配置顯示,這就是爲什麼它永遠不會改變。

不幸的是,我不相信有可能獲得特定字符串文本的語言。你可能Text.EncodingInfo.CodePage property有一些運氣,但它不可能會有絕對的確定性告訴你文本的語言。另一種可能的方法是迭代字符串中的字符,檢查它們的信息。類似的東西描述爲here

所有事情都考慮過了,最好問問用戶。其他應用程序支持多種輸入語言的功能是什麼?

+0

是最好的解決方案現在是問他,但我只是想這是動態的 – 2012-01-31 20:24:29

+1

我發現['InputLanguge'](http://msdn.microsoft.com/en-us /library/system.windows.forms.inputlanguage.aspx)類。 – Oded 2012-01-31 20:25:13