Zugriff auf eine Variabel in einer Klasse

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Zugriff auf eine Variabel in einer Klasse

    Hi Leute,

    ich habe ein kleines Problem. Ich habe eine neu Klasse im meinem Projekt angelegt ("Werte") und eine variabel darin deklariert ("zahl"). Jetzt wollte ich, wenn ich auf Button auf Form1 drück das es einen Wert in diese Variable schreibt, aber ich bekomm es einfach nicht hin :pinch: . Auch googel und Forum suche hat leider nichts ergeben



    mfg
    Nimm lieber eine Property als eine Variable

    VB.NET-Quellcode

    1. Public Class Werte
    2. Private _Zahl as Integer
    3. Public Property Zahl as Integer
    4. Get
    5. Return _Zahl
    6. End Get
    7. Set(byval value as integer)
    8. _Zahl = value
    9. End Set
    10. End Class


    Form:

    VB.NET-Quellcode

    1. Private Sub Button klick (....)
    2. Dim a as new Werte
    3. a.Zahl = 1
    4. End Sub


    Wichtig hierbei sind die Zugriffsmodifier.
    Private sieht man nur innerhalb der Klasse
    Public sieht man auch wenn man eine Instanz der Klasse erstellt (Diese 2 Modifier genügen für den Anfang).

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Danke erstmal für die schnelle Antwort :) .

    Also rein schreiben ging erstmal..aber wenn ich mir das dann wieder auslesen will funktioniert es noch nicht richtig :pinch: .

    ich hab mir das so gedacht:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim b As New WerteMessageBox.Show(b.Zahl.ToString())
    3. End Sub


    Mir gibt er aber 0 aus obwohl ich vorher die 1 in Zahl geschrieben habe ?( .



    Gesammter Code:

    VB.NET-Quellcode

    1. Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim a As New Werte
    3. a.Zahl = 1MessageBox.Show(a.Zahl.ToString())
    4. End Sub
    5. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    6. Dim b As New WerteMessageBox.Show(b.Zahl.ToString())
    7. End Sub


    mfg ;)
    Irgendwie gibt dein Code Null Sinn.

    Wieso übergibst du der Instanzierung deiner Klasse die Property der eigenen Klasse?? b.Zahl ist natürlich noch 0 weil b.Zahl noch nicht instanziert wurde. Zudem sollte eine Klasse doch ihre Werte wissen und diese musst du nicht nochmal mit übergeben.

    Vlt. erzählst du uns lieber was du da genau realisieren möchtest.


    Okay wegen der falschen Code Formatierung habe ich derbe gefailt und dachte WerteMessageBox wär ne Klasse -.-
    Ja sowas kommt davon wenn man nicht die VB-Tags richtig benutzt.

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

    @TE: so wie du ihn eingestellt hast, kompiliert dein Code nicht.
    VB-Tag richtig benutzen

    dann sähe es so aus:

    VB.NET-Quellcode

    1. Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim a As New Werte
    3. a.Zahl = 1
    4. MessageBox.Show(a.Zahl.ToString())
    5. End Sub
    6. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    7. Dim b As New Werte
    8. MessageBox.Show(b.Zahl.ToString())
    9. End Sub

    Und dann trifft picoflops epische ( :thumbsup: ) Erklärung zu, dasses Unsinn ist zu denken, wenn du in Button1.Click einer Instanz a eine Zahl zuweist, dass du diese Zahl dann in Button2.Click aus einer anneren Instanz auslesen kannst.

    Wenn du in Button2.Click die in Button1.Click geschriebene Zahl auslesen willst, mußt du dafür sorgen, dass beide Button.Clickse dieselbe Werte-Instanz benutzen - nicht jeder eine eigene.
    Also ist "a" jetzt eine Instanz von "Zahl" (ünglückliche Namenswahl meinerseits ;) ), d.h dass der Wert 1 jetzt in dieser Instanz ist und ich die immer nur die Instanz aufrufen muss wenn ich diesen Wert habe ?

    Also so habe ich es jeztz verstanden.. :S .



    Dank nochmal an die Antworten.



    mfg

    fichz schrieb:

    VB.NET-Quellcode

    1. Private _Zahl as Integer
    2. Public Property Zahl as Integer
    3. Get
    4. Return _Zahl
    5. End Get
    6. Set(byval value as integer)
    7. _Zahl = value
    8. End Set
    Jo, und wenn man nicht so auf Tipparbeit steht und den Getter/Setter nicht braucht, der kann auch eine Automation Property verwenden.

    VB.NET-Quellcode

    1. Public Property Zahl as Integer
    Von meinem iPhone gesendet
    Anzumerken hierbei ist, dass diese Variante nur dann Sinn ergibt, wenn man im Get/Set Teil keine Logik einbaut.

    lg

    EDIT: Übersehen, dass dies bereits in @nikeee13: Post steht.
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

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