I’m Trying to send/get values from mainform label to Childform1 label and Childform2 label with VB.NET
If you see the gif (gif result code) in mainform then there appears ADMIN (LblUsername) and A (LblLocation) so I want to appear in OPENFORM1 & OPENFORM2
Please Guide Me
Code in LoginForm
Imports System.Data.OleDb
Public Class LoginForm
Inherits BaseFixedForm
Public Sub New()
InitializeComponent()
End Sub
Private Sub Login()
Dim userModel = New UserModel().Login(txtUsername.Text, txtPassword.Text)
If userModel IsNot Nothing Then
Dim mainForm As Form
mainForm = New MainForm(userModel)
Me.Hide()
AddHandler mainForm.FormClosed, AddressOf MainForm_SessionClosed
mainForm.Show()
Else
ShowMessage("Incorrect username or password")
End If
End Sub
Private Sub ShowMessage(message As String)
lblErrorMessage.Text = " " & message
lblErrorMessage.Visible = True
End Sub
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Login()
End Sub
Private Sub MainForm_SessionClosed(sender As Object, e As FormClosedEventArgs)
Logout()
End Sub
Private Sub Logout()
Me.Show()
lblErrorMessage.Visible = False
txtPassword.Clear()
txtUsername.Clear()
txtUsername.Focus()
End Sub
End Class
Public Class UserDao
Private ReadOnly connectionString As String
Public Sub New()
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|test07092024.accdb;Persist Security Info=False;"
End Sub
Protected Function GetConnection() As OleDbConnection
Return New OleDbConnection(connectionString)
End Function
Public Function Login(ByVal username As String, ByVal password As String) As User
'Validate the username and password for login.
Using connection = GetConnection() 'Obtener la conexion.
connection.Open() 'Open the connection.
Using command = New OleDbCommand()
command.Connection = connection
command.CommandText = "select *from Users where (userName=@username and password=@pass)"
command.Parameters.AddWithValue("@username", username)
command.Parameters.AddWithValue("@pass", password)
command.CommandType = CommandType.Text
Dim reader As OleDbDataReader = command.ExecuteReader()
If reader.Read() Then
Dim userObj = New User With {
.Id = CInt(reader(0)),
.Username = reader(1).ToString(),
.Location = reader(3).ToString()
}
Return userObj
Else
Return Nothing
End If
End Using
End Using
End Function
End Class
Public Class UserModel
Private _id As Integer
Private _username As String
Private _password As String
Private _Location As String
Private _userDao As UserDao
Public Sub New()
_userDao = New UserDao()
End Sub
Public Property Id As Integer
Get
Return _id
End Get
Set(ByVal value As Integer)
_id = value
End Set
End Property
Public Property Username As String
Get
Return _username
End Get
Set(ByVal value As String)
_username = value
End Set
End Property
Public Property Password As String
Get
Return _password
End Get
Set(ByVal value As String)
_password = value
End Set
End Property
Public Property Location As String
Get
Return _Location
End Get
Set(ByVal value As String)
_Location = value
End Set
End Property
Public Function Login(ByVal username As String, ByVal password As String) As UserModel
'Login.
Dim result = _userDao.Login(username, password)
If result IsNot Nothing Then
Return MapUserModel(result)
Else
Return Nothing
End If
End Function
'Mapping entity model to domain model.
Private Function MapUserModel(ByVal userEntity As User) As UserModel
'Map a single object.
Dim userModel = New UserModel() With {
.Id = userEntity.Id,
.Username = userEntity.Username,
.Password = userEntity.Password,
.Location = userEntity.Location
}
Return userModel
End Function
End Class
Public Class User
Public Property Id As Integer
Public Property Username As String
Public Property Password As String
Public Property Location As String
End Class
Code in MainForm
Public Class MainForm
Inherits BaseMainForm
Private listChildForms As List(Of Form)
Private activeChildForm As Form 'Obtains or sets the currently displayed child form.
Public Sub New(connectedUser As UserModel)
'Use this constructor at login and submit a user view model
InitializeComponent()
'Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
listChildForms = New List(Of Form)()
LoadUserData(connectedUser)
End Sub
Public Sub LoadUserData(connectedUser As UserModel)
'Upload the logged-in user's data in the side menu.
LblUsername.Text = connectedUser.Username
LblLocation.Text = connectedUser.Location
End Sub
Private Sub OpenChildForm(Of ChildForm As {Form, New})(ByVal senderMenuButton As Object)
Dim menuButton As Button = CType(senderMenuButton, Button) ' Where the form opens, you can submit a null value, if you're not trying to open a form from a different control than the side menu buttons.
Dim form As Form = listChildForms.OfType(Of ChildForm)().FirstOrDefault() 'Find if the form is already instantiated or has been previously displayed.
If activeChildForm IsNot Nothing AndAlso form Is activeChildForm Then Return 'If the form is the same as the current active form, return and do nothing.
If form Is Nothing Then 'If the form doesn't exist, then create the instance and display it in the desktop panel.
form = New ChildForm() 'Instantiation form.
form.FormBorderStyle = FormBorderStyle.None 'Remove the Edge.
form.TopLevel = False 'Indicate that the form is not top-level
form.Dock = DockStyle.Fill 'Set the Dock Style to Full (Fill the Desktop Panel)
listChildForms.Add(form) 'Add Child Form to Form List.
If menuButton IsNot Nothing Then 'If the menu button is different from null:
ActivateButton(menuButton) 'Activate/Highlight the button.
AddHandler form.FormClosed, Sub(s, e) DeactivateButton(menuButton) 'When the form closes, disable the button.
End If
btnChildFormClose.Visible = True 'Show the Close Secondary Form Button.
End If
CleanDesktop() 'Delete the current child form from the desktop panel
panelDesktop.Controls.Add(form) 'Add Secondary Form to the Desktop Dashboard
panelDesktop.Tag = form ' Store the form
form.Show() 'Show the form
form.BringToFront() ' Bring to the front
form.Focus() 'Focus the form
'lblCaption.Text = form.Text 'Set the title of the form.
activeChildForm = form 'Set as active form.
End Sub
Private Sub ActivateButton(menuButton As Button)
menuButton.ForeColor = Color.RoyalBlue
'menuButton.BackColor = panelMenuHeader.BackColor;
End Sub
Private Sub DeactivateButton(menuButton As Button)
menuButton.ForeColor = Color.SlateGray
'menuButton.BackColor = panelSideMenu.BackColor;
End Sub
Private Sub CleanDesktop()
If activeChildForm IsNot Nothing Then
activeChildForm.Hide()
panelDesktop.Controls.Remove(activeChildForm)
End If
End Sub
#Region "- Open Secondary Forms"
Private Sub btnOPENFORM1_Click(sender As Object, e As EventArgs) Handles btnOPENFORM1.Click
OpenChildForm(Of OPENFORM1)(sender)
End Sub
Private Sub btnOPENFORM2_Click(sender As Object, e As EventArgs) Handles btnOPENFORM2.Click
OpenChildForm(Of OPENFORM2)(sender)
End Sub
#End Region
End Class
Result code in file gif.
Desired result
OPENFORM1
ADMIN
A
OPENFORM2
ADMIN
A
Update code
So in the OPENFORM1 form and OPENFORM2 Have each label, namely : LblUsername & LblLocation
code in OPENFORM1
Public Class OPENFORM1
Private Sub OPENFORM1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MainForm.LblUsername.Text = LblUsername.Text
MainForm.LblLocation.Text = LblLocation.Text
End Sub
End Class
code in OPENFORM2
Public Class OPENFORM2
Private Sub OPENFORM2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MainForm.LblUsername.Text = LblUsername.Text
MainForm.LblLocation.Text = LblLocation.Text
End Sub
End Class
but I have an error Reference to a non-shared member requires an object reference
7