Как менять текст метки каждые 3 секунды с помощью таймера VB.NET

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

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

Что такое Timer1? Вы должны использовать System.Windows.Forms.Timer и событие Tick для обновления пользовательского интерфейса.

Tim Schmelter 27.11.2018 14:44

Таймеры работают не так, и вы должны установить Option Strict On.

Ňɏssa Pøngjǣrdenlarp 27.11.2018 21:04
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
2 925
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

  • Сделайте интервал 3000
  • В событии таймера измените цвет фона метки на нужный цвет, который вы можете использовать из RGB или использовать случайные числа
Ответ принят как подходящий

Если вы используете таймер форм, то код для обновления метки должен быть в событии .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

Другие вопросы по теме