我从一个类中调用一个函数,它会根据标签上显示的值在标签上返回不同的颜色。以下是方法:
Function GetLabelColor(value As Integer) As Color
If value <= 3.9 Then
Return Color.Green
ElseIf (value >= 4) And (value <= 6.9) Then
Return Color.Orange
ElseIf value >= 7 Then
Return Color.Red
End If
End Function
然后在表单中我使用此代码来调用它:
Dim uicommon = New CommonUI()
Dim labelColor = uicommon.GetLabelColor(Integer.Parse(lblResultadoTotal.Text))
lblResultadoTotal.ForeColor = labelColor
lblGB.ForeColor = labelColor
但由于某种原因,即使该值大于3.9,它也只会返回绿色。你有什么解决方案可以帮助我吗?
答案 0 :(得分:1)
下面的函数与你提供的函数完全相同,但是接受一个允许将小数(如3.9)传递给它的双精度
Function GetLabelColor(value As Double) As Color
If (value >= 4) And (value < 7) Then
Return Color.Orange
ElseIf value >= 7 Then
Return Color.Red
End If
Return Color.Green
End Function
如果你只想传递整数(整数),那么就不应该像值&lt; = 3.9那样进行比较,因为整数永远不会等于3.9。相反,你可以使用这个版本;
Function GetLabelColor(value As Integer) As Color
If (value >= 4) And (value <= 6) Then
Return Color.Orange
ElseIf value > 6 Then
Return Color.Red
End If
Return Color.Green
End Function
如果您使用方法的Double版本,则需要使用此解析字符串值;
Double.Parse(lblResultadoTotal.Text)
如果您没有得到您期望的值,那么您的方法不会出现问题,而是传递给它的值。尝试对值进行硬编码以测试它;即用实际数字替换Integer.Parse(lblResultadoTotal.Text),例如5,看看你是否得到了你期望的颜色。
这显示了一个简单的控制台应用程序,可以演示它适用于值10.4
Imports System.Drawing
Module Module1
Sub Main()
Console.WriteLine(GetLabelColor(Double.Parse("10.4")))
Console.ReadLine()
End Sub
Function GetLabelColor(value As Double) As Color
If (value >= 4) And (value <= 6) Then
Return Color.Orange
ElseIf value > 6 Then
Return Color.Red
End If
Return Color.Green
End Function
End Module
答案 1 :(得分:0)
我猜你必须使用Double而不是Integer。
答案 2 :(得分:0)
但由于某种原因,即使该值大于3.9,它也只会返回绿色。你有什么解决方案可以帮助我吗?
“大于3.9”与“&gt; = 4”不同。在数论中,在3.9和4.0之间存在无限数量的值。二进制浮点表示的现实变化了一点,以至于实际上没有多少,但仍然有一个该死的很多。在任何情况下,值3.9都不会比较为&gt; = 4.0。
如果你希望3.9的行为类似于4.0,那么你应该将值四舍五入为整数(整数)。有一种内置方法可以做到这一点,名为Schedule_RCL_03312007
Schedule_RCL_03312008
Schedule_RCL_03312009
Schedule_RCL_03312010(1_of_2)
Schedule_RCL_03312010(2_of_2)
Schedule_RCL_03312011(1_of_2)
Schedule_RCL_03312011(2_of_2)
Schedule_RCL_06302011(1_of_2)
Schedule_RCL_06302011(2_of_2)
。有an overload允许您指定Math.Round
枚举中的值,该值控制如何处理以.5结尾的数字。例如,MidpointRounding
将舍入2.5到4.0,而AwayFromZero
将其舍入为3.0。对于3.5,两种情况下的结果都是相同的。
ToEven
注意:您可能希望在条件中使用Function GetLabelColor(value As Double) As Color
Dim roundedValue As Integer = Math.Round(value, MidpointRounding.AwayFromZero)
If (roundedValue >= 4) AndAlso (roundedValue < 7) Then
Return Color.Orange
ElseIf roundedValue >= 7 Then
Return Color.Red
Else
Return Color.Green
End If
End Function
,而不是AndAlso
。两种情况下的结果都相同,但And
和AndAlso
是首选的逻辑运算符。 OrElse
和And
运算符是为按位运算保留的,这不是您在此处所做的。几乎没有你将要做的事情。