如何让标签闪烁

4
我在表单中有一个 StopwatchInterval = 1000,以 hh:mm:ss 格式显示。
当它达到第五秒时,标签的背景应该开始闪烁为绿色,但目前我只能让背景颜色变为绿色,没有任何闪烁。
这是我将背景颜色变为绿色的方法:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Label1.Text = SW.Elapsed.ToString("hh\:mm\:ss")
    If Label1.Text = "00:00:05" Then
        Label1.BackColor = Color.Green
    End If
End Sub

如何让标签闪烁?


小提示,我认为你没有将“秒表”间隔设置为1000,我想你是指将其设置为了“计时器”? - Bugs
4个回答

8
你可以使用一个简单的异步方法来完成这个任务。
下面的代码将会让 "Label1" 闪烁效果。因为我们使用了 "While True",所以一旦到达 "00:00:05" 就会无限循环执行。
Private Async Sub Flash()
    While True
        Await Task.Delay(100)
        Label1.Visible = Not Label1.Visible
    End While
End Sub

您需要在您的Timer1_Tick方法中调用此函数:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Label1.Text = SW.Elapsed.ToString("hh\:mm\:ss")
    If Label1.Text = "00:00:05" Then
        Label1.BackColor = Color.Green
        Flash()
    End If
End Sub

如果您只想闪烁几次,我们可以对Flash()进行简单更改:
Private Async Sub Flash()
    For i = 0 To 10
        Await Task.Delay(100)
        Label1.Visible = Not Label1.Visible
    Next

    'set .Visible to True just to be sure
    Label1.Visible = True
End Sub

通过更改数字10为您选择的数字,您可以缩短或延长闪光所需的时间。我在For循环后添加了Label1.Visible = True,以确保我们在闪光完成后看到Label

您将需要导入System.Threading.Tasks才能使用Task.Delay


1
你需要一个标签,两个文本框和一个按钮。 该屏幕允许您“设置”一些颜色 - 这可以通过添加错误颜色、警告颜色(在未填写字段的情况下...?)等来进一步扩展。 在真实应用程序中,这种颜色选择将由管理员从单独的屏幕上完成,并存储在数据库中。 计时器频率也将在管理屏幕/功能中设置。 此特定屏幕需要双击文本框,并为每个文本框选择颜色。 每个框的背景颜色都会更改。然后按Start按钮。 如果再次按下Start按钮,则切换计时器(开/关)
公共类Form1 私有子Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load '不完全正确,但接近... 'https://bytes.com/topic/visual-basic-net/answers/368433-blinking-text Me.Label1.Text =“闪烁的文本框” Me.Label1.BackColor = TextBox2.BackColor 结束子
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If Me.Label1.BackColor = TextBox2.BackColor Then
        Me.Label1.BackColor = TextBox1.BackColor
    Else
        Me.Label1.BackColor = TextBox2.BackColor
    End If
End Sub

Private Sub TextBox1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles TextBox1.MouseDoubleClick
    Dim dlg As New ColorDialog()
    If dlg.ShowDialog() = DialogResult.OK Then
        TextBox1.BackColor = dlg.Color
    End If
End Sub

Private Sub TextBox2_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles TextBox2.MouseDoubleClick
    Dim dlg As New ColorDialog()
    If dlg.ShowDialog() = DialogResult.OK Then
        TextBox2.BackColor = dlg.Color
    End If
End Sub

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
    Timer1.Enabled = Not Timer1.Enabled
End Sub

结束类


0
如果您在文本为00:00:05时指定了颜色,则在文本为其他内容时,即00:00:06时,您还应该指定Backcolor应该是什么。
尝试这个并查看它是否有效:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Label1.Text = SW.Elapsed.ToString("hh\:mm\:ss")
If Label1.Text = "00:00:05" Then
    Label1.BackColor = Color.Green
else
    Label1.Backcolor = Color.Yellow '(Change color as needed)
End If
End Sub

0
尝试将类似以下代码放入Timer1_Tick事件处理程序中 -
Label1.Visible = Not Label1.Visible

将计时器设置为启用状态,它会执行任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接