我正在使用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 only,label1永远不会将文本更改为RTL,即使我键入阿拉伯语!!!
编辑:回答!!
首先感谢大家帮助我,尤其是Oded,这是我能想出的解决方案
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
if (InputLanguage.CurrentInputLanguage.Culture.TextInfo.IsRightToLeft)
{
label1.Text = "RTL";
}
else
{
label1.Text = "LTR";
}
}
答案 0 :(得分:2)
您需要在类的顶部添加正确的命名空间:
using System.Globalization;
此时,CultureInfo
和TextInfo
课程将直接提供。
更新
您似乎正在尝试查找当前的输入语言。看一下InputLanguage
类及其方法。它位于System.Windows.Forms
名称空间中。
InputLanguage.CurrentInputLanguage.Culture.TextInfo.IsRightToLeft
答案 1 :(得分:1)
问题是CultureInfo.CurrentCulture.TextInfo.IsRightToLeft
正在返回有关当前系统设置的信息,而不是输入到文本框中的特定文本。
你不知道你是否在文本框中键入了英语,阿拉伯语或西里尔语,而且它并不关心。它所关心的只是您的计算机配置显示的内容,这就是它永远不会改变的原因。
不幸的是,我不相信有可能获得特定文本字符串的语言。你可能对Text.EncodingInfo.CodePage
property有一些好运,但是不可能有任何东西会绝对确定地告诉你文本的语言。另一种可能的方法是遍历字符串中的字符,检查它们的信息。类似的内容描述为here。
考虑到所有因素,最好只询问用户。其他应用程序如何支持多种输入语言?