Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou meio confuso com questão a formatação de valores monetários usando o controlador 'textBox' no Windows Forms.
Atualmente estou usando o seguinte código no evento Leave da minha textBox:
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("pt-BR");
textPreco.Text = (Decimal.Parse(textPreco.Text) / 100).ToString("C");
E eu tenho o resultado esperado para inputs como esses:
1000 => 10,00
1234 => 12,34
199 => 1,99
Ou seja, quando eu alimento a textBox com valores inteiros tudo sai conforme o esperado. Porém se eu informar um valor decimal sai assim:
10,00 => 0,10
12,34 => 0,12
1,99 => 0,02
O mesmo acontece se eu trocar esse trecho de código:
textPreco.Text = (Decimal.Parse(textPreco.Text)/100).ToString("C");
por esse:
textPreco.Text = string.Format("{0:#.00}", Convert.ToDouble(textPreco.Text)/100);
Resumindo eu gostaria de escrever na minha textBox tanto **1000 **quanto **10,00 **e converter em **10,00** ou **R$10,00**
Grato desde já!
Após mais algumas pesquisas eu consegui. A solução (caso alguém esteja com o mesmo problema) consiste em criar um controlador personalizado que herda o controlador TextBox. Eu criei uma pasta no diretório do projeto chamada Controls para armazenar meus controladores personalizados e criei dentro dela, uma classe chamada CurrencyBox o código da classe ficou assim:
namespace MeuProjeto.Controls
{
class CurrencyBox : TextBox
{
protected override void OnGotFocus(EventArgs e)
{