Как изменить текст метки каждые 3 секунды, используя таймер VB.NET - PullRequest
0 голосов
/ 27 ноября 2018
Dim arr() As String = {"Cake", "Mouse", "Heat", "Tent", "Boots", "Pen", "Stairs", "Cube", "Lion", "Cookies", "Ruler", "Ink"}
Dim timing As Boolean = True
Dim i As Integer = 0
Dim n As Integer = 3000
Private Sub Button1_Click(sender As Object, e As EventArgs)
    Timer1.Start()
    For i = 0 To 11
        While timing = True
            If Timer1.Interval = n Then
                Lbl_Word.Text = arr(i)
                timing = False
            End If
        End While
        timing = True
    Next
    Timer1.Stop()
End Sub

Текст на этикетке не меняется, и я не уверен, что сделал неправильно.Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

-Добавить таймер

  • Сделать интервал 3000
  • При событии таймера измените цвет фона метки на цвет, который вы хотите использовать из RGB или использовать случайные числа
0 голосов
/ 27 ноября 2018

Если вы используете таймер форм, тогда код для обновления метки должен быть в событии .Tick.Приведенный ниже код использует статическую переменную в обработчике событий для отслеживания отображаемой строки.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Timer1.Interval = 3000
    If Not Timer1.Enabled Then 'already running?
        Timer1.Start() 'no
    End If
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim arr() As String = {"Cake", "Mouse", "Heat", "Tent", "Boots", "Pen", "Stairs", "Cube", "Lion", "Cookies", "Ruler", "Ink"}
    'Dim arr() As String = {"Cake", "Mouse", "Heat"} 'to test
    Static idx As Integer = 0 'which index in arr
    If idx < arr.Length Then 'more to show?
        'yes
        Lbl_Word.Text = arr(idx)
        idx += 1
    Else
        'no
        Timer1.Stop()
        idx = 0
    End If
End Sub

Альтернативный подход без использования таймера.

Private TmrTask As task
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If TmrTask Is Nothing OrElse TmrTask.IsCompleted Then
        TmrTask = Task.Run(Sub() MyTimerTask())
    End If
End Sub

Private Sub MyTimerTask()
    Dim arr() As String = {"Cake", "Mouse", "Heat", "Tent", "Boots", "Pen", "Stairs", "Cube", "Lion", "Cookies", "Ruler", "Ink"}
    'Dim arr() As String = {"Cake", "Mouse", "Heat"} 'to test
    For Each s As String In arr
        Me.BeginInvoke(Sub()
                           Lbl_Word.Text = s
                       End Sub)
        Threading.Thread.Sleep(3000)
    Next
End Sub
0 голосов
/ 27 ноября 2018

Вы должны поместить код в события таймера.отсутствует в событии нажатия кнопки.и в событии нажатия кнопки просто включите таймер.

...