2016-12-02 3 views
2

Я работаю над проверкой определенного bootzize, введенного в текстовое поле в vb. Мы должны использовать подпрограмму для проверки размера, а затем вызвать процедуру после нажатия кнопки. Когда я нажимаю кнопку, независимо от того, какое значение она возвращает false, даже если введен правильный размер. Вот код для подпрограммы и нажмите кнопку.Sub, чтобы проверить размер в текстовом поле, vb

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 

ответ

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 ... не работает, потому что любое целое число без знака всегда будет вычисляться так. В результате ваш код всегда получал b = true. Причина, по которой вы всегда становились ложными, заключалась в том, что по умолчанию Visual Basic инициализирует Booleans по умолчанию, и вы никогда ничего не назначаете 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 равным true или false вместо этого, поскольку это значение, которое вы позже проверяете.

Edit: еще лучший способ сделать это и избежать так много сравнений будет использовать массив:

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 
+2

Wow! Большое вам спасибо за быстрый ввод! Очень полезно, поскольку я довольно долго общаюсь с этим. Если бы у меня была более высокая репутация, я бы голосовал, но приятно видеть таких полезных людей здесь, поскольку я новичок в стеке. Еще раз спасибо! – DodgerT

+0

@DodgerT Рад, что это помогло. –