
A CollectionControlLibrary projekt lefordítása után a ToolBox-ra felvehető egy CollectionComponent nevű komponens. Ennek Group property-je lesz a kollekció tároló property.
A komponens elkészítéséhez három osztályt kell létrehozni. Az első lesz a kollekció elemeit leíró osztály, a második a property osztálya mely nem más, mint maga a kollekció, végül a harmadik a komponens osztálya lesz.
A Group osztály
Ez az osztály fogja tárolni a kollekció egy-egy elemének adatait. Az egyszerűség kedvéért csak két property-t tartalmaz, az egyik a Caption, másik a Value nevet kapja. Az osztály adattároláson kívül más funkciót nem végez.
A kollekcióban megadott adatok tárolásának érdekében meg kell adnunk a Serializable attribútumot az osztályhoz.
[Serializable()]
public class Group
{
public string Caption
{
get
{
return caption;
}
set
{
caption = value;
}
}
public int Value
{
get
{
return this.value;
}
set
{
this.value= value;
}
}
}
A Groups osztály
Ebben az osztályban hozzuk létre a kollekciót, így ennek a CollectionBase osztályból kell származnia. Ennek szintén meg kell adnunk a Serializable attribútumot. Ezt követően implementálnunk kell az ősosztályban lévő függvényeket.
[Serializable()]
public class Groups: System.Collections.CollectionBase
{
Az Add függvény akkor kerül meghívásra, amikor a kollekcióhoz új elem kerül hozzáadásra. A függvény paramétereként egy Group osztály példányát kapjuk. Az adat tárolását a CollectionBase ősosztályban lévő List property-ben tehetjük meg.
public void Add(Group value)
{
List.Add(value);
}
A Contains függvény arra szolgál hogy ellenőrizhessük, hogy a paraméterként megadott Group osztály példánya szerepel-e már a kollekcióban, ez esetben a visszatérési értéke igaz lesz.
public bool Contains(Group value)
{
return List.Contains(value);
}
A CopyTo függvénnyel több elemet adhatunk egy lépésben a kollekcióhoz. Első paraméterként egy tömböt kell átadnunk, melynek minden eleme Group típusú. Második paraméterként azt határozhatjuk meg, hogy e tömb hányadik elemétől kezdődjön a másolás.
public void CopyTo(Group[] array, int index)
{
List.CopyTo(array, index);
}
Az IndexOf függvény felhasználásával a paraméterként megadott Group osztályt kereshetjük meg a kollekcióban. Visszatérési értékként az elem sorszámát kapjuk meg, amennyiben volt találat, illetve -1-et, amennyiben nem.
public int IndexOf(Group value)
{
return List.IndexOf(value);
}
Az Insert függvénnyel egy új elemet szúrhatunk be a kollekció egy megadott pozíciójára. Első paraméterként a beszúrás pozícióját adhatjuk meg, másodikként az új elemet.
public void Insert(int index, Group value)
{
List.Insert(index, value);
}
A Remove függvénnyel távolíthatjuk el a kollekció egy elemét, melyet paraméterként kell átadni Group típusban.
public void Remove(Group value)
{
List.Remove(value);
}
Elkészítjük a kollekcióhoz tartozó property-t is, melyen keresztül elérhetővé válnak annak egyes elemei.
public Group this[int index]
{
get
{
if(index >= Count || index < 0)
{
return null;
}
else
{
return (Group) List[index];
}
}
set
{
List[index] = value;
}
}
}
A CollectionComponent komponens
Végül már csak az a feladatunk maradt hátra, hogy elkészítsük azt a komponenst, melyben létrehozzuk a kollekció típusú property-t. Első lépésként létrehozzuk a Groups osztály egy példányát, ez lesz az alapja a kollekció property-nek.
private Groups groups = new Groups();
A property létrehozásánál meg kell adnunk a DesignerSerializationVisibility attribútumot annak érdekében, hogy a kollekcióba felvett elemek adatai tárolásra kerüljenek. Ennek hiányában a szerkesztési időben megadott adatok nem kerülnének tárolásra.
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Groups Groups
{
get
{
return groups;
}
}
A komponens felhasználása
Miután a komponenst feltöltöttük adatokkal, annak elemeit egy ciklus segítségével elérhetjük a program futási ideje alatt.
for (int i=0; i<collectionComponent1.Groups.Count; i++)
{
listBox1.Items.Add(collectionComponent1.Groups[i].Caption + " - " + collectionComponent1.Groups[i].Value.ToString());
}