Avatar billede lillehans Nybegynder
02. maj 2006 - 18:04 Der er 10 kommentarer og
1 løsning

Hændelse skal styres af tid

Kunne jeg få hjælp til at styre nedenstående kode, således at forløbet, altså hvert klik på en textbox, kun sker for fx hvert sekund?

Option Explicit
Private Sub Command1_Click()
Dim tbC As Control, f As Integer, p
  For f = 1 To 12
      Set tbC = Me.Controls("Textbox" + CStr(f))
      p = tbC.Text
 
  If p <> "" Then
      tbC.Text = "Klik på " + p
  End If
Next f

End Sub

Private Sub Form_Load()
textbox1 = 12
textbox2 = 10
textbox3 = 11
textbox4 = 9
textbox5 = 8
textbox6 = 7
textbox7 = 6
textbox8 = 5
textbox9 = 4
textbox10 = 3
textbox11 = 2
textbox12 = 1

End Sub
Avatar billede mcnovy Nybegynder
02. maj 2006 - 18:11 #1
kan du ikke bruge et klokkeslet..?

lave noget
if "der er gået mere en et sekund siden sidst"
Avatar billede lillehans Nybegynder
02. maj 2006 - 19:33 #2
>mcnovy, det tror jeg ikke, for det er en timer, der skal køre mod en anden timer. Ovenstående er kun et led i et større program. Men du kan da foreslå noget.
Avatar billede mcnovy Nybegynder
02. maj 2006 - 21:42 #3
hvis du i forevejen har en timer.. og hvis den timer også kører konstant..?

så kan du da gemme timerens tid ned i en integer
lave en if funktion der spørger om timeren nu er mere en 1 sekund større en hvad der står i din integer.!

det er nok mit bedste bud..
må hellere sige at jeg ikke kender noget til visual basic.. kun C#, så jeg kan kun give nogle råd til hvad man kan gøre..
Avatar billede lillehans Nybegynder
02. maj 2006 - 22:38 #4
>hej mcnovy Det er meningen at forløbet skal forsinkes. Med 1 eller 2 eller tre sekunder mellem hvert klik. Dette skal kunne styres ved valg. Får jeg bare 1 klik pr. sekund, kan jeg sikkert selv klare resten. Men jeg kan ikke finde ud af, hvordan jeg undgår, at hele forløbet bliver udført på 1/100 af et sekund. Det er problemet.
Avatar billede h7iws Nybegynder
04. maj 2006 - 00:11 #5
Hvis du vil have koden til at 'sove' x antal sekunder kan du gøre flg.

'********** CODE START **********
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
  MsgBox "test"
  Sleep 3000
  MsgBox "ok?"
End Sub

'**********  CODE END  **********

Men jeg er ikke sikker på om det var sådan noget du mente ...
Kan ikke helt tolke det du skriver, måske hvis du kan uddybe det lidt ??
Mvh Emil
Avatar billede h7iws Nybegynder
04. maj 2006 - 00:12 #6
sorry, det er ikke sekunder, men milisekunder, så 1000ms = 1 sekund !!
Avatar billede lillehans Nybegynder
04. maj 2006 - 07:56 #7
>h7jws Ja, din kode virker. Men det der sker, når jeg sætter den ind som her:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)



Private Sub Command1_Click()

Dim tbC As Control, f As Integer, p
  For f = 1 To 12
      Set tbC = Me.Controls("Textbox" + CStr(f))
       
    p = tbC.Text
  If p <> "" Then
      tbC.Text = "Her er " + p

  End If
Next f
Sleep 3000
End Sub
er at starten bliver forsinket i 3 sekunder, hvorefter hele forløbet gennemføres i løbet af det næste splitsekund.
Der skal startes med det samme, men næste gennemkørsel skal først sættes i gang efter 3 sekunders sleep.
Programmet skal virke således: Her var nr. 12. 3 sekunders pause. Her var nr. 11, 3 sekunders pause, her var nr. 10 osv. Men tampen brænder..
Avatar billede h7iws Nybegynder
04. maj 2006 - 11:04 #8
så sæt det ind i for løkken !!

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)



Private Sub Command1_Click()

Dim tbC As Control, f As Integer, p
  For f = 1 To 12
      Set tbC = Me.Controls("Textbox" + CStr(f))
     
    p = tbC.Text
  If p <> "" Then
      tbC.Text = "Her er " + p

  End If
  Sleep 3000
Next f

burde virke ! ;)

End Sub
Avatar billede h7iws Nybegynder
04. maj 2006 - 11:06 #9
sorry, kom til at skrive inde i din kode, det skulle se således ud:

'*** start

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Private Sub Command1_Click()

Dim tbC As Control, f As Integer, p
  For f = 1 To 12
      Set tbC = Me.Controls("Textbox" + CStr(f))
     
    p = tbC.Text
  If p <> "" Then
      tbC.Text = "Her er " + p

  End If
  Sleep 3000
Next f

End Sub

'*** slut
Avatar billede lillehans Nybegynder
04. maj 2006 - 11:52 #10
>h7iws Ja, den virker men på den måde at der nu går ca. 12x3 sekunder inden den sætter gang i løkken.
Det jeg savner er, at der i løkken for f = 1 to 12 skal gå ca. 3 sekunder fra 1. til 2. og igen fra 2 til 3 osv indtil hele løkken er kørt igennem 36 sekunder efter.
Jeg håber, at du forstår hvad jeg mener.
Avatar billede lillehans Nybegynder
16. maj 2006 - 17:44 #11
lukker
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