EXIBICAO DE VALORES MONETARIOS

LUIS.HERRERA 06/11/2012 11:53:23
#413597
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?
AJSO 06/11/2012 13:24:11
#413602
Resposta escolhida
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
LUIS.HERRERA 06/11/2012 15:08:46
#413614
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.
LUIS.HERRERA 06/11/2012 15:22:40
#413617
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
ADHEL 06/11/2012 23:00:35
#413663
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
LUIS.HERRERA 07/11/2012 10:50:49
#413699
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#.
AJSO 07/11/2012 10:51:36
#413700
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
LUIS.HERRERA 07/11/2012 11:25:15
#413708
AJSO perfeito, consegui. Obrigado.
Tópico encerrado , respostas não são mais permitidas