将类中的值返回到表单中

时间:2016-06-14 11:30:50

标签: vb.net

我从一个类中调用一个函数,它会根据标签上显示的值在标签上返回不同的颜色。以下是方法:

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,它也只会返回绿色。你有什么解决方案可以帮助我吗?

3 个答案:

答案 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。两种情况下的结果都相同,但AndAndAlso是首选的逻辑运算符OrElseAnd运算符是为按位运算保留的,这不是您在此处所做的。几乎没有你将要做的事情。