Pregunta

¿Es posible anular el CurrentCulture y la CurrentUICulture para un control específico en WinForms? Para que éste utiliza un control específico de una cultura diferente?

¿Fue útil?

Solución

Usted puede lograr que creando una instancia de la CultureInfo de su elección y pasar esa como un parámetro para funciones de formato (como ToString). Eso sí, no asignarla a Thread.CurrentThread.CurrentCulture o Thread.CurrentThread.CurrentUICulture, ya que va a cambiar la cultura de la solicitud como tal.

En su código:

CultureInfo myCulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(DateTime.Now.ToString(myCulture));

Si su código se ejecuta código externo y desea forzar este código para utilizar su cultura elegida internamente, puede hacerlo mediante la creación de un nuevo hilo, asignar la cultura de ese hilo y luego tener ese hilo ejecutar el código. Sólo asegúrese de prestar atención a los problemas de threads que viene con ese enfoque.

Ejemplo de Tema:

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);

Como último punto; No sé ¿Por qué desea anular la CurrentCulture, pero yo sugeriría que pensar dos veces antes de hacerlo. Los usuarios están acostumbrados a ver las fechas de un número de formato en su localidad; cambiante que puede ser confuso, especialmente si ocurre sólo en una parte de la interfaz de usuario.

Otros consejos

No creo que se puede hacer para el control sencillo, pero para el subproceso actual se puede cambiar de esta manera:

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top