Maturski rad iz informatike Tema:
Veb prezentacija programskog jezika C#
Maturski rad
Veb prezentacija programskog jezika C#
Sadržaj I.
Uvod u C# ....................................... .......................................................... ........................................ ......................................... ....................................... ........................................ ...................................4 ..............4
I - 1.
Šta je .NET okruženje? .................................... ...................................................... .................................... .................................... .................................... .................................... .................................... ..................... ... 4
I - 2.
Šta se nalazi unutar .NET okruženja? ..................................... ....................................................... .................................... .................................... .................................... ................................. ............... 4
I - 3.
Kako napisati aplikaciju koristeći .NET o kruženje? .................................. .................................................... ..................................... .................................... ................................ ............... 4
.......................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ............................4 ........4 MSIL i JIT ...................................... ........................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ............................4 ........4 Sklopovi ....................................... ........................................................... ........................................ ........................................ ........................................ ........................................ ........................................ .....................4 .4 Upravljivi kôd ....................................... Sakupljanje otpada
....................................... .......................................................... ........................................ ......................................... ....................................... ........................................ ...................................4 ..............4
........................................................... ........................................ ......................................... ........................................ ........................................ ..................................4 ..............4 Uklapanje u cjelinu........................................ .......................................................... ........................................ ......................................... ......................................... ........................................ ........................................ ........................4 ....4 Povezivanje...................................... Šta je C#? ........................................ ............................................................ ........................................ ........................................ ........................................ ........................................ ......................................... .........................4 ....4 Kakve aplikacije možemo pisati u C# -u? ........................................ ............................................................ ........................................ ......................................... ........................................ ...........................5 ........5
........................................................... ......................................... ......................................... ........................................ ...............................5 ...........5 Visual Studio.NET .......................................
I - 4.
......................................................... ........................................ ........................................ ........................................ ........................................ ............................5 ........5 Rješenja u Visual Studio -u ..................................... Pisanje programa u jeziku C#
........................................ ............................................................ ........................................ ........................................ ........................................ ........................................ .....................5 .5
Razvojno okruženje u Visual Studio .NET ....................................... ........................................................... ........................................ ......................................... ........................................ ...........................6 ........6
........................................................... ........................................ ......................................... ........................................ ........................................ ..................................6 ..............6 Konzolna aplikacija........................................ II.
Elementi Elementi programskog programskog jezika C# ...................................... .......................................................... ........................................ ........................................ ........................................ .....................7 .7
II - 1.
.......................................................... ........................................ ......................................... ........................................ ........................7 ....7 Promjenljive i izrazi ....................................... ...................................... .......................................................... ........................................ ........................................ ........................................ ......................................7 ..................7
II - 1- 1.
Osnove C# sintakse
II - 1- 2.
Osnove strukture C# konzolne aplikacije
II - 1- 3.
......................................................... ........................................ ........................................ ........................................ ........................................ ............................7 ........7 Promjenljive.....................................
....................................... .......................................................... ........................................ ......................................... ...............................7 ...........7
......................................................... ........................................ ........................................ ........................................ ........................................ ............................7 ........7 Prosti tipovi promjenljivih ..................................... .......................................................... ........................................ ........................................ ............................8 ........8 Imenovanje promjenljivih, konvencije i vrijednosti literala ...................................... ........................................................... ........................................ ......................................... ........................................ ........................................ ..................................8 ..............8 Pravila imenovanja........................................ ........................................................... ........................................ ......................................... ........................................ ........................................ ..................................9 ..............9 Vrijednosti literala ........................................ String literali
........................................ ........................................................... ........................................ ......................................... ........................................ ........................................ ......................................... .....................9 9
Određivanje i dodjeljivanje vrijednosti promjenljivim ...................................... ......................................................... ........................................ ......................................... ..................................9 ..............9 II - 1- 4.
........................................................... ........................................ ......................................... ........................................ ........................................ ................................10 ............10 Izrazi ........................................
II - 1- 5.
Matematički operatori ..................................... ......................................................... ........................................ ......................................... ......................................... ................................10 ............10
II - 1- 6.
........................................................... ......................................... ......................................... ........................................ .............................10 .........10 Operatori dodjeljivanja .......................................
II - 1- 7.
............................................................ ........................................ ......................................... ........................................ ................................11 .............11 Prvenstvo operatora ........................................
II - 1- 8.
........................................................... ........................................ ........................................ ........................................ ....................................1 ................11 1 Imenovani prostori.......................................
II - 2.
......................................................... ........................................ ........................................ ....................................1 ................12 2 Kontrola toka programa .....................................
II - 2 - 1.
........................................................... ....................................... ......................................... ........................................ ........................................ .......................12 ..12 Bulova logika ........................................
II - 2 - 2.
............................................................ ........................................ ........................................ ........................................ ........................................ ..........................13 ......13 Iskaz goto ........................................
II - 2 - 3.
.......................................................... ........................................ ........................................ ........................................ ........................................ .............................13 .........13 Grananje ......................................
......................................................... ........................................ ......................................... ........................................ ....................................... ....................................1 ................13 3 Ternarni operator ..................................... II - 2 - 4.
............................................................ ........................................ ........................................ ........................................ ........................................ .............................13 .........13 Iskaz IF ........................................
II - 2 - 5.
.......................................................... ........................................ ........................................ ........................................ ........................................ ..........................14 ......14 Iskaz switch......................................
II - 2 - 6.
.......................................................... ........................................ ......................................... ....................................... ........................................ .................................14 ............14 Petlje .......................................
.......................................................... ........................................ ........................................ ........................................ ........................................ .......................................1 ...................14 4 Petlja do while ...................................... .......................................................... ........................................ ......................................... ......................................... ........................................ ........................................ ......................15 ..15 Petlja while ...................................... .......................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ..........................15 ......15 Petlja for ...................................... Dino Dedić
2
Maturski rad
Veb prezentacija programskog jezika C#
Sadržaj I.
Uvod u C# ....................................... .......................................................... ........................................ ......................................... ....................................... ........................................ ...................................4 ..............4
I - 1.
Šta je .NET okruženje? .................................... ...................................................... .................................... .................................... .................................... .................................... .................................... ..................... ... 4
I - 2.
Šta se nalazi unutar .NET okruženja? ..................................... ....................................................... .................................... .................................... .................................... ................................. ............... 4
I - 3.
Kako napisati aplikaciju koristeći .NET o kruženje? .................................. .................................................... ..................................... .................................... ................................ ............... 4
.......................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ............................4 ........4 MSIL i JIT ...................................... ........................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ............................4 ........4 Sklopovi ....................................... ........................................................... ........................................ ........................................ ........................................ ........................................ ........................................ .....................4 .4 Upravljivi kôd ....................................... Sakupljanje otpada
....................................... .......................................................... ........................................ ......................................... ....................................... ........................................ ...................................4 ..............4
........................................................... ........................................ ......................................... ........................................ ........................................ ..................................4 ..............4 Uklapanje u cjelinu........................................ .......................................................... ........................................ ......................................... ......................................... ........................................ ........................................ ........................4 ....4 Povezivanje...................................... Šta je C#? ........................................ ............................................................ ........................................ ........................................ ........................................ ........................................ ......................................... .........................4 ....4 Kakve aplikacije možemo pisati u C# -u? ........................................ ............................................................ ........................................ ......................................... ........................................ ...........................5 ........5
........................................................... ......................................... ......................................... ........................................ ...............................5 ...........5 Visual Studio.NET .......................................
I - 4.
......................................................... ........................................ ........................................ ........................................ ........................................ ............................5 ........5 Rješenja u Visual Studio -u ..................................... Pisanje programa u jeziku C#
........................................ ............................................................ ........................................ ........................................ ........................................ ........................................ .....................5 .5
Razvojno okruženje u Visual Studio .NET ....................................... ........................................................... ........................................ ......................................... ........................................ ...........................6 ........6
........................................................... ........................................ ......................................... ........................................ ........................................ ..................................6 ..............6 Konzolna aplikacija........................................ II.
Elementi Elementi programskog programskog jezika C# ...................................... .......................................................... ........................................ ........................................ ........................................ .....................7 .7
II - 1.
.......................................................... ........................................ ......................................... ........................................ ........................7 ....7 Promjenljive i izrazi ....................................... ...................................... .......................................................... ........................................ ........................................ ........................................ ......................................7 ..................7
II - 1- 1.
Osnove C# sintakse
II - 1- 2.
Osnove strukture C# konzolne aplikacije
II - 1- 3.
......................................................... ........................................ ........................................ ........................................ ........................................ ............................7 ........7 Promjenljive.....................................
....................................... .......................................................... ........................................ ......................................... ...............................7 ...........7
......................................................... ........................................ ........................................ ........................................ ........................................ ............................7 ........7 Prosti tipovi promjenljivih ..................................... .......................................................... ........................................ ........................................ ............................8 ........8 Imenovanje promjenljivih, konvencije i vrijednosti literala ...................................... ........................................................... ........................................ ......................................... ........................................ ........................................ ..................................8 ..............8 Pravila imenovanja........................................ ........................................................... ........................................ ......................................... ........................................ ........................................ ..................................9 ..............9 Vrijednosti literala ........................................ String literali
........................................ ........................................................... ........................................ ......................................... ........................................ ........................................ ......................................... .....................9 9
Određivanje i dodjeljivanje vrijednosti promjenljivim ...................................... ......................................................... ........................................ ......................................... ..................................9 ..............9 II - 1- 4.
........................................................... ........................................ ......................................... ........................................ ........................................ ................................10 ............10 Izrazi ........................................
II - 1- 5.
Matematički operatori ..................................... ......................................................... ........................................ ......................................... ......................................... ................................10 ............10
II - 1- 6.
........................................................... ......................................... ......................................... ........................................ .............................10 .........10 Operatori dodjeljivanja .......................................
II - 1- 7.
............................................................ ........................................ ......................................... ........................................ ................................11 .............11 Prvenstvo operatora ........................................
II - 1- 8.
........................................................... ........................................ ........................................ ........................................ ....................................1 ................11 1 Imenovani prostori.......................................
II - 2.
......................................................... ........................................ ........................................ ....................................1 ................12 2 Kontrola toka programa .....................................
II - 2 - 1.
........................................................... ....................................... ......................................... ........................................ ........................................ .......................12 ..12 Bulova logika ........................................
II - 2 - 2.
............................................................ ........................................ ........................................ ........................................ ........................................ ..........................13 ......13 Iskaz goto ........................................
II - 2 - 3.
.......................................................... ........................................ ........................................ ........................................ ........................................ .............................13 .........13 Grananje ......................................
......................................................... ........................................ ......................................... ........................................ ....................................... ....................................1 ................13 3 Ternarni operator ..................................... II - 2 - 4.
............................................................ ........................................ ........................................ ........................................ ........................................ .............................13 .........13 Iskaz IF ........................................
II - 2 - 5.
.......................................................... ........................................ ........................................ ........................................ ........................................ ..........................14 ......14 Iskaz switch......................................
II - 2 - 6.
.......................................................... ........................................ ......................................... ....................................... ........................................ .................................14 ............14 Petlje .......................................
.......................................................... ........................................ ........................................ ........................................ ........................................ .......................................1 ...................14 4 Petlja do while ...................................... .......................................................... ........................................ ......................................... ......................................... ........................................ ........................................ ......................15 ..15 Petlja while ...................................... .......................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ..........................15 ......15 Petlja for ...................................... Dino Dedić
2
Maturski rad
Veb prezentacija programskog jezika C#
........................................................... ....................................... ........................................ ........................................ ........................................ ....................................1 ................15 5 Prekidanje petlji ........................................ Beskonačne petlje ........................................ ........................................................... ........................................ ......................................... ........................................ ........................................ ................................16 ............16
Funkcije Funkcije ....................................... ........................................................... ........................................ ........................................ ........................................ ......................................... ......................................... ......................16 ..16 II - 3 - 1.
............................................................ ........................................ ........................................ .......................................1 ...................16 6 Definisanje i korištenje funkcija ........................................
II - 3 - 2.
............................................................ ........................................ ......................................... ........................................ ................................17 .............17 Povratne vrijednosti ........................................
II - 3 - 3.
............................................................ ........................................ ........................................ ........................................ ........................................ ..........................17 ......17 Parametri ........................................
II - 3 - 4.
........................................................... ........................................ ........................................ ........................................ ....................................1 ................17 7 Nizovi parametara .......................................
II - 3 - 5.
........................................................... ........................................ ......................................... .......................18 ..18 Prijenos parametara po referenci i vrijednosti.......................................
II - 3 - 6.
.......................................................... ........................................ ......................................... ........................................ .......................................1 ...................18 8 Izlazni parametri.......................................
II - 3 - 7.
Opseg važenja promjenljive ...................................... .......................................................... ........................................ ......................................... ........................................ .........................19 ......19
II - 3 - 8.
Opseg važenja promenljive u drugim strukturama ...................................... .......................................................... ........................................ .......................................2 ...................20 0
II - 3 - 9.
.......................................................... ........................................ .......................21 ..21 Parametri i povratne vrijednosti nasuprot globalnim podacima.......................................
II - 3 - 10.
............................................................ ........................................ ........................................ ........................................ .......................................2 ...................21 1 Funkcija Main() ........................................
Funkcije članice struktura
..................................... ......................................................... ........................................ ........................................ ........................................ ........................................ ..........................22 ......22
Preopterećenje funkcija........................................ ............................................................ ........................................ ........................................ ........................................ ........................................ ..........................22 ......22
........................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ..........................22 ......22 Delegati ....................................... II - 3 - 11.
Događaji ...................................... .......................................................... ........................................ ........................................ ........................................ ........................................ .............................23 .........23
Šta je događaj? ..................................... ......................................................... ........................................ ........................................ ........................................ ........................................ .......................................2 ...................23 3
......................................................... ........................................ ......................................... ....................................... ........................................ .................................24 ............24 Korištenje događaja ...................................... ............................................................ ........................................ ........................................ ........................................ ........................................ .............................25 .........25 Definisanje događaja ........................................ Višenamjenske rutine za obradu događaja ..................................... ......................................................... ........................................ ......................................... ........................................ .........................26 ......26
........................................................... ........................................ ........................................ ....................................27 ................27 Povratne vrijednosti i rutina za obradu događaja ....................................... ........................................................... ........................................ ........................................ ........................................ ........................................ ........................................ ..........................29 ......29 Osobine ....................................... III - 1 - 3 - 1.
.......................................................... ........................................ ........................................ ........................................ ....................................31 ................31 Kontrola Button ......................................
III - 1 - 3 - 2.
Kontrole Label i LinkLabel
III - 1 - 3 - 3.
............................................................ ........................................ ......................................... ........................................ ................................32 .............32 Kontrola TextBox ........................................
III - 1 - 3 - 4.
......................................................... ........................................ ........................................ ....................................32 ................32 Kontrole RadioButton i CheckBox .....................................
III - 1 - 3 - 5.
.......................................................... ........................................ ........................................ ........................................ .................................33 .............33 Kontrola CheckBox......................................
III - 1 - 3 - 6.
......................................................... ........................................ ......................................... ......................................... ................................33 ............33 Kontrola GroupBox .....................................
III - 1 - 3 - 7.
.......................................................... ........................................ ........................................ ........................................ .............................33 .........33 Kontrola RichTextBox ......................................
III - 1 - 3 - 8.
.......................................................... ........................................ ......................................... .......................34 ..34 Kontrola ListBox i Kontrola CheckedListBox ......................................
III - 1 - 3 - 9.
........................................................... ......................................... ......................................... ........................................ .............................35 .........35 Kontrola ComboBox .......................................
III - 1 - 3 - 10.
........................................................... ........................................ ......................................... ........................................ ................................36 .............36 Kontrola ListView .......................................
III - 1 - 3 - 11.
............................................................ ........................................ ......................................... ........................................ .........................37 ......37 Metode klase ListView ........................................
III - 1 - 3 - 12.
.......................................................... ........................................ ........................................ ........................................ .................................37 .............37 Kontrola ImageList ......................................
III - 1 - 3 - 13.
.......................................................... ........................................ ........................................ ........................................ .................................38 .............38 Kontrola StatusBar ......................................
III - 1 - 3 - 14.
........................................................... ......................................... ......................................... ........................................ .............................38 .........38 Kontrola TabControl .......................................
........................................ ........................................................... ........................................ ......................................... ........................................ ......................31 ..31
III.
Zaključak ........................................ ........................................................... ........................................ ......................................... ........................................ ........................................ ................................39 ............39
IV.
Literatura Literatura ....................................... .......................................................... ........................................ ......................................... ....................................... ........................................ .................................40 ............40
Dino Dedić
3
Maturski rad
I.
Veb prezentacija programskog jezika C#
Uvod u C# I - 1. Šta je .NET okruženje?
Pro jektno okruženje .NET je nova platforma za razvoj aplikacija napravljena od strane Microsoft-a, a dizajnirano je tako da se može koristiti od strane bilo kog programskog jezika. Ovo uključuje C#, kao i C++, Visual Basic i Jscript. Svi ovi programski jezici imaju pristup projektnom okruženju .NET i mogu međusobno da komuniciraju. Sasvim je moguće kod programiranja u C# koristiti kôd napisan u Visual Basic.NET, kao i obrnuto.
I - 2. Šta se nalazi unutar .NET okruženja? Projektno okruženje .NET najvećim d ijelom se sastoji od ogromne biblioteke kodova koju upotrebljavamo preko klijentskih jezika. Ova biblioteka podijeljena je na različite module koje koristimo u zavisnosti od našeg zadatka. Neki moduli su podijeljeni u različite podmodule.
I - 3. Kako napisati aplikaciju koristeći .NET okruženje? Pisanje aplikacija unutar .NET projektnog okruženja u stvari znači pisanje koda uz pomoć . NET biblioteke koda. Preporučuje se korišćenje Visual Studi o-ja za programiranje. Prednost ovog okruženja je lakoća kojom se mogućnosti .NET tehnologije mogu integrisati u naš kôd . Da bi se C# kôd izvršio neophodno ga je prevesti u izvorni ili originalni kôd (kompajliranje kôda). Unutar .NET okruženja ta operacija ima dvije faze.
MSIL i JIT Kada kompajliramo kôd koristeći biblioteku .NET okruženja mi kompajliramo u kôd Microsoftovog posrednog jezika ( Microsoft Intermediate Language - MSIL). Da bi se program izvr šio potrebno je još rada. Za taj posao zadužen je kompajler pravo-na-vrijeme (engl. Just-In-Time - JIT), koji prevodi MSIL u izvorni kôd. Tek tada OS može izvršiti program. Dio imena „pravo-navrijeme” odnosi se na to da se MSIL kôd kompajlira samo kada je to potrebno.
Sklopovi Kada kompajliramo aplikaciju MSIL kôd se smiješta u posebne programske skupove. Takvi skupovi sadrže i izvršne programske datoteke. Programski skupovi pored MSIL -a sadrže i takozvane meta informacije (dodatne podatke koje koristi MSIL, kao što su zvukovi i slike). Meta podatci dozvoljavaju programskim skupovima da budu
potpuno samoopisujući. Ne trebaju nam nikakve dodatne informacije da bi smo koristili programske skupove. Ovo u stvari zanči da je razvoj aplikacija jednostavan. Upravljivi kôd CLR vodi računa o našoj aplikaciji kroz upravljanje memorijom, obezbjeđivanjem sigurnosti, dozvoljava međujezičko otklanjanje grešaka itd. Suprotno ovome, aplikacije koje ne rade pod kontrolom CLR-a nazivaju se neupravljive. U C# možemo napisati samo onaj kôd koji radi pod upravljivim okruženjem. Sakupljanje otpada Jedna od najvažnijih mogućnosti upravljivog koda je sistem kolekcije otpada. Ovo je metod .NET-a koji se brine o tome da memorija koju je aplikacija koristila tokom svog izvršenja bude obavezno ispražnjena kada aplikacija više nije u upotrebi. Uklapanje u cjelinu Da bi smo napravili .NET aplikaciju potrebno je:
Kôd za aplikaciju napisati koristeći .NET jezik kao što je C#. Ovaj kôd se kompajlira u MSIL, koji je smješten u programski skup. 3. Kôd koji se izvršava mora se predhodno kompajlirati kroz JIT kompajler u izvorni kôd. 4. Izvorni kôd se izvršava preko upravljive metode CLR. Povezivanje 1. 2.
C# kôd koji se kompajlira u MSIL u koraku 2. ne mora da bude smj ešten u jednu datoteku. Moguće je podijeliti kôd aplikacije u različite datoteke koje će se tokom kompajliranja objediniti u programski skup odnosno assembly. Razlog ove podjele je taj što je mnogo lakše raditi sa više manjih dat oteka nego sa jednom ogromnom.
Šta je C#? C# je jedan od jezika koji služi za izradu aplikacija koje mogu raditi pod .NET CLR-om. To je evolucija C i C++ jezika koju je kreirao Microsoft da bi se radilo sa .NET okruženjem. Dino Dedić
4
Maturski rad
Veb prezentacija programskog jezika C#
Programiranje aplikacije u C# je jednostavnije nego u C++, jer je sintaksa prostija. Kôd C# je malo razumljiviji od C++ koda. Kod koda je jednostavnije otkloniti greške, .NET u svakom trenutku može odrediti koje m tipu pripada traženi podatak. C# je samo jedan od jezika koji omogućava rad sa .NET razvojnim okruženjem.
Kakve aplikacije možemo pisati u C#-u? C# nema ograničenja u vezi toga kakve sve aplikacije možemo napraviti. C# koristi okruženje i samim tim
nema ograničenja u vezi sa mogućim aplikacijama. Tipovi najčešće pravljenih aplikacija su: Windows aplikacije – To su aplikacije tipa Microsoft Office-a koje imaju izgled standardnih Windows aplikacija. Ovo je pojednostavljeno korištenjem modula Windows obrazaca unutar .NET okruženja, koji u stvari čini biblioteka kontrola (kao što su dugmići, palete alatki, meniji i tako dalje), a koje nam koriste pri izradi Windows
korisničkog interfejsa (UI). Web aplikacije – To su web strane koje možemo videti kroz bilo koji web pretraživač. Ovaj sistem se naziva
Active Server Pages.NET (ASP.NET), a C# možemo koristiti za izradu ASP.NET aplikacija uz pomoć web obrazaca. Web servisi – Oni su nov i uzbudljiv način izrade aplikacija koje su razmenljive prirode. Koristeći web serviše
preko Interneta možemo razmenjivati bilo koju vrstu podataka, koristeći prostu sintaksu, ne vodeći računa o tome u kom jeziku je napisana aplikacija niti na kom sistemu je postavljena.
I - 4. Visual Studio.NET Visual Studio.NET (VS) koristi se za izradu aplikacija sastavljenih od prostih linijskih komandi pa sve do kompleksnih tipova projekata. VS nije neophodan za programiranje u C#, ali nam mnogo olakšava stvari. Slijedi kratka lista razloga zbog kojih je VS pravi izbor za .NET razvojno okruženje: VS tekst editor je povezan sa jezicima VS-a (uključujući C#) i to tako da omogućava pametnu detekciju grešaka i sugeriše odgovarajući kôd na pravom mestu dok mi tipkamo.
VS sadrži i dizajnerske alate za aplikacije koje uključuju Windows obrasce, kao i web obrasce, a koji vam omogućavaju prost drag-and-drop dizajn UI elemenata. VS sadrži nekoliko čarobnjaka ili vodiča koji vam automatizuju zadatke opšte namjene, koji mogu dodati odgovarajući kôd postojećim datotekama, a da mi o tome ne brinemo.
Rješenja u Visual Studio-u Kada koristimo VS za razvoj aplikacija, to radimo kreiranjem rješenja. Rješenja sadrže projekte koji mogu biti zasnovani na Windows formularima, Web formularima itd. Rješenja mogu sadržati i vi še projekata, tako da možemo grupisati srodan kôd na jedno mesto, iako će se oni kompajlirati u različite sklopove na različitim m jestima na disku.
Pisanje programa u jeziku C# VS je ogroman i komplikovan proizvod. Prva aplikacija koja se uobićajeno kreira je jednostavna aplikacija koja se pokreće iz komandne linije . Kompleksnije aplikacije su bazirane na Windows formularima i njihova sintaksa je mnogo komplikovanija.
Dino Dedić
5
Maturski rad
Veb prezentacija programskog jezika C#
Razvojno okruženje u Visual Studio .NET Ukoliko prvi put pokrećete VS biti će vam predstavljena lista sa vrijednostima namijenjena za korisnike sa iskustvom u radu na prethodnim izdanjima ovog razvojnog okruženja. Izgled VS okružen ja je u potpunosti prilagodljiv. Glavni prozor je onaj u kome se prikazuje cijeli naš kôd. Ovaj prozor je podi jeljen na kartice tako da možemo lako prelaziti sa jedne na drugu datoteku. Ovaj prozor ima i druge funkcije: može prikazati grafički korisnički
interfejs koji dizajniramo za naš projekat, čiste tekstualne datoteke, HTML, kao i različite alate ugrađene u VS. Iznad glavnog prozora nalaze se palete sa al atkama, kao i VS meni. Ovde možete naći nekoliko različitih paleta sa alatkama rangiranih po funkcionalnosti.
Konzolna aplikacija Za kreiranje konzolne aplikacije potrebno je otvoriti C#, kliknuti na New Project, odabrati Console Application i zatim kliknuti na OK.
Poslije par trenutaka se otvara prozor za pisanje koda sa već ispisanim kosturom aplikacije. Potrebno je obratiti pažnju na liniju static void Main(string[] args) . Ona definiše glavnu "Main" funkciju koja se prva pokreće Slika 1. Startna stranica Visual Studio-a C# 2010 Express
prilikom pokretanja programa. U tijelo ove funkcije treba upisati kôd koji je potrebo izvršiti. Tijelo ove funkcije je definisano početnom { i završnom } velikom zagradom i to je početak i kraj svih segmenata u C# jeziku. Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazan: class Program { static void Main(string[] args) { Console.WriteLine ("Moja prva C# aplikacija"); Console.ReadKey (); } }
C# razlikuje mala i velika slova!
Pokretanje aplikacije vrši se pomoću tastera F5 na tastaturi. Ako je kôd ispravno napisan pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 2. Primjer prozora komandne linije
Dino Dedić
6
Maturski rad
II.
Veb prezentacija programskog jezika C#
Elementi programskog jezika C# II - 1. Promjenljive i izrazi Računarski program je serija operacija koja manipuliše podacima. Skriven od pogleda korisnika i taj skup
operacija se uvijek odvija u pozadini.
Ako je računarski program u osnovi izvođenje operacija nad podacima, nama je potreban način na koji možemo snimiti neke podatke, kao i utvrđivanje metoda manipulacije njima. Ove dvije funkcije se obezbjeđuju preko promjenjivih i izraza. Prethodno je potrebno znati osnovu sintakse C#.
II - 1- 1.
Osnove C# sintakse
Izgled C# vrlo je sličan C++-u. C# kompajler ne obraća pažnju na dodatne razmake unutar koda. C# kôd je sastavljen od niza iskaza, a svaki od njih se završava tačkom -zarez - ;. Savršeno je prihvatljivo da se jedan iskaz unese u vi še redova. C# spada u jezike sa blokovskom strukturom. Ovi blokovi koji su ograničeni vitičastom zagradom { i } mogu da sadrže bilo koju vrstu iskaza. Vitičaste zagrade ne zaht jevaju tačku-zarez iza sebe. Npr. blok C# koda može izgledati ovako: {
; }
Ovdje nije prikazan pravi izgled C# koda. Prikazano je samo gdje bi trebalo staviti C# iskaze. Svaki blok koda ima svoj stepen uvlačenja. Blokovi koda mogu biti jedan u drugom i u tom slučaju se
ubačeni blokovi uvlače još više: { ; { ; } ; }
U C# kodu poželjno je pisati komentare, koji uopšte nisu dio C# koda, ali postoje unutar njega. Komentari omogućavaju da se lakše snalazimo u kodu C#. Postoje dva načina pisanja komentara, a to su: /* Ovo je komentar */
/* Također... ... i ovo */ // Ovo je druga vrsta komentara.
II - 1- 2.
Osnove strukture C# konzolne aplikacije
Iz sljedećeg primjera možemo odmah uočiti sve elemente sintakse. Najvažniji dio koda za sada je: static void Main(string[] args) { Console.WriteLine ("Moja prva C# aplikacija"); Console.ReadKey (); }
Ovaj dio koda se izvršava prilikom pokretanja konzolne aplikacije. Jedini red koda koji će nešto uraditi jeste onaj koji smo dodali automatski generisanom kodu.
II - 1- 3.
Promjenljive
Promjenljive nam služe da u njih pohranimo podatke. Promjenl jive imaju više tipova. Glavni razlog za ovakav način raspodjele po tipovima leži u tome što postoje različiti tipovi podataka kojima se na drugačiji nači n manipuliše. Da bismo koristili promjenljive one moraju biti deklarisane. To znači da moramo da im dodjelimo ime i tip. Da bi se promjenljiva navela u jeziku C# koristi se tip. Npr.: ;
Promjenljiva koja nije deklarisana ili kojoj nije dodjeljena vrijednosti neće se kompajlirati.
Prosti tipovi promjenljivih Prosti tipovi su brojčane ili logičke vrijednosti (tačno ili netačno). Većina prostih tipova su brojevi . Razlog za podjelu tipova brojnih promjenljivih leži u samom mehanizmu smeštanja brojeva kao nizova jedinica i nula u Dino Dedić
7
Maturski rad
Veb prezentacija programskog jezika C#
memoriju računara. Za cjelobrojne vrijednosti jednostavno uzimamo određen broj bito va (nezavisnih cifri koje mogu biti jedinice ili nule) i predstavljamo naš broj u binarnom formatu. Prom jenljiva koja smješta N bitova dozvoljava nam da preko nje prikažemo bilo koji broj izmedu 0 i . Bilo koji broj iznad ove vrijednosti biće prevelik da se smjesti u promjenljivu. Tabela 1. Opseg vrijednosti u odnosu na tip podataka
Tip
Dozvoljene vrijednosti
sbyte byte short ushort int uint long ulong
cijeli broj između -128 i 127. cijeli broj između 0 i 255. cijeli broj između -32768 i 32767. cijeli broj O i 65535. cijeli broj između -2147.483.648 i 2147.483.647.
cijeli broj između 0 i 4294967295 cijeli broj između -9223.372.036.854.775.808 i 9223.372.036.854.775.807. cijeli broj između 0 i 1846.744.073.709.551.615.
Znak u koji stoji ispred imena nekih promjenljivih označava da u taj tip promjenljivih ne možemo sm ještati negativne brojeve, što se može vid jeti iz kolone dozvoljenih vrijednosti u tabeli.
Imenovanje promjenljivih, konvencije i vrijednosti literala Za ime promjenljive ne može se koristiti bilo koji niz znakova. Osnovna pravila pri imenovanju promjenljivih su da prvi znak imena promjenljive mora biti ili slovo ili znak podvlačenja _ ili @, a naredni znakovi mogu biti slova, znakovi podvlačenja ili brojevi. C# je osjetljiv na korištenje velikih i malih slova. Na primer, o vo su sve različite promenljive: myVariable MyVariable MYVARIABLE
Pravila imenovanja Programeri su do sada shvatili da je najbolje imenovati promjenljivu prema njenoj namjeni. U VS-u dovoljno je da pokazivač miša nam jestimo na ime promjenljive kojoj želimo da otkrijemo tip i ispisaće se poruka koja nas o tome obavještava . Preporuka Microsoft-a je da koristimo konvenciju PascalCase. Npr : PrezimeUcenika ZimaNasegNezadovoljstva Tabela 2. Prefiksi tipova podataka Tip podataka
Prefiks
Primjer vrijednosti
Boolean
bln
blnUlogovan
Byte
byt
bytGodiste
Char
chr
chrLozinka
Decimal
dec
decProdato
Double
dbl
dblRezultatIzracunavanja
Integer
int
intBrojacPetlje
Long
lng
lngIdKupca
Object
obj
objWord
Short
sho
shoTotalnaVrednost
String
str
strIme
Tabela 3. Prefiksi promjenjivih po području važenja
Dino Dedić
Područje važenja
Prefiks
Primjer – vrijednosti
Global Private to class
g m
g_strSnimiPutanju m_blnPromenaVrijednosti 8
Maturski rad
Veb prezentacija programskog jezika C#
Vrijednosti literala U prethodnom primjeru vidjeli smo dvije vrijednosti literala - cjelobrojnu i znakovnu. I drugi tipovi promjenljivih takođe mogu imati vr ijednosti literala, što će biti prikazano u sljedećoj tabeli. Mnogi od njih uključuju sufikse, odnosno nizove znakova koji se dodaju na kraju literala da bi se naznačio željeni tip. Neki literali imaju više različitih tipova koje na osnovu konteksta određuje kompajler za vrijeme kompajliranja: Tabela 4. Sufiksi literala kod tipova po dataka Tip/ovi
Kategorija
Sufiks
Primjer - dozvoljene vrijednosti
bool
logička
nema
true ili false
int,uint, long, ulong
cjelobrojna
nema
100
uint,ulong
cjelobrojna
u ili U
100U
long, ulong
cjelobrojna
l ili L
100L
ulong
cjelobrojna
ul, uL, Ul,lu,
100UL
float
realna
f ili F
1.5F
double
realna
nema, d ili D
1.5
decimal
realna
m ili M
1.5M
char
znakovna
nema
’a’, ili escape sekvenca
string
niz znakova
nema
“a..a“, može se uključiti escape sekvenca
String literali Tabela 5. Escape sekvence Escape sekvence
Znak koji pravi
Vrednost znaka u unicode-u
\` \" \\ \0 \a \b \f \n \r \t \v
jednostruki navodnik dvostruki navodnik obrnuta kosa crta nula
0x0027 0x0022 0x005C 0x0000 0x0007 0x00080 0x000C 0x000A 0x000D 0x0009 0x000B
alarm(pravi pištanje) unazad za jedan znak
prelazak na sledeću stranicu novi red prenos u novi red horizontalni tabulator vertikalni tabulator
Posljednja kolona ove tabele prikazuje Unicode vrijednosti. Za svaki Unicode znak možemo navesti odgovarajuću escape sekvencu, kao u tabeli. Sekvenca se uvijek sastoji od znaka \ iza koga slijedi četvorocifrena heksadecimalna vrijednost. To znači da su sljedeća dva stringa ekvivalentna: "Petar\’s string." "Petar\u0027s string"
Određivanje i dod jeljivanje vrijednosti promjenljivim Promjenljive deklarišemo koristeći njihov tip i ime. Npr.: int godiste;
Potom smo joj dodjelili vrijednost uz pomoć operatora dod jele : godiste = 25;
Promjenljive moraju biti inicijalizovane pre nego što ih upotrijebimo. Možemo navesti više različitih promjenljivih istog tipa u isto vrijeme ako ih odvojimo zarezom: int xVelicina, yVelicina;
Druga tehnika koju ćete sretati jeste dodjeljivanje vrijednosti promjenljivim dok ih deklarišemo: int godiste = 25; Dino Dedić
9
Maturski rad
Veb prezentacija programskog jezika C#
Možemo koristiti i obje tehnike zajedno: int xVelicina =4, yVelicina = 5;
Ovdje su xVelicina i yVelicina različitih vrijednosti. int xVelicina, yVelicina = 4;
II - 1- 4.
Izrazi
C# kôd sadrži veći broj operatora koji služe manipulaciji promjenjivih, uključujući i operator dodeljivanja. Kombinovanjem operatora sa promenljivima i literalima možemo formirati izraze.
Postoji širok spektar operatora. Prosti uključuju sve osnovne matematičke operacije, kao što je operator + za sabiranje, a oni komplikovaniji manipulaciju nad sadržajem promenljive. Postoje i logički operatori koji služe u radu sa logičkim promenl jivima. Operatori se mogu grubo podeliti na tri kategorije:
unarni operatori koji rade samo sa jednim operandom
binarni operatori koji rade sa dva operanda
ternarni operatori koji rade sa tri operanda
II - 1- 5.
Matematički operatori
U donjoj tabeli navedeni su svi operatori zajedno sa kratkim primjerom njihove upotrebe i rezultatima. Tabela 6. Operatori Operator
Kategorija
Kategorija
+ * / % + -
binarni
var1
binarni binarni binarni
var1 = var2 - var3; var1 = var2 * var3 var1 = var2 /var3
var1 je dodejljena vrijednost razlike var1 je dodjeljena vrijednost proizvoda var1 je dodjeljena vrijednost dijeljenja
binarni unarni
var1 = var2 % var3 var1 = + var2
var1 je dodjeljena vrijednost koja je ostatak dijeljenja var1 je dodjeljena vrijednost var2
unarni
var1 = - var2
var1 je dodjeljena vrijednost var2
=
var2 + var3;
Rezultat var1 je dodjeljena vrijednost sume
Tabela 7. Operatori inkrementiranja i dekrementiranja Operator
Kategorija
++
unarni
Primer izraza
var1 = ++var2
Primer izraza
var1 je dodjeljena vrijednost. var2+1,
var2 je uvećana za 1. --
unarni
var1 = --var2
++
unarni
var1 = var2++
var1 je dodjeljena vrijednost. var2-1, var2 je umanjena za 1. var1 je dodjeljena vrijednost var2.
var2 je uvećana za 1 --
unarni
var1 = var2--
var1 je dodjeljena vrijednost var2. var2 je umanjena za 1.
Operator ++ uvijek uvećava svoj 1 operand za 1, a - - ga uvijek umanjuje za 1. Stavljanje operatora prije operanda znači da se operan d mijenja prije nego što se izvrše dalja izračunavanja i obrnuto.
II - 1- 6.
Operatori dodjeljivanja
U donjoj tabeli navedeni su operatori dodjeljivanja zajedno sa primjerom njihove upotrebe i rezultata. Tabela 8. Operatori dodeljivanja Operator
Kategorija
Primer izraza
= += -= *= /= %=
binarni binarni binarni binarni Binarni binarni
var1=var2; var1+=var2 var1-=var2; var1*=var2; var1/=var2; var1%=var2;
Dino Dedić
Rezultat
var1 je dodjeljena vrijednost var2 var1 je dodjeljena vrijednost koja čini sumu var 1 var 2 var1 je dodjeljena vrijednost razlike var1 i var2 var1 je dodjeljena vrijednost proizvoda var1 i var 2 var1 je dodjeljena vrijednost djeljenja var1 i var2 var1 je dodjeljena vrijednost ostatka djeljenja var1 i var2
10
Maturski rad
Veb prezentacija programskog jezika C#
II - 1- 7.
Prvenstvo operatora
Kada računar obrađuje izraz, on izvršava svaki operator prema redoslijedu. To ne znači da se operatori uvijek izračunavaju s lijeva na desno. Jednostavan primjer gdje se prvo izvršava operator + pa tek onda = : var1 = var2 + var3;
Postoje i druge situacije kada prvenstvo izvođenja operatora nije očigledno, na prim jer: var1 = var2 + var3 * var4;
Ovdje je redoslijed izvršavanja sljedeći: prvo operator * , zatim + i na kraju =. Tu možemo odrediti prvenstv o izvršavanja koristeći zagrade. Npr. : var1 = ( var2 + var3) * var4;
Redoslijed po kome se izvršavaju operatori prikazan je u tabeli. Tabela 9. Prvenstvo operatora Primer izraza
Rezultat
var1=var2;
var1 je dodjeljena vrijednost var2
var1+=var2
var1 je dodjeljena vrijednost koja čini sumu v ar 1 var 2
var1-=var2;
var1 je dodjeljena vrijednost razlike var1 i var2
var1*=var2;
var1 je dodjeljena vrijednost proizvoda var1 i var 2
var1/=var2;
var1 je dodjeljena vrijednost djeljenja var1 i var2
var1%=var2;
var1 je dodjeljena vrijednost ostatka djeljenja var1 i var2
II - 1- 8.
Imenovani prostori
Imenovani prostori se također koriste i prilikom kategorisanja objekata .NET okruženja. C# kôd sadrži u globalnim imenovanim prostorima. To znači da se tom kodu može pristupiti iz nekog drugog koda koji je unutar globalnih imenovanih prostora tako što se navede njegovo ime. Možemo koristiti i ključnu riječ namespace, da bismo definisali imenovani prostor u bloku koda. Takva imena moraju biti kvalifikovana, ukoliko će ih koristiti kôd izvan imenovanog prostora. Kvalifikovano ime je ono koje sadrži sve informacije o svojoj hijerarhiji. Kvalifikovana imena koriste znak (.) između nivoa imenovanog pr ostora. namespace LevelOne { //kôd u imenovanom prostoru LevelOne //ime "NameOne" definisano } //kôd u globalnom imenovanom prostoru
Ovaj kôd definiše jedan imenovani prostor LevelOne kao i jedno ime u njemu, NameOne. Kôd napisan unutar LevelOne imenovanog prostora poziva ovo ime upotrebom " NameOne“. Kôd u globalnom imenovanom prostoru mora pozivati ovo ime na sljedeći način: "LevelOne.NameOne ".
U okviru imenovanih prostora možemo definisati ugnježdene imenovane prostore, također koristeći ključnu riječ namespace. Ugnježdeni imenovani prostori se pozivaju preko svoje hijerarhije . Npr. : namespace LevelOne { //kôd u imenovanom prostoru LevelOne namespace LevelTwo { //kôd u imenovanom pro storu LevelOne.LevelTwo //ime "NameTwo" definisano } } //kôd u globalnom imenovanom prostoru
Ovdje se NameTwo mora pozivati kao "LevelOne.LevelTwo.NameTwo" iz globalnog imenovanog prostora.
Važno je naglasiti da su imena jedinstveno definisana od strane njihovih imenovanih prostora. Mogli bismo definisati ime "NameThree" u imenovanim prostorima LevelOne i LevelTwo :
Dino Dedić
11
Maturski rad
Veb prezentacija programskog jezika C#
namespace LevelOne { //ime "NameThree" definisano namespace LevelTwo { //ime "NameThree" definisano } }
Ovdje smo definisali dva imena, LevelOne.NameThree i LevelOne.LevelTwo.NameThree, koja se mogu koristiti nezavisno jedno od drugoga. Kada definišemo imenovani prostor, možemo poje dnostaviti pristup imenima koje sadrže pomoću iskaza using. Npr. u sljedećem kodu iz imenovanog prostora LevelOne treba da imamo pristup imenima u imenovanom prostora LevelOne.LevelTwo bez klasifikacije: namespace LevelOne { using LevelTwo; namespace LevelTwo { //ime "LevelTwo" definisano } }
Sada iz imenovanog prostora LevelOne možemo pozvati ime LevelTwo.NameTwo pomoću "NameTwo".
II - 2. Kontrola toka programa Postoje dvije metode kontrole toka programa, odnosno redosljeda izvršenja redova u C# kodu.
Grananje – gdje se izvršava kôd uslovno u zavisnosti od rezultata nekog poređenja.
Petlje - ponavljanje izvršenja istih iskaza (određeni broj puta do unaprijed zadatog uslova).
II - 2 - 1.
Bulova logika
Tip bool može sadržati samo dv ije vrijednosti: true ili false. Uglavnom se tipovi bool koriste da snimi rezultat nekog poređenja. Poređenje zaht jeva upotrebu relacionih operatora koji su prikaz anih u donjoj tabeli. Tabela 10. Operatori poređenja Operator
Kategorija
Primjer izraza
==
binarni
var1=var2== var3;
!=
binarni
var1=var2!= var
<
binarni
var1=var2< var3
>
binarni
var1=var2>var3;
<=
binarni
var1=var2<= var3;
>=
binarni
var1=var2>= var3;
Rezultat
var1 je dodjeljena vrijednost true ako je var2 jednaka var3, u suprotnom false. var1 je dodjeljena vrijednost true ako je var2 nije jednaka var3, u suprotnom false. var1 je dodjeljena vrijednost true ako je var2 manja od var3, u suprotnom false. var1 je dodjeljena vrijednost true ako je var2 veća od var3, u suprotnom false. var2 manja ili jednaka var3, u suprotnom false.
var2 veća ili jednaka var3, u suprotnom false.
Postoje i logički operatori koji su namjenjeni isključivo radu sa logičkim vrijednostima: Tabela 11. Logički operatori Operator
Kategorija
Primjer izraza
!
unarni
var1 = !var2;
&
|
binarni
binarni
var1 = var2 & var3;
var1 = var2|var3;
Rezultat
var 1 je dodeljena vrednost true ako je var2 false, ili vrednost false ako je var2 true (logičko NE). var1 je dodeljena vrednost true ako var2 i var3 imaju vrednost true u suprotnom false (logičko I). var1 je dodeljena vrednost true ako var2ima vrednost true ili var3 ima vrednost true ili obe promenljive imaju
vrednost true, u suprotnom dobija vrednost false (logičko ILI).
Dino Dedić
12
Maturski rad
Veb prezentacija programskog jezika C#
^
var1=var2 ^ var3;
binarni
var1 je dodeljena vrednost true ako var2 ima vrednost true ili var3 ima vrednost true, ali ne i ako obe promenljive imaju vrednost true, u suprotnom false (Logičko ekskluzivno ILI).
Operatori & i I imaju dva slična operatora: Tabela 12. Logički operatori Operator
Kategorija
Primjer izraza
&&
binarni
var1=var2&&var3;
||
binarni
var1=var2||var3;
Rezultat
var1 je dodjeljena vrijednost true ako var2 i var3 imaju vrednost true, u suprotnom f alse (logičko I) var1 je dodeljena vrednost true ako var2 ili var3 (ili obje promenljive) imaju vrednost true, u suprotnom var1 dobija vrednost false (logičko ILI)
Njihov rezultat je potpuno isti kao & i |, ali postoji bitna razlika u načinu na koji se dobija njihov rezultat, što može dati bolje performanse programa. Oba operatora prvo ispituju vr ijednost prvog operanda (var2, pa na osnovu vrijednosti ovog operanda možda neće biti potrebno da se ispita drugi operand (var 3). II - 2 - 2.
Iskaz goto
Jezik C# dozvoljava da se određeni d ijelovi koda obilježe i da se na ta mesta direktno skače pomoću iskaza goto. Galvna korist je u tome što možemo na jednostavan način kontrolisati šta se u kodu izvršava i kada. Iskaz goto se koristi na sljedeći način: goto ;
Npr.: int myInteger = 5; goto myLabel; myInteger +=10; myLabel; Console.WriteLine("myInteger = {0}", myInteger);
Program se izvršava na sl jedeći način:
Promjenjiva mylnteger je deklarisana kao tip int i dodjeljena joj je vrijednost 5.
Iskaz goto prekida normalan tok programa i prebacuje kontrolu na red obilj ežen sa myLabel .
Vrijednost mylnteger se ispisuje na konzoli.
II - 2 - 3.
Grananje
Grananje je kontrola toka. Red na koji se prelazi zavisi od uslovnog iskaza. Taj uslovni iskaz biti će zasnovan na poređenju dvije ili više vrijednosti sa korištenjem Bulove logike. Postoje tri tehnike grananja :
tenarni operator
iskaz if
iskaz switch
Ternarni operator Najjednostavniji način da se izvede poređenje jeste pomoću ternarnog uslovnog operatora ? : . Sintaksa je sljedeća: ? :
Ovdje se ispituje da bi se dobila logička vrednost, pa je rezultat operator ili u zavisnosti od te vrijednosti.
II - 2 - 4.
Iskaz IF
Iskaz if je mnogo bolji način za donošenje odluka. Ovaj iskaz koristimo da uslovno izvršimo druge iskaze. Najjednostavnije korištenje iskaza if je sledeće:
Dino Dedić
13
Maturski rad
Veb prezentacija programskog jezika C#
If (): ;
Ovdje se izračunava (mora biti logička vrednost da bi se kôd kompajlirao), a iskaz ispod se izvršava ako uslov ima vrednost true. Nakon izvršenja tog koda, ili ukoliko imao rezultat false, program se
nastavlja od sledećeg reda koda. Možemo navesti i dodatni kôd koristeći iskaz else u kombinaciji sa iskazom if . Ovaj iskaz se izvršava ako ima vrednost false: if () true>; else false>;
Da bi ste probali jednostavan ispis na ekranu u okviru velikih zgrada upišite tekst tačno kao što je prikazano: static void Main(string[] args) { string poredjenje; Console.WriteLine("Dobar dan."); Console.WriteLine("Unesite prvi broj"); double prvi = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Unesite drugi broj"); double dr ugi = Convert.ToDouble(Console.ReadLine()); if (prvi > drugi) Console.WriteLine("Prvi broj je veci od d rugog."); else Console.WriteLine("Drugi broj je veci od prvog."); Console.ReadKey();
Slika 3. Rezultat izvršavanja navedenog programa
}
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
II - 2 - 5.
Iskaz switch
Iskaz switch je vrlo sličan iskazu if po načinu uslovnog izvršavanja koda na osnovu neke vrijednosti dobijene iz testa. Switch nam dozvoljava da ispitamo više različitih vrijednosti test promenljive (selektorske vrijednosti) odjednom. Osnovna struktura switch iskaza je sljedeća: switch () { case : == > case : == > default:: != }
break; break; break;
Vrijednost u promenljivoj poredi se sa svakom od vrijednosti (navedenim u iskazu case) i ako postoji poklapanje onda se izvršava kôd predviđen za to. Ukoliko ne , onda se izvršava kôd u dijelu default . Na kraju koda svake sekcije imamo dodatnu komandu break da kôd programa moga da pređe u sledeći case iskaz.
II - 2 - 6.
Petlje
Petlje predstavljaju ponavljanje izvršenja iskaza. Možemo ponavljati isti kôd onoliko puta koliko mi želimo. Petlja do while Kôd koji je obilježen unutar bloka do while petlje se izvršava, a zatim se izvodi logički test, pa se kôd izvršava ponovo ako je rezultat tog testa true i tako dalje. Iz petlje se izlazi kada je rezultat testa false. Struktura do petlje izgledao ovako (gdje je logička vrednost) : do { } while ();
Da biste probali jednostavan ispis na ekranu upišite tekst tačno kao što je prikazano: Dino Dedić
14
Maturski rad
Veb prezentacija programskog jezika C#
class Program { static void Main(string[] args) { int i = 1; do { Console.WriteLine(i++); } while (i < 11); Console.ReadKey(); } }
Slika 4. Rezultat izvršavanja navedenog programa
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Petlja while Kod while petlji logički test se izvršava na početku. Ukoliko je rezultat testa false, ciklus petlje se nikad ne izvrši, nego se prelazi na red koda koji se nalazi iza petlje. Petlje while se definišu na sledeći način: while () { } int i=1;
Da biste probali jednostavan ispis na ekranu upišite tekst tačno kao što je prikazano: class Program { static void Main(string[] args) { int i = 1; while (i <= 11) { Console.WriteLine(i++); } Console.ReadKey(); } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 5. Rezultat izvršavanja navedenog programa
Petlja for Petlja for se izvršava unapred određeni broj puta i održava svoj sopstveni brojač. Ako želimo petlju sa brojačem koji se povećava od 1 do 10 u koracima po jedan, početna vrednost je 1 - uslov je da brojač bude manji ili
jednak 10, a operacija koja se izvodi na kraju svakog ciklusa je povećavanje brojača za jedan. int i; for (i=1; i<=10; ++ i) { Console.Writeline(i); }
Da biste probali jednostavan ispis na ekranu upišite tekst tačno kao što je prikazano: class Program { static void Main(string[] args) { int i; for (i = 1; i <= 10; ++i) { Console.WriteLine(i); } Console.ReadKey(); }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom: Slika 6. Rezultat izvršavanja for petlje
Prekidanje petlji Jezik C# obezbjeđuje četiri komande koje nam pomažu u prekidu petlji. Tri od njih smo već vid jeli u dragim situacijama: Dino Dedić
break
- trenutno završava petlju 15
Maturski rad
Veb prezentacija programskog jezika C#
continue - trenutno zaustavlja ciklus petlje (izvršavanje se nastavlja od sledećeg ciklusa)
goto
- dozvoljava iskakanje iz petlje na obilježeno mjesto u kodu
return
- iskače iz petlje i iz funkcije koja je sadrži.
Komandom break se jednostavno izlazi iz petlje i nastavlja izvršenje prvog reda koda posl ije petlje. Npr. : int i = 1; while (i <=10) { if (i ==6) break; Console.WriteLine(i++); }
Kôd će ispisati brojeve od 1 do 5, zatim će komanda break prouzrokovati izlaz kada bude jednako 5. Continue zaustavlja samo trenutni ciklus, a ne cijelu petlju. Npr. : int i = 1; for (i=l; i<=10; i++) { if ( (i. % 2)==0) continue; Console.WriteLine(i) ; }
Treći metod je korištenje iskaza goto kao što smo videli ranije, na primjer: int i = 1; while (i <=10) { if (i == 6) goto TackaIzlaza; Console.WriteLine i++) ; } Console.WriteLine ("Ovaj kôd se nikad neće izvršiti .“); TackaIzlaza; Console.WriteLine ("Ovaj kôd se izvršava kad se iz petlje izađe uz pomoć goto. ");
Izlazak iz petlje sa goto je dozvoljen, ali nije dozvoljeno uskakanje u petlju.
Beskonačne petlje Moguće je (greškom ili nam jerno), definisati petlje koje se nikada ne završavaju, tzv. beskonačne petl je. Kao vrlo jednostavan primjer pogledajte sledeće: while (true) { // kôd u petlji }
Funkcije Izvođenje operacije nad podacima podrazumijevalo je postavljanje koda na tačno određeno mesto gde on treba da funkcioniše. Takva programska struktura je ograničena. Ovaj problem rješavamo uz pomoć funkcija. Funkcije u jeziku C# predstavljaju sredstva kojima se obezbj eđuje blok koda koji može biti izvršen na bilo kom mjestu u aplikaciji. Potrebno je da samo jednom napišemo kôd, i svaka promjena koju unesemo odraziće se na sva mesta na kojima se kôd izvršava. Koristeći funkcije smanjujemo glavni dio kôda u aplikaciji, zato što se sporedni delovi
izvršavaju izvan glavnog. II - 3 - 1.
Definisanje i korištenje funkcija
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: class Program { static void Main(string[] args { Write(); Console.ReadKey(); } static void Write() { Dino Dedić
Slika 7. Rezultat izvršavanja funkcije programa 16
Maturski rad
Veb prezentacija programskog jezika C#
Console.WriteLine("Dobar dan"); Console.WriteLine("Ovo je tekst iz funkcije.");} }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
II - 3 - 2.
Povratne vrijednosti
Najjednostavniji način za razm jenu podataka sa funkcijom jeste korištenje povratne vrijednosti . Povratne vrijednosti kao i promenljive imaju svoj tip. Npr. možemo imati funkciju sa imenom getString() čija je povratna vrijednost tipa string. To možemo koristiti u kodu na sl jedeći način: string mojString; mojString = getString() ;
Kada funkcija vraća vrijednost moramo je izmijeniti na dva načina:
Moramo navesti tip povratne vrijednosti u deklaraciji funkcije, umesto ključne reči void . Moramo koristiti ključnu riječ return da bi smo završili funkciju i prenijeli povratnu vrijednost u pozivajući kôd.
static double getVa() { return 3.2; }
Povratne vrijednosti su obično rezultat proračuna izvedenog unutar funkcije. Kada dođe do iskaza return, izvršavanje programa se vraća na pozivajući kôd. Redovi unutar funkcije koji se nalaze iza ovog iskaza neće biti izvršeni. To ne znači da se return mora postaviti na kraj funkcije. Iskaz return možemo koristiti prije toga. II - 3 - 3.
Parametri
Kada funkcija treba da prihvati parametre, moramo navesti listu parametara koje funkcija prihvata, (zajedno sa njihovim tipovima unutar definicije funkcije) i odgovarajuću listu parametara u svakom pozivu funkcije. Npr. prosta funkcija može imati dva parametra tipa double i vratiti njihov proizvod: static double product (double param1, double par am2) { return param1 * param2; }
II - 3 - 4.
Nizovi parametara
C# nam dozvoljava da definišemo samo jedan poseban parametar za funkciju. Ovaj parametar poznat je kao niz parametara. Nizovi parametara dozvoljavaju nam da pozivamo funkcije koristeći promenljivu količinu parametara, a definisani su ključnom reči params.
Nizovi parametara mogu biti korisni za pojednostavljivanje koda, jer ne moramo prosljeđivati nizove iz našeg pozivajućeg koda. Sl jedeći kôd je potreban da bi se definisala funkcija koja koristi niz parametara: static (, . . . , params [] ) { ..... ..... return ; }
Ovu funkciju možemo pozvati sa: (,...,,...)
Ovdje su , vrijednosti tipa koji je korišt en da bi se inicijalizovao niz . Ne postoji ograničenje u broju parametara koje možemo navesti, jedino ograničenje je da su svi tipa . Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: class Program { static int sumProm(params int[] vals) { int sum = 0; foreach (int prom in vals) { sum += prom; } return sum;
Slika 8. Rezultat izvršavanja funkcije
kojoj se prosljeđuju nizovi parametara
} static void Main(string[] args) { Dino Dedić
17
Maturski rad
Veb prezentacija programskog jezika C#
int sum = sumProm(1, 5, 2, 9, 8); Console.WriteLine("Dobar dan"); Console.WriteLine("Vrijednost sume je : ", sum); Console.ReadKey(); } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
II - 3 - 5.
Prijenos parametara po referenci i vrijednosti
Funkcije koje smo do sada naveli koristile su u prenos parametara po vrijednosti. Podrazumjeva se da smo, koristeći parametre, prosljeđivali njihove vrijednosti u promenljive koje koristi funkcija. Bilo koja promjena nad promjenljivom unutar funkcije nema nikakvog efekta na parametre navedene u pozivu funkcije. Npr. razmotrite funkciju koja udvostručuje i prikazuje vrijednost prosljeđenog parametra: static void DupliranaVrijed(int prom) { prom *=2; Console.WriteLine("Duplirana promenjiva = (0)", prom); }
Ovdje je parametar prom udvostručen unutar funkcije. Ako je pozovemo na sl jedeći način: int mojBroj = 5; Console.WriteLine("MojBroj = ", mojBroj); DupliranaVred (mojBroj) ; Console.WriteLine("MojBroj = ", mojBroj);
Na konzoli će se pojaviti tekst: mojBroj = 5 duplirana promenljiva = 10 mojBroj = 5
Pozivanje funkcije DupliranaVrijed() sa promenljivom mojBroj kao parametrom, ne utiče na vrijednost mojBroj unutar bloka Main(), iako je parametar val koji joj je dodjeljen udvostručen. Ako poželimo da se vr ijednost promenjive mojBroj promijeni, eto problema. Možemo koristiti funkciju koja vraća novu vrijednost za mojBroj , a pozivamo je sa: int mojBroj = 5; Console.WriteLine{"MojBroj =", mojBroj); MojBroj = DupliranaVrijed(mojBroj) ; Console.WriteLine("MojBroj =", mojBroj);
Ovaj kôd se neće izboriti sa promjenom vrijednosti za više promjenljivih koje se koriste kao parametri. Umjesto toga, želimo da prosl ijedimo parametar po referenci . To znači da će funkcija raditi sa potpuno istom promjenjivom kao u pozivu funkcije, a ne samo sa promjenjivom koja ima istu vrijednost. Sve promjene koje se dešavaju toj prom jenljivoj odrazit će se na prom jenljivu koja se koristi kao parametar. Da bi se ovo uradilo, treba jednostavno upotrebiti ključnu reč ref za navođenje parametra: static void DupliranaVred (ref int prom) { prom *= 2; Console.WriteLine("duplirana promenljiva = (0)", prom); }
Ponovimo to u pozivu funkcije (to je obavezno, jer je parametar tipa ref dio potpisa same funkcije): int mojBroj = 5; Console.WriteLine("MojBroj =", mojBroj); DupliranaVrijed (ref mojBroj); Console.WriteLine("MojBroj =", mojBroj);
Tada bi izlazni tekst na konzoli bio sledeći: mojBroj = 5 duplirana promenljiva = 10 mojBroj = 10
II - 3 - 6.
Izlazni parametri
Možemo definisati da je dati parametar izlazni parametar, preko ključne reči out koja se koristi na isti način kao i ključna reč ref (kao modifikator parametra u definiciji funkcije, i pri njenom pozivanju). Rezultat toga je isto ponašanje kao i kod referentnog parametra, u smislu da se vrijednost parametra na kraju funkcije vraća promjenjivoj koja je upotrebljena u njenom pozivu. Međutim, postoje i važne razlike. Dok za parametre tipa ref nije dozvoljeno koristiti promjenljive kojima nije dodijeljena vrijednost, kod parametara out to možemo raditi. Pored toga, out parametar se mora tretirati kao da mu nije dodijeljena vrijednost od strane funkcije koja ga koristi. Dino Dedić
18
Maturski rad
Veb prezentacija programskog jezika C#
To znači da, iako je dozvoljeno k oristiti promjenljivu kojoj je dodijeljena vrijednost kao izlazni parametar, vrijednost koju ona sadrži u pozivu funkcije biti će izgubljena nakon izvršenja te funkcije. Na primer, razmotrite proširenje funkcije MaxVrednost() koja vraća najveću vrijednost u nizu. Izmijenit ćemo funkciju tako da vrati indeks elementa sa najvećom vrijednosti unutar niza. Da bi bilo jednostavnije vratit ćemo samo indeks prve pojave najvećeg elementa, ukoliko ih ima više. Da bismo ovo uradili dodajemo izlazni parametar mijenjajući funkciju na sljedeći način: static int MaxVrijednost(int[] intArray, out in maxIndex) { int maxProm = intArray [0]; maxIndex =0; for (int i = 1; i < intArray.Length; i++) { if (intArray[i] > maxProm) } maxProm = intArray [i] ; maxIndex = i; return maxProm; }
Možemo koristiti funkciju na sl jedeći način: int [] myArray = (1, 8, 3, 6, 2, 5, 9, 3, 0, 2); int maxIndex Console.Write("Maksimalna vrijednost u nizu myArray je {0)", MaxVrijednost(myArray, out maxIndex); Console.WriteLine{"Maksimalna vrijednost niza je (0) element u nizu", maxindex+1);
Rezultat ovoga je: Maksimalna vrednost u nizu myArray je 9 Maksimalna vrednost niza je 7 element u n izu
Ovde je važno naglasiti da se ključna r iječ out mora upotrijebiti u pozivu funkcije, baš kao i ključna riječ ref . Upamtite daje vrijednosti maxIndex dodato jedan, i vraća se ovde dok je ispisujemo na ekran. To je zato da bismo indeks preveli u razumljiviji oblik, tako da se prvi element u nizu ne označava sa 0 već sa 1. II - 3 - 7.
Opseg važenja promjenljive
Možda ste se upitali zašto je uopšte potrebna razm jena podataka sa funkcijama. Razlog je taj što se promjenljivama u C#-u može pristupiti samo iz lokalnih regiona koda. Za datu promjenl jivu kaže se da ima opseg važenja unutar koga joj se može pristupiti. Opseg važenja promjenljive je važna tema i najbolje ćemo je predstaviti preko primjera.. Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: class Program { static void Write() { string mojString = "Sada definisan je u Write()"; Console.WriteLine("Sada je u Write()"); Console.WriteLine("mojString = ", mojString); } static void Main(string[] args) { string mojString = "Sada je definisan u Main()."; Write(); Console.WriteLine(""); Console.WriteLine("Sada je u Main()."); Console.WriteLine("mojString = ", mojString); Console.ReadKey(); } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom: Operacije koje izvodi ovaj kôd su sledeće:
Main() definiše i inicijalizuje promjenjivu tipa string sa imenom mojString.
Main() prebacuje kontrolu na funkciju Write().
Dino Dedić
Slika 9. Rezultat izvršavanja fu nkcije i opseg važenja promjenljive
Write() definiše i inicijalizuje 19
Maturski rad
Veb prezentacija programskog jezika C#
promjenjivu tipa string sa imenom mojString, koja nije isto što i promjenjiva mojString definisana u funkciji Main().
Write() ispisuje niz znakova na konzolu koji sadrži vrijednost mojString definisan unutar funkcije Write().
Write() vraća kontrolu funkciji Main(). Main() ispisuje na konzolu vrijednost koju sadrži mojString definisan unutar funkcije Main().
Promjenljive čiji opseg važenja na ovaj način pokriva samo jednu funkciju, poznate su kao lokalne promenljive. Također je moguće imati globalne promenljive, čiji opseg važenja pokriva više funkcija. Izmjenite kôd
na sljedeći način: class Class1 { static string mojString; static void Write() { string mojString = "Sada je definisan u Write()"; Console.WriteLine("Sada je u Write()"); Console.WriteLine("Lokalna mojString = String definisan u Write()", mojString); Console.WriteLine("Globalna mojString = Globali string", Class1.mojString); } static void Main(string[] args) { string mojString = "Sada je definisan u Main()."; Write(); Console.WriteLine(""); Console.WriteLine("Sada je u Main()."); Console.WriteLine("Lokalna mojString = String definisan u Write()", mojString); Console.WriteLine("Globalna mojString = Globali string", Class1.mojString); Console.ReadKey(); } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 10. Rezultat izvršavanja funkcije i opseg važenja globalnih promjenljivih
Ovde smo dodali još jednu prom jenljivu pod imenom mojString, ovaj put na višem nivou hijerarhije imena. Ova promjenljiva je definisana na sljedeći način: static string mojString;
Primjetićete da opet koristimo ključnu reč static . U konzolnim aplikacijama, prilikom navođenja globalnih promjenjivih u ovom obliku, moramo koristiti ključne reči static ili const . Ako želimo da m ijenjamo vrijednost globalne promjenljive, moramo navesti static , jer const zabranjuje mijenjanje vrijednosti promjenljive.
Da bismo napravili razliku između ove promjenljive i lokalnih promjenjivih istog imena u funkcijama Main() i Write(), moramo se obratiti promjenljivoj koristeći puno kvalifikovano ime. Ovde se globalnoj promjenljivoj obraćamo sa Class1.mojString. To je neophodno samo kada imamo globalne i lokalne promjenljive sa istim imenom. II - 3 - 8.
Opseg važenja promenljive u drugim struktur ama
Opseg važenja prom jenl jivih uključuje blok koda u kom su definisane i bilo koje direktno ugniježdene blokove koda. To se odnosi i na druge blokove koda, kao što su grananja i petlje. Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: class class1 { static void Main(string[] args) { int i; string text = " "; Dino Dedić
20
Maturski rad
Veb prezentacija programskog jezika C#
for (i = 0; i < 10; i ++) { text = "Linija" + Convert.ToString(i); Console.WriteLine(" ", text); } Console.WriteLine("Posljednji tekst je definisan u petlji : ", text); Console.ReadKey(); } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 11. 3.
II - 3 - 9.
Opseg važenja promenljive u drugim strukturama
Parametri i povratne vrijednosti nasuprot globalnim podacima
U ovom dijelu ćemo bliže pogledati razm jenu podataka sa funkcijama preko globalnih podataka i preko parametara i povratnih vrijednosti. Da se podsjetimo - govorimo o razlici izmedu koda kao što je: class class1 { static void DupliranaVrijed(ref int prom) { prom *= 2; Console.WriteLine("Duplirana promjenjiva = ", prom); } static void Main(string[] args) { int prom = 5; Console.WriteLine("Promjenjiva = ", p rom); DupliranaVrijed (ref prom); Console.WriteLine("Promjenjiva = ", prom); Console.ReadKey(); } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 12. 4.
II - 3 - 10.
Parametri i povratne vrijednosti nasuprot globalnim podacima
Funkcija Main()
Rekli smo za funkciju Main () da je ulazna tačka za C# aplikaciju i da izvršenje ove funkcije prati izvršenje same aplikacije. Također smo vidjeli da ova funkcija ima parametar string[ ] args, ali još nismo videli šta taj parametar predstavlja. Videt ćemo šta je ovaj parametar i kako se upotrebljava. Postoje četiri različita potpisa koja možemo koristiti za funkciju Main():
static void Main() ,
static void Main(string[] args) ,
static int Main() ,
static int Main(string [] args) .
Možemo izostaviti argument args koji je ovde naveden. Treća i četvrta verzija vraćaju vr ijednost tipa int , koju možemo koristiti da označimo kako će se završiti aplikacija, a često se koristi da bi ukazala na grešku. Vraćena vrijednost 0 označava da se program normalno završio (odnosno, da se aplikacija izvršila i da se može zaustaviti na siguran način). Dino Dedić
21
Maturski rad
Veb prezentacija programskog jezika C#
Parametar args funkcije Main() je metod za prihvatanje informacija izvan aplikacije, navedenih u toku izvršenja programa. Ova informacija uzima oblik parametara komandne linije.
Kada izvršavamo aplikaciju preko komandne linije, često smo u mogućnosti da direktno navedemo informaciju kao što je datoteka koja se učitava u izvršenju aplikacije. Npr. pogledajte aplikaciju Notepad u Windowsu. Možemo je pokrenuti tako što upišemo notep ad u komandnu liniju, ili u okviru prozora koji se pojavljuje kada odaberemo opciju Run iz Windows menija Start. Takođe, možemo uneti nešto nalik na notepad "myfile.txt" na ovim lokacijama. Rezultat će biti to da će Notepad učitati datoteku "myfile.txt" ka da se pokrene, ili će ponuditi da napravi ovu datoteku. Ovde je "myfile.txt" argument komandne linije. Možemo napisati konzolnu aplikaciju koja radi na sličan način koristeći parametar args. Kada se konzolna aplikacija pokrene, svaki parametar komandne linije koji je naveden smešta se u niz args.
Zatim te parametre možemo koristiti u aplikaciji.
Funkcije članice struktura Tip struct služi za sm ještanje različitih elemenata podataka na jedno mesto. Strukture su sposobne i za mnogo više od toga. Važna dodatna sposobnost koju nude jeste mogućnost da sadrže funkcije isto kao i podatke. Ovo na prvi pogled može d jelovati čudno, ali je u stvari izuzetno korisno. Npr. pogledajmo sljedeću strukturu: struct ImeKupac { public string Ime, Prezime; }
Ako imamo promjenljivu tipa ImeKupac , a želimo da ispišemo njeno puno ime na konzoli, mora t ćemo da napravimo ime iz sastavnih delova. Možemo koristiti sledeću sintaksu za promenljivu tipa ImeKupac sa imenom kupac , na primer: ImeKupac mojKupac; mojKupac.Ime = "Petar";
mojKupac.Prezime = "Petrović"; Console.WriteLine("{0} {1} ", kupac.Ime, kupac.Prezime);
Dodajući funkciju strukturi, ovo možemo pojednostaviti tako što ćemo centrirati obradu standardnih zadataka kao što je ovaj. Toj strukturi možemo dodati odgovarajuću funkciju na sledeći način: struct ImeKupac { public string Ime, Prezime; public string ImePrezime() { return Ime + " " + Prezime; } }
Ovo liči na bilo koju funkciju koju smo do sada vidjeli, osim što nije korišt en modifikator static . Treba znati da ova ključna reč nije potrebna za funkcije članic e struktura. Tu funkciju možemo koristiti na sl jedeći način: ImeKupac mojKupac; mojKupac.Ime = "Petar";
mojKupac.Prezime = "Petrović"; Console.WriteLine (kupac.ImePrezime());
Sintaksa je mnogo jednostavnija i razumljivija u odnosu na prethodnu. Važno je naglasiti da funkcija ImePrezime() ima direktan pristup članovima strukture Ime i Prezime. Oni se unutar strukture ImeKupac mogu smatrati globalnim.
Preopterećenje funkcija Vidjeli smo da moramo složiti potpis funkcije kada je pozivamo. To znači da je potrebno imati dvije funkcije koje vrše operacije nad različitim tipovima promjenljivih. Preopterećenje operatora prepoznaje ovu situaciju i omogućava da napravimo više različitih funkcija sa istim imenom, koje rade sa različitim tipovima parametara.
Delegati Delegat je tip koji omogućava čuvanje referenci u funkcijama. Mehanizam je vrlo jednostavan.
Delegati se deklarišu slično kao i funkcije, ali bez t ijela funkcije i uz upotrebu ključne red delegate. Deklaracija delegata definiše potpis funkcije koji sadrži povratni tip i listu parametara. Nakon definisanja delegata, možemo deklarisati promenljivu sa tipom tog delegata. Zatim možemo inicijalizovati promenljivu tako da sadrži Dino Dedić
22
Maturski rad
Veb prezentacija programskog jezika C#
referencu na bilo koju funkciju koja ima isti potpis kao i delegat. Kada to uradimo, možemo pozvati funkciju
koristeći promenljivu delegata kao da je funkcija. Kada imamo promjenjivu koja pokazuje na funkciju, možemo izvesti druge operacije koje bi bilo nemoguće izvesti nekom drugom metodom. Npr. možemo proslijediti delegat nekoj funkciji kao parametar, zatim ta funkcija
može pomoću delegata pozvati funkciju na koju on ukazuje, ne znajući koja će to funkcija biti sve do izvršenja. Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: class Class1 { delegate double procesDelegati (double param1, do uble param2); static double Pomnozi(double param1, double param2) { return param1 * param2; } static double Podjeli(double param1, double param2) { return param1 / param2; } static void Main(string[] args) { procesDelegati process; Console.WriteLine("Dobar dan."); Console.WriteLine("Unesite dva broja odvojena zarezom."); string ulaz = Console.ReadLine(); int pozZareza = ulaz.IndexOf(" , "); double param1 = Convert.ToDouble(ulaz.Substring(0,pozZareza)); double param2 = Convert.ToDouble(ulaz.Substring(pozZareza + 1, ulaz.Length-pozZareza - 1)); Console.WriteLine(" Pritisnite taster M za množenje ili taste r D za d jeljenje."); ulaz = Console.ReadLine(); if (ulaz == "N") { process = n ew procesDelegati(Pomnozi); Console.WriteLine("Rezultat je : (0}", process(param1, param2)); } else if (ulaz == "D") { process = new procesDelegati(Podjeli); Console.WriteLine("Rezultat je : (0}", process(param1, param2)); } else Console.WriteLine("Utipkali ste pogresnu tipku, pokusajte ponovo."); } } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 13. prosljediti delegat nekoj funkciji kao parametar, zatim ta funkcija može
pomoću delegata pozvati funkciju na koju on ukazuje
II - 3 - 11.
Događaji
Šta je događaj? Događaji su slični izuze tcima u tome što su aktivirani od strane objekata, a mi možemo obezbjediti kôd koji reaguje na njih. Međutim, postoje i neke razlike. Jedna od najvažnijih je da nema ekvivalentne try. . . catch strukture za obradu događaja. Umesto toga, moramo se prijaviti na događaj. Prijavljivanje na događaj podrazumjeva pisanje koda koji će se izvršiti kada je događaj aktiviran, u obliku rutine za obradu događaja. Događaj može imati više rutina za obradu događaja, koje će sve biti pozvane kada je događaj aktiviran. Rutine za obradu događaja mogu biti dio iste klase kojoj pripada objekat koji aktivira događaj, a mogu pripadati i nekim drugim klasama. Rutine za obradu događaja su jednostavne funkcije. Jedina restrikcija za ove funkcije jeste ta da se potpis (tip podatka koji se vraća i parametri) mora podudarati sa onim što zaht jeva događaj. Ovaj potpis je dio definicije događaja određen od strane delegata. Dino Dedić
23
Maturski rad
Veb prezentacija programskog jezika C#
Upravo zato što se koristi u događajima, delegat je moćno oružje. Sekvenca obrade izgleda ovako: Prvo - aplikacija kreira objekt koji može aktivirati događaj. Npr. neka je aplikacija zadužena za instant poruke, i objekt koji ona kreira predstavlja vezu sa udaljenim korisnikom. Objekt veze može aktivirati događaj, npr. kada stigne poruka od udaljenog korisnika.
Application
Creates
Connection
Drugo - aplikacija se prijavljuje na događaj. Ovo bismo mogli postići definisanjem funkcije koja bi se koristila sa delegat tipom koji je odredio događaj i koja bi imala parametar - referencu na događaj. Rutina za obradu događaja može biti metoda na nekom drugo m objektu. Neka to bude, npr. objekt koji predstavlja uređaj za prikaz instant poruke.
Application
Connection
Creates Subscribes to
Display
Kada je događaj aktiviran, aplikacija je obav ještena. Kada stigne instant poruka kroz objekat veze, bude pozvana rutina za obradu događaja na uređaju za prikaz. Pošto koristimo standardnu metodu, objekt koji aktivira događaj može proslijediti kroz parametre bilo koju relevantnu informaciju praveći tako raznovrsne događaje. U našem slučaju, jedan pa rametar može biti tekst iz instant poruke. Ovaj tekst može se prikazati pomoću ru tine za obradu događaja na uređaju za prikaz. Application
Connection
Creates
Display
Calls
Pozdrav
Korištenje događaja Za obradu događaja neophodno je prijaviti događaj, što znači obezb jediti rutinu za obradu događaja čiji se potpis podudara sa delegatom koji koristi događaj. Pogledajmo primjer koji koristi jednostavan objekat Timer koji aktivira događaj, posle čega će biti pozvana rutina za obradu događaja. Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Timers; namespace Dogadjaji1 { class Calss1 { static int brojac = 0; static string displayString ="Ovo je string koji se ponavlja poslije zavrsetka prikaza teksta, a prekida poslije 100 milsec."; static void Main(string[] args) { Timer mojTimer = new T imer(100); mojTimer.Elapsed += new ElapsedEventHandler(WriteChar); mojTimer.Start(); Console.ReadLine(); } static void WriteChar(object source, ElapsedEventHandler e) { Dino Dedić
24
Maturski rad
Veb prezentacija programskog jezika C#
Console.Write(displayString[brojac++ % displayString.Length]); } } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 14. Za obradu događaja neophodno je prijaviti događaj, što znači obezbjediti rutinu za obradu događaja čiji se
potpis podudara sa delegatom koji koristi događaj
Definisanje događaja Pogledajmo kako da definišemo i koristimo naše sopstvene događaje. Implementira t ćemo verziju primjera za instant poruke. Kreiraćemo objekat Konekcija koji aktivira događaje obrađene od strane objekta Display . Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: namespace Dogadjaji2 { public delegate void MessageHandler(string messageText); public class Konekcija { public event MessageHandler MessageArrived; private Timer pollTimer; public Konekcija() { pollTimer = new Timer(100); pollTimer.Elapsed += ElapsedEventHandler(PromjeraPoruke); } public void Connect() { pollTimer.Start(); } public void Disconnect() { pollTimer.Stop(); } static void PromjeraPoruke(object source, ElapsedEventHandler e) { Console.WriteLine("Provjera nove po ruke."); Random random = new Random(); if ((random.Next(9) == 0) && (MessageArrived != null)) { MessageArrived("#### Pozdrav MAMA ####"); } } } }
Dodajte novu klasu Display u Display.cs: namespace Dogadjaji2 { public class Display { public void DisplayMessage(string poruka) { Console.WriteLine("Poruka koj je stigla : ", poruka); } }
Izmjenite kodu Class1.c s: { class Class1 { static void Main(string[] args) { Konekcija mojaKonekcija = new Konekcija(); Display myDisplay = new Display(); mojaKonekcija.MessageArrived += new MessageHandler(myDisplay.DisplayMessage); mojaKonekcija.Connect(); Console.ReadLine(); } } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom: Dino Dedić
25
Maturski rad
Veb prezentacija programskog jezika C#
Slika 15. O bjekat Konekcija aktivira događaje obrađen od strane objekta Display
Višenamjenske rutine za obradu događaja Potpis koji smo videli ranije za događaj Timer.Elapsed , sadrži dva parametra čiji se tipovi često sreću u rutinama za obradu događaja. Ti parametri su:
object source - referenca na objekat koji aktivira događaj.
ElapsedEventArgs e - parametri koje šalje događaj.
Razlog zbog kojeg koristimo parametar tipa object za ovaj događaj, kao i za mnoge druge događaje, je što ćemo često ht jeti da koristimo jednu rutinu za obradu događaja za više identičnih događaja aktiviranih od strane
različitih objekata. Na ovaj način možemo tačno znati koji objekt aktivira događaj. Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upišite tekst tačno kao što je prikazano: using System; namespace Dogadjaji3 { public class MessageAmvedEventArgs : EventArgs { private string poruka; private string Poruka; { get { return poruka; } } public class MessageAmvedEventArgs() { Poruka = "Niti jedna poruka nije poslata“ ; } public class MessageAmvedEventArgs(string novaPoruka){ poruka =novaPoruka; } }
} Izmjenite Connection.cs: using System.Text; using System.Timers; namespace Dogadjaji3 { public delegate void MessageHandler(Konekcija source, MessageArrivedEventArgs e); public class Konekcija { public event MessageHandler MessageArrived; private string naziv; private string Naziv; { get { return naziv; } Set { naziv = value; } } private Timer pollTimer; public Konekcija() { pollTimer = new Timer(100); pollTimer.Elapsed += ElapsedEventHandler(PromjeraPoruke); } public void Connect() { pollTimer.Start(); Dino Dedić
26
Maturski rad
Veb prezentacija programskog jezika C#
} public void Disconnect() { pollTimer.Stop(); } static void PromjeraPoruke(object source, ElapsedEventHandler e) { Console.WriteLine("Provjera nove po ruke."); Random random = new Random(); if ((random.Next(9) == 0) && (MessageArrived != null)) { MessageArrived(this, new MessageArrivedEventArgs "#### Pozdrav MAMA ####"); } } }
} Izmjenite Display .cs: namespace Dogadjaji3 { public class Display { public void DisplayMessage(Konekcija source, MessageArrivedEventArgs e) { Console.WriteLine("Poruka koj je stigla : ", source.Naziv); Console.WriteLine("Tekst poruke : ", e.Poruka); } }
Izmjenite Class1.cs: static void Main(string[] args) { Konekcija mojaKonekcija1 = new Konekcija(); mojaKonekcija1.naziv = "Prva konekcija."; Konekcija mojaKonekcija1 = new Konekcija(); mojaKonekcija2.naziv = "Druga konekcija."; Display myDisplay = new Display(); mojaKonekcija1.MessageArrived += new MessageHandler(myDisplay.DisplayMessage); mojaKonekcija2.MessageArrived += new MessageHandler(myDisplay.DisplayMessage); mojaKonekcija1.Connect(); mojaKonekcija2.Connect(); Console.ReadLine(); } } }
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 16. rutinu za obradu događaja za više identičnih događaja aktiviranih od strane
različitih objekata
Povratne vrijednosti i rutina za obradu događaja Svi moduli koje smo do sada vidjeli imali su povratni tip void . Moguće je obezb jediti neki drugi tip, ali to dovodi do problema zato što neki događaj može imati za posljedicu pozivanje nekoliko rutina za obradu događaja. Ako sve ove rutine vrate neku vrijednost postaje nejasno koju od vrijednosti uzimamo. Sistem r ješava problem tako što dozvoljava pristup samo posljednjoj vraćenoj vrijednosti. Ovo je vrijednost koju vraća posl jednja rutina za obradu događaja koja se odnosi na neki događaj.
Dino Dedić
27
Maturski rad
III - 1.
Veb prezentacija programskog jezika C#
Korištenje kontrola za Windows formulare
Posljednjih godina Visual Basic pružao je programerima alate za kreiranje detaljnih korisničkih interfejsa, kroz intuitivni dizajner formulara. Ovaj dizajner sa svojim alatima, zajedno sa programskim jezikom lakim za učenje, predstavljao je možda najbolje okruženje za razvoj velikih aplikacija. Jedna od stvari koje Visual Basic radi, kao i neki dragi alati za razvoj aplikacija (npr. Delphi), jeste obezbjeđivanje pristupa predefinisanim kontrolama, koje može brzo ugraditi u korisnički interfejs aplikacije. U centru većine Visual Basic Windows aplikacija nalazi se dizajner formulara. Korisnički interfejs se kreira tako što se kontrole prevlače iz okvira za alate i spuštaju na obrazac tamo gde želimo da stoje kada se program izvršava. Dvostrukim pritiskom na kontrole dodaju se rutine za obradu kontrola. Microsoftove unapred definisane kontrole, zajedno sa standardnim kontrolama, predstavljaju nov izvor potpuno testiranog koda, koji se može uv ijek koristiti. Ono što je bilo najvažnije u Visual Basicu sada je kroz Visual Studio .NET dostupno C# programerima.
Većina kontrola .NET-a bile su, i još uvek jesu, specijalni COM objekti, poznatiji kao ActiveX kontrole. Ove kontrole su se prikazivale i za vrijeme dizajniranja i za vrijeme izvršavanja programa. Svaka kontrola ima određena svojstva, dopuštajući programeru izvjestan nivo prilagođavanja, kao što je podešavanje boje pozadine, naslova i njegove pozicije u formularu. Ovi .NET sklopovi mogu biti dizajnirani tako da se koriste u bilo kojem od jezika Visual Studio-a.
III - 1 - 1.
Dizajner Windows formulara
Počet ćemo kratkim pregledom Windows dizajnera formulara. Ovo je centralno mesto za kreiranje korisničkog interfejsa. Potpuno je moguće kreirati formulare bez koriš tenja Visual Studio .NET-a, no dizajniranje interfejsa u Notepadu može biti težak posao. Pokrenite Visual Studio .NET i kreirajte novi C# Windows Form Application projekt, tako što ćete izabrati New Project , zatim Windows Form Application i pritisnite OK .
To bi trebalo da kreira prozor sličan ovome ispod:
Slika 17. Prozor za kreiranje Windows Form Application projekata
Ako ste upoznati sa dizajnerom formulara iz Visual Basica, primetit ćete određene sličnosti . U centru samog
prozora nalazi se formular koji dizajniramo. Kontrole se mogu prevlačiti iz okvira sa alatima i spuštati na formular. Okvir sa alatima se trenutno ne vidi na slici iznad. Pomjerite pokazivač miša skroz u lijevo, iznad jezička kartice Toolbox i pojaviće se okvir sa alatima. Možete da pritisnete pribadaču u gornjem desnom uglu panela da ga "otvorite". Ovo će promjeniti izgled radnog prostora, tako da se okvir sa alatima uvijek vidi i neće smetati samoj formi. Takođe , na lijevoj strani, može biti skriven i Dino Dedić
28
Maturski rad
Veb prezentacija programskog jezika C#
Server Explorer , a predstavljen je ikonama na kojoj su nacrtani računari, iznad jezička kartice Toolbox . Ovo se može posmatrati i kao kraća verzija Windows Control Panela. Odavde možete pretraživati mrežu, dodavati ili uklanjati
veze sa bazama podataka i još mnogo toga drugog. Sa desne strane prozora nalaze se dva panela. Gornji je Solution Explorer i pregled klasa. U Solution Explorer -u možete vid jeti sve otvorene projekte i njihove pridružene datoteke. Ako pritisnete na karticu pri dnu Solution Explorer -a, aktivirate Class Viewer (pregled klasa). Ovdje možete pregledati sve klase korištene u projektima, kao i sve izvedene klase. U donjem desnom dijelu prozora nalazi se panel Properties. Ovaj panel sadrži sva svojstva izabranog objekta, koja se lako mogu pročitati ili izmeniti, tj. dopuniti.
Takođe, u ovom panelu vidi se i kartica Dynamic Help. Ovde se prikazuju svi savjeti i uputstva za izabrani objekt ili kôd, čak i dok tipkate. III - 1 - 2.
Okvir sa alatima Pogledajmo malo bolje okvir sa alatima - Toolbox . Ako već to niste uradili, pomjerite pokazivač miša do okvira na lijevoj strani ekrana, i pritisnite pin u gornjem desnom uglu panela, tako da cijeli panel bude vidljiv.
Ako slučajno pritisnete × umesto pribadače i tako uklonite okvir sa alatima, možete ga ponovo vratiti u prozor. Izaberite Toolbox iz menija View , ili pritisnite tastere Ctrl+Alt+X .
Slika 18. Kako pristupiti okviru sa alatima
III - 1 - 3.
Okvir sa alatima sadrži sve kontrole dostupne .NET programerima. Okvir sadrži sve kontrole za programere Windows aplikacija.
Kontrole
Većina kontrola u .NET-u izvedene su iz klase System.Windows.Forms.Control . Ova klasa definiše osnovno funkcionisanje kontrola, zbog čega su mnogi događaji i osobine kontrola identični. Mnoge od ovih klasa su osnovne klase za druge kontrole, kao što je to slučaj sa klasama Label i TextBoxBase: Object
MarshalByRefObject
Component
Control
Label
LastView
LinkLabel
TextBoxBase
TextBox
............
RichTextBox
Osobine Sve kontrole imaju o dređene osobine koje određuju kako će se neka kontrola ponašati. Osnova klasa za većinu kontrola Control sadrži određen broj svojstava koje kontrole ili direktno nasleđuju ili redefinišu u slučaju da
se želi neko drugačije ponašanje kontrole. Tabela ispod pokazuje najvažnije osobine klase Control .
Dino Dedić
29
Maturski rad
Veb prezentacija programskog jezika C#
Ime osobine
Dostupnost
Anchor
Čitanje/upis
BackColor Bottom Dock
Čitanje/upis Čitanje/upis Čitanje/upis
Enabled
Čitanje/upis
ForeColor Height Left Name Parent Right
Čitanje/upis Čitanje/upis Čitanje/upis Čitanje/upis Čitanje/upis Čitanje/upis
TabIndex
Čitanje/upis
Tabstop
Čitanje/upis
Tag
Čitanje/upis
Top Visible Width
Čitanje/upis Čitanje/upis Čitanje/upis
Opis
Ovo svojstvo definiše ponašanje kontrole kada kontejner koji sadrži kontrolu mijenja svoju veličinu. Boja pozadine kontrole.
Određuje razdaljinu od vrha prozora do dna kontrole. Dopušta da kontrola bude pripojena uz ivicu prozora. Podesiti svojstvo Enabled na true (tačno) obično znači da kontrola može da primi unos od strane korisnika. Podešeno na false (netačno) obično znači da ne može. Boja prednjeg plana kontrole. Udaljenost od vrha do dna kontrole. Udaljenost lijeve ivice kontrole od lijeve ivice prozora. Ime kontrole. Ime se koristi za pristup kontroli u kodu. Roditelj kontrole. Udaljenost desne ivice kontrole od lijeve ivice prozora. Redosljed promjene kontrola u kontejneru ko ji ih drži prilikom pritiska na taster Tab. Određuje da li kontrola može biti dostupna pritiskanjem tastera Tab. Ovu vrijednost ne koristi sama kontrola, već služi programerima za smještanje informacija o kontroli. Ovoj osobini može se dodijeliti jedino vrijednost u formi stringa. Udaljenost gornje ivice kontrole od vrha prozora.
Određuje da li je kontrola vidljiva u toku izvršavanja programa. Širina kontrole.
Svojstva Anchor i Dock
Ove dvije osobine su naročito korisne kada dizajnirate obrazac. Osigurati da prozor normalno izgleda poslije promjene veličine prozora nije lako. Mnogi programi rješavaju ovaj problem tako što ne dozvoljavaju da se m ijenja veličina prozora. Svojstva Anchor i Dock omogućavaju vam da riješite ov aj problem bez pisanja koda. Svojstvo Anchor određuje kako se kontrola ponaša kada korisnik promijeni veličinu prozora u kojem se kontrola nalazi. Svojstvo Dock je povezano sa svojstvom Anchor . Određuje da li kontrola treba da bude pripojena uz ivicu prozora kojem pripada. Ukoliko korisnik promijeni veličinu prozora, kontrola će i dalje biti pripojena uz ivicu.
Događaji
Kada korisnik programa pritisne dugme ili taster, programer bi htio da zna da se to zaista desilo. Da bi ovo bilo moguće kontrole kor iste događaje. Klasa Control definiše brojne događaje koji su zajednički za kontrole.
Tabela ispod opisuje neke od ovih događaja MSDN biblioteka : Ime događaja Click Doubleclick DragDrop DragEnter DragLeave DragOver KeyDown Key Press KeyUp GotFocus LostFocus MouseDown MouseMove MouseUp Paint Validated
Validating
Opis
Dešava se kada se pritisne na kontrolu ili kada pritisne taster Enter . Dešava se kada se kontrola dva puta pritisne. Dešava se kada se završi operacija prevlačenja i spuštanja. De šava se kada dovučeni objekt uđe u granice kontrole. Dešava se kada dovučeni objekt napušta granice kontrole. Dešava se kada dovučeni objekt prelazi preko kontrole. Dešava se kada se taster pritisne dok kontrola ima fokus. Dešava se kada se taster pritisne dok kontrola ima fokus. Dešava se kada se taster pusti dok kontrola ima fokus. Dešava se kada kontrola primi fokus. Dešava se kada kontrola izgubi fokus. Dešava se kada se pokazivač miša nalazi iznad kontrole i kada se taster miša pritisne. Dešava se konstantno dok miš prelazi preko kontrole. Dešava se kada je pokazivač miša na kontroli i kada se taster miša oslobodi. Dešava se kada se kontrola iscrtava. Ovaj događaj se dešava kada se kontrola sa CausesValidation osobinom podešenom na true, sprema da primi fokus. Počinje kada se završi događaj Validating i pokazuje da je validacija završena. Ovaj događaj se dešava kada se kontrola sa CausesValidation osobinom podešenom na true, sprema da primi fokus. Kontrola nad čijim sadržajem se vrši validacija jeste ona kontrola koja gubi fokus, a ne ona koja ga prima.
Dino Dedić
30
Maturski rad
Veb prezentacija programskog jezika C#
III - 1 - 3 - 1.
Kontrola Button
Postoje tri vrste dugmadi u Visual Studio .NET -u. To je zato što su radio-dugmad i polja za potvrdu, takođe dugmad. Zbog ovoga klasa Button nije direktno izvedena iz klase Control već iz klase ButtonBase koja je izvedena iz Control . Kontrola Button postoji na svakom okviru za dijalog. Button se koristi za obavljanje tri vrste zadataka:
Za zatvaranje okvira za dijalog
Za izvršavanje neke akcije nad podacima un ijetim u okviru za dijalog
Za otvaranje nekog drugog okvira za dijalog ili aplikacije
Rad sa kontrolom Button je veoma jednostavan. Obično se sastoji od stavljanja kontrole u formular, dvostrukog pritiska na kontrolu za dodavanje koda za događaj Click .
Svojstva kontrole Button
Opisat ćemo osobine kao članove klase Button. Samo one najčešće korištene opisane su u tabeli.
Ime osobine FlatStyle
Dostupnost
Opis
Čitanje/upis
Izgled dugmeta može biti izm ijenjen pomoću ove osobine. Ako namjestite stil na PopUp, dugme će biti ravno sve dok se pokazivač miša ne po mjeri na
Enabled
Čitanje/upis
Image
Čitanje/upis
ImageAlign
Čitanje/upis
njega. Tada se dugme pojavljuje u normalnom, 3D obliku. Podešavanje Enabled osobine na false znači da dugme postaje sivo i ništa se
ne dešava kada se pritisne. Omogućava biranje slike (bitmape, ikone itd.) koja će se pojaviti na dugmetu.
Uz pomoć ove osobine možete da izaberete položaj slike na dugmetu.
Događaji kontrole Button
Najkorišteniji događaj dugmeta jeste događaj Click . Dešava se kada korisnik pritisne na dugme. Takođe, do događaja Click dolazi kada je dugme u fokusu i kada korisnik pritisne taster Enter . Ako imate dugme na formularu, uvijek treba obraditi ovaj događaj. III - 1 - 3 - 2.
Kontrole Label i LinkLabel
Kontrola Label se najčešće koristi od svih kontrola. Visual Studio .NET sadrži dvije kontrole za oznake, koje
se predstavljaju korisnicima na dva različita načina:
Label , standardna Windows oznaka
LinkLabel , oznaka slična standardnoj, ali predstavlja sebe kao internet vezu (hiperveza).
Ne morate dodavati nikakav upravljački kôd za događaje kada je u pitanju standardna labela. U slučaju kontrole LinkLabel potreban je dodatni kôd ako želite da omogućite korisniku da pritisne na ovu oznaku što će mu omogućiti otvaranje Web stranice. Većina njih je izvedena iz klase Control , ali postoje i neke nove. Tabela koja slijedi opisuje najčešće korištene.
Ime osobine
Dostupnost
BorderStyle
Čitanje/upis
DisabledLinkColor
Čitanje/upis
FlatStyle
Čitanje/upis
Image ImageAlign LinkArea LinkColor
Čitanje/upis Čitanje/upis Čitanje/upis Čitanje/upis
Links
Čitanje/upis
LinkVisited
Čitanje/upis
Dino Dedić
Opis
Omogućava da izaberete date ivice oznake. Podrazum ijeva se da nema ivica. Samo za LinkLabel : boja koju će kontrola LinkLabel imati kada je korisnik pritisne.
Definiše izgled kontrole. Ako podesite ovu osobinu na PopUp, kontrola će biti ravna sve dok pokazivač miša ne pomerite na kontrolu. Tada će se kontrola izdići. Omogućava biranje slike (bitmape, ikone itd.) koja će se pojaviti na oznaci. Određuje položaj slike na oznaci. Samo za LinkLabel : opseg teksta koji će biti prikazan kao veza. Samo za LinkLabel : Boja hiperveze. Samo za LinkLabel : kontrola LinkLabel može da drži više od jedne
veze. Ovo svojstvo omogućava vam da pronađete vezu koju hoćete. Kontrola vodi računa o vezama koje se nalaze u tekstu. Samo za LinkLabel : obavještava da li je neka hiperveza prethodno pos jećena ili ne. 31
Maturski rad
Text TextAlign
III - 1 - 3 - 3.
Veb prezentacija programskog jezika C#
Čitanje/upis Čitanje/upis
Tekst koji se pojavljuje u oznaci.
Određuje položaj teksta na kontroli.
Kontrola TextBox
Okvir za tekst trebalo bi da bude korišten kada očekujete od korisnika unos teksta. Osnovna funkcija okvira za tekst jeste da omogući korisniku da unese tekst, pri čemu se može un ijeti bilo koji znak i sasvim je moguće primorati korisnika da unese samo numeričke vrijednosti. U .NET okružen ju postoje dvije osnovne kontrole koje mogu primati tekst kao ulazni podatak: TextBox i RichTextBox . Obje kontrole izvedene su iz klase TextBoxBase. Klasa TextBoxBase omogućava osnovnu funkcionalnost za obradu teksta u okvirima za tekst, kao što su izbor, isjecanje i kopiranje teksta.
Svojstva kontrole TextBox
Postoji mnogo svojstava kontrole TextBoxBase. Ovo su samo one najvažnije : Ime kontrole
Dostupnost
Causes Validation CharacterCasing
Čitanje/upis Čitanje/upis
MaxLength
Čitanje/upis
MultiLine
Čitanje/upis
PasswordChar
Čitanje/upis
Readonly ScrollBars SelectedText
Čitanje/upis Čitanje/upis Čitanje/upis
SelectionLength
Čitanje/upis
SelectionStart
Čitanje/upis
Wordwrap
Čitanje/upis
Opis
Određuje da li će kontrola TextBox mijenjati slova u mala ili v elika. Q Normal : neće biti nikakvih promena. Upper : sva unijeta slova biti ć e konvertovana u velika slova. Vrijednost koja određuje maksimalan broj karaktera u tekstu koji je unijet u TextBox . Pokazuje da li je ovo kontrola sa viš e redova. Kontrola sa više redova može da prikaže više redova teksta. Određuje da li karakter lozinke treba da zam ijeni stvarne karaktere koji su unijeti u okvir za tekst sa jednim redom.. Logička vrijednost koja pokazuje da li je tekst samo za čitanje. Određuje da li tekst u više redova treba da ima traku za pom jeranje. Tekst koji je izabran u okviru za tekst. Broj izabranih karaktera u tekstu. Ako je ova vrijednost veća od ukupnog broja karaktera u tekstu, onda kontrola resetuje ovu vrijednost na ukupan broj karaktera minus vrijednost koja s e nalazi u svojstvu SelectionStart .
Početak izabranog teksta u okviru za tekst. Određuje da li u okvirima za tekst sa više redova riječ koja premašuje širinu kontrole treba automatski da bude prebačena u novi red.
Događaji kontrole TextBox
Kontrola TextBox obezbeđuje događaje (svi koji su izvedeni iz klase Control ):
Ime događaja Enter GotFocus Leave Validating Validated LostFocus KeyDown KeyPress KeyUp Change
Opis
Ovih šest događaja dešavaju se redom kojim su ovd je navedeni. Poznati su kao "događaji fokusa" i aktiviraju se uvijek kada se mijenja fokus kontrole, uz dva izuzetka. Događaji Validating i Validated dešavaju se samo kada kontrola koja prima fokus ima svojstvo CausesValidation podešeno na true. Primer za ovo je kada korisnik pritisne Help dugme.
Sljedeća tri događaja su poznatija kao "taster događaji“. Oni omogućavaju da pratite i m ijenjate ono što je unijeto u kontrolu. KeyDown i KeyUp primaju kôd tastera koji je pritisnut. Na ovaj način možete vidjeti da li su pritisnuti specijalni tasteri, kao sto su Shift, Control ili F1. KeyPress, sa druge strane, prima karakter koji odgovara tasteru. To znači da vrijednost za slovo "a" nije ista kao i za slovo "A".
III - 1 - 3 - 4.
Kontrole RadioButton i CheckBox
Kontrole RadioButton i CheckBox koriste istu osnovnu klasu kao i kontrola Button, s tim da im se izgled i
korištenje razlikuju. Radio dugme se prikazuje kao oznaka sa kružićem na lijevoj strani. Radio dugme bi trebalo koristiti kada želite od korisnika da bira između međusobno isključivih opcija. Da bi ste grupisali više radio dugmadi kako bi ona činila logičku jedinicu koristite kontrolu GroupBox . Kontrola CheckBox se predstavlja kao oznaka sa kvadratićem na lijevoj strani. Koristite polja za potvrdu kada
želite da omogućite korisniku da bira jednu ili više opcija.
Svojstva kontrole RadioButton
Ovdje ćemo opisati samo nekoliko svojstava.
Dino Dedić
32
Maturski rad
Veb prezentacija programskog jezika C#
Ime osobine
Dostupnost
Appearance
Čitanje/upis
AutoCheck
Čitanje/upis
CheckAlign Checked
Čitanje/upis Čitanje/upis
Opis
Radio dugme se pojavljuje kao oznaka sa kružićem l ijevo, u sredini ili desno od oznake ili kao standardno dugme. U poslednjem slučaju dugme se prikazuje kao pritisnuto ako je izabrano, odnosno u 3D obliku ako nije. Ako je ovo svojstvo podešena na true, znak za potvrđivanje se pojavljuje kada korisnik pritisne na radio dugme. Kada je ovo svojstvo podešeno na false, podrazumijeva se da se znak za potvrđivanje ne pojavljuje.
Određuje položaj radio dugmeta. Pokazuje status kontrole.
Događaji kontrole RadioButton
Događaji su prikazani u tabeli. Ime
Opis
Ovaj događaj se šalje kada se m ijenja potvrda radio dugmeta. Ako ima vi še kontrola RadioButton na formularu ili unutar jednog grupnog okvira ovaj događaj se šalje dva puta: prvo kontroli koja je bila potvrđena, a sada viš e nije, a zatim i kontroli koja pos taje potvrđena. Ovaj događaj se šalje svaki put kada se pritisne na radio dugme. Ovo nije isto kao i događaj
CheckChanged Click
CheckChanged .
III - 1 - 3 - 5.
Kontrola CheckBox
Svojstva kontrole CheckBox
Osobine i događaji ove kontrole su slični onima za RadioButton ali tu su i dvije nove: Ime osobine
Dostupnost
CheckState
Čitanje/upis
ThreeState
Čitanje/upis
Opis
Polje za potvrdu može imati tri statusa: Checked , Indeterminate i Unchecked (potvrđeno, neodređeno i nepotvrđeno). Ako je ovo svojstvo podešen o na false korisnik neće moći da izmijeni status kontrole na Indeterminata, ali može izmijeniti status u kodu.
Događaji kontrole CheckBox
Ime
Opis
CheckedChanged CheckedStateChanged
Dešava se kada se m ijenja svojstvo Checked kontrole. Kod kontrola sa osobinom ThreeState podešenom na true moguće je pritisnuti na polje za potvrdu bez promene Checked osobine. Dešava se kada se m ijenja svojstvo CheckedState kontrole. Kako su Checked i Unchecked moguće vrijednosti za svojstvo CheckedState, ovaj događaj će biti poslan uvijek kada se mijenja svojstvo Checked .
III - 1 - 3 - 6.
Kontrola GroupBox
Ova kontrola se obično koristi zajedno sa kontrolama RadioButton i CheckBox , da bi napravila okvir i zaglavlje za grupu kontrola koje su logički povezane. Grupni okvir se jednostavno dovuče na formular , a zatim se stavljaju ostale kontrole unutar tog okvira. To za efekat ima da roditelj kontrola postaje grupni okvir, što znači da može biti izabrano više kontrola RadioButton u isto vrijeme Kada se kontrola stavi na formular kaže se da je formular roditelj kontrole, odnosno kontrola je dete formulara. Kada stavite grupni okvir na formular, grupni okvir postaje dete formulara. Kako grupni okvir sadrži nove kontrole, on postaje roditelj za te kontrole. Ovo znači da , kada pomjerite grupni okvir, pomjeraju se i sve kontrole koje se nalaze u tom okviru. III - 1 - 3 - 7.
Kontrola RichTextBox
Kontrola RichTextBox izvedena je iz klase TextBoxBase. Zbog toga ovi okviri imaju neke sličnosti, ali je kontrola RichTextBox mnogo sadržajnija. Okvir za tekst koristimo za unos kratkih nizova znakova, dok obogaćeni
tekstualni okvir koristimo za prikazivanje i unos formatiranog tekst. Ovo postižemo korištenjem standarda za formatirani tekst koji se zove Rich Text Format ili RTF .
Svojstva kontrole RichTextBox
RichTextBox ima nove osobine. Sljedeća tabela opisuje neke najčešće korištene osobine: Ime osobine CanRedo Dino Dedić
Dostupnost
Samo čitanje
Opis Vrijednost ove osobine je true, ako nešto što je poništeno može b iti ponovljeno, u suprotnom je false. 33
Maturski rad
Veb prezentacija programskog jezika C#
Samo čitanje
CanUndo RedoAc t i onName
Samo čitanje
DetectUrls
Čitanje/upis
Rtf SelectedRtf
Čitanje/upis Čitanje/upis
SelectedText
Čitanje/upis
SelectionAlignment
Čitanje/upis
SelectionBullet
Čitanje/upis
Bulletlndent
Čitanje/upis
SelectionColor SelectionFont SelectionLenght
Čitanje/upis Čitanje/upis Čitanje/upis
SelectionType
Samo čitanje
ShowSelectionMargin
Čitanje/upis
UndoAc t i onName
Samo čitanje
SelectionProtected
Čitanje/upis
Vrijednost ove osobine je true, ako je moguće izvršiti akciju Undo na obogaćeni okvir za tekst, u suprotnom je false. Ovo svojstvo sadrži ime akcije koja će biti korišt ena da bi se ponovo uradila neka prethodno poništena radnja u obogaćenom okviru za tekst. Podesite ovu osobinu na true ako želite da kontrola detektuje URL adrese i da ih formatira. Ovo odgovara svojstvu Text , s tim što je tekst u RTF formatu. Koristite ovu osobinu da biste dobili ili podesili izabrani tekst na RTF format. Kao i SelectedRtf , možete dobiti ili podesiti izabrani tekst. Za razliku od prethodne osobine, pri kopiranju tekst ne zadržava svoj format. Ovo svojstvo predstavlja način poravnavanja izabranog teksta. Može biti Center , Left ili Right . Uz pomoć ove osobine možete saznati da li je neki d io teksta formatiran sa simbolom za nabrajanje, a možete ubecivati ili uklanjati simbol za nabrajanje. Koristite ovu osobinu da odredite za koliko piksela treba uvući simbol za nabrajanje. Dopušta vam da m ijenjate boju izabranog teksta. Dopušta vam da m ijenjate font izabranog teksta. Uz pomoć ove osobine možete podesiti ili saznati dužinu izabranog teksta. Ovo svojstvo sadrži informacije o izabranom dijelu. Reći će vam da li je izabran neki objekat ili je izabran samo tekst. Ako podesite ovo svojstvo na true, margina će se pojaviti na l ijevoj strani kontrole RichTextBox . Ovo omogućava lakše biranje teksta. Uzima ime akcije koja će se koristi ako korisnik želi da poništi neku radnju. Ako podesite ovu osobinu na true, možete odrediti da se određeni dio teksta ne mijenja.
Događaji kontrole RichTextBox
Većina događaja koji se koriste u obogaćenim okvirima za tekst isti su kao i za obične okvire za tekst. Ima i nekoliko novih: Ime osbine LinkedClick Protected SelctionChanged
III - 1 - 3 - 8.
Opis
Ovaj događaj se šalje kada korisnik pritisne vezu unutar teksta. Ovaj događaj se šalje kada korisnik pokuša da prom ijeni tekst koji je kao zaštićen. Ovaj događaj se šalje kada želite nešto da izm ijenite u izabranom tekstu. Ako iz bilo kojih razloga ne želite da dopustite korisniku da mijenja izabrani tekst možete ga sprečiti pomoću ovog događa ja. Kontrola ListBox i Kontrola CheckedListBox
Okvir sa listom koristi se za prikaz liste stringova od kojih jedan ili više može biti izabrano. Kao kod polja za potvrdu i radio dugmeta, okvir sa listom traži od korisnika da izabere jednu ili više mogućih opcija. Okvir liste trebalo bi da koristite kada u toku kreiranja aplikacije ne znate tačan broj opcija koje korisnik može izabrati. Klasa ListBox je izvedena iz klase ListControl . CheckedListBox je izvedena iz klase ListBox .
Svojstva kontrole ListBox
Sve osobine opisane u tabeli koja slijedi važe i za ListBox i za CheckedListBox , osim ako nije drugačije naznačeno: Ime osobine
Dostupnost
SelectedIndex
Čitanje/upis
ColumnWidth Items
Čitanje/upis Samo čitanje
Selectedlndices
Samo čitanje
Selectedltem
Čitanje/upis
Opis Vrijednost koja pokazuje indeks izabranog elementa u okviru liste. Ako okvir liste dopušta da više elemenata bude izabrano odjednom ovo s vojstvo uzima indeks prvog izabranog elementa. U okvirima sa više kolona ovo svojstvo određuje širinu kolona. Kolekcija Items sadrži sve elemente liste Ovo svojstvo je kolekcija koja sadr ži indekse izabranih elemenata pri čemu
indeksiranje počinje od nule. U listi koja dopušta biranje samo jednog el ementa ovo svojstvo sadrži taj element. Ako se u listi može izabrati viš e elemenata svojstvo sadrži prvi izabrani element.
Selectedltems
Samo čitanje
SelectionMode
Čitanje/upis
Dino Dedić
Ovo svojstvo je kolekcija koja sadrži sve trenutno izabrane elemente. Postoje četiri načina biranja elemenata u listi: None: nijedan element ne može biti izabran. One: samo jedan element može biti izabran. MultiSimple: više elemenata može biti izabrano. 34
Maturski rad
Veb prezentacija programskog jezika C#
MultiExtended : više elemenata može biti izabrano i može se koristiti Ctrl , Shift i tasteri sa strjelicama za biranje. Ako podesite ovu osobinu na true kontrola ListBoxce sortirat će elemente po
-
Sorted
Čitanje/upis
Text
Čitanje/upis
Checkedlndicies
Samo čitanje
CheckedItems
Samo čitanje
CheckOnClick
Čitanje/upis
ThreeDCheckBoxes
Čitanje/upis
abecednom redu. Ako podesite Text osobinu okvira liste ona će tragati za elementom koji ima to ime i izabraće ga. Samo za kontrolu CheckedListBox : ovo svojstvo sadrži sve indekse elemenata koji
su potvrđeni ili koji imaju neodređen status. Samo za kontrolu CheckedListBox : ovo je kolekcija koja sadrži sve elemente koji su potvrđeni ili koji imaju neodređen status. Samo za kontrolu CheckedListBox : ako je ovo svojstvo podešeno na true, element menja stanje kad god korisnik pritisne na njega. Samo za kontrolu CheckedListBox : podešavanjem ove osobine možete birati da li
će polja za potvrdu biti ravna ili normalna.
Metode kontrole ListBox
Tabela koja slijedi opisuje samo najčešće korištene metode. Metode važe i za kontrolu ListBox i za CheckedListBox osim ako nije drugačije naznačeno: Ime
Opis
Poništava izbor u okviru liste. Pronalazi prvi string u listi koji počinje željenim stringom. Kao i FindString s tim što se kompletan string mora podudarati. Vraća vrijednost koja pokazuje da li je element izabran ili nije. Podešava da element bude izabran ili briše element iz liste izabranih elemen ata. Vraća trenutno izabrani element. Samo za kontrolu CheckedListBox : vraća vrijednost koja pokazuje da li je elemant potvrđen ili ne. Samo za kontrolu CheckedListBox : vraća vrijednost koja pokazuje stanje
ClearSelected FindString FindstringExact GetSelected SetSelected ToString GetltemChecked SetltemCheckState
elemenata. Samo za kontrolu CheckedListBox : podešava određeni element tako da bude potvrđen. Samo za kontrolu CheckedListBox : podešava stanje elementa.
SetltemChecked SetltemCheckState
Događaji kontrole ListBox
Događaji kojih želite da budete svjesni dok radite sa kontrolama ListBox i CheckedListBox jesu oni događaji koji se odnose na izbor korisnika: Ime
Opis Samo za kontrolu CheckedListBox : dešava se prilikom mijenjanja stanja elementa. Dešava se prilikom mjenjanja indeksa izabranog elementa.
ItemCheck SelectedlndexChanged
III - 1 - 3 - 9.
Kontrola ComboBox
Kontrola ComboBox (kombinovani okvir) sadrži nekoliko kontrola: kontrole TextBox , Button i ListBox . U kontroli ComboBox nije moguće izabrati više od jednog elementa liste , ali je moguće unijeti nove elemente otkucavanjem njihovih imena u polju TextBox kombinovanog okvira. Uobičajeno je da se kontrola ComboBox
koristi kada želimo da uštedimo prostor u dijalogu. Kada korisnik pritisne na dugme sa strjelicom desno od tekstualnog okvira pojavljuje se okvir liste u kojem korisnik može izabrati određeni element. Čim korisnik izabere neki element okvir liste nestaje , a izabrani element se pojavljuje u tekstualnom okviru tako vraćajući normalan izgled dijalogu.
Svojstva kontrole ComboBox
Kako kontrola ComboBox posjeduje mogućnosti kontrola TextBox i ListBox , mnoge osobine kombinovanog
okvira mogu se naći i u dvije pomenute kontrole. Zbog ovoga postoji ogroman broj svojstava i događaja kontrole ComboBox . Ime osobine
Dostupnost
Opis
Kombinovani okvir može biti prikazan u tri različita stila: DropDown: korisnik može upisivati u tekstualni okvir , ali mora pritisnuti DropDownStyle
Dino Dedić
Čitanje/upis
-
na dugme sa strjelicom za prikaz kompletne liste elemenata. Simple: isto kao i DropDown s tim što je lista uv ijek vidljiva DropDownList : korisnik ne može upisivati novi element u tekstualni okvir i mora pritisnuti na dugme sa strjelicom za prikaz liste elemenata. 35
Maturski rad
Veb prezentacija programskog jezika C#
DropDown
Čitanje/upis
Items
Samo čitanje
MaxLength
Čitanje/upis
Selectedlndex Selectedltem SelectedText
Čitanje/upis Čitanje/upis Čitanje/upis
SelectionStart
Čitanje/upis
SelectionLength
Čitanje/upis
Sorted
Čitanje/upis
Text
Čitanje/upis
Pokazuje da li je lista prikazana ili nije. Ako podesite ovu osobinu na true, lista će se prikazati.
Kolekcija koja sadrži sve elemente liste iz kombinovanog okvira. Podešavanjem ove osobine na broj veći od nule, određujete maksimalan broj karaktera koji je moguće uneti u tekstualni d io kontrole. Pokazuje indeks trenutno izabranog elementa liste. Pokazuje trenutno izabrani element liste. Predstavlja tekst koji je izabran u tekstualnom dijelu kontrole. Predstavlja indeks prvog karaktera dijela teksta koji je izabran u tekstualnom dijelu kontrole. Predstavlja dužinu izabranog teksta u tekstualnom d ijelu kontrole. Ako podesite ovu osobinu na true kontrola će sortirati elemente liste po abecednom redu. Ako podesite ovu osobinu na vrednost null ništa neće biti izabrano. Ako podesite na vrijednost koja postoji u listi ta vrijednost će biti izabrana. Ako tražena vrijednost ne postoji u listi tekst će biti prikazan u tekstualnom dijelu kontrole
Događaji kontrole ComboBox
Postoje tri osnovne akcije u kombinovanom okviru:
Kada se promijeni izbor
Kada se mijenja stanje liste (da li je prikazana ili nije)
Kada se mijenja tekst
Da biste obradili ove tri akcije morate se prijaviti za jeda n ili više od sljedećih događaja: Ime DropDown SelectedlndexChanged KeyDown KeyPress KeyUp TextChanged
III - 1 - 3 - 10.
Opis
Dešava se prilikom prikazivanja dijela sa padajućom listom. Dešava se kada se umesto jednog elementa u listi izabere neki drugi element. Ovi događaji dešavaju se kada se pritisne taster dok tekstualni dio kontrole ima fokus. Pogledajte objašnjenja ovih događaja za tekstualni okvir. Dešava se prilikom mijenjanja svojstva Text . Kontrola ListView
Lista iz koje možete birati datoteke u standardnom Windows dijalogu zove se kontrola ListView . Sve što možete uraditi vezano za prikaz u standardnom dijalogu možete uraditi i u kontrolama ListView koje su sastavni deo Visual Studio .NET-a. Podatke koje kontrola sadrži moguće je prikazati različitim ikonama u kolonama i redovima ili u jednoj koloni. Kontrola ListView je najkompleksnija kontrola.
Svojstva kontrole ListView
Ime osobine
Dostupnost
Opis
Korištenjem ove osobine možete kontrolisati kako korisnik aktivira elemente iz
Activation
Čitanje/upis
Alignment
Čitanje/upis
AllowColumn Reorder
Čitanje/upis
AutoArrange
Čitanje/upis
CheckBoxes
Čitanje/upis
Checkedlndices
Samo čitanje
Dino Dedić
kontrole ListView . Ne bi trebalo mijenjati vrijednost osobine ukoliko nemate dobar razlog za promjenu, zato što se promjena podešene vrijednosti odnosi na cijeli sistem. Moguće vrijednosti su: Standard : ona vrijednost ko ju je korisnik već izabrao za cijeli sistem. OneClick : jedan pritisak mišem aktivira element. TwoClick : dvostruki pritisak mišem aktivira element. Ovom osobinom regulišete poravnanje elementa u kontroli ListView . Četiri moguće vrijednosti su: Default : element ostaje tamo gde ga je korisnik prevukao i s pustio. Left : elementi su poravnati po lijevoj ivici kontrole ListView . Top: elementi su pora vnati po gornjoj ivici kontrole ListView . SnapToGrid : ListView kontrola ima nevidljivu mrežu po kojoj su elementi poravnati. Ako podesite ovu osobinu na true dozvoljavate korisniku da mijenja redosljed kolona. Ako to uradite morate imati rutine koje će valjano ubacivati elemente u listu, bez obzira na to da li je redosljed kolona pr omenjen ili nije. Ako podesite ovu osobinu na true element će zauzeti položaj prema vrijednosti svojstva Alignment . Podešavanje ove osobine ima efekta samo ako je svojstvo View podešeno na Largelcon ili Smalllcon. Ako podesite ovu osobinu na true svaki element u listi imat će polje za potvrdu lijevo od sebe. Podešavanje ove osobine ima efekta samo ako je svojstvo View podešeno na Details ili List . Ova dva svojstva daju pristup kolekcijama koje sadrže indekse i elementi koji su 36
Maturski rad
Veb prezentacija programskog jezika C#
potvrđeni.
Checkedlterns Columns
Samo čitanje
Focusedltem
Samo čitanje
FullRowSelect
Čitanje/upis
GridLines
Čitanje/upis
HeaderStyle
Čitanje/upis
HoverSelection
Čitanje/upis
LabelEdit
Čitanje/upis
LabelWrap
Čitanje/upis
III - 1 - 3 - 11.
Kontrola ListView može imati kolone. Ovo svojstvo obezbeđuje pristup kolekciji kolona kroz koju možete dodavati ili uklanjati kolone. Ovo svojstvo sadrži element koji ima fokus. Ako ništa nije izabrano, vrednost je nula. Ako je ovo svojstvo podešeno na true, kada se pritisne na neki element, onda će cijeli
red u kom se element nalazi biti naglašen. Ako je podešenona false samo će element biti naglašen. Podešavanjem ove osobine na true pokazat će se linije mreže između redova i kolona. Podešavanje ove osobine ima efekta samo ako je svojstvo view podešeno na Details. Možete kontrolisati kako će biti prikazano zaglavlje kolone. Postoje tri stila: Clickable: zaglavlje kolone se ponaša kao dugme. NonClickable: zaglavlje kolone ne reaguje na pritisak mišem. None: zaglavlja kolona nisu prikazana. Kada je ovo svojstvo podešeno na true korisnik može izabrati element postavljanjem
miša na element. Kada je vrijednost ovog svojstva podešena na true korisnik može uređivati sadržaj prve kolone u prikazu Details. Kada je ovo svojstvo podešeno na true oznake će se protezati na koliko god je redova potrebno za prikazivanje cijelog teksta.
Metode klase ListView
Za kompleksnu kontrolu kakva je ListView postoji mali broj metoda. Sve su opisane u sljedećoj tabeli: Ime
Opis
BeginUpdate
Pozivanjem ove metode zaustavljate osvežavanje slike sve dok se ne pozove metoda EndUpdate. Ovo može biti korisno pogotovu ako ubacujete veliki broj elemenata odjednom - spriječava se
treptanje prikaza i značajno se povećava brzina. Clear EndUpdate EnsureVisible GetltemAt
Kompletno uklanja sve elemente i kolone kontrole ListView . Ovu metodu pozivate poslije metode BeginUpdate. Kada je pozovete svi elementi će biti iscrtani u kontroli ListView . Kada pozovete ovu metodu lista će se pome jriti do onog elementa čiji je indeks prosl ijeđen metodi.
Vraća element u listi koji se nalazi na poziciji x, y.
Događaji kontrole ListView
Sljedeća tabela opisuje događaje koje možete pozivati za kontrolu ListView : Ime
Opis
AfterLabelEdit BeforeLabelEdit ColumnClick ItemActivate
Ovaj događaj nastaje posl ije uređivanja oznake. Ovaj događaj nastaje pr ije nego što korisnik započne uređivanje oznake. Ovaj događaj nastaje kada je kolona pritisnuta. Dešava se kada se element aktivira.
Klasa ListViewltem
Element liste je uvijek objekat klase ListViewltem. Klasa ListViewltem sadrži informacije kao što su tekst i indeks ikone koje treba prikazati. Sadrži kolekciju koja se zove SubItems . Ova kolekcija sadrži objekte klase ListViewSubItems . Ovi podelementi su prikazani ako je kontrola ListView u režimu Details. Svaki od podelemenata
predstavlja kolonu. Osnovna razlika između elementa i podelementa jeste ta što podelement ne može prikazati ikonu. Klasa ColumnHeader
Za prikazivanje zaglavlja kolona dodajete objekte klase ColumnHeader kontroli ListView kroz kolekciju Columns. Klasa ColumnHeader obezbjeđuje zaglavlje za kolone koje će se prikazati kada je ListView u režimu Details.
III - 1 - 3 - 12.
Kontrola ImageList
Kontrola ImageList obezbjeđuje kolekciju koja se koristi za smeštanje slika koje mogu biti korištene u drugim kontrolama. U liste slika mogu se stavljati slike bilo koje veličine, s tim da se u okviru jedne kontrole mogu naći samo slike iste veličine. U slučaju kontrole ListView potrebne su dvije kontrole ImageList za smeštanje malih i velikih slika. ImageList ne prikazuje svoj sadržaj u vrijemenu izvršavanja programa. Kada dovučete ovu kontrolu na formular za vrijeme dizajniranja, ona ne postaje dio samog formulara već se nalazi u bloku ispod formulara koji
smešta sve slične objekte. Ovo zanimljivo svojstvo ne dopušta kontrolama koje nisu dio grafičkog interfejsa da zatrpavaju dizajner formulara. Kontrolom ImageList se rukuje kao i svakom drugom kontrolom, ali je ne možete pomerati. Dino Dedić
37
Maturski rad
Veb prezentacija programskog jezika C#
III - 1 - 3 - 13.
Kontrola StatusBar
Statusna linija se najčešće koristi za prikazivanje uputstva za izabrani element ili z a informaciju o akciji koja se trenutno izvodi. Kontrola StatusBar se postavlja u dnu ekrana kao što je to slučaj sa MS Office aplikacijama. Visual Studio.NET statusna linija se koristi za prikazivanje teksta. Svojstva kontrole StatusBar
Možete podesiti svojstvo Text statusne linije za prikazivanje nekog teksta ali je moguće praviti panele u iste svrhe: Ime osobine
Dostupnost
Backgroundlmage
Čitanje/upis
Panels
Čitanje/upis
ShowPanels
Čitanje/upis
Text
Čitanje/upis
Opis
Moguće je dodijeliti sliku statusnoj liniji koja će se iscrtati u pozadini. Ovo je kolekcija panela u statusnoj liniji. Koristite ovu kolekciju za dodavanje i uklanjanje panela. Ako hoćete da prikažete panele ovo svojstvo mora biti podešeno na true. Kada ne koristite panele ovo svojstvo sadrži tekst koji će se prikazati na statusnoj liniji.
Događaji kontrole StatusBar
Nema mnogo novih događaja za statusnu liniju , ali ako crtate panel ručno događaj DrawItem je od velike važnosti: Ime
Opis
Dešava se kada panel sa OwnerDraw stilom treba ponovo iscrtati. Morate prijaviti ovaj događaj ako želite sami da crtate sadržaj panela. Dešava se prilikom odabira panel.
DrawItem PanelClick
Klasa StatusBarPanel
Svaki panel u statusnoj linije je objekat klase StatusBarPanel . Ova klasa sadrži informacije o svim panelima kolekcije Panels. Može se podešavati tekst, položaj teksta u panelu, ikone ili sti l panela. Ako želite sami da crtate panel morate podesiti svojstvo panela Style na OwnerDraw i obraditi događaj DrawItem kontrole StatusBar .
III - 1 - 3 - 14.
Kontrola TabControl
Kontrola TabControl obezbjeđuje lagan način organizovanja dijaloga u logičke jedinice kojima se može pristupiti kroz jezičke kartica na vrhu kontrole. Kontrola TabControl sadrži kontrole TabPages koje su slične grupnim okvirima.
Postoje dva reda koja sadrže jezičke kartica u vrhu kontrole. Pritiskom na bilo koji od njih prikazat će se drugačija selekcija kontrola u ostatku dijaloga. Ovo je dobar primejr kako grupisati informacije koje su u nekoj vezi jedna s drugom pa tako olakšavajući korisniku da pronade željenu informaciju. Korištenje kontrole TabControl je veoma lako. Jednostavno dodate jezičke za kartice koje želite prikazati u kolekciju TabPages, a zatim ubacujete ostale kontrole u odgovarajuće strane. Svojstva kontrole TabControl
Osobine kontrole TabControl se uglavnom koriste za podešavanje izgleda kontenjera u kome se nalaze kontrole TabPages tj. za izgled kartica: Ime osobine
Dostupnost
Alignment
Čitanje/upis
Appearance
Čitanje/upis
HotTrack
Čitanje/upis
Multiline
Čitanje/upis
RowCount Selectedlndex TabCount
Čitanje/upis Čitanje/upis Čitanje/upis
Sadrži broj redova sa jezičcima kartica koji su trenutno prikazani. Vraća ili podešava indeks trenutno izabranog jezička kartice. Sadrži ukupan broj kartica.
TabPages
Čitanje/upis
Ovo je kolekcija objekata TabPages. Koristite ovu kolekciju za dodavanje ili uklanjanje kartica.
Dino Dedić
Opis
Kontroliše se gdje se na kontroli pojavlju ju jezičci kartica. Podrazumeva se da su na vrhu.
Kontroliše se kako su prikazani jezičci k artica. Mogu biri kao dugme ili ravni. Ako je ovo svojstvo podešeno na true izgled jezička kartice se menja kada pokazivač miša prelazi preko njega. Ako je ovo svojstvo podešeno na true moguće je imati nekoliko redova sa jezičcima kartica.
38
Maturski rad
III.
Veb prezentacija programskog jezika C#
Zaključak C# je objektno orjentisan programski jezik kojeg su razvili Andres Hejlsberg i drugi pripadnici Microsoft
firme. C# je evolucija C i C++ programskog jezika. U odnosu na C i C++ sintaksa C# je dosta prostija, greške je jednostavnije otkloniti i sam kod je dosta razumljiviji. Prema TIOBE-ovoj statistici C# je rangiran na 5. mjesto kao jedan od korištenijih programskih jezika, dok C i C++ zauzimaju prva tri mjesta.
Ovaj maturski rad je obuhvatio samo dio onoga što programski jezik C# i .NET Framework pružaju. Sam framework sadrži hiljade klasa koje možete iskoristiti u svojim programima. Za detaljan opis svih klasa, njihovih metoda te mogućih načina upotrebe, trebalo bi biti napisane desetine hiljada stranica. Sam jezik C# nudi još puno elemenata i metoda koje vam mogu olakšati posao programiranja. Posao programera zahtijeva konstantno učenje i usavršavanje, razumijevanje kako određene mogućnosti mogu olakšati život, ali u nekim slučajevima i otežati. Samo razumijevanje programerskih idej a, algoritama i principa, predstavlja samo početni korak prema razvoju kvalitetnih sistema..
Dino Dedić
39