Control Array bis jetzt erstellte controls überprüfen

  • VB.NET

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

    Control Array bis jetzt erstellte controls überprüfen

    Wie der Titel sagt möchte ich die Controls eines Arrays überprüfen

    VB.NET-Quellcode

    1. If Borturm_Array(i_bohrturm).Location.X = Bohrturm_Ghost.Location.X Then
    2. MsgBox("Blub")
    3. End If


    Bekomme nur "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." ausgegeben
    Auch "Borturm_Array(1).Location.X" klappt nicht.

    Borturm mit und ohne h ist gewolt :D

    VB.NET-Quellcode

    1. For i = 0 To Borturm_zähler
    2. If Borturm_Array(i_bohrturm).Location.X = Bohrturm_Ghost.Location.X Then
    3. MsgBox("Blub")
    4. End If
    5. Next


    VB.NET-Quellcode

    1. Private Borturm_Array(100) As PictureBox 'Controll Array


    Und Bohrturm_Ghost ist eine Picturebox die schon im Designer erstellt wurde.
    Es sollen alle Pb's die von den 100 schon erstellt wurden überprüft werden.
    Borturm_zähler wird erhöt wenn ein Borturm_Array(i_bohrturm) erstellt wird.

    VB.NET-Quellcode

    1. Panel2.Controls.Add(Borturm_Array(i_bohrturm))
    2. Borturm_zähler = Borturm_zähler + 1

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

    Der Wert in Location ist ReadOnly. Sie dir mal folgenden Beitrag an. (Bin vor kurzem auch drübergeflogen).

    Abgesehen davon würdest du in der Zeile

    VB.NET-Quellcode

    1. If Borturm_Array(i_bohrturm).Location.X = Bohrturm_Ghost.Location.X Then

    immer mit der selben Picbox arbeiten, da sich i_bohrturm (zumindest innerhalb dieser Schleife) nicht ändert.
    das stimmt nicht, da er eine for schleife verwendet, zählt diese automatisch...der befehl "variable +1" ist somit überflüssig.

    zuerstmal sollte er bei der deklaration mit new arbeiten

    VB.NET-Quellcode

    1. Private Borturm_Array(100) As New PictureBox 'Controll Array
    Warum ist die Schleife Endlos???

    VB.NET-Quellcode

    1. For i = 0 To Borturm_zähler
    2. ...
    3. Next


    Muss normallerweise jetzt nicht die Schleife (wenn Borturm_zähler = 7 ist) 8 mal durchlaufen und Fertig???

    Und wenn ich "Private Borturm_Array(100) As PictureBox 'Controll Array" in "Private Borturm_Array(100) As New PictureBox 'Controll Array" ändere streicht er mir New an und schlägt mir vor es zulöschen.
    @doci

    VB.NET-Quellcode

    1. For i = 0 To Borturm_zähler
    2. If Borturm_Array(i_bohrturm).Location.X = Bohrturm_Ghost.Location.X Then
    3. MsgBox("Blub")
    4. End If
    5. Next


    In dieser Schleife, angenommen Borturm_zähler ist gleich 4, wird die If-Anweisung 5 mal durchlaufen. Bei allen diesen 5 Durchläufen hat i_bohrturm denselben Wert, folglich spricht er immer dasselbe Control an.
    Ok darum habe ich mich gekümmert (das er nicht immer denselben anspricht ... )

    Doch warum führt dieses If zum Fehler?

    If Borturm_Array(i_bohrturm).Location.X = Bohrturm_Ghost.Location.X Then
    MsgBox("Blub")
    End If


    Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt?
    Hallo Eistee,

    vermutlich hat dein Array an diesem Index keinen Eintrag.
    Kannst du leicht prüfen, indem du einen Breakpoint setzt oder dir im Fehlerfall das Ganze ansiehst.

    So schwer ist das doch nicht.

    Hat zum Beispiel dein Zähler den Wert 3 gibt es diesen Fehler wenn dein Array z.b. so aussähe

    array(0) = pb
    array(1) = pb
    array(2) = pb
    array(3) = nothing

    Gruss

    mikeb69
    Da mir aufgefallen ist das eine Kollisionsabfrage die so aussieht

    VB.NET-Quellcode

    1. If Borturm_Array(i_bohrturm).Location.X = Bohrturm_Ghost.Location.X Then
    schrott ist habe ich mal den alten Code von Mikeb69 rausgekramt :)

    Es wird überprüft ob sich Pictureboxen Verdecken:

    VB.NET-Quellcode

    1. Private Function check_Bohrturm_bauen(ByVal Borturm_Array ***(i_bohrturm_Fake)*** As Rectangle, ByVal Bohrturm_Ghost As Rectangle) As Boolean
    2. If Borturm_Array(i_bohrturm_Fake).Contains(Bohrturm_Ghost.Left, Bohrturm_Ghost.Top) Or _
    3. Borturm_Array(i_bohrturm_Fake).Contains(Bohrturm_Ghost.Left, Bohrturm_Ghost.Bottom) Or _
    4. Borturm_Array(i_bohrturm_Fake).Contains(Bohrturm_Ghost.Right, Bohrturm_Ghost.Top) Or _
    5. Borturm_Array(i_bohrturm_Fake).Contains(Bohrturm_Ghost.Right, Bohrturm_Ghost.Bottom) Then
    6. 'überlagernd
    7. Return True
    8. Else
    9. 'nicht überlagernd
    10. Return False
    11. End If
    12. End Function


    ***Arraygrenzen können nicht in Typbezeichnungen stehen.***

    Jetzt weiß ich nicht wie ich alle erstellten Pictureboxen überprüfen kann

    Edit: Bin sooo blöd einfach die "Arraygrenzen" löschen also überall (i_bohrturm_Fake) weg :D

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