2016-11-26 1 views
-1

저는 VB.NET을 배우는 온라인 학생입니다. 저는 현재 일하고있는 프로젝트를 가지고 있으며 시작하는 데 도움이 필요합니다.배열을 사용하여 숫자 입력 확인

우리는 배열을 배우고 있으며 나는 조금 어려움을 겪고 있습니다. 각 입력에 대한 숫자 범위를 확인하는 배열을 사용하여 핀 검증자를 작성해야합니다.

응용 프로그램에는 7 개의 텍스트 상자가 있습니다. txtBox1은 7-9 ​​범위에 있어야하고 txtBox2는 5-7 범위에 있어야하고 txtBox3은 0-4 범위에, txtBox4 범위는 0-9, txtBox5 범위는 6-9, txtBox6 범위는 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

문제의 텍스트 상자에 초점을 설정하거나 배경색을 변경하는 코드가없는 것 같습니다.

텍스트 상자를 참조하도록 배열을 설정할 수 있습니다. 이렇게하면 해당 텍스트 상자의 속성에 쉽게 액세스 할 수 있습니다. 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) 나는이 문맥에서 당신이 "병행 된 arrary"에 의해 의미하는 것을 이해하지 못한다. –

+0

병렬 배열이란 두 개의 서로 다른 배열이 함께 실행되는 것을 의미합니다. 나는 그것을 알아. 입력이 지정된 범위 내에 있는지 루프를 확인하기 전에 IsNumeric Loop를 실행해야했습니다. 같은 버튼 클릭으로 여러 개의 루프를 실행할 수 있다는 것을 알지 못했습니다. 도와 주셔서 감사합니다. 나는 이것을 천천히 얻는다. 그러나 그것은 매우 도전적이다. –