0

私が知っているこの記事によると、DateTimePickerコントロールはCurrentUICultureを反映していません。では、使用している実際の
カルチャ を取得するにはどうすればよいですか?多言語アプリケーションでDateTimePickerの文字列値を取得するために必要ですが、ユーザーがフォームに表示するのとまったく同じ形式です(いいえ、「ハードコード」カスタム形式を設定できません)。

例:
ネイティブのポーランド語設定を使用してWindowsで作業している場合、LongTimeの場合は次のようになります。HH mm:ssおよびDateTimePickerの時刻は次のように表示されます: 09:26:50

ここで、アプリケーションで別の言語を選択し、フォームのコンストラクターでカルチャ設定をUSに変更する場合:

...
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

InitializeComponent();
....

それから

MessageBox.Show(System.Globalization.DateTimeFormatInfo.CurrentInfo.LongTimePattern);

は、新しい時刻形式が次のとおりであることを示しています:h:mm:ss tt、それでもDateTimePickerはまだ表示されています:09 :26:50

次のような時間文字列を取得しようとすると、次のようになります。

dateTimePicker1.Value.ToLongTimeString()

また

dateTimePicker1.Value.ToString(System.Globalization.DateTimeFormatInfo.CurrentInfo.LongTimePattern)

その後、時刻は次のように表示されます:9:26: 50 AM

だから私の質問は-DateTimePickerがまだシステムのCultureInfo( "pl-PL")を使用していること、またはその表示形式がHH:mm:ssであることをどうやって知ることができますか?

4

1 に答える 1

2

DateTimePickerは、ネイティブのWindowsコントロールです。コントロールパネル+リージョンおよび言語アプレットで設定された時間形式を使用します。私のマシンではこれは次のようになります(私は米国に住んでいます):

ここに画像の説明を入力してください

したがって、使用されている形式を確認する1つの方法は、変更する前にThread.CurrentCulture値を格納することです。

UIスレッドのカルチャを変更することは、非常に危険なことであることに注意してください。問題は、プログラム内の他のスレッド、特に小さなスレッドプールとI / O完了スレッドが、上のスクリーンショットの[管理]タブで構成されているように、マシンのデフォルトのカルチャで実行されていることです。それは見つけるのが難しい微妙なバグを引き起こす可能性があります。UIスレッドで作成されたSortedListのように、ワーカースレッドで突然ソートされなくなりました。.NET 4.5は、CultureInfo.DefaultThreadCurrentCultureプロパティとDefaultThreadCurrentUICultureプロパティを追加することで、この問題の修正を提供します。

プログラムのユーザーの中には、実際にマシンの設定や母国語と一致しない言語でプログラムを実行したいと思う人はほとんどいないので安心してください。UIで言語変更オプションを提供することはデモ機能であり、実際には使用されません。

于 2012-05-28T08:29:36.213 に答える