2017-01-17 15 views
0

Код должен отображать все числа, соответствующие критериям. Он не является полным, но я не могу понять, почему он отображает числа, которые больше 10 в списке. Например, я наберу 2 в текстовое поле, и MessageBox покажет, что число должно быть больше 3, и оно не отображает номер в списке. Если я наберу число больше 10, оно отобразит MessageBox, в котором говорится, что число должно быть больше 10, но оно отобразится в списке. Я не знаю почему.Почему этот код выводит вывод, даже если он не соответствует критериям?

Private Sub btnProcess_Click(sender As Object, e As EventArgs) Handles btnProcess.Click 
    Dim input As String = txtNumber.Text 

    If DataOk() Then 
     lstOutput.Items.Clear() 
     lstOutput.Items.Add(input) 
    End If 

End Sub 
Function DataOk() As Boolean 
    Dim number As String = txtNumber.Text 
    If number = "" Then 
     MessageBox.Show("Must not be blank") 
     txtNumber.Focus() 
    ElseIf CInt(number) > 10 Then 
     MessageBox.Show("Number must be less than 10") 
     txtNumber.Focus() 
    ElseIf CInt(number) < 3 Then 
     MessageBox.Show("Number must be greater than 3") 
     txtNumber.Focus() 
     Return False 
    End If 
    Return True 
End Function 
+0

Вы отлаживали свой код? – OneFineDay

+2

Добавьте 'Return False' в свои первые 2 условия. Вы должны использовать 'Integer.TryParse' вместо вызова' CInt() '. – Comintern

+4

Две минуты в отладчике позволили бы вам понять это сами. Это, вероятно, меньше времени, чем потребовалось вам, чтобы написать свой пост, и примерно в два раза больше, чем было, когда я набираю этот комментарий. Вы действительно должны научиться его использовать. Это будет самый важный инструмент в вашем инструменте; вы должны выяснить, как начать использовать его раньше, чем позже. –

ответ

0

Вы получаете числа добавлены, потому что нет Return False, если число больше 10. Таким образом, правда, возвращается. Чтобы решить вашу проблему, обновите свой код, как показано ниже.

ElseIf CInt(number) > 10 Then 
    MessageBox.Show("Number must be less than 10") 
    txtNumber.Focus() 
    Return False  ''please add this statement 
ElseIf CInt(number) < 3 Then 

Вы можете переписать функцию, как показано ниже.

Function DataOk() As Boolean 
    Dim number As Integer 
    Dim errMssg As String = "" 

    If txtNumber.Text.Trim = "" Then 
     errMssg = "Must not be blank" 
    ElseIf Not Integer.TryParse(txtNumber.Text.Trim, number) Then 
     errMssg = "Provide a valid number" 
    ElseIf number > 10 Then 
     errMssg = "Number must be less than 10" 
    ElseIf number < 3 Then 
     errMssg = "Number must be greater than 3" 
    End If 

    If errMssg = "" Then 
     Return True 
    Else 
     MessageBox.Show(errMssg) 
     Me.txtNumber.Focus() 
     Return False 
    End If 

End Function