2016-11-26 4 views
-1

Я участвую в онлайн-обучении VB.NET. У меня есть проект, над которым я работаю, и мне нужна была помощь.Использование массивов для проверки числовых входов

Мы изучаем Массивы, и я немного борюсь. Мне нужно создать верификатор булавки, используя массив, который будет проверять диапазоны чисел для каждого входа.

Приложение будет иметь 7 текстовых полей. txtBox1 должен находиться в диапазоне 7-9, txtBox2 должен находиться в диапазоне 5-7, txtBox3 в диапазоне 0-4, txtBox4 в диапазоне 0-9, txtBox5 в диапазоне 6-9, txtBox 6 в диапазоне 3-6 и txtBox7 в диапазон 4-8.

Когда нажата кнопка «Проверить», массив должен проверить, что каждый вход находится в указанном диапазоне, а затем отображает сообщение, если контакт хорош или нет.

У меня есть код, но я не могу проверить плохие входы. Мне нужно проверить, что ввод является числовым и что он находится в пределах диапазона. Если вход плохой, мне нужно текстовое поле, чтобы выделить желтый и этот фокус усиления поля. Я пробовал много вариантов IsNumeric, и я не могу получить текстовое поле, чтобы получить фокус или выделить.

Я надеюсь, что кто-то может дать ясное объяснение того, как работает код, чтобы я мог продолжать делать это самостоятельно и полностью понять, что я делаю. Любая помощь для этого будущего программиста была бы оценена.

Option Strict On 

Public Class frmPinVerifier 
Dim blnOk As Boolean = False 

Private Sub btnVerify_Click(sender As Object, e As EventArgs) Handles btnVerify.Click 
    'Arrays 
    Dim intMinimum() As Integer = {7, 5, 0, 0, 6, 3, 4} 
    Dim intMaximum() As Integer = {9, 7, 4, 9, 9, 6, 8} 
    Dim strArrayMessage() As String = {"Must be in range of 7 through 9", "Must be in range of 5 through 7", "Must be in range of 0 through 4", "Must be in range of 0 through 9", "Must be in range of 6 through 9", "Must be in range of 3 through 6", "Must be in range of 4 through 8"} 
    Dim intTextBox() As Integer = {CInt(txtBox1.Text), CInt(txtBox2.Text), CInt(txtBox3.Text), CInt(txtBox4.Text), CInt(txtBox5.Text), CInt(txtBox6.Text), CInt(txtBox7.Text)} 


    'Start Count 
    Dim intCount As Integer = 0 


    For intCount = 0 To intMinimum.Length - 1 And intMaximum.Length - 1 
     If intTextBox(intCount) >= intMinimum(intCount) And intTextBox(intCount) <= intMaximum(intCount) Then 
      blnOk = True 
     Else 

      MessageBox.Show(strArrayMessage(intCount)) 

     End If 

    Next 

    If blnOk = True Then 
     MessageBox.Show("PIN Verified") 
     txtBox1.Clear() 
     txtBox2.Clear() 
     txtBox3.Clear() 
     txtBox4.Clear() 
     txtBox5.Clear() 
     txtBox6.Clear() 
     txtBox7.Clear() 


    End If 
+0

Я должен был отметить. Я должен иметь возможность использовать массивы intMinimum и intMaximum. IntMinimum должен содержать минимальное значение для каждой позиции цифры и то же самое для intMaximum. –

+0

SO работает наоборот - * вы * напишите код, пытаясь сделать то, что вам нужно сделать. когда вы застряли, отправьте вопрос с кодом, иллюстрирующим вашу проблему. как вы просите учебник, и мы этого не делаем. вы узнаете больше, сделав это самостоятельно – Plutonix

+0

Я не прошу учебника. Я прошу совета относительно того, как начать работу. Как я сказал, ясное объяснение того, как код работает не в коде. Если вы не можете помочь, это нормально. –

ответ

1

Вы, кажется, не имеют какой-либо код, чтобы установить фокус на или изменить BackColor из текстовых полей в вопросе.

Вы можете установить массив как ссылку на текстовые поля. Это облегчает доступ к свойствам этих текстовых полей. Вы были близки к Dim intTextBox() As Integer = {CInt(txtBox1.Text),..., но немного слишком специфичны, используя свойство .Text в массиве.

Private Sub btnVerify_Click(sender As Object, e As EventArgs) Handles btnVerify.Click 
    Dim nums = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7} 
    Dim intMinimum() As Integer = {7, 5, 0, 0, 6, 3, 4} 
    Dim intMaximum() As Integer = {9, 7, 4, 9, 9, 6, 8} 
    Dim pinIsValid As Boolean = True 

    For Each tb In nums 
     tb.BackColor = Color.White 
    Next 

    For i = 0 To nums.Length - 1 
     Dim val = Integer.Parse(nums(i).Text) 
     Dim minVal = intMinimum(i) 
     Dim maxVal = intMaximum(i) 
     If val < minVal OrElse val > maxVal Then 
      pinIsValid = False 
      nums(i).BackColor = Color.Yellow 
      nums(i).Focus() 
      'TODO: Adjust "Entry {i + 1}" so it makes sense to the user. 
      MessageBox.Show($"Entry {i + 1} must be in the range {minVal} to {maxVal} (inclusive)") 
      Exit Sub 
     End If 
    Next 

    If pinIsValid Then 
     For i = 0 To nums.Length - 1 
      nums(i).Text = "" 
     Next 
     MessageBox.Show("PIN Verified") 
    End If 

End Sub 
+0

Спасибо! как насчет ввода нечислового числа? Ваш код имеет смысл, и мне просто не хватает нескольких ключевых компонентов. Но если вы вводите нечисловое число, оно получает ошибку в Integer.Parse (nums (i) .Text). Я думал, вам нужно использовать счетчик, чтобы найти, где вы находитесь в индексе, но я полагаю, что параллельный массив знает, где вы находитесь в коде? –

+0

@BradWethington 1) Вы должны исследовать с помощью [Int32.TryParse] (https://msdn.microsoft.com/en-us/library/f02979c7 (v = vs.110) .aspx). 2) Я не понимаю, что вы подразумеваете под «параллельным приходом» в этом контексте. –

+0

Параллельный массив означает два разных массива, работающих вместе. Я понял. Я должен был запустить и IsNumeric Loop до цикла, проверяя, были ли входные данные в пределах указанного диапазона. Я не знал, что вы можете запускать несколько циклов при одном и том же нажатии кнопки. Спасибо за помощь. Я медленно получаю это, но это очень сложно. –

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