vb.net - Sub 检查文本框中的大小,vb

标签 vb.net subroutine

我正在检查在 vb 文本框中输入的特定启动大小。我们必须使用子例程来检查大小,然后在单击按钮后调用该例程。当我单击按钮时,无论值是什么,即使输入了正确的大小,它也会返回 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

最佳答案

我发现您的日常生活中有一些可以改进的地方。首先,比较应该是:

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。您总是得到 false 的原因是因为 Visual Basic 默认情况下将 bool 值初始化为 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 指定为 true 或 false,因为它是您稍后检查的值。

编辑:执行此操作并避免大量比较的更好方法是使用数组:

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

关于vb.net - Sub 检查文本框中的大小,vb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40925676/

相关文章:

c++ - 如何将对象(或指针)从 C++ .NET 应用程序发送到 VB 应用程序

程序集 'call' 与 'jmp'

Perl:如何调用多重继承中的特定方法?

.net - 组合框,Windows 7 和 8.1 上的不同行为

vb.net - Visual Basic-随机数

.net - 函数名两边的方括号

parsing - 将子例程放入解析器的优雅方法是什么?

perl - Perl 中是否可以要求进行子例程调用?

Perl - 将数组传递给子程序

vb.net - 选项卡索引不适用于面板中的控件?