user765942
user765942

Reputation: 147

declaring global variables in vb

The user clicks a button, a new form is generated where the user enters his/her password? How can I keep an in-memory copy of the username?

For instance in web forms, I can just use Session ("User"). How can I replicate this with winforms?

Thanks

Upvotes: 1

Views: 8042

Answers (3)

msarchet
msarchet

Reputation: 15242

You could use a static (Shared in VB .NET) object

Example

Public Class SessionInformation

   Public Shared Property UserPassword As String

End Class

You can then access this by calling

SessionInformation.UserPassword

Since there seems to be some concerns revolving around whether or not this is a valid implementation I will explain why this is not the best idea.

This creates a single instance of SessionInformation which means that if it is changed anywhere in the program it affects the rest of the program.

Maintaining object persistence can be difficult if you aren't using a database (SQL, Access, a file, etc...) to maintain an out of memory copy of the object that you want to retrieve at a later date. The easiest way to implement this would be to use a SQLCE database that live in your application folder and using standard T-SQL to store the information that you need. However in the case of a password this may be non-ideal due to security issues.

Or the better way for logging in and out user would be to make use of the System.Security.Principal Namespace to create a user for your application.

Upvotes: 6

Konrad Rudolph
Konrad Rudolph

Reputation: 545568

You don’t need an equivalent to the Session object in web applications. Sessions are only needed because web applications actually have to access variables across process boundaries (= a session in a web application encompasses multiple requests of a user to a web server, and historically each request started a new application!).

In a “normal” application, this isn’t the case – any non-local variable will do. In your particular case, it would make sense for the password form to have a property that contains the username. The user then enters their username and password and the caller of this password form can retrieve the username:

' The caller looks something like this:

Dim pw As New PasswordForm()
pw.ShowDialog() ' Display the dialog, and wait until the user has dismissed it.
Dim theUsername = pw.Username

Inside the PasswordForm, there is something like this:

Public ReadOnly Property Username() As String
    Get
        ' Return the value of the username textbox field.
        Return UsernameInput.Text
    End Get
End Property

We could get more sophisticated but this will do.

If you need to reuse the username across the application, chances are that you also need to share other information about the user (what are they working on? …). This, in short, is the state of the application and there is usually an object which represents that state. This would be the right place to store the username as well.

If your application only has one other form (the “main dialog”), then just use a private variable inside that form to store the username. No need for a global variable.

Upvotes: 1

gbianchi
gbianchi

Reputation: 2138

Just have a public variable on the forms, never unload the form, and get the data from that form using formname.variablename (define it as public at form level).

This even can be achieved with controls if you set them to public.

BEFORE THE FLAMES: this solves OP problems, whenever if this is optimal, good or anything else, is another problem.

Upvotes: 0

Related Questions