我正在检查在vb的文本框中输入的特定bootize。我们必须使用子例程来检查大小,然后在按钮单击后调用例程。当我单击按钮时,无论它返回什么值,即使输入了正确的大小,它也会返回false。这是子例程和按钮单击的代码。
Dim check As Boolean
Dim b As Boolean
Sub salomonsize(ByVal a As Integer, ByRef check As Boolean)
If a = 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Then
b = True
Else
b = False
End If
End Sub
Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
Call salomonsize(txtSalomonSize.Text, check)
If check = False Then
MsgBox("Wrong size")
Exit Sub
End If
答案 0 :(得分:3)
我看到一些可以改善日常生活的事情。首先,比较应该是:
If a = 6 Or a = 7 Or a = 8 Or a = 9 Or a = 10 Or a = 11 Or a = 12 Then
在If a = 6 or 7 or 8 ...
之前执行此操作的方式不起作用,因为任何无符号整数将始终求值为true。因此,您的代码始终获得b = true
。你总是得到假的原因是因为默认情况下Visual Basic将布尔值初始化为false,而你从未向check
分配任何内容,因此check = false
。
另一方面,我会创建一个函数,而不是通过引用传递值。函数将进行所有必要的计算,并返回一个值。完整的代码如下:
Function salomonsize(ByVal a As Integer) As Boolean
If a = 6 Or a = 7 Or a = 8 Or a = 9 Or a = 10 Or a = 11 Or a = 12 Then
Return True
Else
Return False
End If
End Function
Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click
Dim check = salomonsize(txtSalomonSize.Text)
If check = False Then
MsgBox("Wrong size")
Exit Sub
End If
End Sub
您执行此操作的方式是指定b = true
和b = false
。我相信您的意思是将check
指定为相等的真或假,因为它是您稍后检查的值。
编辑:更好的方法是避免这么多的比较,使用数组:
Function salomonsize(ByVal a As Integer) As Boolean
Dim ValidNumbers As Integer() = {6, 7, 8, 9, 10, 11, 12}
If ValidNumbers.Contains(a) Then
Return True
Else
Return False
End If
End Function
如您所见,如果您需要添加更多数字,只需将它们添加到数组即可。如果需要,您甚至可以从文件中读取它们。然后使用.Contains
函数比较您的值。您甚至可以简单地执行Return ValidNumbers.Contains(a)
并完全避免使用If / Else:
Function salomonsize(ByVal a As Integer) As Boolean
Dim ValidNumbers As Integer() = {6, 7, 8, 9, 10, 11, 12}
return ValidNumbers.Contains(a)
End Function