WinForms で特定のコントロールのCurrentCulture
とをオーバーライドすることは可能ですか? CurrentUICulture
この 1 つの特定のコントロールが異なるカルチャを使用するようにするには?
質問する
1758 次
2 に答える
2
選択した CultureInfo をインスタンス化し、それをパラメーターとして書式設定関数 (ToString など) に渡すことで、これを実現できます。それを Thread.CurrentThread.CurrentCulture または Thread.CurrentThread.CurrentUICulture に割り当てないでください。アプリケーションのカルチャ自体が変更されるためです。
あなたのコードで:
CultureInfo myCulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(DateTime.Now.ToString(myCulture));
コードが外部コードを実行し、内部で選択したカルチャをこのコードに強制的に使用させたい場合は、新しいスレッドを作成し、カルチャをそのスレッドに割り当ててから、そのスレッドにコードを実行させることができます。そのアプローチに伴うスレッド化の問題に注意してください。
スレッドサンプル:
string formattedDate = string.Empty;
Thread t = new Thread(delegate()
{
// call external code without specifying culture
formattedDate = DateTime.Now.ToString();
waitHandle.Set();
});
t.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
t.Start();
waitHandle.WaitOne(); // wait for the thread to finish
Console.WriteLine(formattedDate);
最後のポイントとして; CurrentCulture をオーバーライドする理由はわかりませんが、そうする前によく考えることをお勧めします。ユーザーは、ロケールに従って書式設定された数値の日付を見ることに慣れています。これを変更すると、特に UI の 1 つの部分でのみ変更が行われる場合、混乱を招く可能性があります。
于 2009-05-29T09:26:07.353 に答える
0
単一のコントロールではできないと思いますが、現在のスレッドでは次のように切り替えることができます。
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
于 2009-05-29T17:25:25.863 に答える