You are on page 1of 40

Maturski rad iz informatike

Tema:
Veb prezentacija programskog jezika C#
Maturski rad Veb prezentacija programskog jezika C#

Sadržaj
I. Uvod u C# .........................................................................................................................................................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 okruženje? ....................................................................................................... 4
MSIL i JIT ......................................................................................................................................................................4

Sklopovi .......................................................................................................................................................................4

Upravljivi kôd ................................................................................................................................................................4

Sakupljanje otpada .........................................................................................................................................................4


Uklapanje u cjelinu..........................................................................................................................................................4

Povezivanje...................................................................................................................................................................4

Šta je C#? .....................................................................................................................................................................4

Kakve aplikacije možemo pisati u C#-u? ................................................................................................................................5

I - 4. Visual Studio.NET ...................................................................................................................................5


Rješenja u Visual Studio-u .................................................................................................................................................5

Pisanje programa u jeziku C# .............................................................................................................................................5

Razvojno okruženje u Visual Studio .NET ...............................................................................................................................6

Konzolna aplikacija..........................................................................................................................................................6

II. Elementi programskog jezika C# .......................................................................................................................7


II - 1. Promjenljive i izrazi ...........................................................................................................................7
II - 1- 1. Osnove C# sintakse ........................................................................................................................................7

II - 1- 2. Osnove strukture C# konzolne aplikacije ..............................................................................................................7


II - 1- 3. Promjenljive .................................................................................................................................................7

Prosti tipovi promjenljivih .................................................................................................................................................7

Imenovanje promjenljivih, konvencije i vrijednosti literala ..........................................................................................................8

Pravila imenovanja..........................................................................................................................................................8

Vrijednosti literala ..........................................................................................................................................................9

String literali .................................................................................................................................................................9

Određivanje i dodjeljivanje vrijednosti promjenljivim ................................................................................................................9

II - 1- 4. Izrazi ........................................................................................................................................................10

II - 1- 5. Matematički operatori ..................................................................................................................................10

II - 1- 6. Operatori dodjeljivanja .................................................................................................................................10

II - 1- 7. Prvenstvo operatora .....................................................................................................................................11

II - 1- 8. Imenovani prostori.......................................................................................................................................11

II - 2. Kontrola toka programa .................................................................................................................12


II - 2 - 1. Bulova logika ..............................................................................................................................................12

II - 2 - 2. Iskaz goto ..................................................................................................................................................13

II - 2 - 3. Grananje ...................................................................................................................................................13

Ternarni operator .........................................................................................................................................................13

II - 2 - 4. Iskaz IF .....................................................................................................................................................13

II - 2 - 5. Iskaz switch................................................................................................................................................14

II - 2 - 6. Petlje .......................................................................................................................................................14

Petlja do while .............................................................................................................................................................14

Petlja while .................................................................................................................................................................15

Petlja for ....................................................................................................................................................................15

Dino Dedić 2
Maturski rad Veb prezentacija programskog jezika C#

Prekidanje petlji ...........................................................................................................................................................15

Beskonačne petlje ........................................................................................................................................................16


Funkcije ..................................................................................................................................................................16
II - 3 - 1. Definisanje i korištenje funkcija .......................................................................................................................16

II - 3 - 2. Povratne vrijednosti .....................................................................................................................................17

II - 3 - 3. Parametri ..................................................................................................................................................17

II - 3 - 4. Nizovi parametara .......................................................................................................................................17


II - 3 - 5. Prijenos parametara po referenci i vrijednosti ......................................................................................................18

II - 3 - 6. Izlazni parametri..........................................................................................................................................18

II - 3 - 7. Opseg važenja promjenljive ............................................................................................................................19

II - 3 - 8. Opseg važenja promenljive u drugim strukturama .................................................................................................20

II - 3 - 9. Parametri i povratne vrijednosti nasuprot globalnim podacima .................................................................................21

II - 3 - 10. Funkcija Main() ...........................................................................................................................................21

Funkcije članice struktura ...............................................................................................................................................22


Preopterećenje funkcija..................................................................................................................................................22

Delegati .....................................................................................................................................................................22

II - 3 - 11. Događaji ...................................................................................................................................................23

Šta je događaj? ............................................................................................................................................................23

Korištenje događaja ......................................................................................................................................................24

Definisanje događaja .....................................................................................................................................................25

Višenamjenske rutine za obradu događaja ...........................................................................................................................26

Povratne vrijednosti i rutina za obradu događaja ...................................................................................................................27

Osobine .....................................................................................................................................................................29

III - 1 - 3 - 1. Kontrola Button ......................................................................................................................................31

III - 1 - 3 - 2. Kontrole Label i LinkLabel ..........................................................................................................................31

III - 1 - 3 - 3. Kontrola TextBox .....................................................................................................................................32

III - 1 - 3 - 4. Kontrole RadioButton i CheckBox .................................................................................................................32

III - 1 - 3 - 5. Kontrola CheckBox ...................................................................................................................................33

