egy hazafi Creative Commons License 2017.10.23 0 0 1084

Sziasztok!

A következő probléma megoldásához keresek segítséget: kirajzolok 10 db négyzetet véletlen helyekre a programablakban, ezek a jatekos-ok. Enter lenyomására szeretném törölni ezek közül azokat, amelyek X koordinátája >= 100. Ezt a gombnyomas() függvény intézné, viszont amikor ez bekövetkezik, a következő hibaüzenetet kapom:

"System.ArgumentOutOfRangeException: Az index az engedélyezett tartományon kívül esett. Az index nem lehet negatív, és kisebbnek kell lennie a gyűjtemény méreténél."

Viszont amikor átírom a gombnyomas()-ban a for ciklus értékét 9 helyett 5-re, nem jelentkezik ez a hiba - viszont nyilván nem fut le az összes négyzeten a ciklus:

for (int i=0;i<=5;i++) ...

Mi lehet a baj és mi a megoldása?

Íme a teljes kód:

 

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace valami
{
    public class jatekos
    {
            public int xhely;
            public int yhely;
            public int szel;
            public int mag;
            public jatekos()
            {
                szel=50;
                mag=50;
            }
    }
    
    public partial class MainForm : Form
    {
        List<jatekos> jatekosok=new List<jatekos>();
        
        public MainForm()
        {
            InitializeComponent();
            Random vsz=new Random();
            for (int i=0;i<=9;i++)
            {
                jatekosok.Add(new jatekos() {xhely=vsz.Next(1,200),yhely=vsz.Next(1,200)});
            }
            Paint += new PaintEventHandler(Rajzol); 
            KeyDown += new KeyEventHandler(gombnyomas);
        }
        
        void Rajzol(object sender, PaintEventArgs e) 
        { 
            foreach (jatekos ujjatekos in jatekosok)
            {
                e.Graphics.FillRectangle(Brushes.BlueViolet,new Rectangle(ujjatekos.xhely,ujjatekos.yhely,ujjatekos.szel,ujjatekos.mag));
            }
        }
            
        void gombnyomas(object sender, KeyEventArgs e) 
        { 
            if (e.KeyCode==Keys.Enter
            { 
                for (int i=0;i<=9;i++) //Itt írom át a 9-et 5-re!
                {
                    if (jatekosok[i].xhely>=100)
                    {
                        jatekosok.RemoveAt(i);
                        Invalidate();
                    }
                }
            
            }
        }
    }
    
}