1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. Informação: Pela 0:30 desta Sexta-feira (9 de Dezembro, 23:30 de Quinta-feira nos Açores) o Fórum e restantes sites da ZWAME vão estar offline para manutenção durante cerca de 1h30.
    Se necessário faremos actualizações via Twitter e Facebook.
    Remover anúncio

Perciso de ajuda -> VB .NET :S

Discussão em 'Programação' iniciada por Tecnoboy, 28 de Novembro de 2004. (Respostas: 7; Visualizações: 2837)

  1. Tecnoboy

    Tecnoboy Power Member

    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 ! ;)
     
  2. NoMercy

    NoMercy Power Member

    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).
     
  3. JC

    JC Power Member

    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
     
  4. Tecnoboy

    Tecnoboy Power Member

    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 ;)
     
  5. MaTreCo

    MaTreCo Power Member

    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.
     
  6. NoMercy

    NoMercy Power Member

    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 ;)
     
  7. MaTreCo

    MaTreCo Power Member

    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.
     
  8. peter alien

    peter alien Power Member

    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 :)
     

Partilhar esta Página