c# - 如何强制我的 C# Windows 窗体使用阿拉伯数字?

标签 c# .net-4.0 cultureinfo

我试图强制我的表单使用阿拉伯格式,例如将(1-2-3-4-..等)数字显示为(٠‎、١‎、٢‎、٣‎、٤‎、٥‎ 、 ٦‎ 、 ٧‎ 、 ٨‎ 、 ٩‎ ) 在我的所有表单中,无论它是 Textboxlables 或其他任何内容

我搜索并发现了很多关于这个问题的问题,其中大多数都不起作用,而我认为其他的似乎不是很好的答案,例如 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/

相关文章:

c# - 如何在 C# 中获取网络摄像头图像?

.net - 什么可能导致 CurrentCulture 和 CurrentUICulture 默认为明显系统区域性以外的值?

c# - 在 C# 中获取 GetWeekOfYear 的日期?

.net - ToString ("0") 与 ToString(CultureInfo.InvariantCulture)

c# - Visual Studio Visual Studio MVC asp.NET 谷歌地图

c# - log4net AppenderSkeleton 忽略 PatternLayout

.net-4.0 - 使用并行任务库时“foreach”失败

c# - 如何获取 DependencyProperty 的默认值

c# - 将 "Service Account"证书存储与 .NET 2.0 HttpWebRequest 一起使用

c# - 替换过时的 VisualBasic.Compatibility.VB6.Support