Select Case仅识别数字首字符问题:TextBox值20被判定为2
问题解决:Select Case仅识别文本框首字符的原因及修复方案
你的问题根源在于直接用字符串和数字进行比较,VB.NET会默认按字符串规则来对比,而不是数值大小,所以像"20"这样的多位数文本,会被当成字符串和数字做字符级别的比较,自然只“识别”首字符了。
具体原因
比如你的代码里Select Case TextStatas.Text,TextStatas.Text是字符串类型,当你写Case >4时,VB会把数字4转换成字符串"4",然后对比"20"和"4":字符串比较是按每个字符的ASCII值依次判断,'2'的ASCII码(50)比'4'(52)小,所以程序会认为"20" < "4",不会匹配第一个Case,而是往下找,最终触发不符合预期的分支。
修复代码
解决方法很简单:先把文本框的内容转换成数值类型(比如整数),再用数值做Select Case判断,同时还要处理文本框内容不是数字的异常情况:
For Each TextStatas In Arr_TextStat Dim inputValue As Integer ' 尝试将文本转换为整数,转换失败则设为0(可根据需求调整默认值) If Not Integer.TryParse(TextStatas.Text, inputValue) Then inputValue = 0 End If Select Case inputValue 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 End Select Next
为什么另一个表单能正常运行?
大概率是另一个表单的代码里已经隐含了数值转换:比如控件绑定了数值类型的数据源,或者代码里提前把Text转成了数字,所以没有触发字符串比较的问题。
内容的提问来源于stack exchange,提问作者OMGSOMETAL
相关产品推荐
相关产品推荐

