Jump to content

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


Recommended Posts

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

Link to post
Share on other sites
Chicomaravilha

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.

Link to post
Share on other 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

Link to post
Share on other 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) :)

Link to post
Share on other sites
Chicomaravilha

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.

Link to post
Share on other sites
Tiago Salgado

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 []

Link to post
Share on other sites
Chicomaravilha

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

Link to post
Share on other sites
Tiago Salgado
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 []

Link to post
Share on other 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.

Link to post
Share on other sites
Chicomaravilha
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

Link to post
Share on other sites
Tiago Salgado

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.