• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Tiago

Ajuda em VB6.0 Impedir de Inserir Numeros Negativos e Letras

12 mensagens neste tópico

Olá

Tive um Teste  de Programação ! em Que teriamos de Fazer o Seguinte Programa:

Depois de 5 numeros inseridos Teremos de Ver Qual o Maior e Menor Numero!! e ai ele Passava para outra Form em Ke teria :

O numer Maior é :

O Numero Menor é:

  O meu Probema axo que ainda não Explicito aki no Forum, mas se Foi  nos tutorias Peço desculpa pela Duplicação !

Para o utilizador não digitar Letras fiz o seguinte codigo  ( Claro depois de ter feito mal no teste ) considerando as Text1, Text2,Text3,Text4,Text5.

Então depois para não deixar introduzir Letras fiz um Case

SelectCase Text1.text

Private Sub cmd1_Click()

Select Case Text1.Text

Case 0

Case 1

Case 2

Case 3

Case 4

Case 5

Case 6

Case 7

Case 8

Case 9

Case Else

a = MsgBox("ERRO SÓ PODE INSERIR NÚMEROS", vbOKOnly + vbOKCancel, "ERRO")

End Select

End Sub

Mas também Se pode Fazer com o Isnumeric ! mas Tipo para ele não poder Digitar numero Negativos?

Fasso o mesmo Case ?

case -9

case -2 ....

Se alguem me poder ajudar !! Tipo com uma maneira mais facil pois eu nos testes tenhu 45 Minutos para fazer este tipo de Exercicios !!

um abraço e se alguem me poder ajudar Fico agradecido

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espero com isto poder dar-te uma ajuda.

No evento da Textbox_KeyPress, verificas o código ascii da tecla pressionada, se corresponde a uma letra, ou se corresponde a ‘-‘.

Então mandas uma mensagem de erro e limpas o campo.

O código que coloquei não foi testado pois não tenho o VB6 instalado.

Mas é mais ou menos isto.

Private Sub Text_KeyPress(KeyAscii As Integer)
   If( KeyAscii < = 48 Or KeyAscii  >= 57) Then 
        Form.Text1.Text=""	
        Form.Text1.SetFocus
    End If

PS: Confirma os valores do código Ascii.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Chicomaravilha, olha muito bem pensado sim senhor... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Chicomaravilha obrigada pela dica para ser sinsero contigo ja tou a ver como é isso e até ja tou a testar mas isso é muito novo para mim pedia-te se fizesses esse favor de me esplicar mais promoneralizado ou como é essa palavra ! tipo como ver esse valores da Ascii !! se não te importares! se não o fizeres não tem kualker problema é na boa kualker maneira obrigada ja aprende como s efaz !! so não sei ao serto o ke fiz se é ke me percebes!!

xau um abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código dele, ao ser posto no evento keypress, vai testar uma condição sempre que tentares inserir na texbox qualquer letra.

Ora a expressão teste vê se o que lá vais pôr se trata só de números, e caso seja, escreves, se não...por e simplesmenta não aparece nada na textbox...

O código ASCII permitido vai desde 48 (que é o 0) a 57 (que é o 9) :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Chicomaravilha obrigada pela dica para ser sinsero contigo ja tou a ver como é isso e até ja tou a testar mas isso é muito novo para mim pedia-te se fizesses esse favor de me esplicar mais promoneralizado ou como é essa palavra ! tipo como ver esse valores da Ascii !! se não te importares! se não o fizeres não tem kualker problema é na boa kualker maneira obrigada ja aprende como s efaz !! so não sei ao serto o ke fiz se é ke me percebes!!

xau um abraço

Boa noite,

Ora bem o que o vbmaster  disse está correcto, o  código está efectivamente colocado no evento keypressed.

Vou tentar explicar-te linha a linha o que está a fazer o código.

Cá vai

Assim que carregas num tecla qualquer isso vai despoletar um evento que no caso do VB é keypressed (isto pq se trata de uma caixa de texto).

Este evento recebe uma variável (neste caso um inteiro).

O código agarra na variável (KeyAscii) e verifica qual o valor que o mesmo contem nesse momento.

Compara com o valor 48 (valor asccii para o 0)  e compara com o valor 57 (valor ascii para 9).

Caso seja menor que 48 (0) ou maior que 57(9)  o que vai fazer é limpar todo o conteúdo da caixa de texto em causa.

Para além disso coloca o cursor na caixa de texto.

Chamo à atenção que existem mais maneiras (muitas) de fazeres isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas atenção q dessa maneira q o Chicomaravilha apresentou vai-te funcionar correctamente se for o primeiro caracter a ser inserido. Qd é indicado o textbox.text = "" ele vai apagar o conteudo que lá está e daí só funcionar qd a text está vazia e o primeiro caracter n for os que sao pretendidos. Para isso funcionar correctamente, substitui o textbox.text = "" por KeyAscii = 0.

Cumps []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas atenção q dessa maneira q o Chicomaravilha apresentou vai-te funcionar correctamente se for o primeiro caracter a ser inserido. Qd é indicado o textbox.text = "" ele vai apagar o conteudo que lá está e daí só funcionar qd a text está vazia e o primeiro caracter n for os que sao pretendidos. Para isso funcionar correctamente, substitui o textbox.text = "" por KeyAscii = 0.

Cumps []

Boa tarde

Tu desculpa mas segundo julgo perceber tu disseste que o código só funciona se a tecla errada for à 1ª vez.

Eu penso que não estás correcto pois por cada vez que carregas num letra o código é executado.

E sempre que tu carregas numa tecla que não é um numero ele apaga tudo o que está dentro da caixa de texto.

Lembro no entanto que neste momento não consigo testar em virtude de não ter o VB6 instalado.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
E sempre que tu carregas numa tecla que não é um numero ele apaga tudo o que está dentro da caixa de texto.

Exactamente, por isso é que não está correcto. Imagina o seguinte exemplo:

Tens a textbox vazia e vais inserir o primeiro caracter...carregas em "a"...ele vai executar o codigo e vai verificar que não se encontra dentro daquele intervalo de códigos ASCII, e assim sendo vai apagar o que está na textbox, ficando vazia. Irá ficar como queremos mas porque não tinha nenhum caracter inserido.

Agora imagina q tens a textbox preenchida com "123456" e vais carregar noutra tecla, por exempo o P...ele vai novamente ao evento KeyPress e vai efectuar as instruções q lá tem, e vai verificar que o código ASCII do P não corresponde ao intervalo que tens lá definido, ou seja, vai fazer novamente o textbox.text = "", ou seja, vai apagar o conteudo da textbox...resultado ...em vez de manter o "123456" vai ficar vazia. A alterçao que eu tinha indicado que deveria ser feita ( keyascii = 0 ) é mesmo por essa razao, em vez de apagar o conteudo, simplesmente ignora a tecla e não a envia, permitindo assim manter os valores anteriormente inseridos.

Espero ter-te esclarecido

Cumps []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que assim ficaria melhor:

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then
    Exit Sub
End If

If (KeyAscii <= 47) Or (KeyAscii >= 58) Then
    KeyAscii = 2
End If

Assim desta forma permite a introdução do 0, e também que se apague os caracteres. Valor 8 em ASCii = Backspace. 

Em vez do Text1.text = "" ou o KeyAscii=0 é preferivel usar o KeyAscii=2, ou seja, não irá apagar o texto existente como nos outros 2 nem irá aparecer lá um 0 ou um espaço.

:D

Cumpz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
E sempre que tu carregas numa tecla que não é um numero ele apaga tudo o que está dentro da caixa de texto.

Exactamente, por isso é que não está correcto. Imagina o seguinte exemplo:

Tens a textbox vazia e vais inserir o primeiro caracter...carregas em "a"...ele vai executar o codigo e vai verificar que não se encontra dentro daquele intervalo de códigos ASCII, e assim sendo vai apagar o que está na textbox, ficando vazia. Irá ficar como queremos mas porque não tinha nenhum caracter inserido.

Agora imagina q tens a textbox preenchida com "123456" e vais carregar noutra tecla, por exempo o P...ele vai novamente ao evento KeyPress e vai efectuar as instruções q lá tem, e vai verificar que o código ASCII do P não corresponde ao intervalo que tens lá definido, ou seja, vai fazer novamente o textbox.text = "", ou seja, vai apagar o conteudo da textbox...resultado ...em vez de manter o "123456" vai ficar vazia. A alterçao que eu tinha indicado que deveria ser feita ( keyascii = 0 ) é mesmo por essa razao, em vez de apagar o conteudo, simplesmente ignora a tecla e não a envia, permitindo assim manter os valores anteriormente inseridos.

Espero ter-te esclarecido

Cumps []

Boas Tiago, efectivamente o códifo que está escrito apaga o conteudo da caixa assim que carregas numa letra.

Mas isso para mim era claro, desde do inicio.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que assim ficaria melhor:

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then
    Exit Sub
End If

If (KeyAscii <= 47) Or (KeyAscii >= 58) Then
    KeyAscii = 2
End If

Assim desta forma permite a introdução do 0, e também que se apague os caracteres. Valor 8 em ASCii = Backspace. 

Em vez do Text1.text = "" ou o KeyAscii=0 é preferivel usar o KeyAscii=2, ou seja, não irá apagar o texto existente como nos outros 2 nem irá aparecer lá um 0 ou um espaço.

;)

Cumpz.

Deves tar a fazer uma certa confusao, pois o KeyAscii = 0 não iria por nenhum 0 nem nenhum espaço, simplesmente não iria fazer nada mais que ignorar a tecla q foi introduzida. Quanto ao codigo que deste para permitir tambem o backspace, talvez fosse melhor alternativa usar o If Not...

Tipo...

If Not Keyascii = 8 and Keyascii = 13 and ... (todas as que quiseres q se possam usar) then

    keyascii = 0

End if

Talvez desta forma seria melhor teres codigo do genero:

If KeyAscii = 8 Then 

  Exit Sub

End If

e

If KeyAscii = 13 Then

  Exit Sub

End If

E sempre que tu carregas numa tecla que não é um numero ele apaga tudo o que está dentro da caixa de texto.

Exactamente, por isso é que não está correcto. Imagina o seguinte exemplo:

Tens a textbox vazia e vais inserir o primeiro caracter...carregas em "a"...ele vai executar o codigo e vai verificar que não se encontra dentro daquele intervalo de códigos ASCII, e assim sendo vai apagar o que está na textbox, ficando vazia. Irá ficar como queremos mas porque não tinha nenhum caracter inserido.

Agora imagina q tens a textbox preenchida com "123456" e vais carregar noutra tecla, por exempo o P...ele vai novamente ao evento KeyPress e vai efectuar as instruções q lá tem, e vai verificar que o código ASCII do P não corresponde ao intervalo que tens lá definido, ou seja, vai fazer novamente o textbox.text = "", ou seja, vai apagar o conteudo da textbox...resultado ...em vez de manter o "123456" vai ficar vazia. A alterçao que eu tinha indicado que deveria ser feita ( keyascii = 0 ) é mesmo por essa razao, em vez de apagar o conteudo, simplesmente ignora a tecla e não a envia, permitindo assim manter os valores anteriormente inseridos.

Espero ter-te esclarecido

Cumps []

Boas Tiago, efectivamente o códifo que está escrito apaga o conteudo da caixa assim que carregas numa letra.

Mas isso para mim era claro, desde do inicio.

Cumprimentos

Ok, mas pela resposta que deste anteriormente deu a entender que o facto de apagar a text toda era mesmo preciso, foi por isso que tentei explicar-te que não dava. Mas entao se sabias tamos esclarecidos :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora