Professional Documents
Culture Documents
C# Programiranje
C# Programiranje
&
Windows Forms
Saa Fajkovi
2014
Sadraj:
1)
2)
3)
4)
5)
3. 1.
3. 2.
3. 3.
3. 4.
3. 5.
Prava pristupa svojstvima i metodama: Internal, Public, Private, Protected, Protected Internal 13
4. 1.
4. 2.
4. 3.
4. 4.
4. 5.
4. 6.
5. 2.
5. 3.
Pretpostavljeni konstruktor................................................................................................... 16
5. 4.
5. 5.
Destruktor ............................................................................................................................. 17
6)
7)
8)
9)
7. 1.
7. 2.
7. 3.
8. 2.
8. 3.
8. 4.
to su elementi ...................................................................................................................... 24
9. 2.
9. 3.
9. 4.
10)
Svojstva i akcije elemenata na Windows Formi nastavak (itanje, pisanje i izmjena) .......... 26
11)
11. 1.
to su iznimke .................................................................................................................... 27
11. 2.
11. 3.
12)
1) Potrebno predznanje
Prije prouavanja ovih materijala, pretpostavka je da ste dobro upoznati s radom i pojmovima poput
varijable, funkcije, operatori, polja, petlje, grananje i kontrola toka. Takoer, oekuje se da imate
osnovno znanje u radu s razvojnim sueljima tj. da znate stvoriti novi projekt, otvoriti postojei te da
ste upoznati s osnovama rada na raunalu (otvaranje mapa, dvostruki lijevi klik, desni klik, instalacija
aplikacija i slino).
Poznavanje razreda String i pozivanja funkcija nad njim se takoer smatra usvojenim gradivom.
Ukoliko to nije sluaj, prvo utvrdite to gradivo, potom krenite na ove materijale jer se ovdje nee
objanjavati spomenuti pojmovi, ve e se podrazumijevati da ste upoznati s njima te njihovom
funkcionalnou.
Svi primjeri e biti raeni u Microsoft Visual Studio 2013 razvojnom suelju. Ukoliko koristite neko
drugo razvojno suelje, princip rada je potpuno identian i neete imati problema.
Besplatne distribucije Microsoft Visual Studio razvojnog suelja koje nose oznaku Express su
dostupne za preuzimanje sa slubene Microsoft stranice:
http://www.visualstudio.com/downloads/download-visual-studio-vs
Kompleksni broj se sastoji od realnog i imaginarnog dijela. Primjerice 3+2i ili 4-5i. Slovo i obiljeava
imaginarnu komponentu.
Obavezno mora biti odabrana datoteka Class. U donjem dijelu upisujemo ime klase koju elimo
dodati. Nakon upisa imena, odabiremo tipku Add te e se nova klasa pojaviti unutar Solutiona.
Pripazite da se vaa klasa nalazi unutar Namespacea s nazivom jednakim projektu (.cs ekstenzija) u
kojem radite. Stvaranje klase zapoinjemo pisanjem kljune rijei class nakon ega slijedi ime klase
koju stvaramo. U programskom jeziku C#, konvencija je da se klase piu velikim poetnim slovom.
Ukoliko se vaa klasa sastoji od vie rijei, piite ih sve spojeno s tim da svaku rije zaponete velikim
slovom. Primjerice PrvaTestnaKlasa. Izbjegavajte pisanje imena klasa koja zapoinju brojevima i
simbolima. Imajte na umu da e vam Intelli-Sense uvijek nadopunjavati imena pa nije problem
napisati dugako ime klase.
Vidimo kako su lanovi napisani kao obine varijable nekog odreenog primarnog tipa (izuzetak je
String tip podataka koji sam po sebi nije primarni tip podataka, no sigurni smo da e Compiler znati
raditi s takvim tipom podataka).
Sada smo stvorili klasu Vozilo koja ima lanove boja i visina. Napravimo li instancu te klase odnosno
novi objekt koji je tipa Vozilo, imati emo na raspolaganju ta dva svojstva. Svojstvima (i metodama)
pristupamo tako da iza objekta upiemo simbol toke nakon ega e se pojaviti dostupna svojstva i
metode kojima zatim standardno pomou operatora pridruivanja (znak jednakosti) pridjeljujemo
neku vrijednost.
Ovdje je napravljena metoda koja se zove DohvatiBoju(). Ta metoda ne prima niti jedan parametar i
vraa ono to je pohranjeno u svojstvu boja klase Vozilo.
3. 5. Nasljeivanje klasa
Mogunost nasljeivanja klasa nam doputa da stvorimo glavnu klasu iz koje izvodimo druge klase.
Izvedene klase poprimaju svojstva glavne klase. Primjerice, imamo li klasu Vozilo s elementom
brojKotaca koje obiljeava broj kotaa vozila i duzina koji obiljeava duinu vozila, moemo
napraviti dvije naslijeene klase, jednu Automobil i drugu Motocikl. Unutar svake od tih klasa emo
definirati zasebna njihova svojstva koja su karakteristina samo za njih, no osnovna svojstva koja su
zajednika motociklu i automobilu emo naslijediti iz klase Vozilo.
Sintaksa za nasljeivanje je : (eventualno pravo pristupa ) kljuna rije class - nova klasa koju
stvaramo simbol dvotoke ( : ) ime klase koju nasljeujemo.
Vidimo da unutar klase Vozilo imamo elemente boja, visina, duzina, sirina i volumen. Svim
svojstvima moemo pristupiti i unutar naslijeene klase Automobil. Imajte na umu da moemo
pristupiti samo svojstvima klase, u naem sluaju to su Volumen i Boja.
Klase i strukture mogu imati samo Public i Internal prava pristupa. Elementi unutar klase mogu imati
sva od navedenih prava pristupa.
5) Konstruktor i Destruktor
5. 1. Openito o konstrukteru
Konstruktor je metoda (funkcija unutar klase) koju pozivamo kada elimo stvoriti novu instancu te klase
(novi objekt). Koritenjem konstruktora, prilikom stvaranja nove instance klase, moemo dodijeliti
vrijednosti elementima klase koje e taj objekt poprimiti odmah pri stvaranju. Ukoliko ne navedemo
nikakav konstruktor, koristit e se pretpostavljeni konstruktor. Naravno, sami moemo kreirati vlastite
konstruktore.
Unutar jedne klase moemo imati vie konstruktora!
5. 2. Stvaranje konstruktora
Konstruktor piemo kao i bilo koju drugu metodu, unutar klase. Kako bi napravili konstruktor, ta
metoda mora imati identino ime kao i sama klasa. Pravo pristupa koje dodjeljujemo konstruktoru je
Public. Imajte cijelo vrijeme na umu, ako ne napravite svoj konstruktor, pozivat e se pretpostavljeni
konstruktor.
Primijetite kako konstruktor, za razliku od svih ostalih funkcija nema specifikaciju povratnog tipa.
Jednostavno prvo napiemo pravo pristupa (Public), zatim ime konstruktora te eventualne parametre
unutar oblih zagrada (kao i kod ostalih metoda). Unutar vitiastih zagrada piemo daljnji kd koji e se
izvriti prilikom stvaranja instance te klase.
Imajte na umu da pretpostavljeni konstruktor nema nikakvih parametara (unutar oblih zagrada)
5. 3. Pretpostavljeni konstruktor
Prilikom stvaranja instanci klase, poziva se pretpostavljeni konstruktor ukoliko drugaije nije
specificirano. Pretpostavljeni konstruktor e stvoriti elemente te klase koje potom moemo pozvati
nad objektom te klase.
Savjet:
Za bre pisanje konstruktora moete upisati kljunu rije ctor i pritisnuti tipku Tab dva puta te e
Visual Studio sam generirati pretpostavljeni konstruktor.
5. 4. Preoptereenje konstruktora
Ukoliko prilikom stvaranja instance neke varijable elimo postaviti vrijednosti elemenata te klase na
neke odreene vrijednosti, tada pozivamo konstruktor namijenjen tome. Unutar jedne klase moemo
imati vie konstruktora. Svi konstruktori se zovu isto, odnosno ime im mora biti identino kao i ime
klase. Jedina razlika je u broju i/ili poretku parametara koje prima konstruktor.
Vidimo kako postoji prvi konstruktor Vozilo() koji ne dodjeljuje nikakve vrijednosti elementima
klase. Drugi konstruktor Vozilo (string dodijeliBoju) e postaviti vrijednost elementa (varijable)
boja na vrijednost jednaku parametru dodijeliBoju. Trei konstruktor
Vozilo(string dodijeliBoju, float dodijeliVisinu) e dodijeliti vrijednosti za dva elementa klase.
Element boja e poprimiti vrijednost jednaku parametru dodijeluBoju, a element visina e
poprimiti vrijednost jednaku parametru dodijeliVisinu.
Kako se pozivaju konstruktori i stvaraju objekti emo upoznati u daljnjem tekstu
5. 5. Destruktor
Suprotno od konstruktora, destruktore koristimo kada elimo unititi instancu neke klase. Pritom
moramo pratiti neka pravila jezika C#.
S obzirom da C# jezik ne zahtijeva kontrolu nad memorijom poput nekih drugih programskih jezika,
konstruktorima se neemo posvetiti. Detalje oko konstruktora moete proitati ovdje:
http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx
Vidimo da unutar klase Vozilo imamo tri konstruktora s kojima smo se ve upoznali. Ispod toga se
nalaze dva elementa; visina i visina. Pretpostavljeno pravo pristupa za elemente je kao i za klase
Internal. Pokuamo li pristupiti iz druge klase elementima instance proizale iz klase Vozilo to nee
biti mogue. Na ovaj nain smo se zatitili od potencijalno neeljenog upisa i promjena vrijednosti tih
elemenata.
Ispod deklaracije ta dva elementa nalazimo svojstvo Boja. Primijetite da je to svojstvo pisano velikim
poetnim slovom. Ovo je konvencija da se svojstvo za neki element nazove kao i taj element, samo
poetnim velikim slovom (elementi se naravno po konvenciji nazivaju s malim poetnim slovom).
Unutar svojstva Boja nalazimo dvije kljune rijei; get i set. Get svojstvo koristimo za
dohvaanje podataka, a to smo napravili koritenjem kljune rijei return te imena elementa.
Svojstvo set koristimo za dodjelu ili izmjenu vrijednosti nekog elementa. Unutar set dijela izvrili
smo dodjelu vrijednosti elementu boja. Ovdje se pojavljuje nova kljuna rije value. Value
dohvaa vrijednost koju pridjeljujemo elementu
Read-only svojstvo omoguava zatitu od upisa vrijednosti nekom elementu klase, odnosno ima samo
get dio, ali ne i set dio. Samo get svojstvo postavljamo kada elimo onemoguiti upis u neku varijablu,
a to su elementi ija se vrijednost izraunava iz nekih drugih elemenata.
Primjerice:
Vidimo da vrijednost za volumen ne elimo upisivati ve raunati na osnovi drugih vrijednosti. U tom
sluaju, za element volumen ne elimo dopustiti pravo upisa ve samo itanja vrijednosti.
8) Windows Forms
8. 1. to su Windows Forms
Windows Forms (forme) je naziv za izradu grafiki aplikacija ija je podrka sadrana unutar Microsoft
.NET tehnologije. Koritenjem ove tehnologije (frameworka), omoguena je izrada nativnih (native)
Microsoft aplikacija koje smo navikli viati kroz Microsoft Windows operativni sustav.
Windows Forme su instance neke klase (konkretno Form klase) i kao takve podlijeu pravilima OOP-a.
8. 2. Ureivanje svojstava
Svaka forma koju stvorimo ima svoja odreena svojstva poput dimenzija, boje, naziva, teksta koji se
ispisuje u zaglavlju forme itd. Svojstvima neke forme pristupamo preko Properties prozora.
Svako svojstvo nudi razliite mogunosti. Primjerice, svojstvo Texti se odnosi na natpis u zaglavlju
forme, a svojstvo (Name) na sam naziv te forme. Ulaziti u detalje i opisivati svako pojedino svojstvo
nema smisla te preporuam da ih unutar nekoliko minuta sami isprobate sve.
Simbol za prikaz dogaaja je u obliku munje. Sada vidimo popis dostupnih dogaaja nad formom kojih
je takoer izuzetno puno. Nema smisla ih uiti sve napamet jer veina dogaaja jako dobro svojim
imenom opisuje na to se odnose. U konanici, ukoliko ne moete pronai neki dogaaj ili niste sigurno
na to se odnosi, upiite na Google (ili neku Internet trailicu) to vas zanima i odgovor e vrlo
vjerojatno biti unutar prvih par ponuenih linkova.
Kako bi pristupili nekom dogaaju, tj. kreirali kd koji se treba izvriti kada doe do nekog dogaaja,
jednostavno napravimo dvoklik desno od imena dogaaja i Visual Studio e generirati metodu koja
se poziva prilikom tog dogaaja. Unutar te metode piemo kd koji se treba izvriti za zadani dogaaj.
Slika 18 - Toolbox
9. 2. Dodavanje elemenata
Elemente dodajemo na formu jednostavnim drag-n-drop principom ili dvoklikom na element.
Elemente moemo razmjetati po formi, prilagoditi im irinu i visinu, upisati neki tekst u njih i jo
mnotvo toga.
9. 3. Svojstva elemenata
Svaki element ima svoja odreena svojstva koja moemo mijenjati. Logino je da e prozor za sliku
imati drugaija svojstva od primjerice polja za upis teksta. Svojstvima svakog elementa pristupamo
preko Properties prozora, kao to smo vidjeli za Windows Forms objekt.
U gornjem primjeru imamo Text Box kontrolu ije ime je txtVozilo. Svaka takva kontrola ima
svojstvo Text koje obiljeava tekst upisan u tu kontrolu. S ovim kdom pristupamo tom svojstvu i
postavljamo vrijednost svojstva na Ovo je neki tekst.
Pogledajmo na primjeru:
Unutar try bloka dohvaamo vrijednost svojstva Text kontrole txtVozila i pokuavamo tu string
vrijednost prebaciti u Integer tip podatka koritenjem funkcije Parse(). Ako taj postupak uspije,
nastavit e se izvravati kd iza try-catch dijela. Ukoliko postupak pretvorbe ne uspije (primjerice
uneseno je neko slovo umjesto broja), pokree se kd unutar catch bloka. U tom sluaju se i poziva
pogreke (call Exception) koja je po svom tipu Exception i zove se greska. Unutar catch bloka u
kojem obraujemo tu iznimku ispisujemo korisniku poruku koritenjem MessageBox elementa i
metode Show() u kojoj navodimo tekst Dogodila se pogreka te dohvaamo o kojoj vrsti pogreke
se radi. Vrsta pogreke je pohranjena u varijablu pogreska.
Mi moemo eksplicitno navesti detaljniju vrstu iznimke koja se poziva. Takoer, esto moemo imati
nekoliko catch blokova. Razlog tome je to elimo probati uhvatiti tono neku vrstu iznimke.
U ovom primjeru imamo dva catch bloka. Prvi obrauje iznimku ukoliko je predana vrijednost u
pogrenom formatu. Ukoliko se dogodi neka druga vrsta pogreke nju e uhvatiti drugi catch blok.
U ovom primjeru zamiljamo da smo korisniku rekli da unese broj koji je vei od 0 (nula) i manji od
100 (sto). Vrijednost dohvaamo iz neke textBox kontrole i tu vrijednost pohranimo u varijablu
broj. Za potrebe objanjavanja, smatramo da je korisnik zaista unio neku cjelobrojnu vrijednost.
Sada nam preostaje provjeriti jeli unio dozvoljenu numeriku vrijednost odnosno nalazi li se broj koji
je korisnik unio u raspnu od 0 do 100.
Prvim if uvjetom provjeravamo jeli broj manji od nule. Ako je, bacamo novu iznimku (konkretno
vrsta ArgumentException) kojoj kao parametar predajemo poruku koju elimo da se korisniku ispie.
Pomou else-if testiramo jeli broj manji vei od 100 i ako je, elimo takoer baciti novu iznimku i
rei korisniku da to nije doputeno.
Kada se neka iznimka pozove, tada se izvravanje aplikacije prekida i na taj nain se osiguravamo
da nee doi do njenog ruenja.