繁体   English   中英

如何获取C#中的控制面板货币格式

[英]How to obtain the control panel currency format in C#

当区域性设置使用“ $”作为货币符号时,我们的报告生成器可以正常工作。

现在我们要在欧洲使用它,而使用“€”。

我转到控制面板,将“地区和语言”格式更改为“丹麦语(丹麦)”并应用更改。

现在打开Excel并输入数字,然后将单元格格式设置为货币,货币符号将更新。

但是,我们的报告生成器仍在使用“ $”。 在调试软件时,我们发现CultureInfo.CurrentCulture仍然是使用“ $”(即en-AU )的区域性。

(代码很简单,但我只是在这里写下:)

result = ValueToDisplay.ToString("C"); //CultureInfo.CurrentCulture is "en-AU"

我认为当用户的计算机使用欧洲语言时,这可能不是一个真正的问题,因为在这种情况下, CultureInfo.CurrentCulture将有所不同。

但是,显然Excel甚至可以在不重新启动计算机的情况下对应于控制面板中的设置更改,因此,从理论上讲,我们的软件也应该能够这样做。

那么我们如何像Excel一样工作呢?

多亏了这些提示,我发现我们的程序确实重置了区域性并将原始区域性存储在其他位置。 将代码更改为

result = ValueToDisplay.ToString("C", originalCulture);

这很好。

您可以通过侦听指示语言环境已更改的事件,然后清除CultureInfo缓存来处理此问题而无需重新启动应用程序。

要收听事件,您可以执行以下操作:

SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;

然后,在事件处理程序中,您可以清除区域性缓存:

private void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
{
    if (e.Category == UserPreferenceCategory.Locale)
        CultureInfo.CurrentCulture.ClearCachedData();
}

现在,当您运行如下代码时:

var number = 21.00;
MessageBox.Show(number.ToString("C"));

您将根据用户更改的任何区域设置信息获得正确的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM