2011-07-05 3 views
0

사용자 입력을 허용하는 기본 메뉴를 만들고 배열에 하드 코드 된 암호와 유효성을 검사합니다. 먼저 for 루프에서 첫 번째 암호 색인 만 검사합니다. ValidPasswords() 배열 안의 각 암호에 대해 입력 된 암호를 확인하고 싶습니다..NET 메인 메뉴 도움말

두 번째로, My for 루프는 내가 원하는 것을하고 있지 않습니다. 사용자에게 암호를 입력 할 기회를 3 번 ​​부여하고 싶습니다. 3을 초과하면 3 번 시도한 후 양식을 종료합니다. 지금 당장은 3 회 반복되고 사용자에게 다시 시도 할 기회가 주어지지 않고 종료됩니다. return 문을 넣으면 반환 만하고 3 번 반복하지 않습니다.

Public Class frmMain 
    Dim ValidPasswords() = {"1234", "2222", "8918", "9911"} 
    'Dim ValidPWList As New List(Of String) 
    Dim pwIndex As Integer = 0 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    ' For pwIndex = 0 To ValidPasswords.Length 'TOTAL PASSWORDS 
    If txtPW.Text = ValidPasswords(pwIndex) Then 


    Else 
     For i = 0 To 2 '3 MAX ALLOWABLE ATTEMPT 
      MessageBox.Show("Invalid Password, Please try again.", "Invalid Credentials") 
      txtPW.Focus() 
     Next 
     MessageBox.Show("Exceeded 3 password attempts.") 
     Me.Close() 
    End If 


    If txtFNAME.Text = "" Then 
     MessageBox.Show("Please enter your name!", "Error") 
     'ElseIf txtPW.Text <> "1234" And txtPW.Text <> "2332" And txtPW.Text <> "0192" And txtPW.Text <> "2010" Then 
     'MessageBox.Show("Invalid Password, Please try again.", "Invalid Credentials") 
    Else 
     g_welcomeMessage = ("Welcome, " + txtFNAME.Text + " " + txtLNAME.Text + ", to Image Viewer 1.0") 
     frmImage.ShowDialog() 
    End If 


End Sub 


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    MessageBox.Show("Thanks for trying me out!", "Goodbye") 
    Me.Close() 
End Sub 

감사!

답변

2

다니엘에게 물건이 돌아 왔습니다. 귀하의 응용 프로그램에서 하드 코드 된 암호에 대한 조언을 해드 리지 않고 기본 사항을 파악하려는 것으로 가정합니다. 지정하지 않았기 때문에 .Net 4를 가정합니다.

I 손으로이 일을 해요 것은 너무 사소한 구문 문제를 변명 :

Public Class frmMain  
    Private validPasswords As List(Of String) = New List(Of String) From {"1234", "2222", "8918", "9911"}  
    Private failedAttempts As Integer = 0  

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
    If String.IsNullOrWhitespace(txtFNAME.Text) Then 
     MsgBox("Please enter a name") 
     Return 
    End If 

    If ValidPasswords.Any(Function(x) String.Equals(txtPW.Text, x)) Then 
     ' User has a name and entered a valid password... 
     g_welcomeMessage = ("Welcome, " + txtFNAME.Text + " " + txtLNAME.Text + ", to Image Viewer 1.0") 
     frmImage.ShowDialog() 
    Else 
     failedAttempts += 1 
     If failedAttempts = 3 Then 
      MessageBox.Show("Exceeded 3 password attempts.") 
      Me.Close() 
     End If 
    End If 
End Sub 

' The other method here... 

최종 클래스

+0

그래 내가 뒤로 그것을 가지고 한 가정합니다. 나는 여러 가지 방법으로 그것을 쓰고 놀고 있었다. .. 그러나 이것은 굉장하다. 다행스럽게도 언젠가는 다음과 같은 코드를 작성할 수있을 것입니다. 암호를 하드 코드하지 말고 사용자가 등록하고 데이터베이스/크기 조정 가능한 배열에 저장 한 다음 사용하십시오. 아마도 너무 고급. 어떤 방향으로? 감사! – Daniel

+0

대담한 @Daniel - 당신이 알고있는 것을 고수하는 대신에 지식을 찾고 있다는 것에 기쁩니다. 제 의견으로는 가장 좋은 방법입니다. VB.Net User Logon을위한 google, 다양한 방법으로 많은 예제가 있습니다. Asp.Net의 멤버쉽 공급자도 응용 프로그램 내에서 아주 쉽게 사용할 수 있다고 생각합니다. 학습하는 동안 전체 보드 시스템에 참여하지 말고 단계별로 구축하십시오 - 앱에 사용자 정보를 저장하십시오 - 다음 데이터베이스 - 다음으로 커스트 마이징 멤버십 제공 업체. 희망이 도움이됩니다! – Smudge202

+0

흠, 생각한 후에, 내가 어떻게 코드하는지 스타일이 마음에 들면, 늘 읽고 배울 점 목록에 추가하십시오 : Lambda Expression Tutorial (다중 람다가 .Net 4! _로 도입 된 _note) 및 또한 Linq (구체적으로 Linq to Entity/Linq to Object - 용어는 기사의 길이에 따라 다릅니다.) 행복한 코딩 – Smudge202