Basic VB.Net Class Question

How can I have a class created on one (main) form be able to be access from other forms?

Example, when the main window loads, I do something like:
--> Dim User as new UserClass(UserId)
then I can use 'User' on that form, however if I open a new window like so:
--> Dim SettingWindow as new SettingsFrm
--> SettingsWindow.Show
I cannot access the 'User' object...

I know this is how it works, but how (I'm sure basic) way can I get access to the 'User' object from the child window (not a copy, same one, without passing it as a parameter)

Feel like it's a silly question - but looking on Google did not reveal much.
(Code above from head, may not be 100% correct)

500pts.

Thanks,

Andrew
Crazy_PenguinsAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
JackOfPHConnect With a Mentor Commented:
Try the class below it is using the Singleton Design pattern of GOF....

USAGE:

'On Main window...

Dim myUserSecurity As CSW_UserSecurity = CSW_UserSecurity.CreateInstance(My.Settings.UserID)

In child window...

Dim myUserSecurity As CSW_UserSecurity = CSW_UserSecurity.GetInstance

myUserSecurity.aFunctionNameHere

Public Class CSW_UserSecurity
    Private Shared _CSWObject As CSW_UserSecurity
    Private UserID As Integer
    Public RemoveService As Boolean
    Public RemoveHardware As Boolean
    Public RemovePayment As Boolean
 
    Private Sub New()
 
    End Sub
 
    Public Shared Function GetInstance() As CSW_UserSecurity
        Return _CSWObject
    End Function
 
    Public Shared Function CreateInstance(ByVal UserID As Integer) As CSW_UserSecurity
        If _CSWObject Is Nothing Then
            _CSWObject = New CSW_UserSecurity
            _CSWObject.UserID = UserID
            _CSWObject.LoadSecurity()
        End If
 
        Return _CSWObject
    End Function
 
 
    Private Sub LoadSecurity()
        'some DB stuff here, sets the var values
    End Sub
End Class

Open in new window

0
 
drypzCommented:
Hi! Declare your class as Public.



0
 
Crazy_PenguinsAuthor Commented:
Okay...

Let me show you what I have, maybe we can work from there...

I make this object in my first form, but cannot seem to access it from other child forms...

Thanks for your help drypz
Public Class CSW_UserSecurity
    Private UserID As Integer
    Public RemoveService As Boolean
    Public RemoveHardware As Boolean
    Public RemovePayment As Boolean
 
    Public Sub New(ByVal UserID As Integer)
        'called when created
        Me.UserID = UserID
        LoadSecurity()
    End Sub
 
    Private Sub LoadSecurity()
        'some DB stuff here, sets the var values
    End Sub
 
End Class

Open in new window

0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
Crazy_PenguinsAuthor Commented:
More Information:
'I put this in my primary window:
Dim myUserSecurity As New CSW_UserSecurity(My.Settings.UserID)
 
'I can't use this in a child window
myUserSecurity.aFunctionNameHere
 
'Says it's not declared 

Open in new window

0
 
Crazy_PenguinsAuthor Commented:
Thanks JackOfPh,

However now I get this:
Name '_CSWObject' is not declared.

Open in new window

0
 
Crazy_PenguinsAuthor Commented:
Opps missed a line, let me re-test
0
 
JackOfPHCommented:
Declare something like this in your class...

Private Shared _CSWObject As CSW_UserSecurity
0
 
Crazy_PenguinsAuthor Commented:
Okay, it all works, but I want to understand why it works...

is the _CSWObject available from all my forms now? (because of the "Private Shared" part?)

why do I have to use '_CSWObject.LoadSecurity()' instead of just 'LoadSecurity()'

Thanks again
0
 
JackOfPHCommented:
This will create the instance of the class not the

CreateInstance(My.Settings.UserID)


If _CSWObject Is Nothing Then

'This line of code checks if you already has an object CSQObject created... If the _CSObject is nothing you will create new intance of the class, If there is an existing object already you use the created objects you created before.


       
0
 
JackOfPHCommented:
_CSWObject.LoadSecurity() ' This will call the function LoadSecurity in the object that you created.

If you use LoadSecurity you will calling the function from that class not from the object that created...

:)

I hope I explain it, clearly.

It is hard to speak english, if you know what I mean...
0
 
Crazy_PenguinsAuthor Commented:
Thanks for your help.  I think I got it now.
0
All Courses

From novice to tech pro — start learning today.