要检查文本框中的大小,请转到

时间:2016-12-02 05:53:28

标签: vb.net subroutine

我正在检查在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

1 个答案:

答案 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 = trueb = 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