Domanda

E 'possibile ignorare il CurrentCulture e la CurrentUICulture per un controllo specifico in WinForms? In modo che questo controllo specifico utilizza una cultura diversa?

È stato utile?

Soluzione

È possibile ottenere che istanziando il CultureInfo della vostra scelta e passare che come parametro per la formattazione funzioni (come ad esempio ToString). Basta non assegnarlo ad Thread.CurrentThread.CurrentCulture o Thread.CurrentThread.CurrentUICulture, dal momento che cambierà la cultura per l'applicazione in quanto tale.

Nel codice:

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

Se il codice viene eseguito codice esterno, e si desidera forzare questo codice per utilizzare la vostra cultura scelto internamente, si può fare con la creazione di un nuovo thread, assegnare la cultura a quel filo e quindi avere quel filo eseguire il codice. Basta fare in modo di prestare attenzione ai problemi di threading che viene fornito con questo approccio.

campione Discussione:

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

Come ultimo punto; Non so perché si desidera ignorare il CurrentCulture, ma vorrei suggerire che si pensa due volte prima di farlo. Gli utenti sono abituati a vedere le date un numeri formattati in base alla loro localizzazione; modifica che potrebbe essere confusa, soprattutto se avviene in una sola parte della UI.

Altri suggerimenti

Non credo che si può fare per il solo comando, ma per il thread corrente è possibile passare in questo modo:

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top