Hur använder jag en Timer för att få For-Next att snurra med intervallet t ex 1 sekund? du kan nog inte göra som du tänkt dig men du kan gör anåt sånt här: Det gör du inte ;)Timer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As Integer
For a = 1 To 20
TextBox1.Text = a
Next
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs Handles TextBox1.TextChanged
End Sub
mvh OlaSv: Timer
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Public Class TickerForm
Inherits System.Windows.Forms.Form
Private timer1 As System.Windows.Forms.Timer
Private textBox1 As System.Windows.Forms.TextBox
Private button1 As System.Windows.Forms.Button
Private components As System.ComponentModel.IContainer
Private nrTicks As Integer = 0
Private maxTicks As Integer = 20
Public Sub New()
InitializeComponent()
End Sub
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.timer1 = New System.Windows.Forms.Timer(Me.components)
Me.textBox1 = New System.Windows.Forms.TextBox
Me.button1 = New System.Windows.Forms.Button
Me.SuspendLayout()
Me.timer1.Interval = 1000
AddHandler Me.timer1.Tick, AddressOf Me.timer1_Tick
Me.textBox1.Location = New System.Drawing.Point(48, 72)
Me.textBox1.Name = "textBox1"
Me.textBox1.Size = New System.Drawing.Size(136, 20)
Me.textBox1.TabIndex = 0
Me.textBox1.Text = "textBox1"
Me.button1.Location = New System.Drawing.Point(104, 168)
Me.button1.Name = "button1"
Me.button1.TabIndex = 1
Me.button1.Text = "button1"
AddHandler Me.button1.Click, AddressOf Me.button1_Click
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Controls.Add(Me.button1)
Me.Controls.Add(Me.textBox1)
Me.Name = "TickerForm"
Me.Text = "TickerForm"
Me.ResumeLayout(False)
End Sub
Private Sub timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
If nrTicks < maxTicks Then
textBox1.Text = nrTicks.ToString()
nrTicks += 1
Else
timer1.Stop()
End If
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
nrTicks = 0
maxTicks = 20
timer1.Start()
End Sub
End Class
Sv: Timer
Men (om det inte gör något att programmet fryser under tiden) är att du använder System.Threading.Thread.Sleep(1000) vilket får programmet att somna.
En annan variant är att du använder en global variabel som du sedan räknar upp i eventet på timern.
Ytterligare en variant (ganska snygg eftersom att du varken behöver en global variabel eller fryser programmet) är att du använder lite Win32 api. Deklaration i vb:
Declare Function WaitMessage Lib "user32.dll" () As Int32
WaitMessage fryser den aktuella tråden enda tills ett meddelande kommer
Sedan gör du så att du kör en enkel loop samt en timer som garanterar att tråden får fokus:
<code>
dim d = system.datetime.now
dim s = system.timespan
dim t as new system.timers.timer()
do while true
s = system.datetime.now.subtract(d)
if(s.totalseconds > 1) then
exit do
end if
WaitMessage()
System.Windows.Forms.Application.DoEvents()
(obs: all kod är okompilerad, men jag har gjort väldigt liknande saker förut iaf.)
loop
</code>