C# 为什么.net';s StringFormat.SetDigitSubstitution方法根本不起作用?
我正在尝试用传统数字替换标准数字:C# 为什么.net';s StringFormat.SetDigitSubstitution方法根本不起作用?,c#,.net,winforms,C#,.net,Winforms,我正在尝试用传统数字替换标准数字: System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("ja-JP"); using (Font font = new Font("Arial", 12, FontStyle.Regular)) { using (StringFormat format = new StringFormat()) { format.SetDi
System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("ja-JP");
using (Font font = new Font("Arial", 12, FontStyle.Regular))
{
using (StringFormat format = new StringFormat())
{
format.SetDigitSubstitution(culture.LCID, StringDigitSubstitute.Traditional);
g.DrawString("Digits: 1 2 3 4 5 6 7 8 9 0", font, Brushes.Black, ClientRectangle, format);
}
}
根据法律,该代码应该打印繁体字而不是西方数字,但事实并非如此。我还尝试使用“UD Digi Kyokasho NK-R”(一种日语字体)作为FontFamily参数,但它仍然使用西方数字
我试图在Windows窗体上实现这一点,并在Windows 10上使用.net framework 4.7.2进行测试
据我所知,所有语言都存在这个问题。你可能在
文化信息.NumberFormat.NativeDigits中有(所谓的)西方数字。而在msdn示例中,阿拉伯语(ar EG
,埃及)和泰语(th
,泰国)有一个NativeDigits
定义<代码>传统版
是一种用户本地化,可能不同于国家/官方版(如果没有定义,则与国家版
相同)。CultureInfo
定义是特定于系统的。例如,在Windows 10中,您可能会得到与Windows 7不同的结果。这还取决于系统更新。如果我没记错的话,数字替换只在WPF中有效,而不是WinForms,因为前者有自己的绘图引擎,而WinForms只使用Windows标准控件。@ckuri它可以工作。您可以使用我上面提到的一种区域性尝试OP提供的代码。这是一个StringFormat
函数,使用Graphics.DrawString()
绘制字符串。WinForms控件在这里甚至不涉及。@Jimi据我所知,所有语言都存在这个问题。这包括了整个MSDN示例,我还尝试了其他几个示例。适用于Windows 7:)(这是系统特定的设置,对吗?)在Windows 10中,区域/格式设置=>标准数字和使用本机数字是有原因的。请看:在和(来自迈克尔·卡普兰的博客)。另外,请参阅有关Uniscribe的文档。