Pergunta

É possível substituir o CurrentCulture eo CurrentUICulture para um controle específico em WinForms? Para que este controle específico usa uma cultura diferente?

Foi útil?

Solução

Você pode conseguir isso por instanciar o CultureInfo de sua escolha e passar isso como parâmetro para as funções de formatação (como ToString). Só não atribuí-la a Thread.CurrentThread.CurrentCulture ou Thread.CurrentThread.CurrentUICulture, uma vez que irá mudar a cultura para a aplicação como tal.

Em seu código:

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

Se o seu código executa código externo, e você quiser forçar este código para usar sua cultura escolhido internamente, você pode fazer isso através da criação de um novo segmento, atribuir a cultura para esse segmento e depois ter esse segmento executar o código. Apenas certifique-se de prestar atenção aos problemas de threading que vem com essa abordagem.

Exemplo de Tópico:

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 ponto; Eu não sei por você deseja substituir o CurrentCulture, mas eu sugiro que você pense duas vezes antes de fazer isso. Os usuários estão acostumados a ver datas um números formatados de acordo com sua localidade; mudança que pode ser confuso, especialmente se isso acontece em apenas uma parte da interface do usuário.

Outras dicas

Eu não acho que você pode fazê-lo para o controle único, mas para o segmento atual pode mudar assim:

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top