首页 > 解决方案 > 如何使用 vb.net 获取数字的百分比

问题描述

我正在开发一个应用程序来学习(倒计时),我希望字体颜色从一开始就为绿色,并在分配时间的 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

标签: vb.net

解决方案


我在评论中的意思是,您需要知道一些事情来计算剩余时间的百分比:计时器何时开始,何时结束,以及每次滴答时您之间的距离。我看不到你的其余代码,所以我不能确定为什么它不起作用,但我可以用一个简单的例子来演示这个概念。创建一个全新的 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() 子中的所有内容都只是设置标签和计时器,您真正需要关心的是保存开始倒计时的日期时间(started),倒计时结束的日期时间(timeOut),并计算差异在tmr_Tick事件内的每个滴答声中它们之间。我认为那里的代码很容易解释,但总而言之,你只是看到还有多少时间,timeOut直到diffTimeSpan 并将其显示为倒数计时器。对于百分比计算,您只需要查看总数中经过多少秒才能获得百分比。然后,您只需要检查该百分比是否<15,如果是,则更改文本颜色。


推荐阅读