2011-09-08 7 views
1

私は、次のコードを持って、いくつかの理由持つDouble.toString( "C")の復帰が正しくない通貨記号

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

、テキストボックスに出力が

enter image description here

、このようになります

ドル記号の代わりにいくつかの奇妙な記号があります。コンピュータのローカルは米国ですので、$記号を表示する必要があります。

コントロールがAutoCADプラグインで使用されています。AutoCADでは、.Net dllが読み込まれます。奇妙な部分は、私はWindowsフォームアプリケーションでこの同じコントロールを使用する場合は、適切なシンボルで正常に動作します。間違ったシンボルは、コードが他のアプリケーションから読み込まれたときにのみ表示されます。

これに対応する方法はありますか?私はAutoCADがdllをどのようにロードするかを制御していないので、コードから通貨記号を修正する必要があります。また、私たちが使用するレポートツールにもこのエラーが表示されるので、手動でシンボルを挿入する以外の解決策を探しています。

+1

フォントを変更しようとするとどうなりますか?システムのコントロールパネルで現地通貨記号を変更するとどうなりますか?恒久的なものではありませんが、テストだけでもシンボルが表示されているかどうかを確認することができます。 –

答えて

2

プラグインのシナリオでは、Thread.CurrentCultureを制御することはできません。スレッドは、AutoCADによって初期化され、設定されます。AutoCADは、独自の目的のためにデフォルト言語を変更している可能性があります。 winapiのSetThreadLocale()。

ドルが必要な場合は、IFormatProvider引数を受け入れるオーバーライドを使用し、必要なCulture.NumberFormatInfoを渡してください。

+0

私は' Thread.CurrentThread.CurrentCulture = CultureInfo .CreateSpecificCulture( "en-US") 'と書かれています。それは以前のen-USとして報告されていましたが、問題を修正したようです。 – Kratz

+0

AutoCADのスレッド構成がネジ止めされます。 –

3

現在のカルチャが何であれオーバーライドする必要があります。

Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("en-US") 
txtCaseworkCost.Text = _CaseworkCost.ToString("C", culture) 
+0

この問題の原因となるのは、AutoCADアセンブリの場合は面白いでしょう。私は 'string Culture = CultureInfo.CurrentCulture.DisplayName;'のような一度だけのチェックを投げて、現在のカルチャが最初に戻ってきたものを確認します。 –

+0

@George、奇妙なことに、文化は英語であると主張していますが、なんらかの理由で何らかの理由でCultureInfo.CurrentCulture.NumberFormat.CurrencySymbol'が '¤'を返す – Kratz

1

アドインの現在のカルチャを、シンボルが好きなように表示されているように設定します。

関連する問題