III - 1 - 3 - 6. Kontrola GroupBox ..................................................................................................................................33

III - 1 - 3 - 7. Kontrola RichTextBox ...............................................................................................................................33

III - 1 - 3 - 8. Kontrola ListBox i Kontrola CheckedListBox .....................................................................................................34

III - 1 - 3 - 9. Kontrola ComboBox .................................................................................................................................35

III - 1 - 3 - 10. Kontrola ListView ....................................................................................................................................36

III - 1 - 3 - 11. Metode klase ListView ..............................................................................................................................37

III - 1 - 3 - 12. Kontrola ImageList ...................................................................................................................................37

III - 1 - 3 - 13. Kontrola StatusBar ...................................................................................................................................38

III - 1 - 3 - 14. Kontrola TabControl .................................................................................................................................38

III. Zaključak ........................................................................................................................................................39


IV. Literatura .......................................................................................................................................................40

Dino Dedić 3
Maturski rad Veb prezentacija programskog jezika C#

I. Uvod u C#
I - 1. Šta je .NET okruženje?
Projektno 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 dijelom 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 Studio-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-na-
vrijeme” 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:
1. Kôd za aplikaciju napisati koristeći .NET jezik kao što je C#.
2. 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
C# kôd koji se kompajlira u MSIL u koraku 2. ne mora da bude smješ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 datoteka 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 kojem 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 mjestima
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ženja je u potpunosti prilagodljiv.
Glavni prozor je onaj u kome se prikazuje cijeli naš kôd. Ovaj prozor je podijeljen 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 alatkama, 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 Veb prezentacija programskog jezika C#

II. 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 zahtjevaju tačku-zarez iza sebe. Npr.
blok C# koda može izgledati ovako:
{
<red koda 1, iskaz 1 >;
<red koda 2, iskaz 2 >
}
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:
{
<red koda 1>;
{
<red koda 2>;
}
<red koda 4>;
}

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. Promjenljive 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čin
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.:
<tip> <ime>;
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 bitova (nezavisnih cifri koje
mogu biti jedinice ili nule) i predstavljamo naš broj u binarnom formatu. Promjenljiva 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 cijeli broj između -128 i 127.
byte cijeli broj između 0 i 255.
short cijeli broj između -32768 i 32767.
ushort cijeli broj O i 65535.
int cijeli broj između -2147.483.648 i 2147.483.647.
uint cijeli broj između 0 i 4294967295
long cijeli broj između -9223.372.036.854.775.808 i 9223.372.036.854.775.807.
ulong 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 smještati
negativne brojeve, što se može vidjeti 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, ovo 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 namjestimo 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


Područje važenja Prefiks Primjer – vrijednosti
Global g g_strSnimiPutanju
Private to class m m_blnPromenaVrijednosti

Dino Dedić 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 vrijednosti 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 podataka


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
\` jednostruki navodnik 0x0027
\" dvostruki navodnik 0x0022
\\ obrnuta kosa crta 0x005C
\0 nula 0x0000
\a alarm(pravi pištanje) 0x0007
\b unazad za jedan znak 0x00080
\f prelazak na sledeću stranicu 0x000C
\n novi red 0x000A
\r prenos u novi red 0x000D
\t horizontalni tabulator 0x0009
\v vertikalni tabulator 0x000B

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 dodjeljivanje vrijednosti promjenljivim


Promjenljive deklarišemo koristeći njihov tip i ime. Npr.:
int godiste;

Potom smo joj dodjelili vrijednost uz pomoć operatora dodjele :


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 promenljivima. 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 Rezultat
+ binarni var1 = var2 + var3; var1 je dodjeljena vrijednost sume
- binarni var1 = var2 - var3; var1 je dodejljena vrijednost razlike
* binarni var1 = var2 * var3 var1 je dodjeljena vrijednost proizvoda
/ binarni var1 = var2 /var3 var1 je dodjeljena vrijednost dijeljenja
% binarni var1 = var2 % var3 var1 je dodjeljena vrijednost koja je ostatak dijeljenja
+ unarni var1 = + var2 var1 je dodjeljena vrijednost var2
- unarni var1 = - var2 var1 je dodjeljena vrijednost var2

Tabela 7. Operatori inkrementiranja i dekrementiranja


Operator Kategorija Primer izraza Primer izraza
++ unarni var1 = ++var2 var1 je dodjeljena vrijednost. var2+1,
var2 je uvećana za 1.
-- unarni var1 = --var2 var1 je dodjeljena vrijednost. var2-1,
var2 je umanjena za 1.
++ unarni var1 = var2++ 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 operand 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 Rezultat


= binarni var1=var2; var1 je dodjeljena vrijednost var2
+= binarni var1+=var2 var1 je dodjeljena vrijednost koja čini sumu var 1 var 2
-= binarni var1-=var2; var1 je dodjeljena vrijednost razlike var1 i var2
*= binarni var1*=var2; var1 je dodjeljena vrijednost proizvoda var1 i var 2
/= Binarni var1/=var2; var1 je dodjeljena vrijednost djeljenja var1 i var2
%= binarni var1%=var2; var1 je dodjeljena vrijednost ostatka djeljenja var1 i var2

Dino Dedić 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 primjer:
var1 = var2 + var3 * var4;

Ovdje je redoslijed izvršavanja sljedeći: prvo operator * , zatim + i na kraju =. Tu možemo odrediti prvenstvo
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 var 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 prostora.
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 prostoru 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 pojednostaviti 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 dvije vrijednosti: true ili false. Uglavnom se tipovi bool koriste da snimi rezultat
nekog poređenja. Poređenje zahtjeva upotrebu relacionih operatora koji su prikazanih u donjoj tabeli.
Tabela 10. Operatori poređenja
Operator Kategorija Primjer izraza Rezultat
var1 je dodjeljena vrijednost true ako je
== binarni var1=var2== var3;
var2 jednaka var3, u suprotnom false.
var1 je dodjeljena vrijednost true ako je
!= binarni var1=var2!= var
var2 nije jednaka var3, u suprotnom false.
var1 je dodjeljena vrijednost true ako je
< binarni var1=var2< var3
var2 manja od var3, u suprotnom false.
var1 je dodjeljena vrijednost true ako je
> binarni var1=var2>var3;
var2 veća od var3, u suprotnom false.
var2 manja ili jednaka var3, u suprotnom
<= binarni var1=var2<= var3;
false.
var2 veća ili jednaka var3, u suprotnom
>= binarni var1=var2>= var3;
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 Rezultat
var 1 je dodeljena vrednost true ako je var2 false, ili
! unarni var1 = !var2;
vrednost false ako je var2 true (logičko NE).
var1 je dodeljena vrednost true ako var2 i var3 imaju
& binarni var1 = var2 & var3;
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
| binarni var1 = var2|var3;
vrednost true, u suprotnom dobija vrednost false (logičko
ILI).

Dino Dedić 12
Maturski rad Veb prezentacija programskog jezika C#

var1 je dodeljena vrednost true ako var2 ima vrednost


true ili var3 ima vrednost true, ali ne i ako obe
^ binarni var1=var2 ^ var3;
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 Rezultat
var1 je dodjeljena vrijednost true ako var2 i var3 imaju
&& binarni var1=var2&&var3;
vrednost true, u suprotnom false (logičko I)
var1 je dodeljena vrednost true ako var2 ili var3 (ili obje
|| binarni var1=var2||var3; 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 vrijednost 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 dijelovi 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 <imeOznake>;

Npr.:
int myInteger = 5;
goto myLabel;
myInteger +=10;
myLabel;
Console.WriteLine("myInteger = {0}", myInteger);

Program se izvršava na sljedeć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 obiljež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:
<test> ? <resultIfTrue> : <resultIfFalse>

Ovdje se ispituje <test> da bi se dobila logička vrednost, pa je rezultat operator <resultIfTrue> ili
<resultIfFalse> 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 (<test>):
<kôd se izvršava ako je test istinit >;

Ovdje se <test> izračunava (mora biti logička vrednost da bi se kôd kompajlirao), a iskaz ispod se izvršava
ako uslov <test> ima vrednost true. Nakon izvršenja tog koda, ili ukoliko <test> 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
<test> ima vrednost false:
if (<test>)
<kôd se izvršava ako je <test> true>;
else
<kôd se izvršava ako je <test> 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 drugi = Convert.ToDouble(Console.ReadLine()); Slika 3. Rezultat izvršavanja navedenog
if (prvi > drugi) programa
Console.WriteLine("Prvi broj je veci od drugog.");
else
Console.WriteLine("Drugi broj je veci od prvog.");
Console.ReadKey();
}
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 (<testProm>)
{
case <constIzraz11>:
<kôd koji se izvršava ako je <testProm> == <constIzraz11> > break;
case <constIzraz12>:
<kôd koji se izvršava ako je <testProm> == <constIzraz12> > break;
default::
<kôd koji se izvršava ako je <testProm> != <constIzrazi> break;
}

Vrijednost u promenljivoj <testProm> poredi se sa svakom od vrijednosti <constIzrazX> (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 <test> logička
vrednost) :
do {
<kôd koji se ponavlja u petlji>
}
while (<test>);

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 (<test>)
{
<kôd unutar petlje>
}
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();
}
} Slika 5. Rezultat izvršavanja
navedenog programa
Ako je kôd ispravno napisan, pojavljuje se prozor komandne linije sa
ispisanim tekstom:
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ć vidjeli u dragim
situacijama:
 break - trenutno završava petlju

Dino Dedić 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 poslije 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 namjerno), definisati petlje koje se nikada ne završavaju, tzv. beskonačne petlje. 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 obezbjeđ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() {
Slika 7. Rezultat izvršavanja funkcije programa

Dino Dedić 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 razmjenu 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 sljedeć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 param2) {
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. Sljedeći kôd je potreban da bi se definisala funkcija koja koristi niz parametara:
static <returnType> <functionName>(<p1Type><p1Name>, . . . , params <type> []
<name>) {
.....
.....
return <returnValue>;
}

Ovu funkciju možemo pozvati sa:


<functionName>(<p1>,...,<val1><val2>,...)

Ovdje su <val1>, <val2> vrijednosti tipa <type> koji je korišten da bi se inicijalizovao niz <name>. Ne postoji
ograničenje u broju parametara koje možemo navesti, jedino ograničenje je da su svi tipa <type>.
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; Slika 8. Rezultat izvršavanja funkcije
} kojoj se prosljeđuju nizovi parametara
return sum;
}
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 sljedeć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 vrijednost
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 proslijedimo 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 promjenljivoj odrazit će se na promjenljivu 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 koristiti 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 sljedeć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 nizu
Ovde je važno naglasiti da se ključna riječ 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 razmjena podataka sa funkcijama. Razlog je taj što se
promjenljivama u C#-u može pristupiti samo iz lokalnih regiona koda. Za datu promjenljivu 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
Slika 9. Rezultat izvršavanja funkcije i opseg važenja
funkciju Write(). promjenljive
 Write() definiše i inicijalizuje

Dino Dedić 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 promjenljivu 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 mijenjamo 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 strukturama
Opseg važenja promjenljivih 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. Opseg važenja promenljive u drugim strukturama

II - 3 - 9. Parametri i povratne vrijednosti nasuprot globalnim podacima


U ovom dijelu ćemo bliže pogledati razmjenu 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 = ", prom);
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. Parametri i povratne vrijednosti nasuprot globalnim podacima


II - 3 - 10. 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 vrijednost 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 notepad 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" kada 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 smješ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 djelovati č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, morat ć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šten modifikator static. Treba znati
da ova ključna reč nije potrebna za funkcije članice struktura. Tu funkciju možemo koristiti na sljedeć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 tijela 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, double 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 taster D za djeljenje.");
ulaz = Console.ReadLine();
if (ulaz == "N") {
process = new 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 izuzetcima 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 zahtjeva 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.

Creates
Application 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 drugom 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 obavješ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 parametar može biti tekst iz instant poruke. Ovaj tekst može se prikazati pomoću rutine 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 obezbjediti 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 Timer(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. Implementirat ć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 poruke.");
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.cs:
{
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. Objekat 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 htjeti 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 poruke.");
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 obezbjediti 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 rješava problem tako što dozvoljava pristup samo posljednjoj vraćenoj vrijednosti. Ovo je vrijednost
koju vraća posljednja rutina za obradu događaja koja se odnosi na neki događaj.

Dino Dedić 27
Maturski rad Veb prezentacija programskog jezika C#

III - 1. 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 uvijek
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 vidjeti 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.

Okvir sa alatima sadrži sve kontrole dostupne .NET programerima.


Okvir sadrži sve kontrole za programere Windows aplikacija.
Slika 18. Kako pristupiti okviru sa alatima
III - 1 - 3. 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 TextBoxBase ............

LinkLabel TextBox RichTextBox

Osobine
Sve kontrole imaju određ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 Opis


Ovo svojstvo definiše ponašanje kontrole kada kontejner koji sadrži
Anchor Čitanje/upis
kontrolu mijenja svoju veličinu.
BackColor Čitanje/upis Boja pozadine kontrole.
Bottom Čitanje/upis Određuje razdaljinu od vrha prozora do dna kontrole.
Dock Čitanje/upis Dopušta da kontrola bude pripojena uz ivicu prozora.
Podesiti svojstvo Enabled na true (tačno) obično znači da kontrola može
Enabled Čitanje/upis da primi unos od strane korisnika. Podešeno na false (netačno) obično
znači da ne može.
ForeColor Čitanje/upis Boja prednjeg plana kontrole.
Height Čitanje/upis Udaljenost od vrha do dna kontrole.
Left Čitanje/upis Udaljenost lijeve ivice kontrole od lijeve ivice prozora.
Name Čitanje/upis Ime kontrole. Ime se koristi za pristup kontroli u kodu.
Parent Čitanje/upis Roditelj kontrole.
Right Čitanje/upis Udaljenost desne ivice kontrole od lijeve ivice prozora.
Redosljed promjene kontrola u kontejneru koji ih drži prilikom pritiska
TabIndex Čitanje/upis
na taster Tab.
Tabstop Čitanje/upis Određuje da li kontrola može biti dostupna pritiskanjem tastera Tab.
Ovu vrijednost ne koristi sama kontrola, već služi programerima za
Tag Čitanje/upis smještanje informacija o kontroli. Ovoj osobini može se dodijeliti jedino
vrijednost u formi stringa.
Top Čitanje/upis Udaljenost gornje ivice kontrole od vrha prozora.
Visible Čitanje/upis Određuje da li je kontrola vidljiva u toku izvršavanja programa.
Width Čitanje/upis Š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 mijenja
veličina prozora. Svojstva Anchor i Dock omogućavaju vam da riješite ovaj 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 koriste 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 Opis


Click Dešava se kada se pritisne na kontrolu ili kada pritisne taster Enter.
Doubleclick Dešava se kada se kontrola dva puta pritisne.
DragDrop Dešava se kada se završi operacija prevlačenja i spuštanja.
DragEnter Dešava se kada dovučeni objekt uđe u granice kontrole.
DragLeave Dešava se kada dovučeni objekt napušta granice kontrole.
DragOver Dešava se kada dovučeni objekt prelazi preko kontrole.
KeyDown Dešava se kada se taster pritisne dok kontrola ima fokus.
Key Press Dešava se kada se taster pritisne dok kontrola ima fokus.
KeyUp Dešava se kada se taster pusti dok kontrola ima fokus.
GotFocus Dešava se kada kontrola primi fokus.
LostFocus Dešava se kada kontrola izgubi fokus.
MouseDown Dešava se kada se pokazivač miša nalazi iznad kontrole i kada se taster miša pritisne.
MouseMove Dešava se konstantno dok miš prelazi preko kontrole.
MouseUp Dešava se kada je pokazivač miša na kontroli i kada se taster miša oslobodi.
Paint Dešava se kada se kontrola iscrtava.
Ovaj događaj se dešava kada se kontrola sa CausesValidation osobinom podešenom na true,
Validated 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,
Validating 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 unijetim 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 Dostupnost Opis


Izgled dugmeta može biti izmijenjen pomoću ove osobine. Ako namjestite
FlatStyle Čitanje/upis stil na PopUp, dugme će biti ravno sve dok se pokazivač miša ne pomjeri na
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
Enabled Čitanje/upis
ne dešava kada se pritisne.
Omogućava biranje slike (bitmape, ikone itd.) koja će se pojaviti na
Image Čitanje/upis
dugmetu.
Uz pomoć ove osobine možete da izaberete položaj slike na
ImageAlign Čitanje/upis
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 Opis


BorderStyle Čitanje/upis Omogućava da izaberete date ivice oznake. Podrazumijeva se da nema ivica.
Samo za LinkLabel: boja koju će kontrola LinkLabel imati kada je korisnik
DisabledLinkColor Čitanje/upis
pritisne.
Definiše izgled kontrole. Ako podesite ovu osobinu na PopUp, kontrola će biti
FlatStyle Čitanje/upis ravna sve dok pokazivač miša ne pomerite na kontrolu. Tada će se kontrola
izdići.
Image Čitanje/upis Omogućava biranje slike (bitmape, ikone itd.) koja će se pojaviti na oznaci.
ImageAlign Čitanje/upis Određuje položaj slike na oznaci.
LinkArea Čitanje/upis Samo za LinkLabel: opseg teksta koji će biti prikazan kao veza.
LinkColor Čitanje/upis Samo za LinkLabel: Boja hiperveze.
Samo za LinkLabel: kontrola LinkLabel može da drži više od jedne
Links Čitanje/upis 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 posjećena ili
LinkVisited Čitanje/upis
ne.

Dino Dedić 31
Maturski rad Veb prezentacija programskog jezika C#

Text Čitanje/upis Tekst koji se pojavljuje u oznaci.


TextAlign Čitanje/upis Određuje položaj teksta na kontroli.

III - 1 - 3 - 3. 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 unijeti bilo koji znak i sasvim je moguće
primorati korisnika da unese samo numeričke vrijednosti. U .NET okruženju 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 Opis


Causes Validation Čitanje/upis Određuje da li će kontrola TextBox mijenjati slova u mala ili velika.
CharacterCasing Čitanje/upis Q Normal: neće biti nikakvih promena.
Upper: sva unijeta slova biti će konvertovana u velika slova.
MaxLength Čitanje/upis 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
MultiLine Čitanje/upis
može da prikaže više redova teksta.
Određuje da li karakter lozinke treba da zamijeni stvarne karaktere koji su
PasswordChar Čitanje/upis
unijeti u okvir za tekst sa jednim redom..
Readonly Čitanje/upis Logička vrijednost koja pokazuje da li je tekst samo za čitanje.
ScrollBars Čitanje/upis Određuje da li tekst u više redova treba da ima traku za pomjeranje.
SelectedText Čitanje/upis Tekst koji je izabran u okviru za tekst.
Broj izabranih karaktera u tekstu. Ako je ova vrijednost veća od ukupnog
SelectionLength Čitanje/upis broja karaktera u tekstu, onda kontrola resetuje ovu vrijednost na ukupan
broj karaktera minus vrijednost koja se nalazi u svojstvu SelectionStart.
SelectionStart Čitanje/upis Početak izabranog teksta u okviru za tekst.
Određuje da li u okvirima za tekst sa više redova riječ koja premašuje
Wordwrap Čitanje/upis
š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 Opis


Enter
Ovih šest događaja dešavaju se redom kojim su ovdje navedeni. Poznati su kao "događaji fokusa" i
GotFocus
aktiviraju se uvijek kada se mijenja fokus kontrole, uz dva izuzetka.
Leave
Događaji Validating i Validated dešavaju se samo kada kontrola koja prima fokus ima svojstvo
Validating
CausesValidation podešeno na true.
Validated
Primer za ovo je kada korisnik pritisne Help dugme.
LostFocus
KeyDown Sljedeća tri događaja su poznatija kao "taster događaji“. Oni omogućavaju da pratite i mijenjate ono
KeyPress što je unijeto u kontrolu. KeyDown i KeyUp primaju kôd tastera koji je pritisnut. Na ovaj način možete
KeyUp vidjeti da li su pritisnuti specijalni tasteri, kao sto su Shift, Control ili F1. KeyPress, sa druge strane,
Change 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 Opis


Radio dugme se pojavljuje kao oznaka sa kružićem lijevo, u sredini ili desno od
Appearance Čitanje/upis 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
AutoCheck Čitanje/upis pritisne na radio dugme. Kada je ovo svojstvo podešeno na false, podrazumijeva se
da se znak za potvrđivanje ne pojavljuje.
CheckAlign Čitanje/upis Određuje položaj radio dugmeta.
Checked Čitanje/upis Pokazuje status kontrole.

 Događaji kontrole RadioButton

Događaji su prikazani u tabeli.

Ime Opis
Ovaj događaj se šalje kada se mijenja potvrda radio dugmeta. Ako ima više kontrola RadioButton na
CheckChanged 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 postaje potvrđena.
Click Ovaj događaj se šalje svaki put kada se pritisne na radio dugme. Ovo nije isto kao i događaj
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 Opis
Polje za potvrdu može imati tri statusa: Checked, Indeterminate i Unchecked
CheckState Čitanje/upis
(potvrđeno, neodređeno i nepotvrđeno).
Ako je ovo svojstvo podešeno na false korisnik neće moći da izmijeni status kontrole
ThreeState Čitanje/upis
na Indeterminata, ali može izmijeniti status u kodu.

 Događaji kontrole CheckBox

Ime Opis

CheckedChanged Dešava se kada se mijenja 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 mijenja svojstvo CheckedState kontrole. Kako su Checked i Unchecked moguće
CheckedStateChanged 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 Dostupnost Opis
Vrijednost ove osobine je true, ako nešto što je poništeno može biti
CanRedo Samo čitanje
ponovljeno, u suprotnom je false.

Dino Dedić 33
Maturski rad Veb prezentacija programskog jezika C#

Vrijednost ove osobine je true, ako je moguće izvršiti akciju Undo na


CanUndo Samo čitanje
obogaćeni okvir za tekst, u suprotnom je false.
RedoAc t i onName Ovo svojstvo sadrži ime akcije koja će biti korištena da bi se ponovo uradila
Samo čitanje
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
DetectUrls Čitanje/upis
ih formatira.
Rtf Čitanje/upis Ovo odgovara svojstvu Text, s tim što je tekst u RTF formatu.
SelectedRtf Čitanje/upis 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
SelectedText Čitanje/upis
prethodne osobine, pri kopiranju tekst ne zadržava svoj format.
Ovo svojstvo predstavlja način poravnavanja izabranog teksta.
SelectionAlignment Čitanje/upis
Može biti Center, Left ili Right.
Uz pomoć ove osobine možete saznati da li je neki dio teksta formatiran sa
SelectionBullet Čitanje/upis
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
Bulletlndent Čitanje/upis
nabrajanje.
SelectionColor Čitanje/upis Dopušta vam da mijenjate boju izabranog teksta.
SelectionFont Čitanje/upis Dopušta vam da mijenjate font izabranog teksta.
SelectionLenght Čitanje/upis 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
SelectionType Samo čitanje
izabran neki objekat ili je izabran samo tekst.
Ako podesite ovo svojstvo na true, margina će se pojaviti na lijevoj strani
ShowSelectionMargin Čitanje/upis
kontrole RichTextBox. Ovo omogućava lakše biranje teksta.
UndoAc t i onName Samo čitanje 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
SelectionProtected Čitanje/upis
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 Opis


LinkedClick Ovaj događaj se šalje kada korisnik pritisne vezu unutar teksta.
Protected Ovaj događaj se šalje kada korisnik pokuša da promijeni tekst koji je kao zaštićen.
Ovaj događaj se šalje kada želite nešto da izmijenite u izabranom tekstu. Ako iz bilo kojih
SelctionChanged razloga ne želite da dopustite korisniku da mijenja izabrani tekst možete ga sprečiti pomoću
ovog događaja.

III - 1 - 3 - 8. 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 Opis


Vrijednost koja pokazuje indeks izabranog elementa u okviru liste. Ako okvir liste
SelectedIndex Čitanje/upis dopušta da više elemenata bude izabrano odjednom ovo svojstvo uzima indeks
prvog izabranog elementa.
ColumnWidth Čitanje/upis U okvirima sa više kolona ovo svojstvo određuje širinu kolona.
Items Samo čitanje Kolekcija Items sadrži sve elemente liste
Ovo svojstvo je kolekcija koja sadrži indekse izabranih elemenata pri čemu
Selectedlndices Samo čitanje
indeksiranje počinje od nule.
U listi koja dopušta biranje samo jednog elementa ovo svojstvo sadrži taj
Selectedltem Čitanje/upis element. Ako se u listi može izabrati više elemenata svojstvo sadrži prvi izabrani
element.
Selectedltems Samo čitanje 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.
SelectionMode Čitanje/upis
- One: samo jedan element može biti izabran.
- MultiSimple: više elemenata može biti izabrano.

Dino Dedić 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
abecednom redu.
Ako podesite Text osobinu okvira liste ona će tragati za elementom koji ima to
Text Čitanje/upis
ime i izabraće ga.
Samo za kontrolu CheckedListBox: ovo svojstvo sadrži sve indekse elemenata koji
Checkedlndicies Samo čitanje
su potvrđeni ili koji imaju neodređen status.
Samo za kontrolu CheckedListBox: ovo je kolekcija koja sadrži sve elemente koji
CheckedItems Samo čitanje
su potvrđeni ili koji imaju neodređen status.
Samo za kontrolu CheckedListBox: ako je ovo svojstvo podešeno na true, element
CheckOnClick Čitanje/upis
menja stanje kad god korisnik pritisne na njega.
Samo za kontrolu CheckedListBox: podešavanjem ove osobine možete birati da li
ThreeDCheckBoxes Čitanje/upis
ć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
ClearSelected Poništava izbor u okviru liste.
FindString Pronalazi prvi string u listi koji počinje željenim stringom.
FindstringExact Kao i FindString s tim što se kompletan string mora podudarati.
GetSelected Vraća vrijednost koja pokazuje da li je element izabran ili nije.
SetSelected Podešava da element bude izabran ili briše element iz liste izabranih elemenata.
ToString Vraća trenutno izabrani element.
GetltemChecked Samo za kontrolu CheckedListBox: vraća vrijednost koja pokazuje da li je elemant
potvrđen ili ne.
SetltemCheckState Samo za kontrolu CheckedListBox: vraća vrijednost koja pokazuje stanje
elemenata.
SetltemChecked Samo za kontrolu CheckedListBox: podešava određeni element tako da bude
potvrđen.
SetltemCheckState Samo za kontrolu CheckedListBox: podešava stanje elementa.

 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
ItemCheck Samo za kontrolu CheckedListBox: dešava se prilikom mijenjanja stanja elementa.
SelectedlndexChanged Dešava se prilikom mjenjanja indeksa izabranog elementa.

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
na dugme sa strjelicom za prikaz kompletne liste elemenata.
DropDownStyle Čitanje/upis
- Simple: isto kao i DropDown s tim što je lista uvijek vidljiva
- DropDownList: korisnik ne može upisivati novi element u tekstualni okvir i
mora pritisnuti na dugme sa strjelicom za prikaz liste elemenata.
Dino Dedić 35
Maturski rad Veb prezentacija programskog jezika C#

Pokazuje da li je lista prikazana ili nije. Ako podesite ovu osobinu na true, lista će se
DropDown Čitanje/upis
prikazati.
Items Samo čitanje Kolekcija koja sadrži sve elemente liste iz kombinovanog okvira.
Podešavanjem ove osobine na broj veći od nule, određujete maksimalan broj
MaxLength Čitanje/upis
karaktera koji je moguće uneti u tekstualni dio kontrole.
Selectedlndex Čitanje/upis Pokazuje indeks trenutno izabranog elementa liste.
Selectedltem Čitanje/upis Pokazuje trenutno izabrani element liste.
SelectedText Čitanje/upis Predstavlja tekst koji je izabran u tekstualnom dijelu kontrole.
Predstavlja indeks prvog karaktera dijela teksta koji je izabran u tekstualnom dijelu
SelectionStart Čitanje/upis
kontrole.
SelectionLength Čitanje/upis Predstavlja dužinu izabranog teksta u tekstualnom dijelu kontrole.
Ako podesite ovu osobinu na true kontrola će sortirati elemente liste po
Sorted Čitanje/upis
abecednom redu.
Ako podesite ovu osobinu na vrednost null ništa neće biti izabrano. Ako podesite na
Text Čitanje/upis 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 jedan ili više od sljedećih događaja:
Ime Opis
DropDown Dešava se prilikom prikazivanja dijela sa padajućom listom.
SelectedlndexChanged Dešava se kada se umesto jednog elementa u listi izabere neki drugi element.
KeyDown
Ovi događaji dešavaju se kada se pritisne taster dok tekstualni dio kontrole ima fokus.
KeyPress
Pogledajte objašnjenja ovih događaja za tekstualni okvir.
KeyUp
TextChanged Dešava se prilikom mijenjanja svojstva Text.

III - 1 - 3 - 10. 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
kontrole ListView. Ne bi trebalo mijenjati vrijednost osobine ukoliko nemate dobar
razlog za promjenu, zato što se promjena podešene vrijednosti odnosi na cijeli
Activation Čitanje/upis sistem. Moguće vrijednosti su:
- Standard: ona vrijednost koju 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 spustio.
Alignment Čitanje/upis
- Left: elementi su poravnati po lijevoj ivici kontrole ListView.
- Top: elementi su poravnati 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.
AllowColumn
Čitanje/upis Ako to uradite morate imati rutine koje će valjano ubacivati elemente u listu, bez
Reorder
obzira na to da li je redosljed kolona promenjen ili nije.
Ako podesite ovu osobinu na true element će zauzeti položaj prema vrijednosti
AutoArrange Čitanje/upis 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
CheckBoxes Čitanje/upis od sebe. Podešavanje ove osobine ima efekta samo ako je svojstvo View podešeno na
Details ili List.
Checkedlndices Samo čitanje Ova dva svojstva daju pristup kolekcijama koje sadrže indekse i elementi koji su

Dino Dedić 36
Maturski rad Veb prezentacija programskog jezika C#

Checkedlterns potvrđeni.
Kontrola ListView može imati kolone. Ovo svojstvo obezbeđuje pristup kolekciji
Columns Samo čitanje
kolona kroz koju možete dodavati ili uklanjati kolone.
Focusedltem Samo čitanje 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
FullRowSelect Čitanje/upis 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.
GridLines Čitanje/upis
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.
HeaderStyle Čitanje/upis
- 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
HoverSelection Čitanje/upis
miša na element.
Kada je vrijednost ovog svojstva podešena na true korisnik može uređivati sadržaj
LabelEdit Čitanje/upis
prve kolone u prikazu Details.
Kada je ovo svojstvo podešeno na true oznake će se protezati na koliko god je redova
LabelWrap Čitanje/upis
potrebno za prikazivanje cijelog teksta.

III - 1 - 3 - 11. Metode klase ListView


Za kompleksnu kontrolu kakva je ListView postoji mali broj metoda. Sve su opisane u sljedećoj tabeli:
Ime Opis
Pozivanjem ove metode zaustavljate osvežavanje slike sve dok se ne pozove metoda EndUpdate.
BeginUpdate 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 Kompletno uklanja sve elemente i kolone kontrole ListView.
Ovu metodu pozivate poslije metode BeginUpdate. Kada je pozovete svi elementi će biti iscrtani u
EndUpdate
kontroli ListView.
EnsureVisible Kada pozovete ovu metodu lista će se pomejriti do onog elementa čiji je indeks proslijeđen metodi.
GetltemAt 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 Ovaj događaj nastaje poslije uređivanja oznake.
BeforeLabelEdit Ovaj događaj nastaje prije nego što korisnik započne uređivanje oznake.
ColumnClick Ovaj događaj nastaje kada je kolona pritisnuta.
ItemActivate 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 za 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 Opis
Backgroundlmage Čitanje/upis 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
Panels Čitanje/upis
uklanjanje panela.
ShowPanels Čitanje/upis 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
Text Čitanje/upis
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
DrawItem
ako želite sami da crtate sadržaj panela.
PanelClick Dešava se prilikom odabira panel.

 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 stil 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 Opis


Kontroliše se gdje se na kontroli pojavljuju jezičci kartica. Podrazumeva se da su na
Alignment Čitanje/upis
vrhu.
Appearance Čitanje/upis Kontroliše se kako su prikazani jezičci kartica. Mogu biri kao dugme ili ravni.
Ako je ovo svojstvo podešeno na true izgled jezička kartice se menja kada pokazivač
HotTrack Čitanje/upis
miša prelazi preko njega.
Ako je ovo svojstvo podešeno na true moguće je imati nekoliko redova sa jezičcima
Multiline Čitanje/upis
kartica.
RowCount Čitanje/upis Sadrži broj redova sa jezičcima kartica koji su trenutno prikazani.
Selectedlndex Čitanje/upis Vraća ili podešava indeks trenutno izabranog jezička kartice.
TabCount Čitanje/upis Sadrži ukupan broj kartica.
Ovo je kolekcija objekata TabPages. Koristite ovu kolekciju za dodavanje ili uklanjanje
TabPages Čitanje/upis
kartica.

Dino Dedić 38
Maturski rad Veb prezentacija programskog jezika C#

III. 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 ideja, algoritama i principa, predstavlja samo početni korak prema razvoju
kvalitetnih sistema..

Dino Dedić 39
Maturski rad Veb prezentacija programskog jezika C#

IV. Literatura
Internet :
http://www.scribd.com/doc/27049359/C-Programiranje-skripta
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 2.5.2012.
http://hr.wikipedia.org/wiki/C_Sharp 2.5.2012.

Dino Dedić 40

You might also like