Tal/bogstaver

Tags:    visual-basic

Jeg er ved at lave et matematikprogram, og skal derfor hovedsageligt bruge tal.
Hvordan slår man bogstaver fra, så brugeren kun kan inputte tal? Der skal ganske enkelt ikke ske noget, når man trykker på andre taster end 0-9.

På forhånd tak!

Simon Bojer Sørensen
SiMON /\\ NOW!S



6 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Jeg er ved at lave et matematikprogram, og skal derfor hovedsageligt bruge tal.
Hvordan slår man bogstaver fra, så brugeren kun kan inputte tal? Der skal ganske enkelt ikke ske noget, når man trykker på andre taster end 0-9.


Hvis du kalder din tekstboks for Text1 kan du bruge denne kode:

<pre>
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (KeyAscii < 48) Or (KeyAscii > 57) Then
If Not (KeyAscii = 8) Then
KeyAscii = 0 'Når KeyAscii er 0 vil der ikke ske noget med tekstfelter
Beep 'Laver en lille biip lyd
End If
End If
</pre>

Denne kode tjekker først om brugeren har trykket på en tast, der ikke er et tal.
Derefter tjekkes der om det er backspase tasten der er trykket, hvis det ikke er den sættes KeyAscii til 0, og der laves en biip lyd.

BEMÆRK: Brugeren kan stadig klippe klistre bogstaver ind i feltet[Redigeret d. 17/08-02 18:32:42 af Jesper Mikkelsen]



Det virker sørme! Mange tak.

Som nævnt nederst i ovenstående svar, kan man stadig indsætte tekst vha. Paste/Sæt ind. Kan jeg ikke undgå det? Eksempelvis ved at slå Paste/Sæt ind-funktionen fra i textbox'ene?

Simon Bojer Sørensen
SiMON /\\ NOW!S


Du kunne evt. bruge OnChange på text1 istedet for keypress.
og så lige tilføje text1.text="" i if sætningen hvis der er indtastet bogstaver i feltet.

Håber det virker, og du forstår hvad jeg mener... ellers vil jeg gerne uddybe det nærmere....



Jeg ville foreslå at du indbyggede en validering af feltet istedet for at forhindre paste, for du udelukker jo en mulighed for at indsætte fra et andet felt i et andet program og det kunne man måske nok få brug for. En validering skal løbe alle tegn igennem og teste om de hører til en numerisk type, både fortegn (kun forest og kun et) og måske tusind seperator samt komma naturligvis (kun et og hvis ingen tegn foran så sæt nul foran, hvis ingen bag så fjern det eller sæt nul bagved) og måske exponent (fx E efterfulgt af fortegn og et heltal). Jeg ved godt det er en stor mundfuld men i matematik er alle talformater nødvendige, og du skal kun løse opgaven én gang i dit liv (rent alogritmisk), du skriver så selvfølgelig en procedure der validerer rigtigheden og som kan returnerer en kode, 0=ok, 1=tegn ikke numerisk,2=format for exponent ugyldigt osv... (man kan starte med ok/fejl) og du skal så reagerer på fejl-koden med en msg-box med den rigtige text (som passer til koden).



Det virker sørme! Mange tak.

Som nævnt nederst i ovenstående svar, kan man stadig indsætte tekst vha. Paste/Sæt ind. Kan jeg ikke undgå det? Eksempelvis ved at slå Paste/Sæt ind-funktionen fra i textbox'ene?

Simon Bojer Sørensen
SiMON /\\ NOW!S



Det virker sørme! Mange tak.

Som nævnt nederst i ovenstående svar, kan man stadig indsætte tekst vha. Paste/Sæt ind. Kan jeg ikke undgå det? Eksempelvis ved at slå Paste/Sæt ind-funktionen fra i textbox'ene?

Simon Bojer Sørensen
SiMON /\\ NOW!S


Hvis jeg husker rigtigt (er flere år siden jeg rørte VB), kan du også checke om KeyAscii er lig 22, hvis det er er det *vist* ctrl+<noget> der bliver trykket

Darkstar



Hvis jeg husker rigtigt (er flere år siden jeg rørte VB), kan du også checke om KeyAscii er lig 22, hvis det er er det *vist* ctrl+<noget> der bliver trykket

Darkstar


Det har du ret i, men man kan stadig højreklikke med musen, og vælge Paste/Sæt ind.

Simon Bojer Sørensen
SiMON /\\ NOW!S



t