C# - ImageList komponens használata

forráskód letöltése
Az ImageList komponenst felhasználva képesek vagyunk arra, hogy több képet eltároljunk egy „tömbbe”, melyeket ezek után tetszőlegesen felhasználhatunk. Sok más komponens igényli is az ImageList használatát a képek megjelenítéséhez (pl.: ListView, TreeView), de akár saját magunk is felhasználhatjuk az így eltárolt képeket. Másik előnye e komponens használatának az, hogy az így eltárolt képek bekerülnek a készítendő EXE-be, így azokat nem kell a programunkkal együtt szállítanunk, ha azt egy másik gépen is futtatni szeretnénk.
Mellékelt példában egy olyan alkalmazást készítünk, melyben egy ImageList képeit megjelenítjük a Form-on úgy, hogy azok véletlenszerű irányban mozognak megállás nélkül.
Ehhez persze kell egy ImageList komponens. Miután ezt levettük a ToolBar-ról, kattintsunk az Images property-ére. A megjelenő kollekció szerkesztő ablakban tetszőleges számú képet felvehetünk az ImageList-be az Add gomb segítségével.
Ha ezzel megvagyunk, akkor a Form-hoz létrehozzuk a Paint eseménykezelőt, ahol a képek kirajzolását végezzük el. Ehhez szükségünk lesz egy Random osztályra, valamint egy ciklusra, mely végigmegy az összes képen. Az egyes képek X, Y koordinátáját egy array nevű tömbbe tároljuk. Ezt a tömböt a Form-unk konstruktoránál hozzuk létre és töltjük fel véletlenszerű értékekkel, mint kiinduló pozíció.
          Random r = new Random();
          for (int i = 0; i<imageList1.Images.Count; i++)
          {
            array[i].X = r.Next(Width / 3) * 2;
            array[i].Y = r.Next(Height / 3) * 2;            
          }        
A Paint eseménykezelőnél tehát adott egy ciklus, mely az ImageList komponens összes képén egyesével végigmegy. Hogy hány kép van eltárolva, azt az Images property Count property-éből tudhatjuk meg. A létrehozott Random osztály segítségével azt szabályozzuk, hogy az adott kép milyen irányba mozogjon és hány pixelt lépjen. Az új értéket tároljuk az array tömbünkbe, majd az ImageList komponens Draw függvényének hívásával elvégezzük az adott kép kirajzolását. Ehhez első paraméterként egy Graphics osztályt kell megadnunk, melyen keresztül a rajzolás elvégezhető, másodikként egy Point struktúrát, amely az X, Y koordinátát adja meg, ezt természetesen az array tömbünkből vesszük, végül pedig a kirajzolandó képnek a sorszámát kell megadnunk. Ez a sorszám az ImageList komponens Images property-ében tárolt képek sorszáma, melynek számozása nullától kezdődik.
      protected void Form1_Paint (object sender, System.WinForms.PaintEventArgs e)
      {
        Graphics g = e.Graphics; 
        Random r = new Random();
        for (int i = 0; i<imageList1.Images.Count; i++)
        {
          array[i].X += r.Next(10)-4;
          array[i].Y += r.Next(10)-4;
          imageList1.Draw(g, array[i], i);
        }        
      }
Ahhoz, hogy ezekek a kis rajzok állandóan mozogjanak, szükségünk van még egy Timer komponensre is. Ennek Tick eseményéhez létrehozunk egy kezelő függvényt, amelynél érvénytelenítjük a Form tartalmát, mely így újrarajzolásra kerül, vagyis lefut ismét a Paint eseménykezelője. A Timer-nél az Interval property értékét 100-ra állítjuk, ezzel megközelítőleg 0.1 másodpercenként kerül sor a Tick esemény aktivizálására.
      protected void timer1_Tick (object sender, System.EventArgs e)
      {
        Invalidate();
      }