簡體   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