Property mit Structure

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Property mit Structure

    Hallo Leute!
    Ich habe was vor, weiß aber wie ich
    es deklarieren soll bzw. ob das eigentlich möglich ist.
    Meine Vorstellung
    wäre

    VB.NET-Quellcode

    1. UserControl1.Eingabe.Wert1=
    2. 45
    3. UserControl1.Eingabe.Wert2= 25


    Ist das möglich wenn ja wie stelle ich es
    an?
    Habe zwar das gefunden

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Public Structure
    3. Eingabe
    4. Private vWert1 As Integer
    5. Private vWert2 As Integer
    6. Public
    7. Property Wert1()
    8. Get
    9. Return vWert1
    10. End Get
    11. Set(ByVal
    12. value)
    13. vWert1 = value
    14. End Set
    15. End Property
    16. Public Property
    17. Wert2()
    18. Get
    19. Return vWert2
    20. End Get
    21. Set(ByVal value)
    22. vWert2 =
    23. value
    24. End Set
    25. End Property
    26. End Structure
    27. End Class


    aber unter Form1
    ist zwar
    UserControl1.Eingabe
    sichtbar aber kein Wert1 oder Wert2 sichtbar
    Stattdessen sieht
    man
    Equals() oder ReferenceEquals()

    Danke im Voraus
    Du musst auch eine Variable vom Typ Eingabe innerhalb von UserControl1 erstellen, sonst weiß der Compiler ja nicht, was er ändern soll. Du kannst ja auch nicht sagen: Integer = 4, sondern Dim x As Integer: x = 4

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Public Structure Eingabe
    3. Private vWert1 As Integer
    4. Private vWert2 As Integer
    5. Public Property Wert1() As Integer
    6. Get
    7. Return vWert1
    8. End Get
    9. Set(value As Integer)
    10. vWert1 = value
    11. End Set
    12. End Property
    13. Public Property Wert2() As Integer
    14. Get
    15. Return vWert2
    16. End Get
    17. Set(value As Integer)
    18. vWert2 = value
    19. End Set
    20. End Property
    21. End Structure
    22. Public EingabeInstanz As Eingabe
    23. End Class

    und dann woanders:

    VB.NET-Quellcode

    1. Dim UC As New UserControl1
    2. Console.WriteLine(UC.EingabeInstanz.Wert1)


    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Stichwort Option Strict On
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo Leute!
    Ich habe ein kleines Problem mit dem Structure
    Ich kann ein wert setzen und wieder auslesen
    Aber wie stelle ich es an, das ich es den gesetzten wert an Textbox übergebe?

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Public Structure Eingabe
    3. Private vWert1 As Integer
    4. Private vWert2 As Integer
    5. Public Property Wert1() As Integer
    6. Get
    7. Return vWert1
    8. End Get
    9. Set(value As Integer)
    10. vWert1 = value
    11. End Set
    12. End Property
    13. Public Property Wert2() As Integer
    14. Get
    15. Return vWert2
    16. End Get
    17. Set(value As Integer)
    18. vWert2 = value
    19. End Set
    20. Me.TextBox1.Text = CStr(vWert2)
    21. End Property
    22. End Structure
    23. Public EingabeInstanz As Eingabe
    24. End Class

    Ich habe rote welle und eine Meldung "Anweisung darf nicht auserhalb eines Methodenrumpfs verwendet werden."
    Wie kann ich die werte weiter geben?

    tommy schrieb:

    Ich habe rote welle und eine Meldung "Anweisung darf nicht auserhalb eines Methodenrumpfs verwendet werden."
    Schaue dir ein mal ganz genau Zeile#20 an - die hat dort nichts verloren!
    z.B. im obigen Zusammenhang so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.TextBox1.Text = EingabeInstanz.Wert2.ToString
    3. End Sub

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „VB1963“ ()

    Wir reden glaube ich alle vorbei :)
    also ich habe ein Usercontrol

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Public Structure Eingabe
    3. Private vWert1 As Integer
    4. Private vWert2 As Integer
    5. Public Property Wert1() As Integer
    6. Get
    7. Return vWert1
    8. End Get
    9. Set(value As Integer)
    10. vWert1 = value
    11. End Set
    12. End Property
    13. Public Property Wert2() As Integer
    14. Get
    15. Return vWert2
    16. End Get
    17. Set(value As Integer)
    18. vWert2 = value
    19. End Set
    20. End Property
    21. End Structure
    22. Public EingabeInstanz As Eingabe
    23. End Class

    Und auf dem UserControl befindet sich auch ein TextBox

    Zuerst wollte ich das die Property zusammen gebündelt ist, was ich dank euch geschafft habe.
    Nun habe ich vor wenn dieser UserControl auf einem Form liegt
    und von dort ein wert zb: 9 eingegeben wird

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. UserControl11.Eingabe.Wert2= 9
    4. End Sub
    5. End Class

    Das der wert 9 auf dem Textbox der unter UserControl befindet übergeben wird.
    Nur ich habe nicht damit gerechnet, dass es so schwierig ist, der eingegebenen Wert unter Wert2 an die TextBox, der im UserControl befindet zu übergeben.

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

    Wenn Du schreibst: UserControl11.Eingabe.Wert2 = 9, dann wird der Property-Setter aufgerufen:

    VB.NET-Quellcode

    1. Public Property Wert2() As Integer
    2. '...
    3. Set(value As Integer)
    4. vWert2 = value
    5. End Set
    6. End Property

    Da kannst Du dann auch reinschreiben, dass der Text der UserControl-TextBox neu gesetzt/mit einem anderen Wert befüllt wird, also:

    VB.NET-Quellcode

    1. Public Property Wert2() As Integer
    2. '...
    3. Set(value As Integer)
    4. vWert2 = value
    5. TextBox1.Text = value.ToString()
    6. End Set
    7. End Property
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Mein Fehler. Nicht getestet. So ginge es z.B.:

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Public Structure Eingabe
    3. Private vWert1 As Integer
    4. Private vWert2 As Integer
    5. Private TextBox As TextBox
    6. Public Sub New(TB As TextBox)
    7. TextBox = TB
    8. End Sub
    9. Public Property Wert1() As Integer
    10. Get
    11. Return vWert1
    12. End Get
    13. Set(value As Integer)
    14. vWert1 = value
    15. End Set
    16. End Property
    17. Public Property Wert2() As Integer
    18. Get
    19. Return vWert2
    20. End Get
    21. Set(value As Integer)
    22. vWert2 = value
    23. TextBox.Text = value.ToString
    24. End Set
    25. End Property
    26. Public Sub LinkToTextBox(TB As TextBox)
    27. TextBox = TB
    28. End Sub
    29. End Structure
    30. Public EingabeInstanz As New Eingabe
    31. Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles Me.Load
    32. EingabeInstanz = New Eingabe
    33. EingabeInstanz.LinkToTextBox(TextBox1)
    34. 'oder
    35. 'EingabeInstanz = New Eingabe(TextBox1)
    36. End Sub
    37. End Class

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Es geht ja nur darum, dass die Structure-Instanz später weiß, welche TextBox sie manipulieren muss. Wie petaod schon schreibt. Das muss einmal klargestellt werden, dann läuft das auch für die Zukunft.
    Oder willst Du im Laufe des Programms auch die von der Structure-Instanz manipulierte TextBox ändern, also dass nicht mehr wie am Anfang TextBox1, sondern TextBox2 später geändert wird? Dann mach Dir ne Public Sub innerhalb von UserControl1, die dann eben EingabeInstanz.LinkToTextBox(DieNeueTextBox) aufruft. Wird zwar dann inhaltlich fragwürdig, was das Ganze werden soll, wenn's fertig ist, aber ist ja Dein Programm.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    tommy schrieb:

    aber wie schaffe ich es das ich es an TextBox übergeben kann?
    Vaporizeds Lösung, der Eingabe-Instanz eine Textbox zu übergeben, die zu manipulieren ist, ist zwar gangbar, geht aber bisserl in Richtung "objektorientiertes Spagghetti".

    Imo sauberer wäre, Das 'Eingabe'-Dingens würde das UserControl nicht kennen, und stattdessen würde mit Events gearbeitet. Wenn wolle gugge diese Tut: Alles über Events
    Zunächst mal würde ich aber unbedingt von Structure wechseln zu Class.
    Strukture werden bei jeder Zuweisung umkopiert, es entstehen also u.U. haufenweise solcher Objekte, und da kann überraschendes Verhalten auftreten.

    Eine Alternative zu einer eigenen EingabeKlasse mit Events wäre übrigens Databinding - damit würde man von diesem etwas eigentümlichen Konzept übergehen auf eine in .Net vorgesehene Standard-Technologie.

    Aber lieber erst die Frage, was konkret bezweckt wird - evtl. wäre was ganz anneres noch viel einfacher, und damit das sinnvollste.