Beim ersten Start soll ein Popup mit Eingabefenster erscheinen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von HaRoWagner.

    Beim ersten Start soll ein Popup mit Eingabefenster erscheinen

    Hallo,
    wie gehe ich am besten vor, damit beim allerersten Start eines Programms eine Eingabemaske erscheint, indem der User eine Unique-ID eingeben muss (Passwort existiert bereits in der Datenbank), und nach dem bestätigen der ID sollen automatisch aus der Datenbank die dazugehörigen Informationen zur ID abgeholt werden.

    Die Unique-ID sollte möglichst gespeichert werden, damit man sie nicht jedes mal neu eingeben muss.

    Wie gehe ich da am besten vor?

    Vielen Dank für Hilfe!
    Wenn du schon eine Datenbank mit den Userdaten hast, würde ich dort die ID speichern (Auto_Increment sollte da ausreichen, da diese unique ist).
    Du musst bei deinem Programm eine Einstellung speichern, die beim ersten Start überschrieben wird.
    Solange sie nicht überschriebene ist, wird die Eingabemaske geöffnet -> Nur beim ersten Start, da danach die Einstellung überschrieben wird.

    Stichwort My.Settings!
    Okay, My.Settings klappt schonmal. Danke.

    Was muss ich denn nun tun, damit beim ersten Start ein Popup angezeigt wird?

    Praktisch sowas, aber mit einem Eingabefeld.

    If (lblAngemeldetBottomRight.Text = "") Then
    MsgBox("Bitte ID eingeben")
    End If

    Danke!!!!
    Wieso My.Settings()?

    Besser waere das Folgende (Ins Load-Event der Form packen):

    VB.NET-Quellcode

    1. If(Not(IO.File.Exists(IO.Path.Combine(Application.StartupPath, "firststart")))) Then
    2. IO.File.WriteAllText(IO.Path.Combine(Application.StartupPath, "firststart"), Nothing)
    3. ' Erster Start
    4. Else
    5. ' Programm wurde schon Mal gestartet
    6. End If
    moin moin,
    ich habs jetzt mal mit My.Settings probiert - das klappt soweit auch schon fast gut ;)

    Habs im Moment so gelöst:
    Über den Projektmappen Explorer Rechtsklick auf meinen Projektnamen (ganz oben) -> Hinzufügen -> Windows Form...

    Diesem Formular habe ich den Namen "uniqueID" verpasst, ein Eingabefeld und einen Button und dazu folgenden Code:

    Quellcode

    1. Public Class uniqueID
    2. Private Sub cmdUniqueID_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUniqueID.Click
    3. My.Settings.user_id = lblAngemeldetUserID.Text
    4. My.Settings.Save()
    5. Me.Hide()
    6. End Sub
    7. End Class


    Wird auch perfekt gespeichert.

    In meinem "Hauptformular" habe ich folgendes gemacht:

    Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. 'um die My.Settings wieder zu löschen nächste Zeile auskommentieren
    3. 'My.Settings.user_id = ""
    4. lblAngemeldetUserID.Text = My.Settings.user_id
    5. If (lblAngemeldetUserID.Text = "") Then
    6. uniqueID.Show()
    7. End If
    8. End Sub


    Das Blöde ist nun aber folgendes:
    In meinem Hauptformular wird das Label mit der ID nicht sofort aktualisiert, sondern erst beim nächsten Start.

    Mein Hauptformular heisst LANClient. Ich habe testweise auch schon folgendes probiert, leider ohne Erfolg:

    Quellcode

    1. Public Class uniqueID
    2. Private Sub cmdUniqueID_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUniqueID.Click
    3. My.Settings.user_id = lblAngemeldetUserID.Text
    4. My.Settings.Save()
    5. Me.Hide()
    6. LANClient.lblAngemeldetUserID.Refresh()
    7. LANClient.Refresh()
    8. End Sub
    9. End Class


    EDIT: Und noch eine Frage.... wie bekomme ich es hin, dass das Fenster "uniqueID" im Vordergrund ist, und dass das Hauptformular in der Zeit inaktiv ist? Soll halt im Hintergrund liegt, aber nicht benutzbar sein, solange wie noch keine Unique-ID eingegeben wurde.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gammlo“ ()

    Hallo,

    Mein Hauptformular heisst LANClient. Ich habe testweise auch schon folgendes probiert, leider ohne Erfolg:
    LANClient.lblAngemeldetUserID.Text = My.Settings.user_id

    wundert mich aber, müßte es nicht
    FormTop.lblAngemeldetUserID.Text = My.Settings.user_id
    heißen?

    gammlo schrieb:

    EDIT: Und noch eine Frage.... wie bekomme ich es hin, dass das Fenster "uniqueID" im Vordergrund ist, und dass das Hauptformular in der Zeit inaktiv ist? Soll halt im Hintergrund liegt, aber nicht benutzbar sein, solange wie noch keine Unique-ID eingegeben wurde.
    .Showdialog hilft Dir weiter

    msdn.microsoft.com/de-de/library/c7ykbedk%28v=vs.100%29.aspx

    VG
    HaRo

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „HaRoWagner“ ()

    Für .ShowDialog() benötige ich ja eine neue Sub. Wie löse ich das denn, dass er automatisch prüft sobald das Formular geöffnet ist, ob lblAngemeldetUserID.Text = "" ist?

    Muss ich denn im Form1_Load die Sub aufrufen oder wie funktioniert das genau? Was muss ich dazu eingeben?

    Danke!
    ahh - verstehe, DANKE!

    Habs nun hinbekommen.


    EDIT:
    Kurze Frage nochmal.... mein Programmcode sieht nun so aus:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub cmdUniqueID_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUniqueID.Click
    2. progbarUniqueID.Value = 10
    3. My.Settings.user_id = lblAngemeldetUserID.Text
    4. My.Settings.Save()
    5. Dim con As New MySqlConnection
    6. Dim cmd As New MySqlCommand
    7. Dim reader As MySqlDataReader
    8. Dim var_username As String
    9. progbarUniqueID.Value = 30
    10. var_username = ""
    11. con.ConnectionString = "server=XXX;" _
    12. & "uid=XXX;" _
    13. & "pwd=XXX;" _
    14. & "database=XXX;"
    15. cmd.Connection = con
    16. cmd.CommandText = "SELECT * FROM fights WHERE id = " & My.Settings.user_id
    17. progbarUniqueID.Value = 60
    18. con.Open()
    19. progbarUniqueID.Value = 70
    20. reader = cmd.ExecuteReader()
    21. progbarUniqueID.Value = 80
    22. reader.Read()
    23. progbarUniqueID.Value = 90
    24. Try
    25. var_username = reader("username")
    26. LANClient.lblAngemeldetMiddle.Text = var_username
    27. Catch ex As Exception
    28. 'Hier brauche ich noch sowas wie "return false", damit das Fenster zur Unique-Eingabe noch geöffnet bleibt.
    29. MsgBox("Falsche Unique-ID")
    30. End Try
    31. progbarUniqueID.Value = 100
    32. reader.Close()
    33. con.Close()
    34. Me.Hide()
    35. End Sub


    Wenn eine falsche Unique-ID eingegeben wurde, kommt jetzt zwar die Meldung, aber das Fenster zur Eingabe der Unique-ID verschwindet. Was muss ich tun, damit das Fenster zur Unique-ID Eingabe nicht verschwindet sondern dass man ERST eine gültige Unique-ID eingeben muss um fortzufahren?

    Danke!


    EDIT: Habe mal etwas gegoogled nach Error Handling. Was wirklich passendes habe ich nicht gefunden. Habs nun so gelöst, funktioniert auch:

    VB.NET-Quellcode

    1. Try
    2. var_username = reader("username")
    3. LANClient.lblAngemeldetMiddle.Text = var_username
    4. Catch ex As Exception
    5. MsgBox("Ungültige Unique-ID")
    6. LANClient.Close()
    7. End Try


    Dann muss der User das Programm halt nochmal neu ausführen.

    EDIT2: Doch doof, wenn man das Fenster zur Unique-Eingabe canceld, kommt ja trotzdem das Hauptfenster.



    Edit by LaMa5:
    - Bitte keine Doppelpost's, es gibt eine 'Bearbeiten' Funktion (Boardregeln §4.1e)
    --> Beiträge zusammengefügt.
    - VB-Tag eingefügt, anstatt CODE-Tag
    - bei langen Quelltexten, Fehlermeldungen etc. bitte den Expander verwenden
    --> Expander eingefügt

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „LaMa5“ ()

    Ich hatte so etwas in der Art mal so gelöst:
    In der Hauptform hatte ich im Form.Load ein

    VB.NET-Quellcode

    1. Me.Opacity = CDbl(0)
    und eine globale Variable definiert (also Public).

    Wenn das modale Fenster jetzt geschlossen wird ohne dass der User eine Berechtigung nachgewiesen hat, dann wurde die Variable nicht WAHR und das Hauptform beendete sich auch.
    Im anderen Fall wurde die Opacity auf 100 (Prozent) gestellt.

    Das so im kurzen dazu, ob's schön ist .. naja. Es geht aber Sicher ist das mit Sicherheit auch nicht :)
    Ich benutze lieber Opacity als .Hide, da der Wechsel viel schneller von statten geht.

    Nächtle,
    HaRo
    Aber der Prozess läuft doch immer noch weiter?! Außerdem kann man das Programm doch so überhaupt nicht mehr beenden, außer über den Taskmanager - schließlich sieht man ja nichts mehr. Oder bin ich gerade aufem falschen Dampfer?

    Danke!