我试图强制我的表单使用阿拉伯格式,例如将(1-2-3-4-..等)数字显示为(٠、١、٢、٣、٤、٥ 、 ٦ 、 ٧ 、 ٨ 、 ٩ ) 在我的所有表单中,无论它是 Textbox
、lables
或其他任何内容
我搜索并发现了很多关于这个问题的问题,其中大多数都不起作用,而我认为其他的似乎不是很好的答案,例如 accepted answer here如下所示,我在表单加载方面尝试过的内容对我的问题没有影响
这是一个accepted answer那说文化信息不会有帮助,是吗?因为我认为这个答案不对
如果有人可以帮助我,请
private void F0102_Load(object sender, EventArgs e)
{
CultureInfo ar_culture = new CultureInfo("ar-SA");
Thread.CurrentThread.CurrentCulture = ar_culture;
Thread.CurrentThread.CurrentUICulture = ar_culture;
}
最佳答案
大多数阿拉伯人使用西方阿拉伯数字(1、2、3...)进行数学计算。因此,即使使用 ar-SA 区域性,您在格式化数字时也会遇到这些情况。使用您自己的格式化函数来获取东部阿拉伯数字。
public static string ToArabic(long num)
{
const string _arabicDigits = "۰۱۲۳۴۵۶۷۸۹";
return new string(num.ToString().Select(c => _arabicDigits[c - '0']).ToArray());
}
您还可以创建自己的格式提供程序:
public class ArabicNumberFormatProvider : IFormatProvider, ICustomFormatter
{
public static readonly ArabicNumberFormatProvider Instance =
new ArabicNumberFormatProvider();
private ArabicNumberFormatProvider() { }
public object GetFormat(Type formatType) { return this; }
public string Format(string format, object arg, IFormatProvider formatProvider)
{
switch (arg) {
case long l:
return ToArabic(l);
case int i:
return ToArabic(i);
default:
return null;
}
}
public static string ToArabic(long num)
{
const string _arabicDigits = "۰۱۲۳۴۵۶۷۸۹";
return new string(num.ToString().Select(c => _arabicDigits[c - '0']).ToArray());
}
}
示例:
string arabic = String.Format(ArabicNumberFormatProvider.Instance,"{0}", 1234567890);
输出:
۱۲۳۴۵۶۷۸۹۰
但是,num.ToString(ArabicNumberFormatProvider.Instance)
不起作用。有关详细信息,请参阅 https://stackoverflow.com/a/6240052/880990。
关于c# - 如何强制我的 C# Windows 窗体使用阿拉伯数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802254/