13. december 2003 - 13:32Der er
17 kommentarer og 2 løsninger
problem med tal felt med plads til 3 tal (isnumeric)
i mit program har jeg et talfelt (Text1.text) hvor man kan indtaste 3 cifre (0 - 999). Jeg har gjort sådan i koden at den dukker op med en textbox med fejl medd. hvis man taster andet end et tal. Men nu er det sådan at det kun er ved det første tal at man kun! kan indtaste tal. jeg kan f.eks. godt skrive 3.. eller 1++ ogl.
For I = 0 to len(text1.text)-1 if asc(mid(text1.text,i,1)) < asc('0') or asc(mid(text1.text,i,1)) > asc('9') then msgbox("Du må kun indtaste cifre !") Next I
Altså, du er nødt til at løbe hver karakter igennem for at se om det er et tal. Ovenstående kode skal måske rettes lidt til, da jeg ikke lige har Visual Basic ved hånden.
I Keypress-eventen på din textbox tjekker du ansi-koden for det tegn der netop er tastet. Er det ikke et tegn du til tillade, sletter du det igen.
Altså:
I _keypress-eventen for din textbox skriver du følgende:
Select Case KeyAscii Case vbKeyReturn 'Enter-tasten KeyAscii = 0 'fjerner tegnet SendKeys "{tab}" 'simulerer et tryk på Tabulatortasten i stedet for Case vbKeyBack 'Backspace-tasten Case 48 To 57 'tallene 0 - 9 Case Else 'alle øvrige tegn KeyAscii = 0 'fjerner tegnet (alle øvrige tegn) End Select
Jeg vil foreslå at der testes for at det er tal, inden indholdet i feltet anvendes (gemmes eller...) netop med IsNumeric. Denne test kan så indsættes under knappen 'gem' hvis du bruger sådan en, eller under 'Lost Focus', altså når feltet forlades.
I øvrigt eksisterer der en ocx (msmask32.ocx) der gør det muligt at anvende en maske f.eks. ##.## så SKAL der indtastes fire cifre, - to før og to efter decimaladskilleren. Under menupunktet Project / Components kan du finde og tilføje 'Microsoft Maskedit Control'
At der højst kan indtastes 3 tegn kan du let sætte med egenskaben MaxLength.
martin_moth>> i det felt hvor der kun må tastes tal har jeg i forvejen skrevet flg. kode Private Sub Text1_Change() Text1.Enabled = True If Not IsNumeric(Text1.Text) And Text1.Text <> "" Then MsgBox "Indtast kun tal!" Text1.Text = "" If Text_sang_titel.Text <> "" And Text1.Text <> "" Then cmd_tilføj_Sang.Enabled = True Else: cmd_tilføj_Sang.Enabled = False End If
Nu er det jo sådan, at jeg ikke har set dit svar, på det tidspunkt da jeg skriver mit. Vi grifler samtidig sådan ca., jeg skulle lige finde ud af hvad den ocx hedder. Men cyberspace vil åbenbart hellere skrive koden selv, end have en færdig funktion tilknyttet. Der er mange måder at løse denne lille sag på, så forsæt I blot, jeg vil ikke blande mig igen. God weekend! M.v.h. Jørn
martin_moth>> jeg må desværre sige at jeg ikke kan få dit kodeforeslag til at virke. Der er ingen foreskel på før og efter at jeg har indsat din kode jeg kan stadig væk skrive 1-- eller 1++ osv. uden den melder fejl
martin_moth>> (jeg var vis lidt hurtig med min sidste udmelding) Nå så har jeg lige rodet lidt med koden, og det viser sig at den faktisk efter en lille ændring virker. Jeg har kun fundet en "fejl" hvilken er at jeg kan taste 1.. uden den melder fejl
Hvis du kan indtaste punktum osv. i din textbox har du ikke copy-pastet korrekt. Marker min kode - tryk Ctrl+C - gå ind i din textbox's _KepPress event, og tryk Ctrl+V. Og kør så programmet.
Text1_Change() Text1.Enabled = True If (instr("0123456789",left$(text1,1)=0) And (Text1.Text <> "") Then MsgBox "Indtast kun tal!" Text1.Text = "" If (Text_sang_titel.Text <> "") And (Text1.Text <> "") Then cmd_tilføj_Sang.Enabled = True Else cmd_tilføj_Sang.Enabled = False End If End If End Sub
slumtiger - der er fejl i dine paranteser, og desuden tjekker du kun det første tegn. Hvorfor ikke gøre som jeg har foreslået:
Text1_Change() cmd_tilføj_Sang.Enabled = False If (Text_sang_titel.Text <> "") And (Text1.Text <> "") Then cmd_tilføj_Sang.Enabled = True End If End Sub
Text1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case vbKeyReturn KeyAscii = 0 SendKeys "{tab}" Case vbKeyBack Case 48 To 57 Case Else KeyAscii = 0 End Select End Sub
Martin Du har ret - text1,1))=0 - ikk! Så vidt jeg forstår på cyberspace's kode er det kun første ciffer der skal checkes. Hvad gør KeyAscii=0 & sendkeys "{tab}", under normale omstændigheder hopper man videre til næste felt med {tab}.
Du har ret, så meget for så lidt (5 points)
Cyberspace Takker, jeg er tilfreds med 5 points :o)
Ofte taster men tal i et tekstfelt, og trykker man Retur, forventer man at fokus flyttes til næste felt. Derfor Sendkeys Tab, der bevirker, at return og tab virker på samme måde. Ønsker man ikke dette sletter man blot de tre linier
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.