Winforms Control의 CurrentCulture를 무시하십시오
-
06-09-2019 - |
문제
그것을 무시할 수 있습니까? CurrentCulture
그리고 CurrentUICulture
Winforms의 특정 제어를 위해? 이 하나의 특정 통제가 다른 문화를 사용하도록합니까?
해결책
당신은 당신이 선택한 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의 한 부분에서 발생하는 경우 혼란 스러울 수 있습니다.
다른 팁
나는 당신이 단일 컨트롤을 위해 그것을 할 수 있다고 생각하지 않지만 현재 스레드의 경우 다음과 같이 전환 할 수 있습니다.
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
제휴하지 않습니다 StackOverflow