2015-12-14 9 views
0

Здравствуйте, я пытаюсь создать форму окна, в которой пользователь будет вводить 6-значный заказ на продажу в текстовое поле. Затем нажмите кнопку «Пуск» и убедитесь, что пользователь действительно набрал 6 целых чисел. Спасибо!Сравнение ввода пользователя с целым или массивом

Public Class Form1 
Private Sub startButton_Click(sender As Object, e As EventArgs) Handles startButton.Click 
    Dim salesOrder As integer 
    salesOrder = txtboxSalesOrder.Text 
    If salesOrder 'Is a 6-digit integer 
    Then 
    '.....Do Something 


Private Sub txtboxSalesOrder_TextChanged(sender As Object, e As EventArgs) Handles txtboxSalesOrder.TextChanged 
    End Sub 
End Class 
+0

Шесть цифр как число от 100000 до 999999? Не разрешено ли начало нулевого? – Steve

+0

Это даже компилируется? Вы объявляете целое число и присваиваете ему строку без преобразования. –

+2

@roryap Это беспорядок, который позволяет использовать параметр Strict Off. – Steve

ответ

0

Вам просто нужно преобразовать входные данные из вашего текстового поля в целое число и проверяет полученное значение

Dim salesOrder As integer 
If Int32.TryParse(txtboxSalesOrder.Text, salesOrder) Then 
    If salesOrder >= 100000 andalso salesOrder <= 999999 Then 
     ' valid number 
    else 
     MessageBox.Show("Not a 6 digits number") 
    End if 
Else 
    MessageBox.Show("Please type a number between 100000 and 999999") 
End If 

Обратите внимание, что ваш код пытается автоматически конвертировать любой был набран в текстовом поле в целое число , Это, конечно, маршрут, который приводит к ошибкам. Вы не должны этого делать, и вы должны установить Option Strict вашего проекта в On, чтобы получить раннюю ошибку, когда вы пишете такой тип неправильного кода.

Вместо этого Int32.TryParse проверяет, есть ли у вас допустимое число и возвращает false, если нет, или установите переменную с результатом преобразования.

+0

Это прекрасно сработало! Как бы я также включил проверку, чтобы убедиться, что никакие письма не добавлены? – Bcon615

+0

Это сложнее. Событие TextChanged должно помочь немного, но есть проблема с копией/вставкой, чтобы избежать этого. Я предпочитаю ленивый подход к таким проблемам. Позвольте пользователю печатать все, что захочет, но проверьте, прежде чем предпринимать действия на входе. – Steve

+0

Несколько способов справиться с этим. Сделайте проверку при проверке следующим образом: «Если isnumeric (txtboxSalesOrder.Text)» Выполняйте проверку сразу же после нажатия клавиши и используйте e.handled для предотвращения недопустимых символов. Обычно делается с помощью случая выбора и указывая допустимый диапазон значений ключевого слова asc. – JoshF

0

Решение Steve будет работать, очевидно, как вы его протестировали, но я бы подумал о подключении к проверке или проверке событий, когда вы оставите текстовое поле для проверки значения.

Также рассмотрите возможность использования errorprovider вместо почтового ящика.

Private Sub txtboxSalesOrder_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtboxSalesOrder.Validating 
    If IsNumeric(sender.Text) Then 
     If <> sender.text.ToString.Length = 6 Then 
      MessageBox.Show("Please type a number between 100000 and 999999") 
     End If 
    End If 
End Sub 

Это проверит, что у вас есть правильные данные, прежде чем вы нажмете кнопку «Пуск».

Смежные вопросы