View Full Version : Perciso de ajuda -> VB .NET :S


Tecnoboy
28-11-2004, 23:01
Pessoal, estou a passar um programa que tinha feito em Pascal para ambiente Windows, para tal estou a utilizar o Visual Studio .NET, mais propriamente o Visual Basic .NET, já trabalhei com VB à uns anos atrás, mas já não me lembro de muito e estou apenas a iniciar-me nesta nova versão, como tal gostaria que se houvesse aqui alguem que percebesse disto, me desse umas dicas:

- Como posso fazer para que uma Text Box apenas aceite/apresente valores numéricos e no máximo com 2 casas decimais ?

Tenho outras dúvidas, mas são relativas ao meu código fonte e de momento não tenho oportunidade de o meter aqui, quando poder meto-o, entretanto se alguem me pudesse ajudar com esta dúvida agradecia ! ;)

NoMercy
29-11-2004, 03:46
- Como posso fazer para que uma Text Box apenas aceite/apresente valores numéricos e no máximo com 2 casas decimais ?

Segundo me recordo em vb6 podias afectar um propriedade da textbox para fazer isto mas em .NET tens que o fazer á mão.
Dai que talvez a melhor maneira seja "apanhares" o evento validating e verificares se é um numérico e se for converte-lo para duas casas décimais. Ou truncas o excedente de casas décimais ou arrendondas o numero.
Ainda quanto ao verificares se é numérico ou alfanumérico podes por exemplo:
1. Tentar fazer um cast para long ou outro tipo numérico com casas décimais (obviamente int não dá) tipo: "long numero = (long)textbox.text e se este cast der uma excepção então sabes que o conteudo da textbox (textbox.text) é alfanumérico, se não der excepção procedes com o arredondamento ou truncagem das casas décimais.
2. Tentar usar o conversor (amanhã vejo o namespace e classe respectiva) para tentares converter o conteudo da textbox.text e se receberes um numero está bem, senão é porque o conteudo era alfanumerico. consoanto o resultado procede ao arredondamento ou truncagem das casas décimais.

Se apenas precisares de numero inteiros (não sei se numeros décimais dá) podes usar o NumberPicker (senão me engano o nome é assim).

JC
29-11-2004, 21:27
Estou mais habituado ao VB6 mas dadas as semelhanças com o .NET penso dar para o que queres.

Quanto à lenght da textbox tenta procurar nas propriedades por MaxLength se n tiver experimenta inserir o componente "Microsoft Masked Edit Control 6.0" ou parecido.
O Masked Edit control vai-te permitir não só especificar o tamanha da txt como também o tipo de dados a aceitar.
Quanto ao tipo de caracteres se quiseres ou n tiveres outra alternativa podes fazer com que no KeyPress do txt ele abra um modulo do estilo

Funtion sonumeros(keyascii)
if ((keyascii<="valor do 1 na tabela ASCII") and (keyascii<="Valor do 9 na tabela ASCII")) or (keyascii="valor do apagar na tabela ASCII") then
else
keyascii = 0
end function



Sinceramente espero ter ajudado, abraços

Tecnoboy
29-11-2004, 21:44
Agradeço as vossas respostas, no entanto não compreendi bem, mas vou tentar disponibilizar aqui umas imagens do código fonte e interface gráfica do programa, para ver se me consigo explicar melhor, até ao final da semana meto isso aqui.

Mais uma vez obrigado ;)

MaTreCo
29-11-2004, 23:27
Tens uma classe que te valida tudo e mais um par de botas recorrendo às "regular expressions". Procura por "RegEx" na própria ajuda do VB. Até te faz logo a conversão.

NoMercy
30-11-2004, 12:00
Tens uma classe que te valida tudo e mais um par de botas recorrendo às "regular expressions". Procura por "RegEx" na própria ajuda do VB. Até te faz logo a conversão.
Conversão (para decimal) com expressões regulares duvido que faças, mas até não é mal pensado usar expressões regulares para o efeito.

Esta talvez sirva para validar se tudo o que está textbox é numérco/decimal:
^[0-9\.]*(\.|,)[0-9]*$

Esta talvez sirva serve para formatar o numero com 2 casas décimais:
^[0-9\.]*(\.|,)[0-9]{2}

Tens é que ver com os regional settings qual é o separador décimal e alterar, ou não, a expressão regular conforme o separador.
Dai que nesta parte da expressão (\.|,) talvez só seja necessário um deles.
Em Portugal, o separador décimal é a virgula e o separador dos milhares é o ponto, mas isto já deves saber ;)

MaTreCo
30-11-2004, 12:08
Conversão (para decimal) com expressões regulares duvido que faças

Quando falei em conversão estava a pensar mais em ele introduzir, por exemplo "100" e aparecer-lhe depois "100,00" :x2: . Isso garanto-te que fazes.
As expressões regulares são uma ferramenta bastante poderosa a que a maior parte da malta não dá a devida importância ou que, na maior parte das vezes, nem sequer conhece. São também uma das razões pelas quais as pesquisas em Linux funcionam muito melhor que as do Windows, pois o grep assenta sobre elas.

peter alien
06-12-2004, 16:25
Boas TecnoBoy,

aqui á dias precisei de fazer isso mesmo em VB.NET 2002.
Tens aqui um exemplo:

Estrela1 é uma TextBox.

Neste caso eu defini a TextBox para só aceitar digitos e caracteres de control, como por exemplo o Backspace (para caso o utilizador queira, rectificar o nº introduzido).


Private Sub Estrela1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Estrela1.KeyPress
REM A TextBox em causa só aceitará digitos e caracteres de controlo.
Dim C As Char
REM A variável "C" fica com o caracter que foi introduzido pelo teclado.
C = e.KeyChar
REM Verifica se o caracter introduzido é valido (neste caso, se é um digito ou um caracter de controlo).
If Not (Char.IsDigit(C) Or Char.IsControl(C)) Then
e.Handled = True
End If
End Sub


Fica bem :)