登录表 - 不工作

时间:2016-09-27 08:37:57

标签: vb.net forms login

在从文本文件数据库创建登录时苦苦挣扎。信息需要在工作之前手动输入到文本文件中...请参阅下面的代码以获取表单。它不会让我登录。

Public Class UserLogin
    Private PWD As String
    Public User As User
    Public Users As List(Of User) = New List(Of User)

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Me.Close()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try

            If isValidData() Then

                If isValidUser() Then
                    MessageBox.Show("Login Successful")
                    Form2.Show()
                    Me.Hide()

                Else
                    MessageBox.Show("Incorrect Username or password")
                End If
            End If


        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & vbCrLf & ex.GetType.ToString & vbCrLf & vbCrLf & ex.StackTrace, "User Does not Exist")

        End Try

    End Sub
    Private Function isValidData() As Boolean

        Return Validator.IsPresent(TextBox1, "Username") AndAlso
        Validator.IsPresent(TextBox2, "Password")

    End Function
    Private Function isValidUser() As Boolean

        Return UserDB.ValidateUser("Username", "Password")


    End Function
    Public Sub setPath(cwd As String)
        PWD = cwd
    End Sub
End Class

以下用户类:

Public Class User
    Public Sub New()

    End Sub
    Public Sub New(Username As String, Password As String)
        Me.Username = Username
        Me.Password = Password


    End Sub

    Public Property Username As String
    Public Property Password As String



    Public Function GetDisplayText(sep As String) As String
        Dim text As String = Username & sep & Password
        Return text

    End Function
End Class

下面的UserDB类

Imports System.IO

Public Class UserDB
    Private Const Databasename = "C:\Depreciate\Users.txt"
    Public User As New User
    Public Shared Users As List(Of User) = New List(Of User)


    Public Shared Function GetUsers(Dir As String) As List(Of User)
        Dim Users As New List(Of User)
        Dim textIn As New StreamReader(
            New FileStream(Databasename, FileMode.OpenOrCreate, FileAccess.Read))



        Do While textIn.Peek <> -1
            Dim row As String = textIn.ReadLine
            Dim columns As String() = row.Split(CChar(","))
            Dim User As New User
            User.Username = columns(0)
            User.Password = columns(1)
            Users.Add(User)

        Loop
        textIn.Close()


        Return Users
    End Function
    Public Shared Function ValidateUser(username As String, password As String) As Boolean

        Dim Validated = False

        For Each userEntry As User In Users


            If username = userEntry.Username AndAlso password = userEntry.Password Then
                Validated = True
                Exit For
            End If
        Next
        Return Validated


    End Function


End Class

2 个答案:

答案 0 :(得分:0)

看起来像是将所有用户名和密码与字符串进行比较&#34;用户名&#34;和#34;密码&#34;致电:

Return UserDB.ValidateUser("Username", "Password")
isValidUser中的

。可能你应该更好地传递用户输入的实际用户名和密码?

答案 1 :(得分:0)

您的代码中存在以下几个问题: 首先,我无法看到应该从文件中初始化用户列表的UserDB.GetUsers调用。但是假设你已经在其他地方进行了调用,那么该方法还有另一个问题。

GetUsers方法中的这一行创建一个List(Of User)类型的新变量,并将其命名为Shared one的同名,有效地隐藏了在全局类级别声明的那个

 Dim Users As New List(Of User)

然后您的代码继续并填充名为Users的变量,但此变量不是在类全局级别声明的共享变量。当然,当您在共享变量中搜索用户名和密码时,您找不到任何内容。

只需删除该行,然后调用To GetUsers填充检查中使用的相同变量

(当然我还假设当您调用UserDB.ValidateUser时,您将传递实际的用户名和密码,而不是您在上面的代码中使用的占位符字符串)