Double.ToString ("C") Возвращает неверный символ валюты - PullRequest
1 голос
/ 09 сентября 2011

У меня есть следующий код,

        txtCaseworkCost.Text = _CaseworkCost.ToString("C")

По какой-то причине вывод в текстовых полях выглядит следующим образом:

enter image description here

Со страннымсимвол вместо знака доллара.Местом для компьютера являются Соединенные Штаты, поэтому на нем должен отображаться знак $.

Элемент управления используется в плагине AutoCAD, где AutoCAD загружает DLL-файл .Net.Странная часть: если я использую этот же элемент управления в приложении формы Windows, он отлично работает с правильными символами.Неправильный символ появляется только тогда, когда код загружается из другого приложения.

Есть ли обходной путь для этого?Я не контролирую, как AutoCAD загружает dll, поэтому мне нужно как-то исправить символ валюты из моего кода.Кроме того, эта ошибка также появляется в используемом нами инструменте отчетности, поэтому я ищу решение, отличное от вставки символа вручную.

Ответы [ 3 ]

3 голосов
/ 09 сентября 2011

Вам необходимо переопределить текущую культуру.

Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
txtCaseworkCost.Text = _CaseworkCost.ToString("C", culture)
2 голосов
/ 09 сентября 2011

Вы не можете управлять Thread.CurrentCulture в сценарии с плагином. Поток инициализируется и настраивается AutoCAD, который вполне мог изменить язык по умолчанию для своих собственных целей. SetThreadLocale () в winapi.

Так что, если вам нужны доллары, убедитесь, что вы используете переопределения, которые принимают аргумент IFormatProvider и передаете нужный вам Culture.NumberFormatInfo.

1 голос
/ 19 июня 2012

Установите текущую культуру в вашей надстройке так, чтобы символ, который вам нравится, выглядел хорошо, тогда все готово.

...