1

WinForms で特定のコントロールのCurrentCultureとをオーバーライドすることは可能ですか? CurrentUICultureこの 1 つの特定のコントロールが異なるカルチャを使用するようにするには?

4

2 に答える 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 に答える