How to create a user account for the program with features (remember me, log out, add a user with restricted access)

Mansour_Dalir 2,036 Reputation points
2024-08-07T16:02:20.7133333+00:00

hi I made changes in my question for better understanding. Thank you for making this program more complete.

Add Form Name 'VirtualMachine' with txt File Designer.vb.txt 20240809_074517

Public Class VirtualMachine
#Region "Initialization for data outside the program"
    Dim dtUsers As New DataTable
    Dim dtSetting As New DataTable
    Private Sub VirtualMachine_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dtSetting.Columns.Add("ID", GetType(Integer))
        dtSetting.Columns.Add("SettingName")
        dtSetting.Columns.Add("SettingValue")
        dtSetting.Rows.Add({0, "Users", "Admin,Admin"})
        dtSetting.Rows.Add({1, "RememberMe", ""})

        dtUsers.Columns.Add("ID", GetType(Integer))
        dtUsers.Columns.Add("UserName")
        dtUsers.Columns.Add("UserPassword")
        dtUsers.Columns.Add("UserType")
        dtUsers.Columns.Add("Hit")
        dtUsers.Rows.Add({0, "Admin", "Admin", "Admin", "Admin"}) 'is Default User
        dgvUsers.DataSource = dtUsers
        dgvSetting.DataSource = dtSetting
    End Sub
    Private Sub butExecute_Click(sender As Object, e As EventArgs) Handles butExecute.Click
        LoadApp()
    End Sub
#End Region
#Region "Bringing data from outside and initial settings"
    Dim dtGetUsers As New DataTable
    Dim dtGetSetting As New DataTable
    Dim DicCheckUsers As Dictionary(Of String, String)
    Sub LoadApp()
        dtGetUsers = dtUsers.Copy ' Get Data from outside
        dtGetSetting = dtSetting.Copy ' Get Data from outside
        txtPassword.Text = ""
        SyngUsers()
        butViewSettingIfIsAdmin.Enabled = False
        lblCurrentUser.Text = ""
        comUserName.Items.Clear()
        Dim GetCompute As Object = dtGetSetting.Compute("Min(SettingValue)", "[SettingName]='RememberMe'")
        If GetCompute.ToString = "" Then
            GetCompute = dtGetSetting.Compute("Min(SettingValue)", "[SettingName]='Users'")
            DicCheckUsers = Dict_StringToDic_OfStrStr(GetCompute)

            comUserName.Items.AddRange(DicCheckUsers.Keys.ToArray)
            grpLoginForm.Visible = True
        Else

        End If
    End Sub
    Function Dict_StringToDic_OfStrStr(inString As String, Optional separator1 As String = "|", Optional separator2 As String = ",") As Dictionary(Of String, String)
        Dim MyString As String = inString ' "Admin,Admin|Mansour,1394"
        ' Dim separators() As Char = '{"|"c}
        Dim Result = MyString.Split(separator1).
            Select(Function(x) x.Split(separator2)).
            ToDictionary(Function(x) x(0), Function(x) x(1))
        Return Result
    End Function
#End Region
    Private Sub butLoginOk_Click(sender As Object, e As EventArgs) Handles butLoginOk.Click
        Dim row As DataRow()
        Dim GetCompute As Object
        If txtPassword.Text = DicCheckUsers(comUserName.Text) Then

            If chkRememberMe.Checked Then
                row = dtSetting.Select("[SettingName]='RememberMe'")
                row(0).Item("SettingValue") = txtPassword.Text
            End If
            row = dtUsers.Select("[UserName]='" & comUserName.Text & "'")
            GetCompute = dtUsers.Compute("Min(UserType)", "[UserName]='" & comUserName.Text & "'")
            grpSettingOnlyAdminType.Visible = False
            grpLoginForm.Visible = False
            lblCurrentUser.Text = comUserName.Text
            If GetCompute.ToString = "Admin" Then
                InitialSetupOfAdmins()
            End If
            grpMainForm.Visible = True
        Else

        End If
    End Sub
    Sub InitialSetupOfAdmins()
        butViewSettingIfIsAdmin.Enabled = True
        lstUser.Items.Clear()
        For Each row As DataRow In dtUsers.Rows
            lstUser.Items.Add(Join(row.ItemArray, ","))
        Next
    End Sub

    Private Sub butViewSettingIfIsAdmin_Click(sender As Object, e As EventArgs) Handles butViewSettingIfIsAdmin.Click
        grpSettingOnlyAdminType.Visible = Not grpSettingOnlyAdminType.Visible
    End Sub
    Private Sub butExit_Click(sender As Object, e As EventArgs) Handles butExit.Click
        grpLoginForm.Visible = False
        grpMainForm.Visible = False
    End Sub
    Private Sub butAddUser_Click(sender As Object, e As EventArgs) Handles butAddUser.Click
        Dim MaxId As Integer = dtUsers.Compute("Max([ID])", "") + 1
        Dim Prompt As String = "Please enter the data in this order." & vbNewLine & "ID,User Name,Password,Type,Hit" & vbNewLine & "Sample:1,Jiachen Li,1234,User,Rev4321"
        Dim sttGetRow As String = InputBox(Prompt, DefaultResponse:=MaxId & ",Jiachen Li,1234,User,Rev4321")
        lstUser.Items.Add(sttGetRow)
        dtUsers.Rows.Add(Split(sttGetRow, ","))
        SyngUsers()
    End Sub
    Private Sub butEditUser_Click(sender As Object, e As EventArgs) Handles butEditUser.Click
        If lstUser.SelectedIndex > -1 Then
            lstUser.SelectedItem = InputBox("Edit", DefaultResponse:=lstUser.SelectedItem)
        End If
    End Sub
    Private Sub butSingOut_Click(sender As Object, e As EventArgs) Handles butSingOut.Click

    End Sub
    Sub SyngUsers()
        Dim GetAllUserPasword As String = ""
        For Each row As DataRow In dtUsers.Rows
            GetAllUserPasword += IIf(GetAllUserPasword <> "", "|", "") & row.Item("UserName") & "," & row.Item("UserPassword")
        Next
        Dim rows As DataRow() = dtSetting.Select("[SettingName]='Users'")
        rows(0).Item("SettingValue") = GetAllUserPasword
    End Sub
End Class
VB
VB
An object-oriented programming language developed by Microsoft that is implemented on the .NET Framework. Previously known as Visual Basic .NET.
2,805 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Jiachen Li-MSFT 34,201 Reputation points Microsoft External Staff
    2024-08-08T08:15:32.28+00:00

    Hi @Mansour_Dalir ,

    To implement a login form and handle the startup and transition between forms without encountering the 'Dispose' error, you can follow these steps:

    Create the Login Form:

    Add a new form to your project (e.g., LoginForm). Design the form to include fields for username, password, and checkboxes for options like "Remember Me". Add buttons for login, add, delete, and exit.

    Encrypt/Decrypt Passwords:

    Implement methods for encoding and decoding passwords. Use these methods to handle password storage and comparison securely.

    Handle Application Startup:

    Set the LoginForm as the startup form in your application settings. Implement logic in LoginForm to handle user authentication. If authentication is successful, switch to the main form.

    Manage Form Transitions:

    Ensure proper disposal of forms to avoid the 'Dispose' error.

    Best Regards.

    Jiachen Li


    If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment". Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.