16. april 2006 - 23:34Der er
28 kommentarer og 1 løsning
Klikke på tilfældigt valgte /indsatte tal i textboxe i rækkeføl
Ved hjælp af randomize har jeg fået placeret tallene 1-6 et eller andet sted i textboxene 1-6. Jeg vil nu gerne med musen klikke på disse tilfældige 6 tal i rækkefølge således: 1,2,3,4,5 og 6
Når dette er sket skal jeg have en msgbox der fortæller: msgbox ”du har klikket på tallene i rigtig rækkefølge”
Kan dette lade sig gøre? Tallene i textboxene ændrer sig jo for hver gennemkørsel, idet det er randomize-funktionen, der placerer tallene?
Sådan her skal du klikke i rigtig rækkefølge, men må godt gå tilbage. Altså hvis du klikker på tallene 1-2-3-2-3-4-5-6 er det rigtigt når du trykker 6.
Option Explicit Public vaerdi As Byte
Private Sub resetknap_Click() vaerdi = 0 End Sub
Private Sub Text1_click() If Val(Text1.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 4 Then MsgBox ("du har klikket alle tallene") End Sub
Private Sub Text2_click() If Val(Text2.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 4 Then MsgBox ("du har klikket alle tallene") End Sub
Private Sub Text3_click() If Val(Text3.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 4 Then MsgBox ("du har klikket alle tallene") End Sub
Private Sub Text4_click() If Val(Text4.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 4 Then MsgBox ("du har klikket alle tallene") End Sub
det kan også laves sådan.. så nulstiller den selv efter 6 klik..
Option Explicit
Private Sub Form_Load() Call AddClick(0, True) ' Reset count End Sub
Private Sub Text1_Click() Call AddClick(Text1.Text) End Sub
Private Sub Text2_Click() Call AddClick(Text2.Text) End Sub
Private Sub Text3_Click() Call AddClick(Text3.Text) End Sub
Private Sub Text4_Click() Call AddClick(Text4.Text) End Sub
Private Sub Text5_Click() Call AddClick(Text5.Text) End Sub
Private Sub Text6_Click() Call AddClick(Text6.Text) End Sub
Private Sub AddClick(vNumber As Variant, Optional blnReset As Boolean = False) Dim strMessage As String Static intCount As Integer Static arrAddNumber(5) As Integer If IsNumeric(vNumber) = True Then arrAddNumber(intCount) = Val(vNumber) intCount = (intCount + 1) If intCount = 6 Then For intCount = LBound(arrAddNumber) To UBound(arrAddNumber) strMessage = strMessage & arrAddNumber(intCount) & " " Next intCount = 0 MsgBox "du har klikket på tallene i rigtig rækkefølge: " & strMessage End If End If If blnReset = True Then intCount = 0 End If End Sub
>rynke10 Jeg synes ikke, at jeg kan få din kode til at virke. Somme tider får jeg en msgbox andre tider sker der ikke noget.
>sjh Hvis jeg trykker 1,2 osv til 6 får jeg en msgbox der siger at der er trykket i rigtig rækkefølge, men når jeg trykker fx 654123 får jeg også at vide, at det er en rigtig rækkefølge? Jeg synes, at jeg har kopieret koderne rigtigt over.
Så prøver vi bare med hele koden. Jeg havde kun 4 bokse, måske har du ikke ændret de 4 til 6 ?
Option Explicit Public vaerdi As Byte
Private Sub Text1_click() If Val(Text1.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 6 Then vaerdi = 0 And MsgBox("du har klikket alle tallene") End Sub
Private Sub Text2_click() If Val(Text2.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 6 Then vaerdi = 0 And MsgBox("du har klikket alle tallene") End Sub
Private Sub Text3_click() If Val(Text3.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 6 Then vaerdi = 0 And MsgBox("du har klikket alle tallene") End Sub
Private Sub Text4_click() If Val(Text4.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 6 Then vaerdi = 0 And MsgBox("du har klikket alle tallene") End Sub Private Sub Text5_click() If Val(Text5.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 6 Then vaerdi = 0 And MsgBox("du har klikket alle tallene") End Sub Private Sub Text6_click() If Val(Text6.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 If vaerdi = 6 Then vaerdi = 0 And MsgBox("du har klikket alle tallene") End Sub
>rynke10 Undskyld! Jeg glemte at bruge din resetknap. Nu fungerer din kode. Så du kan godt lige lave et svar.
>sjh Du bedes også svare. Jeg regner med, at du følger det op, og så viser det sig, at det nok er mig, der har gjort noget forkert. Jeg forhøjer pointtallet hvis I begge svarer.
Den sidste er uden resetknap, der resetter den når du får msgboksen. Måske var det godt nok med en reset knap, hvis man skal starte forfra, ellers kan du resette den fra et andet sted.
Hvis værdien i den boks jeg trykker på, er 1 større end den sidste, så må det være det næste tal. Så lægger jeg 1 til. Altså hvis jeg er kommet til 3 og vil trykke på 4, så er 3+1 = 4 og altså rigtigt. Trykker jeg på en hvilken som helst anden vil der ikke ske noget.
>rynke10 gider du ikke lige se på dette problem med min tidtagning Private Sub Text1_click() intSec = 0 Timer1.Enabled = True Timer1.Interval = 1000
If Val(Text1.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then Timer1.Enabled = False end if Mit problem er at få tiden nulstillet, når jeg skal køre programmet igen. Jeg er vel nødt til at sætte timer1.enabled = false i hvert txtfelt If vaerdi = 12? Men hvordan pokker får jeg tiden i gang igen? Meningen er at tiden skal gå i gang, når jeg trykker på 1-tallet og slutte når jeg trykker på det sidste tal "6".
Jeg er vist ikke ekspert i timere. Prøver lige. For at du bedre kan se hvad der sker, så smid en ekstra textbox7 på, så kan du følge tælleren.
Option Explicit Public vaerdi As Byte Public sec As Double
Private Sub opdater() If vaerdi = 1 Then sec = 0 Timer1.Interval = 100 Timer1.Enabled = True End If Text7.Text = vaerdi 'test så du kan se tælleren If vaerdi = 6 Then vaerdi = 0 MsgBox "der er nu gået " & sec / 10 & " sekunder" Timer1.Enabled = False End If End Sub
Private Sub Text1_click() If Val(Text1.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 Call opdater End If End Sub
Private Sub Text2_click() If Val(Text2.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 Call opdater End If End Sub
Private Sub Text3_click() If Val(Text3.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 Call opdater End If End Sub
Private Sub Text4_click() If Val(Text4.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 Call opdater End If End Sub Private Sub Text5_click() If Val(Text5.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 Call opdater End If End Sub Private Sub Text6_click() If Val(Text6.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 Call opdater End If End Sub
>Hej igen rynke10. Jeg skulle nok have tydeliggjort problemet lidt mere. Jeg har i øjeblikket denne timer: Private Sub Timer1_Timer() 'Timer intSec = (intSec + 1) ' Me.Caption = SecToTime(intSec) Label2.Caption = SecToTime(intSec) End Sub som jeg gerne vil beholde, da tiden skal vises på formlen hele tiden. Problemet er bare at få label2.caption ryddet ved ny kørsel og få sat tælleren rigtigt i gang igen, når programmet skal køre igen. Din kode løser naturligvis ikke dette, da du jo ikke kendte det.
Du kan stadig godt bruge din egen timer, det er jo faktisk det samme. Du skal bare sætte intSec = 0 når timeren er færdig og så stoppe den med Timer1.Enabled = False Din sub med timeren, bliver kaldt med det interval du har valgt med Timer1.Interval = 1000 Når alle felter er klikket, så skal du bare sætte din tæller (intSec =0) og stoppe timeren, eller også bare stoppe den og så nulstille den når den skal starte igen. Det er jo faktisk det samme vi har lavet, du kalder bare tælleren for intSec. (fornuftigt nok)
>rynke10. Jeg gir op! Jeg sender hele hoden her. Hvis du kan få det til at fungere får du 50 point + de 100 du har tjent. Gider du at se på det? Programmet går ud på: 1) Der vælges 12 vilkårlige tal i textboxe. 2) Når 1. tal klikkes går tælleren igang og stopper når sidste tal er klikket. 3) Der fremkommer en msgbox der siger, at man var for hurtig eller langsom. Det var det hele, og der skal gøres klar til en ny programkøring. Det ser således ud:
Option Explicit
Private Brugtetal(12) Public vaerdi As Byte Private intSec As Long
Private Sub Command2_Click() 'reset vaerdi = 0
End Sub
Private Sub Text1_click()
intSec = 0 Timer1.Interval = 1000 Timer1.Enabled = True If Val(Text1.Text) = vaerdi + 1 Then
vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater
End If
End Sub
Private Sub Text2_click()
If Val(Text2.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If End Sub Private Sub Text3_click()
If Val(Text3.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If End Sub Private Sub Text4_click()
If Val(Text4.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If End Sub Private Sub Text5_click()
If Val(Text5.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub Private Sub Text6_click()
If Val(Text6.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub Private Sub Text7_click()
If Val(Text7.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub Private Sub Text8_click()
If Val(Text8.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub Private Sub Text9_click()
If Val(Text9.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub Private Sub Text10_click()
If Val(Text10.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub Private Sub Text11_click()
If Val(Text11.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub Private Sub Text12_click()
If Val(Text12.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If If vaerdi = 12 Then intSec = 0 Timer1.Enabled = False
Call opdater End If
End Sub
Private Function NytTal() Dim tal As Integer
tal = Int((12 * Rnd) + 1) If Brugtetal(tal) = 1 Then NytTal = NytTal() Else NytTal = tal Brugtetal(tal) = 1 End If
End Function Private Sub sletarr() Dim i As Integer
If vaerdi = 1 Then intSec = 0 Timer1.Interval = 100 Timer1.Enabled = False End If
End Sub
Private Function SecToTime(ByVal Sec As Long) As String Dim Min As Long Min = Format(Fix(Sec / 60), "00") SecToTime = Format(Fix(Min / 60), "00") & ":" & _ Format(Min Mod 60, "00") & ":" & _ Format(Sec Mod 60, "00") End Function
Private Sub Timer1_Timer() 'Timer intSec = (intSec + 1) ' Me.Caption = SecToTime(intSec) Label2.Caption = SecToTime(intSec) End Sub Private Sub Timer2_Timer()
Label3.Caption = Format(Now) Timer2.Interval = 1000 Timer2.Enabled = True End Sub
timer 2 bruger du bare til at vist klokken. ellers 2 commandbuttons og 3 labels. Label1 bruger jeg til at vise hvor langt du er nået med at klikke, hvis man skulle ramme ved siden af.
Prøv om det er bedre nu. Timer1 tæller i sekunder, men det havde du sat den til. Det er måske også meningen. Ved msgboxen kan du vælge om det skal være under 10 sek for at man er hurtig.
Option Explicit
Private Brugtetal(12) Public vaerdi As Byte Private intSec As Long Private Sub opdater() If vaerdi = 1 Then 'kun når der trykkes på 1 tallet intSec = 0 'nulstil timer Timer1.Enabled = True End If Label1.Caption = vaerdi If vaerdi = 12 Then 'når sidste tal er klikket vaerdi = 0 If intSec < 10 Then MsgBox "Du er hurtig " & intSec & " sekunder" If intSec >= 10 Then MsgBox "Du er for langsom " & intSec & " sekunder" Timer1.Enabled = False End If
End Sub
Private Sub Command2_Click() 'reset vaerdi = 0 'nulstiller tælleren Timer1.Enabled = False 'stopper timeren intSec = 0 'nulstiller tiden Label1.Caption = vaerdi Label2.Caption = "00:00:00" End Sub
Private Sub Text1_click() If Val(Text1.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text2_click() If Val(Text2.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub Private Sub Text3_click() If Val(Text3.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text4_click() If Val(Text4.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text5_click() If Val(Text5.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text6_click() If Val(Text6.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text7_click() If Val(Text7.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text8_click() If Val(Text8.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text9_click() If Val(Text9.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text10_click() If Val(Text10.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text11_click() If Val(Text11.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Sub Text12_click() If Val(Text12.Text) = vaerdi + 1 Then vaerdi = vaerdi + 1 End If Call opdater End Sub
Private Function NytTal() Dim tal As Integer
tal = Int((12 * Rnd) + 1) If Brugtetal(tal) = 1 Then NytTal = NytTal() Else NytTal = tal Brugtetal(tal) = 1 End If End Function
Private Function SecToTime(ByVal Sec As Long) As String Dim Min As Long Min = Format(Fix(Sec / 60), "00") SecToTime = Format(Fix(Min / 60), "00") & ":" & _ Format(Min Mod 60, "00") & ":" & _ Format(Sec Mod 60, "00") End Function
Private Sub Timer1_Timer() 'Timer intSec = intSec + 1 Label2.Caption = SecToTime(intSec) End Sub Private Sub Timer2_Timer() Label3.Caption = Format(Now) End Sub
>Rynke10. Når jeg oversætter programmet til .exe-fil holder uret ikke op med at gå og jeg får derfor begge msgboxe??? Er der noget specielt jeg skulle gøre i denne forbindelse?. Jeg håber, at du lige gider at se på dette problem. På forhånd tak!
>Reynke10. Det virker nu. Jeg prøvede at lave koden om til: Private Sub opdater() If vaerdi = 1 Then 'kun når der trykkes på 1 tallet intSec = 0 'nulstil timer Timer1.Enabled = True End If Label1.Caption = vaerdi If vaerdi = 12 Then 'når sidste tal er klikket vaerdi = 0 If intSec < 10 Then MsgBox "Du er hurtig nok til selv at køre!" & intSec & " sekunder" Timer1.Enabled = False ElseIf intSec >= 10 Then MsgBox "Du er for langsom til selv at køre! " & intSec & " sekunder" Timer1.Enabled = False End If End If
End Sub Så du behøver ikke at spekulere mere over dette. Endnu en gang mange tak for din hjælp.
Skriver du If x = 1 Then ligning = true altså i en linie, så behøver du ikke en End If. Er det over flere linier, så skal der en End If til at afslutte. Men godt at det virker.
Har du kopieret det hele, jeg kan ikke få den til at lave nogen fejl. Den sætter tal ind i arrayet på en plads der er ledig. Løkken kan godt køre 20-25 gange, før den har valgt alle tallene mellem 1 og 12, men det virker hver gang hos mig. Hvis variablen tal er større end 12, så skulle den melde "out of range" da brugertal er defineret til 12. Faktisk har den 13 pladser, altså fra 0 til 12, men plads 0 bruges ikke. Det burde ikke give nogen problemer.
Ja jeg har kopieret det hele, men jeg prøver lige at kikke det hele igennem, en gang til.
Tak
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.