Mr Nilsen Skrevet 13. august 2007 Del Skrevet 13. august 2007 (endret) Hei holder nå på med en tallgenerator, men skjønner ikke helt hva problemet er. Hvis jeg har f.eks 9 i text1 og 1000 i text2, dukker det opp msgbox som vist i koden. msgboxen skal bare komme hvis du f.eks har 1000 i text1 og 9 i text2 Text1 = minste tall Text2 = meste tall Text3 = Resultat cmdRandom = generer nummer cmdclear = tilbakestill cmdavslutt = avslutt Option Explicit DefLng A-Z Private Sub cmdavslutt_Click() End End Sub Private Sub cmdclear_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub Private Sub Form_Load() Randomize End Sub Private Sub cmdRandom_Click() If Text2.Text > Text1.Text Then Text3.Text = Format(RandomNumBetween(Text1.Text, Text2.Text)) Else MsgBox "Minimum skal være mindre enn Maximum.", , "Feil" End If End Sub Private Function RandomNumBetween(ByVal LowerLimit As Long, ByVal UpperLimit As Long) As Long RandomNumBetween = Rnd * (UpperLimit - LowerLimit) + LowerLimit End Function Endret 1. september 2007 av Legendarynilsen Lenke til kommentar
GeirGrusom Skrevet 13. august 2007 Del Skrevet 13. august 2007 OK, her er det flere feil Først og fremst, kan ikke tekster sammenlignes på denne måte, gjør det om til nummer først. Int.Parse, eller CInt() Deretter kan du bruke Random klassen til å generere et tilfeldig tall, framfor Rnd funksjonen. Bruk også variabler for å holde på verdiene istedet får å bruke TextBox.Text feltet. Lenke til kommentar
aadnk Skrevet 13. august 2007 Del Skrevet 13. august 2007 (endret) GeirGrusom: Dette er VB6, om jeg ikke tar feil. I VB.NET ville en sett Handles-nøkkelordet etter hendelsesprosedyrene, samt form-klassen og kompilatorfeil ved DefLng. Rnd er derfor riktig, ettersom VB6-runtimen ikke inneholder noen Random-klasse. Nåvel, feilen kan en, som GeirGrusom ganske riktig påpeker, rette ved å bruke tallsammenlikning: If CLng(Text2.Text) > CLng(Text1.Text) Then Når VB sammenlikner strenger, ignoreres lengden/posisjonen på karakterene (selv når en sammenlikner for likhet, idiotisk nok), slik at den i dette tilfellet avgjør at streng B er større fordi "9" > "1". Endret 13. august 2007 av aadnk Lenke til kommentar
Harald Staff Skrevet 13. august 2007 Del Skrevet 13. august 2007 Siden man allikevel sjekker hvilket tall som er minst, ville jeg nok heller sendt dem til funksjonen i korrigert rekkefølge enn å fortelle brukeren hvor dum han er: If x > y Then Text3.Text = RandomNumBetween(y, x) Else Text3.Text = RandomNumBetween(x, y) End If Programmer som klager på input blir mislikt utrolig fort. Beste hilsen Harald Lenke til kommentar
GeirGrusom Skrevet 13. august 2007 Del Skrevet 13. august 2007 Ofte synes jeg det kan være hendig å bare gjøre teksten rød hvis det er feil i input, eller en annen grafisk framvisning av feilen. Faktisk vil si at msgbox er fy, utenom debug sammenhenger, og der man umiddelbart trenger et svar fra brukeren. utenom det, finnes det mer elegante løsninger, som ikke irriterer brukeren i det lange løp. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå