Dynamische Objekte?!?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Phil.

    Dynamische Objekte?!?

    Hi,

    ich sehe wahrscheinlich den Wald vor lauter Bäumen nicht, aber ich bekomme einfach nicht raus, wie man unter VB dynamische Objekte erzeugt. ?(
    Also... wen ich unter VB ein Objekt erzeugen will, so deklariere ich (z.B.) mit:

    Quellcode

    1. Dim Object As MeineKlasse

    eine Objektvariable und mit

    Quellcode

    1. Object = New MeineKlasse

    erzeuge ich das Objekt.
    Soweit so gut, aber was ist, wenn ich fortlaufend, also dynamisch, Objekte erzeugen will? ?(
    Ich müsste dann ja schon im Vorfeld wissen, wie ich diese nenne, und was noch viel abstruser ist, ich müßte sie auch vorher deklarieren?!? 8o
    In C++ kann man Objekte "mit Variablen" erzeugen, das Objekt trägt dann den Namen des Varibleninhaltes.
    Ich kann also dynamische Objekte dadurch erzeugen, dass ich eine Integer Variable initialisiere (z.B. mit 0) und diese einfach inkrementiere und aus dieser kann man dann wieder ein Objekt erzeugen.
    Der Zugriff auf die einzelnen Ojekte wäre dann der im Moment der Objekterzeugung, der Variablen zugewiesene, Integerwert . (Ich hoffe ihr könnt mir folgen... :rolleyes: ...)
    Bei VB vermisse ich das, oder ich denke zu kompliziert... ?(
    Ich habe irgendwo gelesen, dass man auch eine Objektvariable erzeugen kann:

    Quellcode

    1. Dim ObjektX As Object

    Aber ich versteh nicht, wie ich mit dieser, ohne aufwendiges Referenzkopieren, mehrere Objekte einer Klasse erzeugen kann?!? ?(
    Ich kann ja auch dieses Objekt nicht einfach vervielfältigen... oder...?!? ?(
    Na ja, wie auch immer... ich steh grad voll auf dem Schlauch und ich wäre echt dankbar, wenn mir jemand runderhelfen könnte.

    Viele Grüße
    André
    Hi!

    In C++ ist es auch nicht anders; Eine Instanz auf den Heap erstellen geht sehr ähnlich:

    Quellcode

    1. // C++:
    2. myClass myInstance = new myClass(Parameters);

    VB.NET-Quellcode

    1. 'VB.net:
    2. Dim myInstance as myClass
    3. myInstance = new myClass(Parameters)
    4. 'oder kürzer:
    5. Dim myInstance as new myClass(Parameters)


    Eine Object-Variable entspricht etwa einem void-Pointer in C++. Man muss sie hald nicht dereferenzieren und nicht casten.

    Um mehrere Instanzen "in einer Reihe" zu erstellen, mussst du aufs Array oder ne Hash-/Linked-List zurück greifen.
    Beim Array kannst du die mit einer For- oder Foreach-Schleife instanzieren:

    VB.NET-Quellcode

    1. Dim myInstances(7) as myClass
    2. Foreach Instance as myClass in myInstances
    3. Instance = new myClass(Parameters)
    4. Next Instance


    Bei Listen kannst du entweder auch eine foreach-Schleife verwenden oder die Objekte direkt vorm Hinzufügen instanzieren:

    VB.NET-Quellcode

    1. For i as Integer = 1 to 100
    2. myList.Add(new myClass(Parameters))
    3. Next i


    Um eine Instanz zu kopieren / klonen, musst du dir selber eine Methode (CopyTo(newObject) oder CopyFrom(oldObject)) schreiben.


    Die einzige "Lücke", die ich hier finde ist, dass es keine Pointer gibt, die man inkrementieren kann.


    so long..
    Andy
    also ich persönlich mach das immer so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. For i As Integer = 1 To 5
    3. Dim box As New TextBox
    4. With box
    5. .Name = String.Format("tb{0}", i)
    6. .Text = String.Format("Textbox Nr. {0}", i)
    7. .Tag = 999
    8. .Top = 20 * i
    9. .Left = 15
    10. .Width = 100
    11. .Height = 15
    12. End With
    13. Me.Controls.Add(box)
    14. Next
    15. End Sub
    16. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    17. Dim aCurrentCtrl As Object
    18. Dim aCurrentTextbox As TextBox
    19. For Each aCurrentCtrl In Me.Controls()
    20. If TypeOf aCurrentCtrl Is TextBox Then
    21. If aCurrentCtrl.tag = 999 Then
    22. aCurrentTextbox = DirectCast(aCurrentCtrl, TextBox)
    23. aCurrentTextbox.Text = ""
    24. End If
    25. End If
    26. Next
    27. End Sub


    button1 erstellt 5 textboxen mit inhalt. außerdem wird im tag 999 hinzugefügt, damit du später die dynamisch erstellten textboxen wieder erkennst.
    button2 setzt den text der textboxen zurück.

    in der ersten for-schleife kannst du dann einfach die 5 an die gewünschte zahl anpassen (kann natürlich eine andere variable sein, die zb von den benutzereingaben abhängt)
    Hi,

    vielen Dank für die Antworten.

    Werde sie mir in den nächsten Tagen mal genau ansehen, hab leider vor Mittwoch alles voll mit Terminen. Melde mich dann wieder!
    Nochmals vielen Dank für die schnelle Hilfe!

    Viele dankbare Grüße
    André
    Original von Mad Andy
    In der FAQ steht, wie man die Steuerelemente über eine Hashtable / Arraylist wieder erkennt - ist deutlich komfortabler :)


    Oh, werde ich mir mal bei Gelegenheit anschauen 8)


    Original von Mad Andy
    Ich dachte eigentlich es geht allgemein um Objekte und nicht um Steuerelemente.


    Oh, stimmt. Habe nur "dynamisch erstellen" gelesen rolleyes: