Avatar billede cyberspace Nybegynder
13. december 2003 - 13:32 Der 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.

er der noget der kan gøres for at forhindre dette
Avatar billede driis Nybegynder
13. december 2003 - 13:36 #1
F.eks.

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
Avatar billede driis Nybegynder
13. december 2003 - 13:37 #2
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.
Avatar billede squashguy Nybegynder
13. december 2003 - 13:38 #3
Den bedste måde er nok at lave en eventhandler til feltet. Hvor du kontrollerer hvert tegn brugeren løbende indtaster..
Avatar billede martin_moth Mester
13. december 2003 - 13:48 #4
Jeg er uenig med driis - det kan gøres simplere:

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
Avatar billede joern Nybegynder
13. december 2003 - 13:53 #5
Hej.

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.

M.v.h.  Jørn
Avatar billede martin_moth Mester
13. december 2003 - 14:01 #6
joern: Det er da overflødigt at teste md IsNumeric hvis du bare sørger for at man ikke KAN skrive andet end tal, og det gøres som jeg har vist det :o)
Avatar billede cyberspace Nybegynder
13. december 2003 - 14:57 #7
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

End If

End Sub

Hvordan får jeg passet dit kode foresllag ind
Avatar billede joern Nybegynder
13. december 2003 - 15:39 #8
Hej martin>>

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
Avatar billede martin_moth Mester
13. december 2003 - 17:42 #9
joern: Bemærk min :o) - ingen sure miner - kender godt det med at der er kommet flere indlæg siden man sidst opdaterede...

cyberspace:

Du smider den kode jeg har givet dig i textboxens _KeyPress event
Avatar billede cyberspace Nybegynder
14. december 2003 - 13:38 #10
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
Avatar billede cyberspace Nybegynder
14. december 2003 - 13:47 #11
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
Avatar billede martin_moth Mester
14. december 2003 - 14:04 #12
Den kode jeg har givet bevirker, at du KUN kan indtaste følgende i din textbox:

1
2
3
4
5
6
7
8
9
0

Og det virker!
Avatar billede martin_moth Mester
14. december 2003 - 14:10 #13
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.
Avatar billede slumtiger Nybegynder
15. december 2003 - 11:48 #14
Lidt struktur i koden skader ikke!

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
Avatar billede cyberspace Nybegynder
15. december 2003 - 12:06 #15
slumtiger>> du har ret. struktur skader ikke
Avatar billede martin_moth Mester
15. december 2003 - 12:22 #16
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

Sikke meget skriveri om så lidt :o)
Avatar billede slumtiger Nybegynder
15. december 2003 - 12:40 #17
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)
Avatar billede martin_moth Mester
15. december 2003 - 15:40 #18
:o)
Avatar billede martin_moth Mester
15. december 2003 - 15:42 #19
Mht.

Case vbKeyReturn
      KeyAscii = 0
      SendKeys "{tab}"

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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester