Problem bei mehrfachen Listzugriff (Rectangle)

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Vb K1ng.

    Problem bei mehrfachen Listzugriff (Rectangle)

    Hallo liebe Community-User,

    Ich habe folgendes Problem:
    • einen Timer(1ms)
    • paint-event
    • clickEvent
    In den drei Events wird gleichzeitig auf eine List(Of Rectangle) zugegriffen.
    Im paint-und-timer_tick- event wird in einer Schleife auf die List zugegriffen.

    Dies verursacht eine ArgumentOutOfRange Exception.
    Code:

    VB.NET-Quellcode

    1. Dim playerRect1Shoots As New List(Of Rectangle)
    2. Private Sub game_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    3. engine.prepare(e.Graphics)
    4. For i = 0 To playerRect1Shoots.Count - 1
    5. engine.fillBlueEllipse(playerRect1Shoots(i))
    6. Next
    7. engine.done()
    8. End Sub
    9. Private Sub game_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
    10. Dim shoot As New Rectangle(player1.Location.X + player1.Width, player1.Location.Y + (player1.Height / 2), 20, 20)
    11. playerRect1Shoots.Add(shoot)
    12. End Sub
    13. Private Sub invalidateTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles invalidateTimer.Tick
    14. playerRect1Shoots.RemoveAt(i)
    15. Invalidate()
    16. End Sub

    Hoffe mir kann jemand helfen.

    Danke im Vorraus,
    VB K1ng

    VB.NET-Quellcode

    1. Private Sub invalidateTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles invalidateTimer.Tick
    2. If (Not winner = "n") Then
    3. invalidateTimer.Stop()
    4. End If
    5. If (myRectangle = 1) Then
    6. For i = 0 To playerRect1Shoots.Count - 1
    7. If (playerRect1Shoots(i).Location.X >= Me.Width - player2.Width)<-fehlermeldung Then
    8. playerRect1Shoots.RemoveAt(i)
    9. Else
    10. playerRect1Shoots(i) = New Rectangle(New Point(playerRect1Shoots(i).Location.X + 3, playerRect1Shoots(i).Location.Y), New Size(20, 20))
    11. End If
    12. Next
    13. End If
    14. Invalidate()
    15. End Sub

    Vatter schrieb:

    Welche Zeile wird bei der Fehlermeldung markiert?


    ArgumentOutOfRange Exception deutet darauf hin, dass bei irgendeiner Aktion ein Index verwendet wird, der nicht in der Liste drin ist.

    Schöner ist bei einer List(Of T) übrigens Foreach

    VB.NET-Quellcode

    1. Foreach temp as rectangle in ListeMitRectangles
    2. If temp.Location = wasauchimmer Then
    3. Remove(temp)
    4. Else
    5. 'Was sonst
    6. EndIf
    7. Next
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

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