我正在开发一个用于学习(倒数计时器)的应用程序,我希望字体颜色从开始就为绿色,并在分配的时间的15%时变为红色。我已经完成了大部分操作,但仍然无法正确操作,以免在指定时间的15%时变成红色。请帮帮我。
这是我声明If
语句的方式:
percentage = ((15 / mm_Label.Text) * 100)
If hr_Label.Text Or mm_Label.Text Or ss_Label.Text = percentage Then
hr_Label.ForeColor = Color.Red
mm_Label.ForeColor = Color.Red
ss_Label.ForeColor = Color.Red
Else
hr_Label.ForeColor = Color.Green
mm_Label.ForeColor = Color.Green
ss_Label.ForeColor = Color.Green
End If
答案 0 :(得分:0)
我在评论中的意思是,您需要了解一些事情来计算剩余时间的百分比:计时器何时开始,何时结束以及每个刻度之间的间隔时间。我看不到您的其余代码,因此无法确定为什么它不起作用,但是我可以通过一个简单的示例演示该概念。创建一个全新的WinForms项目,将此代码直接粘贴到新表单中,然后运行它:
Public Class Form1
Dim Lbl As New Label With {.Width = 200}
Dim started As DateTime = DateTime.Now
Dim timeOut As DateTime = DateTime.Now.AddMinutes(1)
'Dim timeOut As DateTime = Date.ParseExact("07/08/2019 18:01", "MM/dd/yyyy HH:mm", System.Globalization.DateTimeFormatInfo.InvariantInfo)
Public Sub New()
InitializeComponent()
Me.Controls.Add(Lbl)
Dim tmr As New Timer With {.Interval = 1000, .Enabled = True}
AddHandler tmr.Tick, AddressOf tmr_Tick
tmr.Start()
End Sub
Private Sub tmr_Tick(sender As Object, e As EventArgs)
Dim diff As TimeSpan = timeOut - DateTime.Now
Dim totalSeconds As Integer = (timeOut - started).TotalSeconds
Dim elapsedSeconds As Integer = diff.TotalSeconds
Dim pctRemaining As Integer = CInt((elapsedSeconds / totalSeconds) * 100)
Lbl.Text = String.Format("{0}:{1}:{2} ({3}% Remaining)", diff.Hours, diff.Minutes, diff.Seconds, pctRemaining)
If pctRemaining < 15 Then Lbl.ForeColor = Color.Red
End Sub
End Class
此示例仅将timeOut
设置为将来的一分钟,但是您可以通过将字符串解析为日期时间(如注释行)来将其值设置为任何值。我鼓励您仔细阅读代码,并在必要时逐步进行操作。 New()子项中的所有内容都只是设置标签和计时器,您真正需要关心的是保存开始倒数的DateTime(started
),倒数结束的DateTime({ {1}}),并在timeOut
事件内的每个刻度期间计算它们之间的差。我认为其中的代码是很容易解释的,但是总而言之,您只是看到tmr_Tick
TimeSpan到timeOut
还剩下多少时间,并将其显示为倒数计时器。对于百分比计算,您只需要查看总数中经过了多少秒即可获得百分比。然后,您只需要检查该百分比是否小于15,如果是,则更改文本颜色即可。