Select Number between number
我尝试选择数字之间的情况。每个150000代码Textbox5在点击按钮上进行更改。Select Number between number
Select Case TextBox5.Text
Case 0 To 150000
TextBox6.Text = "-"
Case 150001 To 300001
TextBox6.Text = "+1-"
Case 300002 To 450002
TextBox6.Text = "+2-"
Case 450003 To 600003
TextBox6.Text = "+3-"
Case 600004 To 750004
TextBox6.Text = "+4-"
Case 750005 To 900005
TextBox6.Text = "+5-"
Case 900006 To 1050006
TextBox6.Text = "+6-"
Case Else
TextBox6.Text = "+Extra-"
End Select
当我试图900006之间的任意数字到1050006我有 “+预算外” 而不是 “+ 6-” ,并尝试在1050006我有 “ - ”
Dim i as Long
If Long.TryParse(TextBox5.Text, i)
Select Case i
Case 0 To 150000
TextBox6.Text = "-"
Case 150001 To 300001
TextBox6.Text = "+1-"
Case 300002 To 450002
TextBox6.Text = "+2-"
Case 450003 To 600003
TextBox6.Text = "+3-"
Case 600004 To 750004
TextBox6.Text = "+4-"
Case 750005 To 900005
TextBox6.Text = "+5-"
Case 900006 To 1050006
TextBox6.Text = "+6-"
Case Else
TextBox6.Text = "+Extra-"
End Select
Else
TextBox6.Text = "Not a Number"
End If
修改您要求。
我与蒂姆Schmelter同意。补充其答案应该使用
Select Case CLng(TextBox5.Text)
详见https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/functions/type-conversion-functions和,而你在它避免像TextBox5
IDS这很有趣。但在我试图找出它造成什么之前,我为您提供了正确的方法:String
不是数字,请设置Option Strict
到On
并学习使用类型安全代码。不要让编译器猜测你想要达到的目标。
您可以使用Int32.TryParse
:
Dim number As Int32
If Not Int32.TryParse(TextBox5.Text, number) Then
MessageBox.Show("Please enter a valid integer")
Return
End If
Select Case number ' now integer is the target type
Case 0 To 150000
TextBox6.Text = "-"
Case 150001 To 300001
TextBox6.Text = "+1-"
Case 300002 To 450002
TextBox6.Text = "+2-"
Case 450003 To 600003
TextBox6.Text = "+3-"
Case 600004 To 750004
TextBox6.Text = "+4-"
Case 750005 To 900005
TextBox6.Text = "+5-"
Case 900006 To 1050006
TextBox6.Text = "+6-"
Case Else
TextBox6.Text = "+Extra-"
End Select
这将工作与Option Strict On
也编译。
现在为什么你的代码不起作用。如果将最后一个范围更改为Case 900006 To 999999
,它将按预期工作。这必须如何比较字符串。即使这个编译(严格关)Case
将把范围900006 To 1050006
作为字符串,如"900006" To "1050006"
,所以他们比较字母从左到右的信件,sinvce "9"
是“大于”"1"
这种情况从来不是真的,这就是为什么你永远不要进入最后的Case
,而是进入Case Else
。
在与expressionlist的表达可以是任何数据类型,提供 它们隐式转换为testexpression与的类型和 适当的比较运算符是有效的两种类型是与 一起使用。
随着Option Strict Off
的expressionlist
(的范围)被转换成是String
(因为TextBox5.Text
)的testexpression
类型。 随着Option Strict On
你正确地得到一个编译器错误,因为String
不是Integer
:
选项严格On不允许从“整数”隐式转换为 “串”
很好的答案和解释,案件被视为字符串评估(正如你提到的比较)...我不知道有多少次我真的看到这个咬人... – Codexer
@Codexer :是的,[文档](https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/select-case-statement)提到它:_“它们可以隐式转换为testexpression的类型“_因此,您首先指定的是所有情况下的目标类型。使用'Option Strict Off',编译器会尝试转换类型**,所以整数将被转换为字符串,反之亦然**。 –
你是对的,正如前面提到的一如既往;很好的回答! – Codexer
好的...我发现昏暗的范围作为整数范围= TextBox5.Text – Jamyz
因此,尽管收到2个同样正确的答案,你仍然要投入一个字符串整数? – Mike
打开选项严格 – Plutonix