Professional Documents
Culture Documents
KÖRNYEZETBEN
Kővári Bence
2020.
Szerzői jogok
BEVEZETÉS
CÉLKITŰZÉS
A labor során megismerjük az adatkötés jelentőségét és működését Windows Forms környezetben.
ELŐFELTÉTELEK
A labor elvégzéséhez szükséges eszközök:
LEBONYOLÍTÁS
A gyakorlat anyagát távolléti oktatás esetén önállóan, jelenléti oktatás esetében számítógépes laborban,
gyakorlatvezetői útmutatással kell megoldani.
BEADÁS
Amennyiben elkészültél a megoldással, távolíts el belőle a fordítási binárisokat és fordítási
segédmappákat („bin” mappa, „obj” mappa, „Visual Studio” mappa, esetleges nuget/node csomagok,
majd az így elkészült anyagot egy zip fájlba becsomagolva töltsd fel a Moodle rendszerbe. Amennyiben
a zip fájl mérete 10 MB fölött van, valószínűleg nem töröltél ki belőle mindent a korábbi felsorolásból.
Jegyzőkönyv készítése nem szükséges, azonban amennyiben beadott kódoddal kapcsolatban kérdések
merülnek fel, megkérhetünk arra, hogy működésének egyes részleteit utólag is magyarázd el.
ÖSSZEFOGLALÁS
Korábbi félévekben megismerkedtünk a Windows Forms alapú fejlesztéssel. A technológia a .NET
Framework megjelenése óta jelen van, s bár nagy mértékben testreszabott felületek fejlesztésére nem
alkalmas, gyors fejlesztési lehetőségek miatt máig népszerű pl. alkalmazások prototipizálására.
FELADATOK
1. Hozzunk létre egy Windows Forms projektet Visual Studioban! A projekt neve a Neptun
kódunk legyen!
2. Adjunk hozzá a felülethez egy szövegdobozt, hagyjuk meg az eredeti nevét (textBox1)
3. Kattintsunk duplán az ablak fejlécére a designerben, ezzel felíratkozunk a Load eseményére.
Hozzunk létre egy adatkötést az alábbi sor beírásával.
Ez a sor a következő hatást éri el: A Form objektumhoz (this) felveszünk egy adatkötést, melyben jelöljük,
hogy a Form Text tulajdonsága (első paraméter) mindig frissítendő, ha a forrás (második paraméter) Text
tulajdonsága (harmadik paraméter) megváltozik.
6. Futtassuk a programot!
• az adatkötés bármilyen két vezérlő között lehetséges (fenti példában trackbar és textbox között)
• az adatkötés kétirányú, hiszen textBox szövegét átírva módosul a többi érték is
• az adatkötés string-int konverziót is elvégez, hiszen a két oldalnak itt a típusa is más
• az adatkötés láncszerűen is működik, hiszen az ablak fejléce is leköveti az adatváltozásokat
1. Adjunk hozzá a projekthez egy új osztályt Pokemon néven! Az osztálynak egy string típusú
Name és egy double típusú Weight tulajdonsága legyen.
class Pokemon
{
public string Name { get; set; }
public double Weight { get; set; }
}
2. Húzzunk egy ListBox vezérlőt a felületre, majd egészítsük ki a Load függvényt a következő
sorokkal:
Fordítsuk és teszteljük a projektet. Figyeljük meg, hogy mi történik, ha az utolsó sort kikommentezzük.
A jelenség oka, hogy egyéb információ hiányában a ListBox az objektumok ToString függvényével
határozza meg, hogy mit jelenítsen meg, ami alapértelmezésben a típus nevét adja vissza. Ha van időnk,
kísérletképpen megpróbálhatjuk felülírni is (override).
3. Adjunk hozzá egy új adatforrást a projektünkhöz. Ehhez használjuk a bal oldalon látható „Data
Sources” panelt, amelyet szükség esetén a „View / Other Windows / Data Sources”
menüpontban tudunk előhozni.
4. Kattintsunk az „Add New Data Source…” linkre, majd válaszuk az „Object” opciót, jelöljük ki a
„Pokemon” osztályunkat majd nyomjuk meg a Finish gombot.
Az eddigi lépéseknek még közvetlen hatásuk nem lesz a kódunkra. Mindössze tudattuk a designerrel,
hogy az adatkötések tervezésekor számoljon az osztályunkkal, így a további lépésekben az
automatikusan felkínálja azt a választások között.
6. Módosítsuk a korábbi ListBox vezérlőt. A smart tagjének (jobb felső sarokban található nyilacska)
használatával állítsuk be az adatforrást pokemonBindingSource-ra, a megjelenítendő
tulajdonságot Name-re! (korábbi ténykedésünknek hála, ezeket magától felkínálja a rendszer).
listBox1.DataSource = list;
listBox1.DisplayMember = "Name";
pokemonBindingSource.DataSource = list;
8. Teszteljük az alkalmazást!
9. Állítsuk le az alkalmazás futtatását, ellenkező esetben a következő lépések nem fognak működni!
10. A Data Sources panelről húzzuk be a Person node-ot. Ez egy GridView-t fog létrehozni, mely
már automatikusan a binding source-unkat fogja használni.
11. A Data Sources panelen használjuk a Pokemon node legördülő menüjét, hogy Details nézetre
kapcsoljuk. Ismét húzzuk be a Formra! Ez két, a binding source-hoz kötött szövegdobozt fog
létrehozni.
A két létrejött vezérlőt kódbol, vagy designerből is bekonfigurálhattuk volna. A data sources panel célja,
hogy gyorsítsa és nagyrészt automatizálja ezt a folyamatot.
2. Futtassuk az alkalmazást! Vegyük észre, hogy bár az adatok a háttérben a frissülnek a UI ezt nem
követi le, csak ha kijelölünk elemeket.
3. Annak érdekében, hogy az objektum is tudjon visszajelzést küldeni az állapotváltozásairól,
módosítsuk a kódját a következőképpen az INotifyPropertyChanged interfész
implementálásával:
class Pokemon: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private double weight;
public double Weight
{
get { return weight; }
set
{
weight = value;
if (PropertyChanged != null)
PropertyChanged(this,
new PropertyChangedEventArgs("Weight"));
}
}
Technikailag mindent, amit a mai laboron eddig láttunk a fenti interfész működtet. Ha megnézzük,
minden vezérlő és a binding source is implementálja ezt az interfészt. Ezen keresztül tudnak értesülni
egymás értékeinek megváltozásairól és frissíteni ennek függvényében saját tartalmukat.
4. Teszteljük az alkalmazást!
1. Bővítsd a Pokemonok listáját egy új taggal, melynek neve a saját Neptun kódod legyen!