问题图片。而不是查看TextBox的值20是返回2,这是文本框中2位数字的第一个数字
------------------ // --------------------
选择仅查看1位数的案例。
我有一个案例函数运行一些数字,如果值超过4,或超过3或超过2或超过1,它应该更改textcolour
它适用于最多9的数字,但是当数字开始有多个数字时,它只会查看第一个数字。代码如下:
For Each TextStatas In Arr_TextStat
Select Case TextStatas.Text
Case > 4
TextStatas.BackColor = Color.Green
Case > 3
TextStatas.BackColor = Color.GreenYellow
Case > 2
TextStatas.BackColor = Color.Gold
Case > 1
TextStatas.BackColor = Color.DarkOrange
Case > 0
TextStatas.BackColor = Color.Red
Case 0
TextStatas.BackColor = Color.Red
End Select
Next
我在不同的表单上使用了类似的代码,连接到同一个数据库并查看与此表单相同的表和列,但在那里它工作正常。
无法理解错误!
任何帮助都非常感激。
答案 0 :(得分:2)
您应该使用TextStatas
CInt(TextStatas)
转换为整数
<TestMethod()> Public Sub TestMethod1()
Dim Arr_TextStat(5) As String
Arr_TextStat(0) = "1"
Arr_TextStat(1) = "2"
Arr_TextStat(2) = "3"
Arr_TextStat(3) = "4"
Arr_TextStat(4) = "9"
Arr_TextStat(5) = "20"
Dim backColor As Color = Color.AntiqueWhite
For Each TextStatas In Arr_TextStat
Select Case CInt(TextStatas)
Case > 4
backColor = Color.Green
Case > 3
backColor = Color.GreenYellow
Case > 2
backColor = Color.Gold
Case > 1
backColor = Color.DarkOrange
Case > 0
backColor = Color.Red
Case 0
backColor = Color.Red
End Select
Debug.WriteLine("{0} - {1}", TextStatas, backColor)
Next
End Sub
给出了这些结果:
Debug Trace:
1 - Color [Red]
2 - Color [DarkOrange]
3 - Color [Gold]
4 - Color [GreenYellow]
9 - Color [Green]
20 - Color [Green]
答案 1 :(得分:0)
您正在将字符串(.Text
属性)与数字进行比较。在进行比较之前,必须将这些值放在一个共同点上。
具体如何执行取决于上下文,这就是为什么建议首先避免松散类型的比较。
如果要将字符串变量与类似数字的内容与数字进行比较:
Dim s As String = "26"
MsgBox(s > 2)
MsgBox(s > 3)
VB会将类似数字的字符串转换为数字,然后执行比较。在这两种情况下,结果都是True
。
如果s
包含无法转换为数字的内容,则会出现运行时错误。
如果使用字符串变量作为Select Case
子句的源,则会发生相反的情况,并且各个Case
子句中的值首先转换为字符串,然后无论所讨论的变量是否包含类似数字的字符串,都会执行比较:
Dim s As String = "26"
Select Case s
Case Is > 3
MsgBox("> 3")
Case Is > 2
MsgBox("> 2, but < 3")
Case Else
MsgBox("Other")
End Select
您会看到"> 2, but < 3"
,因为"26" > "2"
,但是"26" < "3"
。
如果s
包含无法转换为数字的内容(例如,使用s = "sdf"
),它的工作原理会相同。
如果您要将Object
变量与数字进行比较,则无论是直接使用还是作为Select Case
的来源,它都会首先转换为数字:
Dim s As Object = "26"
MsgBox(s > 2) ' True
MsgBox(s > 3) ' True
Select Case s
Case Is > 3
MsgBox("> 3") ' Displays
Case Is > 2
MsgBox("> 2, but < 3")
Case Else
MsgBox("Other")
End Select
如果s
包含无法转换为数字的内容,则在这两种情况下都会出现运行时错误。
这就是为什么它不适用TextStatas.Text
,String
,但与TextStatas.Tag
合作,Object
。
您不应该依赖这些规则,始终使用Option Strict On
,并将代码更改为
Select Case Integer.Parse(TextStatas.Text)
...
End Select