Klassen Variable über Forms

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Klassen Variable über Forms

    Hey. In einem Form lad ich aus ner .bin meine zuvor gespeicherte daten einer klasse
    wenn ich diese in der selben form ausgeben will ist das kein problem.

    auf ner anderen form kennt er die variable jedoch nicht mehr.
    dim reicht leider anscheinend nicht. Wie macht man das denn?

    Mfg

    EDIT: vllt bisschen unglücklich formuliert. Die Klasse soll formübergreifend verfügbar sein.

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

    die visual basic oberfläche erschlägt mich nochn bisschen, ka ob ichs richtig versteh^^

    ist form1 z.b. wos geladen wird

    ################################

    Dim user As CUser


    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Try
    user = CSystem.loadUser(ListBox1.SelectedItem)
    MsgBox("Profil erfolgreich geladen", , "Erfolgreich")
    Me.Close()
    Catch ex As Exception

    End Try

    End Sub

    ###############

    form2


    Dim user As CUser

    Public Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Try

    With user

    TextBox1.Text = .Username

    End With

    Catch ex As Exception

    End Try

    End Sub


    irgendwie stimmt da natürlich was nicht,^^ mir ist aber nicht klar was^^
    Hey, hab jetzt irgendwo was gefunden, das wen man in VB variabeln Formübergreifend haben will man module benutzen muss?

    kann wer kurz erklären wie da die syntax aussieht, oder wie ich sonst eine klasse formübergreifend übergeben kann?!


    mfg
    hmm, nicht sicher dass ich Dich richrtig verstanden habe, aber:

    In Deinem Beispiel oben liegt Deine Variable user in Deiner Form1, also musst Du sie von Form5 aus auch mit Form1.user ansprechen.

    Module sind Klassen, bei denen alle Variablen/Funktionen statisch ( =shared) sind. Du kannst die Variablen also mit dem Klassennamen modulname.variable ansprechen.
    Ok nochmal genauer :D

    Ich öffne in Form1 mit nem Filestream ne .bin datei. In der bin Datei ist die Klasse CUser. In Form1 kann ich ohne Probleme dann auf die geladenen Werte zugreifen. user.Username z.B.

    Ich möchte eben, dass ich auch in Form2 auf diese geladene Klasse die ich in user gespeichert habe zugreifen kann. Ich kann das nicht statisch machen, weil es davon abhängt welche Datei/aus welchem Pfad der Benutzer die .bin Datei lädt.

    Hoffe ist jetzt bisschen verständlicher.

    Mfg

    P.S.: Hab bei google leider immer noch nix gefunden, was mir die Module verständlich macht :P
    In Form1 deklarieren mit

    VB.NET-Quellcode

    1. Public user as CUser

    In form2 darauf zugreifen mit

    VB.NET-Quellcode

    1. form1.user


    Wenn Du eine Klasse hast, z.B. Settings, die in Deinem ganzen Programm verfügbar sein sollen ohne dass Du sie ständig übergeben musst, so wählst Du am besten eine Klasse die nur statische Variablen enthält:

    VB.NET-Quellcode

    1. Class Settings
    2. Public Shared meineVariable As String = "irgendwas"
    3. End Class

    Dann kannst Du auf meineVariable in Deinem ganzen Programm mit dem Klassennamen zugreifen, z.B. in Form5 mit

    VB.NET-Quellcode

    1. Debug.Print(settings.meineVariable)

    Wenn Du statische Methoden/Variablen noch nicht verstanden hast, dann sagen Dir Module auch noch nichts.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Kangaroo“ () aus folgendem Grund: Erklärung Shared hinzugefügt

    Wie ichs mache klappts nicht. Denke da ist nochn kleiner dummer fehler :/


    Form1

    VB.NET-Quellcode

    1. Public user As CUser



    VB.NET-Quellcode

    1. Try
    2. user = CSystem.loadUser(ListBox1.SelectedItem)
    3. MsgBox("Das Profil " & user.Username & " wurde erfolgreich geladen!", , "Erfolgreich")
    4. TextBox1.Text = ListBox1.SelectedItem
    5. MsgBox(ListBox1.SelectedItem)
    6. Me.Visible = False
    7. Catch ex As Exception
    8. MsgBox(ex.Message)
    9. End Try




    Form2

    VB.NET-Quellcode

    1. Try
    2. MsgBox(Form4.user.Username)
    3. user = CSystem.loadUser(Form4.user.Username)
    4. Me.TextBox1.Text = Form4.user.Username
    5. Catch ex As Exception
    6. MsgBox(ex.Message)
    7. End Try

    Helgon schrieb:

    Wie ichs mache klappts nicht. Denke da ist nochn kleiner dummer fehler :/

    Denke da ist nicht nur ein kleiner dummer Fehler, sondern grundsätzlich eine Verständnisfrage. Es sieht so aus als hättest Du auf jeder Deiner unzähligen Formen die Klasse "user" deklariert ???? Und die wird dann auch noch wieder und wieder aus der Serialisierung geladen ? Macht alles irgendwie keinen Sinn.

    Wie sollen wir Dir da helfen wenn das Problem schon einmal nicth klar ist ...