Avatar billede mrpalermo Nybegynder
21. september 2005 - 00:20 Der er 11 kommentarer og
1 løsning

Newbie spørgsmål om globale variabler

Hej...

Jeg er ny på VB.NET fronten, så dette spg. er muligvis meget enkelt.

Jeg har lavet en startdialog, som er en login dialog, hvor der slåes op i en database på brugernavn+password. En login funktion retunerer UserId, og hvis dette er større end 0, åbnes hoved dialog boksen.

Hvordan pokker gør man det UserId "globalt" så jeg ved hvem jeg har med at gøre i de efterfølgende dialoger? I gamle asp dage brugte jeg somregel en session("UserId") - så i bund og grund søger jeg efter en tilsvarende ting, eller blot forklaret hvordan man gør i stedet.
Avatar billede arne_v Ekspert
21. september 2005 - 01:28 #1
Hvis det er ASP.NET kan du stadig bruge Session.
Avatar billede arne_v Ekspert
21. september 2005 - 01:29 #2
Hvis det er en windows app har du flere muligheder:
  - gemme i en public shared property
  - singleton pattern
  - overføre argumenter
Avatar billede mrpalermo Nybegynder
21. september 2005 - 01:47 #3
Hej arne.

Dig kan man altid regne med :)

Det er en win appl.

Den første mulighed lyder umiddelbart til at finde ud af, men resten har jeg aldrig hørt om. På sigt skal jeg have lavet en user klasse, så jeg kunne godt tœnke mig at høre din mening om hvordan sådan en skal håndteres efter en login dialog.Skal hele user objektet gøres public shared osv...?
Avatar billede arne_v Ekspert
21. september 2005 - 01:57 #4
ja

og du bør absolut bruge en property til at styre tilgangen
Avatar billede mrpalermo Nybegynder
21. september 2005 - 02:07 #5
Takker. Jeg prøver senere på dagen. Skal lige have en time på øjen
Avatar billede mrpalermo Nybegynder
21. september 2005 - 10:00 #6
Hej Arne

Er vi ude i noget alla http://eksperten.dk/spm/503310 ??
Avatar billede arne_v Ekspert
21. september 2005 - 13:55 #7
ja
Avatar billede mrpalermo Nybegynder
21. september 2005 - 23:49 #8
Nu har jeg kæmpet med at strikke en singleton klasse sammen, men det går ikke så godt.

Hvis jeg hæver point til 100, kan du så lave et klasse eks., som understøtter følgende?

Singleton klassen skal hedde:

CurrentUser


Idéen er, at efter en bruger er godkendt via login & pass,

Dim UserId as Integer = EnKlasse.Login("login","Pass")

skal CurrentUser klassen initieres vha.:

Dim User as new CurrentUser
User.Initialize(UserId)

User Objektet skal indeholde:


User.GetObject()
User.Userid (readonly)
User.Username (readonly)

Man skal ikke kunne sætte værdierne (Userid & Username) "udefra". De skal kun kunne sættes når man første gang initierer CurrentUser klassen.

Giver det noget af det jeg skriver mening? Og er det noget du vil hjælpe mig med?
Avatar billede mrpalermo Nybegynder
22. september 2005 - 00:13 #9
Jeg er iøvrigt kommet frem til følgende:

Imports system

Class CurrentUser
    Private _UserId As String = String.Empty
    Private _UserName As String = String.Empty


    Private Shared _CurrentUser As CurrentUser

    Private Sub New(ByVal NewUserId)
        Try
            _UserId = NewUserId
            If NewUserId = 1 Then
                _UserName = "Peter Schmidt"
            ElseIf NewUserId = 2 Then
                _UserName = "Alex Frederiksen"
            End If
        Catch ex As Exception
            Throw New Exception("Error initiating CurrentUser object", ex)
        End Try

    End Sub


    Public Shared Function Instance(ByVal NewUserId) As CurrentUser
        If _CurrentUser Is Nothing Then
            _CurrentUser = New CurrentUser(NewUserId)
        End If
        Return _CurrentUser
    End Function

    Public ReadOnly Property UserName() As String
        Get
            Return _UserName
        End Get
    End Property

End Class
Avatar billede mrpalermo Nybegynder
22. september 2005 - 00:41 #10
Har løst det...men ved ikke hvor "rigtigt" det er...

Imports system

Class CurrentUser
    Private _UserId As String = String.Empty
    Private _UserName As String = String.Empty


    Private Shared _CurrentUser As CurrentUser

    Private Sub New(ByVal NewUserId)
        Try
            _UserId = NewUserId
            If NewUserId = 1 Then
                _UserName = "Peter Schmidt"
            ElseIf NewUserId = 2 Then
                _UserName = "Alex Frederiksen"
            End If
        Catch ex As Exception
            Throw New Exception("Error initiating CurrentUser object", ex)
        End Try

    End Sub


    Public Shared Function CreateUserObjectByUserId(ByVal NewUserId) As CurrentUser
        If _CurrentUser Is Nothing Then
            _CurrentUser = New CurrentUser(NewUserId)
        End If
        Return _CurrentUser
    End Function

    Public Shared Function GetUserObject() As CurrentUser
        If _CurrentUser Is Nothing Then
            _CurrentUser = New CurrentUser(0)
        End If
        Return _CurrentUser
    End Function

    Public ReadOnly Property UserName() As String
        Get
            Return _UserName
        End Get
    End Property

End Class

Initierer med: "namespace".CurrentUser.CreateUserObjectByUserId(5)
Og bruger objektet efterfølgende med (fx. UserName): "namespace".CurrentUser.GetUserObject.UserName

Er det helt galt?
Avatar billede arne_v Ekspert
22. september 2005 - 14:31 #11
efter 5 sekunder skim ser det Ok ud

(jeg formoder at du har læst http://www.eksperten.dk/artikler/205)
Avatar billede arne_v Ekspert
04. november 2005 - 20:17 #12
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester