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();
}
}
}
}
}
}