EXIBICAO DE VALORES MONETARIOS
Bom dia.
Estou tentando exibir a princÃpio num Textbox um valor monetário que será digitado pelo usuário e depois gravado no banco de dados SQL Express. O campo no banco ainda não fiz, mas não estou conseguindo nem digitar o valor no textbox. Fiz assim:
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = Convert.ToDecimal(textBox1.Text).ToString([Ô]###,###,##0.00[Ô]);
}
O problema é que ao digitar o ponto ou vÃrgula, dá erro no código que não entende esses caracteres.
1) o correto para valores é usar tipo Decimal ou Double (C# e Banco SQL)?
2) o controle maskedit não tem valores monetários, então estou tentando com o textbox. Antes no VB6 usava o Imput32.ocx que fazia tudo isso automaticamente, e super fácil, datas, números, etc...
No que estou errando?
Estou tentando exibir a princÃpio num Textbox um valor monetário que será digitado pelo usuário e depois gravado no banco de dados SQL Express. O campo no banco ainda não fiz, mas não estou conseguindo nem digitar o valor no textbox. Fiz assim:
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = Convert.ToDecimal(textBox1.Text).ToString([Ô]###,###,##0.00[Ô]);
}
O problema é que ao digitar o ponto ou vÃrgula, dá erro no código que não entende esses caracteres.
1) o correto para valores é usar tipo Decimal ou Double (C# e Banco SQL)?
2) o controle maskedit não tem valores monetários, então estou tentando com o textbox. Antes no VB6 usava o Imput32.ocx que fazia tudo isso automaticamente, e super fácil, datas, números, etc...
No que estou errando?
CARO LUIS HERRERA
PARA IDENTIFICAR QUALQUER DIGITAÇÃO O EVENTO CORRETO é KEYPRESS
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar < [ô]0[ô] || e.KeyChar > [ô]9[ô]) && (e.KeyChar != [ô],[ô] && e.KeyChar != [ô].[ô] && e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
{
e.KeyChar = (Char)0;
}
else
{
if (e.KeyChar == [ô].[ô] || e.KeyChar == [ô],[ô])
{
if (!textBox1.Text.Contains([ô],[ô]))
{
e.KeyChar = [ô],[ô];
}
else
{
e.KeyChar = (Char)0;
}
}
}
}
BOA SORTE
PARA IDENTIFICAR QUALQUER DIGITAÇÃO O EVENTO CORRETO é KEYPRESS
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar < [ô]0[ô] || e.KeyChar > [ô]9[ô]) && (e.KeyChar != [ô],[ô] && e.KeyChar != [ô].[ô] && e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
{
e.KeyChar = (Char)0;
}
else
{
if (e.KeyChar == [ô].[ô] || e.KeyChar == [ô],[ô])
{
if (!textBox1.Text.Contains([ô],[ô]))
{
e.KeyChar = [ô],[ô];
}
else
{
e.KeyChar = (Char)0;
}
}
}
}
BOA SORTE
AJSO boa tarde.
Testei o código, mas apresenta alguns problemas, ou seja:
1) se não digitar o ponto ele não exibe a máscara normal de números monetários xxx.xxx.xxx,00
2) Se digitar o ponto, ele só aceita um, e depois não aceita outros e a vÃrgula.
3) Além disso se digitar números aleatoriamente ele vai aceitando, ex: 123.45678 e não permite colocar a vÃrgula depois
4) Eu coloquei no evento Change, pois como os dados serão consultados de um banco (depois de gravados), ao receber o valor ele teria de colocar a máscara correta.
5) Um outro problema que estou pensando, é como gravar só o valor sem a máscará, pois no banco acredito que não se deve passar o ponto e vÃrgula, além do que no banco a vÃrgula não é aceita, pois o separador da casas decimais é o ponto em inglês.
Isso é mais complicado, não acredito que o VS ainda não tem um controle para isso.
Testei o código, mas apresenta alguns problemas, ou seja:
1) se não digitar o ponto ele não exibe a máscara normal de números monetários xxx.xxx.xxx,00
2) Se digitar o ponto, ele só aceita um, e depois não aceita outros e a vÃrgula.
3) Além disso se digitar números aleatoriamente ele vai aceitando, ex: 123.45678 e não permite colocar a vÃrgula depois
4) Eu coloquei no evento Change, pois como os dados serão consultados de um banco (depois de gravados), ao receber o valor ele teria de colocar a máscara correta.
5) Um outro problema que estou pensando, é como gravar só o valor sem a máscará, pois no banco acredito que não se deve passar o ponto e vÃrgula, além do que no banco a vÃrgula não é aceita, pois o separador da casas decimais é o ponto em inglês.
Isso é mais complicado, não acredito que o VS ainda não tem um controle para isso.
Aproveitando, nas suites Kypton ou Dev Express existe algum controle que tenha máscaras para Data, Números, etc...?
Procurei mas só achei um Textbox em cada um, e nem controle Maskedit tem. Será que é tão difÃcil assim trabalhar com valores monetários?
Parece que o input32 que tinha versão para .NET paga também foi descontinuado, pois o site não existe mais. www.eoliv.com
Procurei mas só achei um Textbox em cada um, e nem controle Maskedit tem. Será que é tão difÃcil assim trabalhar com valores monetários?
Parece que o input32 que tinha versão para .NET paga também foi descontinuado, pois o site não existe mais. www.eoliv.com
Citação::
Aproveitando, nas suites Kypton ou Dev Express existe algum controle que tenha máscaras para Data, Números, etc...?
Procurei mas só achei um Textbox em cada um, e nem controle Maskedit tem. Será que é tão difÃcil assim trabalhar com valores monetários?
Parece que o input32 que tinha versão para .NET paga também foi descontinuado, pois o site não existe mais. www.eoliv.com
O Krypton que tenho instalado é o 4.4.0 e nele contém MaskedTextBox .Veja na imagem.
Você já testou esse exemplo aqui do site do TECLA
ADHEL obrigado achei, minha versão também é 4.4.0. Ainda não testei nada com essa suite.
Tentei usar, mas não consegui fazer ele funcionar corretamente. Tentei que a máscará não fosse exibida, mas ele não respeita. Usei:
Mask = ###,###,##0.00
TextMasketFormat = ExcludePronptAndLiterals
CutCopyMasketFormat = ExcludePronptAndLiterals
Problemas:
1) Ao rodar a máscará é exibida
2) Ao entrar no campo ele inicia a digitação no ponto onde o cursor está e não na última casa decimal ou no inÃcio do numero.
3) Não aceita digitar a vÃrgula ou ponto para informar o inÃcio das casas decimais, com isso o número inserido sempre é inteiro.
4) Ao exibir o valor numa mensage box, ele é exibido como inteiro, pois não tem valor decimal e não tem a formatação. A princÃpio fica correto para gravar no banco (exceto a parte decimal), mas para exibir na tela sem a formatação fica estranho.
Tem como resolver isso tudo?
Sobre o código do TECLA, tentei escrevê-lo em C#, mas deu um monte de erros. Não consegui identificar alguns motivos, o problema parece na sintaxe do VB que parece não ter conseguido fazer tudo no C#.
Tentei usar, mas não consegui fazer ele funcionar corretamente. Tentei que a máscará não fosse exibida, mas ele não respeita. Usei:
Mask = ###,###,##0.00
TextMasketFormat = ExcludePronptAndLiterals
CutCopyMasketFormat = ExcludePronptAndLiterals
Problemas:
1) Ao rodar a máscará é exibida
2) Ao entrar no campo ele inicia a digitação no ponto onde o cursor está e não na última casa decimal ou no inÃcio do numero.
3) Não aceita digitar a vÃrgula ou ponto para informar o inÃcio das casas decimais, com isso o número inserido sempre é inteiro.
4) Ao exibir o valor numa mensage box, ele é exibido como inteiro, pois não tem valor decimal e não tem a formatação. A princÃpio fica correto para gravar no banco (exceto a parte decimal), mas para exibir na tela sem a formatação fica estranho.
Tem como resolver isso tudo?
Sobre o código do TECLA, tentei escrevê-lo em C#, mas deu um monte de erros. Não consegui identificar alguns motivos, o problema parece na sintaxe do VB que parece não ter conseguido fazer tudo no C#.
Caro LUIS HERRERA
Veja este exemplo e se fica fácil entender
OLHE A LINHA 92
textBox1.Text = Convert.ToDouble(textBox1.Text).ToString([Ô]C[Ô]);
Faz com que apareça R$ na frente dos valores digitados
tracando para
textBox1.Text = Convert.ToDouble(textBox1.Text).ToString([Ô]N[Ô]);
Fica apenas na formatação numérica 000.000,00
se preferir pode mudar a textBox1_Leave
private void textBox1_Leave(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
textBox1.Text = Convert.ToDouble(textBox1.Text).ToString([Ô]N[Ô]);
}
else
{
textBox1.Text = [Ô]0,00[Ô];
}
}
Boa Sorte
Veja este exemplo e se fica fácil entender
OLHE A LINHA 92
textBox1.Text = Convert.ToDouble(textBox1.Text).ToString([Ô]C[Ô]);
Faz com que apareça R$ na frente dos valores digitados
tracando para
textBox1.Text = Convert.ToDouble(textBox1.Text).ToString([Ô]N[Ô]);
Fica apenas na formatação numérica 000.000,00
se preferir pode mudar a textBox1_Leave
private void textBox1_Leave(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
textBox1.Text = Convert.ToDouble(textBox1.Text).ToString([Ô]N[Ô]);
}
else
{
textBox1.Text = [Ô]0,00[Ô];
}
}
Boa Sorte
AJSO perfeito, consegui. Obrigado.
Tópico encerrado , respostas não são mais permitidas