Objekt-Liste/-Array erstellen und Objekte aus Liste ansprechen

  • VB.NET

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

    Objekt-Liste/-Array erstellen und Objekte aus Liste ansprechen

    Ich versuche gerade, eine reihe von Textboxen in einem Array zu speichern um später in einer Funktion, die Objekte etwa so aufzurufen: ... = ObjektArray(0).Text
    Kann mir jemand sagen wie ich das machen kann?
    @ErfinderDesRades Dieser Code geht vor die Hose { Nothing, Nothing, Nothing }, da er vor InitializeComponent() aufgerufen wird.
    @RW2003 Wenn Du dieses Array nur in einer Sub brauchst, lege es lokal an:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Textboxen As TextBox() = New TextBox() {TextBox1, TextBox2, TextBox3}
    3. ' mit Textboxen was tun
    4. End Sub
    oder Du musst es mach dem Aufruf von InitializeComponent() befüllen, z.B. so:

    VB.NET-Quellcode

    1. Public Textboxen As TextBox()
    2. Public Sub New()
    3. Me.InitializeComponent()
    4. Dim tb() = {Me.TextBox1, Me.TextBox2, Me.TextBox3}
    5. Me.Textboxen = tb
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke, hab mich wohl falsch ausgedrückt...
    Das Array zu füllen ist kein Problem, doch wie kann ich es dann verwenden?
    Versucht habe ich volgendes:

    VB.NET-Quellcode

    1. Variable = Objekte(c).Text

    wobei Objekte das TextboxenArray ist und c ein UInteger als zähler.
    Nur funktionieren tut das natürlich wieder nicht...
    könnt ihr mir dabei helfen?

    RW2003 schrieb:

    Nur funktionieren tut das natürlich wieder nicht...
    Wenn die Variable korrektr deklariert wurde und der Index c im gültigen Bereich ist, sollte es genau so funktionieren.
    Was genau geht nicht?
    Wie äußert sich das?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier ist mein Code:

    VB.NET-Quellcode

    1. Private Sub FelderFüllen()
    2. Dim Textboxen As TextBox() = New TextBox() {A1_1_1, A1_1_2, A1_1_3, A1_1_4, A1_1_5, A1_1_6, A1_1_7, A1_1_8, A1_1_9, A1_1_10, A1_1_11, A1_1_12, A1_2_1, A1_2_2, A1_2_3, A1_2_4, A1_2_5, A1_2_6, A1_2_7, A1_2_8, A1_2_9, A1_2_10, A1_2_11, A1_2_12}
    3. Dim c As UInteger = 0
    4. For z As Short = 0 To 11
    5. For x As Short = 0 To 11
    6. Felder(z)(x) = Textboxen(c).Text
    7. c += 1
    8. Next x
    9. Next z
    10. End Sub


    Leider gibt er nur eine NullReferenceException aus - {"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."}

    RW2003 schrieb:

    Leider
    hast Du uns die betreffende Zeile nicht markiert.
    Klick drauf und drück Shift+F9 und sieh Dir an, was genau da Nothing ist.
    Ein guter Einstieg, das Debuggen zu lernen :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich werd daraus nicht schlau....
    So weit ich das verstehe ist der Wert von dem TextBoxenArray der Text den ich eingegeben habe.
    Wenn ich zum Beispiel 5 in die Textbox eingebe, steht da, dass das TextboxArray(0)(0) = "5" wäre. Aber der Variable bzw. ich benutze ja ein 2. Array wird nichts zugewiesen.

    *Fehler ist übrigens in Zeile 6:

    VB.NET-Quellcode

    1. Felder(z)(x) = Textboxen(c).Text



    @RW2003 Dann ist offensichtlich die Variable Felder nicht instanziiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    oder Felder(z).

    Also es gibt in dem Ausdruck genau 4 Teil-Ausdrücke, die den Fehler verursachen, wenn sie auf Nothing stehen.
    (Davon scheiden zwei inzwischen aus):
    1. Felder, denn wenn Felder Nothing ist, kann man nicht Felder(z) abrufen
    2. Felder(z), denn wenn Felder(z) Nothing ist, kann man nicht Felder(z)(x) abrufen
    3. Textboxen, denn wenn Textboxen Nothing ist, kann man nicht Textboxen(c) abrufen
    4. Textboxen(c), denn wenn Textboxen(c) Nothing ist, kann man nicht Textboxen(c).Text abrufen
    Das Prinzip hängt mit dem Prinzip zusammen, dass in der Sprache zusammengesetzte Ausdrücke formuliert werden.
    Ist fürs Debuggen wichtig, zu verstehen, was ein Ausdruck ist, wann zusammengesetzt, und wie man ihn auseinandernehmen kann zu Analyse.

    Gugge auch das Video in Video-Tut: Welchen Datentyp hat das Objekt?
    Da gehts zwar nicht um die Nullref-Exception, aber das mit den zusammengesetzten Ausdrücken ist da ein Kernthema.
    Jou.
    @RW2003 Wie ist Felder ühaupt deklariert?
    Da die Dimensionen offensichtlich "rechteckig" sind, könntest Du da ein zweidimensionales Array anlegen:

    VB.NET-Quellcode

    1. Dim Felder(11, 11) As String
    2. Felder(11, 11) = "bla"
    3. MessageBox.Show(Felder(11, 11))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    OK ich hab mich wolh mit der 2. dimension vertahn. Ich versuche jetzt mal Felder (11,11) statt Felder()()....

    Vielen Dank jetzt funktioniert es :)

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