Professional Documents
Culture Documents
C# програмски језик PDF
C# програмски језик PDF
CILJ
2. Promenljive i konstante
3. Naredbe
4. Operatori
1. Postupak kreiranja konzolnih aplikacija
2. Konzolna aplikacija sabiranje stringova
4. Konzolne aplikacije 3. Konzolna aplikacija operacije sa celim brojevima
4. Konzolna aplikacija unos celog broja
1. Klase i objekti
2. Kreiranje klase
5. Klase i objekti 3. Kreiranje objekata
4. Korienje kljune rei this
1. Metode
2. Konstruktori i destruktori
6. Klase i objekti 3. Modifikatori pristupa
4. Enkapsulacija
1. Naredbe grananja
7. Logike strukture 2. Petlje
1. Nasleivanje
8. Nasleivanje, interfejsi i 2. Interfejsi
apstraktne klase 3. Apstraktne klase
1. Polimorfizam
9. Polimorfizam i overriding 2. Overriding
1. Strukture podataka
10. Strukture, enumeratori i 2. Enumeratori
referenciranje i konverzija 3. Referenciranje i konverzija
1. Pojam nizova
2. Deklaracija nizova
3. Konstrukcija nizova
11. Nizovi
4. Inicijalizacija nizova
5. Dvodimenzionalni i viedimenzionalni nizovi
6. Rad sa elementima niza
1. Delegati
12. Delegati, dogaaji i 2. Dogaaji
kolekcije 3. Kolekcije
1. Izuzeci
13. Izuzeci
2. esto koriene klase izuzetaka
1. Osobine Windows kontrola
2. Izbor i postavljanje kontrole na formu
14. Windows kontrole 3. Selekcija kontrole, podeavanje pozicije i velicine
4. Zajednika svojstva Windows kontrola
5. Postavljanje kontrole u fokus
1. Button
2. TextBox
3. Label
15. Windows kontrole 4. GroupBox
primeri korienja 5. Panel
6. PictureBox
7. OpenFile Dialog
2/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
8. Radio button
9. RadioBox
10. CheckBox
11. ListBox
12. MessageBox
Preduslovi:
Softverski zahtevi:
Visual Studio 2010 moe biti instaliran na sledeim operativnim sistemima:
Podrane arhitekture:
32-Bit (x86)
64-Bit (x64)
Hardverski zahtevi:
3/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Napomena:
Za download softvera je potrebna registracija, te ukoliko to ve niste uinili u nekom
od prethodnih perioda, uinite to pre i preuzmite alat.
Postupak instalacije
Po logovanju na sistem, vri se postupak downloada datoteke. Source je u iso
formatu (en_visual_studio_2010_ultimate_x86_dvd_509116.iso), te je potrebno iso
datoteku pripremiti za instalaciju.
4/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
5/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
6/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
PostInstalaciona podeavanja
Po zavrenoj instalaciji i prvom pokretanju VisualStudio2010 e Vas pitati da
postavite default podeavanja. Za potrebe ovog predmeta potrebno je odabrati Visual
C# Development Settings.
Napomena:
U svakom trenutku je mogue promeniti default development setings preko tools ->
import and export settings.
7/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
.NET Framework
Re je o programskom okviru, operativnom sistemu unutar operativnog sistema, koji
su programeri kompanije Microsoft razvili kako bi nezavisni programeri mogli lake
da razvijaju svoje programe. .NET Framework je paket kodova neophodan
programerima aplikacija za uobiajene probleme u programiranju, koji ukljuuje i
virtuelnu mainu koja upravlja izvravanjem programa pisanih za .NET Framework.
Ta virtuelna maina, nazvana Common Language Runtime (CLR), je softversko
okruenje u kojem se izvravaju programi pisani za .NET Framework. Sa CLR,
programeri ne moraju da razmiljaju o kapacitetima procesora koji e izvravati
njihove programe. Pored toga CLR obezbeuje i druge vane elemente kao to su
bezbednost aplikacije, upravljanje memorijom i rukovanje izuzecima.
.NET Framework ukljuuje i ogromnu biblioteku kodova i podataka. On podrava
nekoliko programskih jezika to obezbeuje jeziku interoperabilnost, tako da svaki
programski jezik moe koristiti kod pisan drugim programskim jezikom. Biblioteka
klasa .NET Framework-a obezbeuje korisniki interfejs, pristup podacima,
kriptografiju, razvoj veb aplikacija, numerike algoritme i mrenu komunikaciju.
Programeri kombinuju biblioteke klasa sa sopstvenim kodom za kreiranje svojih
programa.
Mnoge aplikacije koje su dela nezavisnih programera kao preduslov za instalaciju i
rad zahtevaju da neka verzija .NET Framework-a bude instalirana na raunaru. ta
8/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Prevoenje i MSIL
U okruenju .NET, programi se ne prevode u izvrne datoteke, ve u programske
sklopove koji sadre instrukcije na Microsoftovom meeujeziku (engl. Microsoft
Intermediate Language , MSIL), koje CLR prevodi na mainski kd i izvrava. MSIL
(skraeno IL) datoteke koje pravi C# skoro su identine IL datotekama nastalim u
drugim .NET jezicima; za platformu je nevano na kom je jeziku program napisan.
Kljuna odlika okruenja CLR jeste to da je zajedniko svim .NET jezicima na isti
nain podrava pisanje programa na C#-u kao i na jeziku VB.NET.
9/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Jezik C# - nastanak
C# je jednostavan objektno-orijentisan programski jezik opte namene. Razvio ga je
Microsoft tim koji je vodio Andres Hejlsberg. Poslednja verzija C# je 4.0 koja je
zavrena 12. Aprila 2010. god. Prva verzija (C# 1.0) se pojavila 2001.godine, pa su
se ubrzo pojavljivale nove verzije ovog programskog jezika. C# predstavlja
naslednika C i C++ jezika, dobio je ime sharp po inspiraciji muzike notacije i znai
da se napisana nota izvodi za pola koraka vie. C# je naprednija verzija C++
(C++++). Fajlovi pisani u ovom jeziku imaju ekstenziju cs.
Bitno je napomenuti da C# programski jezik sintaksno nije sloen (ima oko 80
rezervisanih rei), ali je vrlo izraajan u delu gde je potrebno reiti bilo kakav problem
softveskog development procesa. Podrava strukturirano, objektno orijentisano
programiranje zasnovano na komponentama, u potpunosti podrava sve principe
OOP I SOA, podrava interfejse nasleivanje, strukture, delegate, komponentno
orijentisane elemente (svojstva, dogaaji, deklaracije).
Pored mogunosti koje se tiu same implementacije programskih jezika, bitno je
napomenuti da C# podrava i sledee:
Direktan pristup memoriji pomou pokazivaa u stilu C++-a
Rezervisane rei za izdvajanje nesigurnih operacija
Upozoravae skupljaa smea okruenja CLR da ne unitava objekte na koje
pokazuju pokazivai dok se ti objekti ne oslobode, itd.
Pored svega gore navedenog, C# podrava jo mnogo elemenata programiranja, ali
to u ovom delu neemo razmatrati, jer nam nije cilj pobrojavanje elemenata koje C#
moe da podri nego shvatanje njegove moi.
10/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Nakon unosa imena, lokacije i solution-a, okruenje Vam automatski kreira kod koji je
dovoljan za pokretanje jedne konzolne aplikacije (listing koda Vam je dat ispod).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication271
11/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
{
class Program
{
static void Main(string[] args)
{
}
}
}
namespace
predstavlja .NET nain da se kod i njegov sadraj jedinstveno identifikuju. Takoe se
koristi za kategorizaciju elemenata u .NET Framework. namespace je deklarisan za
kod aplikacije koja se u ovom sluaju naziva ConsoleApplication271.
using System;
predstavlja korienje System namespace (odnosi se na biblioteku klasa .NET
Framework, iju biblioteku koristi C#). Za vee projekte moe se kreirati sopstveni
namespaces.
Analogno sa ovim objanjenjem su i objanjenja za Collections.Generic, Linq I Text.
classPrimer{
definicija klase Primer. Poetak klase poinje sa otvorenom vitiastom zagradom {, a
zavrava se sa zatvorenom vitiastom zagradom }.
static voidMain()
poinje glavni metod, gde se izvrava program. Ovaj metod poinje sa static, to
znai da je statiki (ne moe da se instancira, odnosno ne moe od njega da se
napravi objekat) i void - ne vraa vrednost.
Kako bismo napravili na prvi program potrebno je da uradimo malo editovanje koda
I da na program nateramo da izvri ispis na ekran. To emo uraditi sledeom
naredbom:
Console.WriteLine("Hello World.");
Objanjenje: WriteLine() je funkcija koji kao rezultat vraa string koji mu je prosleen.
Console- podrava konzolni I/O. U kombinaciji se kompajleru govori da je WriteLine()
lanica Console klase. Izrazi u C# se zvravaju sa taka-zarezom (;).
12/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Console.ReadKey();
Objanjenje: funkcija za unos nekog znaka sa tastature.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication271
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World.");
Console.ReadKey();
}
}
}
13/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
14/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
15/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Ugraeni tipovi
Tip Veliina (b) .NET tip Opis
byte 1 Byte Vrednosti 0-255.
char 2 Char Unicode karakteri.
bool 1 Boolean Tano ili netano.
sbyte 1 SByte Vrednosti od -128 do 127.
short 2 Int16 Vrednosti od -32,768 do 32,767.
ushort 2 UInt16 Vrednosti od 0 do 65,535.
int 4 Int32 Vrednosti od -2,147,483,648 do
16/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
2,147,483,647.
uint 4 UInt32 Vrednosti od 0 do 4,294,967,295.
float 4 Single Vrednosti od priblino +/-1.5 * 10-45 do
priblino +/-3.4 * 1038.
double 8 Double Vrednosti od priblino +/-5.0 * 10-324 do
priblino +/-1.8 * 10308 .
decimal 12 Decimal Format zadate preciznosti do 28 cifara sa
odreenom pozicijom decimalne take.
long 8 Long Celi brojevi od
9,223,372,036,854,775,808 do
9,223,372,036,854,775,807.
ulong 8 UInt64 Celi brojevi od 0 do 0xffffffffffffffff.
Promenljive i konstante
Promenljive
Promenljive su osnovni objekti koji se koriste u programima. Promenljiva u svakom
trenutku svog postojanja ima vrednost kojoj se moe pristupiti i koja se moe proitati
i koristiti, ali i koja se (ukoliko nije traeno drugacije) moe menjati.
Imena promenljivih su odredena identifikatorima. Za identifikator moemo postaviti
proizvoljno ime, ali ne sme poinjati sa brojem niti sme biti kljuna re.
Posebno trebamo voditi rauna da je Case Sensitive, odnosno osetljivo na velika i
mala slova.
Primer inicijalizacije i dodele vrednosti promenljivoj:
int mojaIntPromenljiva = 5;
Konstante
Konstanta je promenljiva ija se vrednost ne moe menjati. Konstanta se dobija
stavljanjem kljune rei const ispred promenljive prilikom njene deklaracije i
inicijalizacije.
Ogranienja:
Kao konstanta se mogu navesti samo lokalna promenljiva ili polje klase.
Konstante moraju biti inicijalizovane prilikom deklaracije, i kada im se jednom dodeli
vrednost, ona se ne moe promeniti.
Takoe, konstanta se ne moe inicijalizovati vrednou neke promenljive, odnosno
vrednost kojom se inicijalizuje konstanta mora biti dostupna u vreme kompajliranja.
17/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Konstante su uvek implicitno statike, stim to nije dozvoljeno navoenje kljune rei
static u deklaraciji konstante.
Prednosti upotrebe konstanti se ogledaju u tome to se kod se lake razume i
modifikuje (promena se vri samo na jednom mestu prilikom prepravljanja koda).
Naredbe
Naredbe u C# predstavljaju celovitu programsku instrukciju i zavravaju se (;).
int x;
x = 14;
int z = x;
Operatori
U programskom jeziku C# postoji vie operatora i to pokazuje upravo njegovu snagu.
Operator je funkcija koju primenujemo nad vrednostima ili promenljivima da bismo
dobili eljeni rezultat.
Aritmetiki operatori
Aritmetike operatore koristimo onda, kada elimo da izvrimo odreenu
matematiku operaciju nad jednim, dva ili vie promenljivih, ili matematiki reeno
operanada.
Inkrementiranje i dekrementiranje
Inkrementiranje predstavlja aritmetiku operaciju uveanja promenljive za jedan, a
dekrementiranje aritmetiku operaciju umanjenja promenljive za jedan.
NAPOMENA
Ispis x++ se naziva postincrement. To znai da kompajler uzima trenutnu vrednost
promenljive x prilikom raznih izraunavanja i tek po zavrenim izraunavanjima
inkrementira promenljivu x (uveava za jedan).
Ispis ++x se naziva preincrement. To znai da kompajler prvo uvea vrednost
promenljive za jedan i onda tako uveanu vrednost promenljive x koristi u daljim
izraunavanjima.
18/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Operatori poreenja
Operatore poreenja koristimo onda, kada elimo da tok programa usmerimo
zavisno od nekog uslova. Prouite sami tipove operatora poreenja narednih deset
sekundi.
Redosled operatora
to se tie redosleda izvravanja operatora zapamtite da su aritmetiki operatori
stariji, to znai da se pre izvravaju, u odnosu na operatore poreenja. U primeru na
slajdu prvo e se sabrati promenljive a i b, pa se tek onda proverava da li je taj zbir
razliit od promenljive c.
Logiki operatori
Logiki operatori se koriste za izvravanje operacija Bulove algebre, kao to su
endovanje, orovanje, negacija i slino.
Operator NOT
Operator NOT primenjen na neku logiku vrednost vraa istu u suprotno stanje.
19/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
20/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
21/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
string a = "Hello "; // Deklarisanje i iniciranje promenljive a
string b = "world"; // Deklarisanje i iniciranje promenljive b
string c = "!"; // Deklarisanje i iniciranje promenljive c
Console.ReadLine();
}
}
}
Rezultat:
22/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
int x = 1;
int y = 2;
const int c1 = 5;
const int c2 = c1 + 5;
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
23/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
using System.Linq;
using System.Text;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
int a;
Console.Write("Unesite ceo broj ");
string str = Console.ReadLine();//Svaki unos iz konzole je u stringovnom
formatu!
a = int.Parse(str); // Parsiranje - string u int
Console.WriteLine();
Console.WriteLine("Broj koji ste uneli je {0}", a);
Console.ReadLine();
}
}
}
24/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
uaurenje
nasleivanje
polimorfizam
Klase i objekti
Kreiranje klase
Naredba za kreiranje nove klase poinje kljunom rei class, zatim dolazi naziv klase,
zatim deklaracija svojstava (properties) koje se definiu za tu klasu, a zatim metode
koje pripadaju klasi.
//metode
public void mojaMetoda()
1
Ako se radi o javnim varijablama, tada se koristi izraz svojstvo (eng. property), a
ako se radi o privatnim varijablama koje e se koristiti samo u toj klasi, tada se koristi
izraz varijabla.
25/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
{
...
}
}
Kreiranje objekata
U prethonom delu smo definisali kreiranje klasa i vrlo je bitno da shvatimo da je klasa
referentni tip. Samim tim, jasno nam je da se deklaracijom klase ne kreira instanca
klase (objekat), ve referenca.
class Student
{
// deklaracija svojstava koja pripadaju klasi
int Ocena;
26/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
1. sluaj upotrebe: U svrhu kvalifikacije instance ako se ona zove isto kao i
parametar koji se prosljeuje nekoj metodi, pa tada this omoguava da se
odredi na koju se vrednost se misli.
Ovaj primer uspostavlja dve klase; prva - klasa koja ima metodu FirstMethod(), I
druga - klasa OtherClass koja ima metodu SecondMethod().
Ako unutar prve metode elimo da pozovemo metodu koja pripada drugoj klasi, tada
tu drugu metodu moramo pozvati iz te druge klase. Tu klasu ne moemo koristiti
preko njenog naziva, nego moramo proslediti parametar varijablu koja je tipa
OtherClass.
3. Sluaj upotrebe: korienjem indeksera
label4.Text = this.ImePrezimeStudenta;
2
Instanciranje - na ovom mestu se kreira instanca Nikola koja pripada klasi Student.
3
Dodela vrednosti - varijabli Ocena koja pripada instanci Nikola dodeljuje se
vrednost 3.
27/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
textBox1.Text = this.Ocena;
<modifikator_pristupa>_<povratna_vrednost>_<ime_metode>(<argumenti_metoda>)
{
<telo_metode>
}
Primer je:
private String metodaBezArgumenataVracaStringovnuVrednost()
{
String nasaVrednost = "testVrednost";
return nasaVrednost;
}
Sa druge strane, mogue je imati metodu koja ne vraa nikakvu vrednost ali kao
argumente prima odreene vrednosti:
28/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
{
nasaVrednost += drugaVrednost;
29/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Konstruktori i destruktori
U prethodnim vebama obraena je sintaksa konstruktora u okviru metoda, ali nismo
zali ispod haube i nismo videli karakteristike konstruktora, njihove osnovne
primene i nismo dali nikakve preporuke. Kako je sintaksa ve obraena, na nju se
neemo vraati, ali emo konstruktore obraditi za potrebe razumevanja njihovog
korienja.
Pre nego to budemo dali ilustrativni primer, bitno je da se zapamte sledee
injenice:
ta su konstruktori? Konstruktori su specijalne metode koje slue za inicijalizaciju
objekata nakon njihovog kreiranja. Oni obezbeuju da objekat ima dobro definisano
poetno stanje pre nego to se upotebi. Ako ne uspe inicijalizacija nee postojati
objekat.
Za imenovanje konstruktora koristi se ime klase (metoda ima isto ime kao i klasa) iza
koga slede zagrade.
Konstruktori nemaju povratnu vrednost, pa ak ni tipa void.
Postoje dve vrste konstruktora i to:
konstruktori instance (vre inicijalizaciju objekata)
statiki konstruktori (vre inicijalizaciju klasa)
Kada se kreira objekat .NET kompajler, ukoliko nije eksplicitno naveden konstruktor,
automatski generie podrazumevani konstruktor.
class Datum
{
private int godina;
private int mesec;
private int dan;
// public Datum () { ... } default konstruktor koji se automatski generie
poto nije naveden konstruktor
}
class Test
{
static void Main()
{
Datum danas = new Datum(); //kreira se objekat i poziva konstruktor
...
}
}
30/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Konstruktor moe primiti jedan ili vie parametara koji se koriste za inicijalizaciju
polja.
Ako se u klasi deklarie bar jedan konstruktor, kompajler nee generisati
podrazumevani konstruktor.
31/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
{
static void Main()
{
Datum danas = new Datum(2011, 09, 21);
Console.WriteLine(danas.godina); // ispisuje 2010
Console.WriteLine(danas.mesec); //ispisuje 9
Console.WriteLine(danas.dan); // ispisuje 21
}
}
32/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
class Auto
{
~Auto() // destructor klase Auto
{
// naredbe ienja
}
}
class PrvaKlasa
{
~PrvaKlasa()
{
System.Diagnostics.Trace.WriteLine("Desktruktor prve klase je
pozvan.");
}
}
class TestirajDestruktore
{
static void Main()
{
TrecaKlasa trecaKlasa = new TrecaKlasa();
}
33/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Modifikatori pristupa
Vrlo je bitno da razluimo ta su modifikatorui pristupa, koja su njihova ogranienja i
shvatimo njihovu vanost.
Public
Modifikatorom public svi elementi klase koji su njim modifikovani su vidljivi svim
metodama svih klasa.
34/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
}
U ovom sluaju upotrebe iz bilo koje klase je mogue pristupiti ovom polju.
Private
Nemogue je pristupiti polju izvan klase, odnosno nije mogue uraditi sledee:
Protected
Internal
lanovi klase su dostupni svim metodama svih klasa iz programskog sklopa u kome
je klasa.
Protected Internal
lanovi klase su dostupni svim metodama klasa, metodama izvedenim iz klase I
klasama programskog sklopa u kome je klasa.
35/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Enkapsulacija
Uaurenje
public void Uplata(decimal iznos)
{
stanje = stanje + (iznos*(1-provizija));
}
...
Racun racun1 = new Racun();
racun1.Uplata(10000);
racun1.stanje = 150000;
3
Na osnovu principa objektno orijentisanog programiranja I dobre programerske
prakse, preporuka je da podaci objekta treba da se nalaze u privatnom delu.
Naravno, ukoliko to ne elite da uradite ne morate, ali tako sami sebi uslonjavate
odravanje, a samim tim I mogunost nastanka bug-ova.
36/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
namespace primer
{
internal class Racun
{
public decimal stanje; //greka
}
}
37/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Naredbe grananja
If
Primer:
if(x > 0)
{
brojac++;
}
if else
If else naredba se koristi ako imamo sluaj u kome je potrebno uraditi jednu stvar
za vrednost uslova, u suprotnom je potrebno uraditi drugu stvar.
Primer:
if (x > 0)
brojac++;
else
brojac--;
38/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
if else if
Primer:
if (x < 6)
{
System.Console.WriteLine("Manji od sest.");
} else if (x >= 6 && x <= 13) {
System.Console.WriteLine("U opsegu je od 6 do 13");
} else
{
System.Console.WriteLine("Veci je od 13.");
}
ugnjedeni if else
Primer:
Ako je broj vei od 0, a ako je broja manji od 2, broja postavi na 6, a ako je broj
manji od 2, broja postavi na nulu.
if (x > 0)
{
if (brojac < 2)
{
brojac = 6;
}
else
{
brojac = 0;
}
}
switch
Ukoliko imamo jedan uslov po kome imamo samo jednu opciju koja je ispunjena, u
tom sluaju je idealan izbor korienja naredbe switch.
Primer:
switch (dan)
{
case 1:
39/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Console.WriteLine("Ponedeljak");
break;
case 2:
Console.WriteLine("Utorak");
break;
case 3:
Console.WriteLine("Sreda");
break;
case 4:
Console.WriteLine("Cetvrtak");
break;
case 5:
Console.WriteLine("Petak");
break;
case 6:
Console.WriteLine("Subota");
break;
case 7:
Console.WriteLine("Nedelja");
break;
default:
Console.WriteLine("Ima samo 7 dana");
break;
}
Petlje
for
For petlja se sastoji od naredbe for, tri dela for naredbe u obinoj zagradi, a u
vitiastoj zagradi se nalaze naredbe koje se vrte u okviru petlje. Tri dela koja for
petlja ima su odvojena pomou oznake ;. Prvi deo for petlje od otvorene obine
zagrade do prve; slui za inicijalizaciju brojaa. Drugi deo, koji se nalazi izmeu dve
oznake ; , je uslov. Trei deo, od ; do zatvorene obine zagrade, je inkrement
odnosno decrement brojaa. U prvom delu petlje, koji slui za inicijalizaciju brojaa,
se nalazi deklaracija brojaa (u ovom sluaju int i) i njegova inicijalizacija na poetnu
vrednost (u ovom sluaju na 0). U drugom delu je uslov. Dokle god je uslov
ispunjen, odnosno dokle god je izraz izmeu dve oznake ; true, petlja e da se
izvrava (vrti).
40/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
x = i * i;
}
Specijalni sluaj for petlje je kada se u bloku naredbi nalazi samo jedna naredba koja
se ponavlja. U tom sluaju mogu da se izostave oznake za blok (otvorena i zatvorena
vitiasta zagrada), ali to nije dobra programerska praksa jer oteava odravanje
koda.
for (int i = 0; i < x; i++)
x = i * i;
Broja moe da se uveava u delu bloka naredbi (ili da se umanjuje), i u toj situaciji
nije neophodno imati inkrement (decrement) u delu for naredbe.
for (int i = 0; i < x; )
{
x = i * i++;
}
Specijalna verzija for petlje je izostavljen uslov. Uslov postoji, ali nije u delu koji je
predvien u for petlji, ve se nalazi u samom telu petlje.
for (; ; )
{
//beskonacna petlja
}
foreach
Sintaksa je sledea:
for (tip identifikator in izraz )
{
naredba
}
41/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Primer:
Popunjavanje niza I tampanje elemenata niza.
int[] intniz = new int[5];
int[] intniz2 = new int[3];
while
While petlja je petlja koja je specijalno optimizovana za prolazak kroz petlju dokle
god je neki uslov ispunjen.
Primer:
int i = 0;
while (i < niz.Length)
{
niz[i] = i * i;
i++;
}
do-while
Razlika izmeu do while petlje i svih ostalih petlji je u tome to se do while petlja
uvek izvrava bar jednom. Ispitivanje uslova ove petlje je na kraju.
Primer:
int i = 0;
int[] niz = new int[5];
do
{
niz[i] = i * i;
i++;
}
42/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Pored naredbi grananja i mehanizama grananja, postoje i naredbe koje utiu na tok
programa.
Naredba break spada u naredbe grananja zbog toga to prekida tok izvravanja
programa u odreenom trenutku i prosleuje na neko drugo mesto nastavak
izvravanja programa
Naredba continue prekida zapoeti tok i vraa petlju na poetak, pre njenog logikog
kraja. Naredba return prekida tok neke metode i vraa rezultat pre njenog kraja.
Napomena:
Treba razlikovati nasleivanje klasa i nasleivanje interfejsa (klasa koja nasleuje
interfejs mora da implementira sve navedene funkcije).
43/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Svaka izvedena klasa moe dalje biti bazna klasa. Grupa klasa koje su povezane
nasleivanjem formiraju strukturu koja se naziva hijerarhija klasa pri emu su klase
na viim nivoima optije, dok su one na niim nivoima u hijerarhiji specifinije.
Izvedena klasa nasleuje sve lanove bazne klase osim konstruktora i destruktora.
Javni lanovi bazne klase su implicitno javni lanovi izvedene klase.
Takoe, izvedena klasa moe imati nove lanove.
Primer:
44/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Primer:
public class Racun
{
public void Uplata(decimal iznos){...}
public void Isplata(decimal iznos){...}
private long brojRacuna;
private decimal stanje;
}
public class TekuciRacun: Racun
{
public void Prikazi();
{
Console.WriteLine(Stanje:, stanje); //greka
}
}
Primer:
Metode izvedene klase ne mogu da pristupe lanovima bazne klase preko reference.
Primer:
45/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
{
Console.WriteLine(Stanje:, racun.stanje); // greka
}
}
Primer:
Interfejsi
Primer:
Kada klasa implementira interfejs ona mora da implementira sve njene metode!
46/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Primer:
using System;
interface IBazniInterface
{
void BazniInterfaceMetod();
}
Apstraktne klase
Kada ureujete klase u hijerarhiju nasleivanja, obino su vie klase apstraktnije i
uoptenije, dok su nie klase konkretnije i specifinije. esto polazna klasa i nema
instance, ve slui kao izvor informacija koje podklase koriste. Ovakve klase se
nazivaju apstraktnim i deklariu se pomou kljune rei abstract.
47/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Primer:
using System;
namespace ApstraktneKlase
{
48/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
49/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
}
}
Primer:
Promenljiva tipa bazna klasa moe da referencira instance direktno ili indirektno
izvedenih klasa.
Polimorfizam se u jeziku C# najee postie upotrebom virtuelnih metoda.
Primer:
public class Racun
{
public virtual void Prikazi() {...}
}
Primer:
public class Racun
{
public virtual void Prikazi(); //greka
}
Primer:
public class Racun
{
private virtual void Prikazi(); //greka
}
Metode nisu implicitno virtuelne iz sledeih razloga:
50/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Overriding
Overriing je uslovno jedan od osnovnih principa OO programiranja. Proces
implementacije virtuelne metode u izvedenoj klasi se naziva overriding.
Najbanalnije objanjenje overridinga je nadjaavanje osnovne metode u baznoj klasi
implementiranom metodom u izvedenoj klasi.
Za definisanje overriinga koristi se kljuna re override.
Primer:
Primer:
51/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
}
Racun racun = new Racun();
racun.Prikazi();
racun = new TekuciRacun();
racun.Prikazi();
Definisanje struktura
Sintaksa za deklarisanje structure vrlo je slina sintaksi za kreiranje klase:
Kreiranje struktura
U primeru ispod kreirana je struktura koja ilustruje njenu upotrebu.
using System;
using System.Collecti-ons.Generic;
using System.Text;
namespace CreatingAStruct
{
public struct Location
{
private int xVal;
private int yVal;
public int x
52/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
{
get { return xVal; }
set { xVal = value; }
}
public int y
{
get { return yVal; }
set { yVal = value; }
}
Enumeratori
Nabrajanja (engl. enumerations) su mona alternative konstantama. Predstavljaju
vrednosni tip podataka koji predstavlja skup imenovanih konstanti.
Referenciranje i konverzija
Pakovanje (boxing)
Pakovanje je mehanizam koji od vrednosnog podatka pravi referentni objekat,
odnosno pravi se primerak objekta na hipu u koji se kopira vrednosni podatak.
53/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Implicitno pakovanje:
prilikom dodele vrednosti (kao u gornjim primerima)
prilikom pozivanja metoda strukture
prilikom prosledivanja vrednosnog argumenta gde se oekuje referentni
objekat
Raspakivanje
Obrnut proces od pakovanja - od objekta koji sadri prethodno spakovanu vrednost
se pravi podatak vrednosnog tipa.
Nije moguce raspakivanje bilo kog objekta (onog koji ne sadri spakovanu vrednost)
Primer pakovanje i raspakivanje int promenljive:
int i=10; object o=i; int ii=(int)o;
System.Console.WriteLine("i="+i+", o="+o+", ii="+ii);
Primer:
54/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
public class C{
public static void M(out
int x){x=5;}
public static void Main(){int x; C.M(out
x);}
}
Konverzija
Eksplicitna konverzija
Eksplicitna konverzija iizmenu razlliiitih tipova mora biti specificirana!
Primer: Eksplicitna konverzija long u int:
int intValue = (int) longValue;
Implicitna konverzija
Implicitna konverzija je izmenu razliitih tipova odrenena je definicijom jezika.
Primer: Implicitna (automatska) konverzija int u long:
int intValue = 123;
long longValue = intValue;
Nastavni as 11 Nizovi
Pojam nizova
Nizovi su indeksirane kolekcije objekata istog tipa. U programskom jeziku C# je bitna
razlika od ostalih programskih jezika iz C porodice nizovi u programskom jeziku C#
predstavljaju objekte.
Upravo zbog ove injenice nizovi imaju svoje metode i svojstva (BinarySearch(),
Clear(), Copy(), CreateInstance(), IndexOf(), LastIndexOf(), Reverse(), Sort(),
IsFixedSize(), IsReadOnly(), IsSynchronized(), Length, Rank, SyncRoot,
GetEnumerator(), GetLength(), GetLowerBound(), GetUpperBound(), Initialize() i
setValue()).
Vrste nizova: jednodimenzionalni, dvodimenzionalni, viedimenzionalni, ugnjedeni,
pravougaoni.
Kada se deklae neki niz u C#-u, automatski se kreira objekat u ugraenoj
klasi System.Array (korienje ove klase moete videti u naredbi Using na poetku
svoje aplikacije Using System.Array).
55/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Deklaracija nizova
Deklaracija nizova se realizuje prema sledeoj sintaksi:
tip [] ime_niza;
Konstrukcija nizova
Po izvrenoj deklaraciji niza, deklarisani niz I dalje ne postoji. Da bi se napravio taj
niz, potrebno ga je konstruisati. Konstrukcija niza se realizuje na sledei nain:
Inicijalizacija nizova
Nakon izvrene deklaracije i konstrukcije niza, elementi tog novonastalog niza imaju
svoje default vrednosti. Inicijalna default vrednost za brojeve, bez obzira da li su celi
ili realni, je 0. Inicijalna realna vrednost za String-ove je prazan String. Inicijalna
vrednost za objekte je null, to znai da objekat ne postoji. U mnogim situacijama je
potrebno da, se definiu konkretne vrendosti niza na poetku rada programa.
Definisanje vrednosti elemenata niza se zove inicijalizacija, i to se moe uraditi kao
to je prikazano na primeru ispod.
niz[0]=2;
niz[1]=4;
niz[2]=6;
niz[3]=8;
56/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Analogno tome, nizovima se moe dodati i trea dimenzija, i etvrta i tako dalje, ali je
takvo stanje malo tee plastino prikazati.
Popunjavanje ovog niza pomou for petlje i prikaz bi se realizovali na sledei nain:
int redovi = 3;
int kolone = 4;
System.Console.Read();
U nastavku Vam je prikazan listing windows forme koja vri prikaz realizacije unosa,
sabiranja, odreivanja sume parnih elemenata, broja negativnih elemenata niza,
broja elemenata niza deljivih sa 5, odreivanja maksimalnog elementa niza.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
57/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
using System.Windows.Forms;
using System.Data;
namespace nizovi
{
int n=0;
int i=0;
int[] x;
private System.Windows.Forms.Button btnIzracunaj;
public Niz()
{
InitializeComponent();
x=new int[40]; //konstruktor za niz
}
58/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
void SrednjaVrednost(int[]x,int n)
{
int j;
float xsr;
for(j=0, xsr=0; j<n;j++)
xsr+=x[j];
xsr/=n;
tBRezultat.Text+="Srednja vrednost niza je "+ xsr+"\r\n";
}
void SumaParnih(int[]x,int n)
{
int j,sp;
for(j=0, sp=0; j<n;j++)
if (x[j]%2==0) sp+=x[j];
tBRezultat.Text+="Suma parnih elemenata niza je "+ sp+"\r\n";
}
void BrojNegativnih(int[]x,int n)
{
int j,brneg;
for(j=0, brneg=0; j<n;j++)
if (x[j]<0) brneg++;
tBRezultat.Text+="Broj negativnih elemenata je "+ brneg+"\r\n";
}
void BrojDeljSa5(int[]x,int n)
{
int j,b5;
for(j=0, b5=0; j<n;j++)
if (x[j]%5==0) b5++;
tBRezultat.Text+="Broj elemenata deljivih sa 5 je "+ b5+"\r\n";
}
void MaxNiza(int[]x,int n)
{
int j,max=-32000;
for(j=0; j<n;j++)
if (x[j]>max) max=x[j];
tBRezultat.Text+="Maksimalni element niza je "+ max+"\r\n";
}
59/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Prethodni primer opisuje metod koji vraa void, a kao parametre ima dve celobrojne
vrednosti tipa int.
Analogno ovom primeru, moemo imati i primer u kome delegat vraa neku vrednost.
Kada pravimo analogiju sa objektima ove dve funkcije odgovaraju klasama za tipine
objekte. One definiu ponaanje delegata koje tek treba da kreiramo. Kreiranje
delegata vri se na istinain kao i kod svih drugih objekata, pomou operatora new.
Primer:
mojDelegat zbir = new mojDelegat(sabiranje);
mojDelegat razlika = new mojDelegat(oduzimanje);
60/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Posle ovoga imamo dva objekta zbir i razlika koji su po svojoj prirodi funkcije, a koje
moemo koristiti na isti nain kao i te funkcije kojima su oni opisani.
Primer upotrebe iz ovog primera je sledei:
Upotreba delegata
Delegati se najese koriste prilikom obrade dogadjaja, kod programiranja Windows
formi, ali naravno, nije njihova primena samo u tom delu. Mogu se koristiti uvek kada
se unapred ne zna koja metoda treba da se pozove, te se u tom sluaju treba
delegirati. Recimo, dogadjaji su, u principu, jedan tip delegata koji se koristi da se
prosledi informacija da se na nekom objektu "neto" dogodilo. To se mnogo koristi
kod Windows formi kad treba npr. poslati informaciju da se nekom objektu forme
dogodilo neto.
Postoje dva tipa delegata-jednosmerni (single-cast) koji pozivaju samo jednu metodu
i viesmerni (multi-cast) kojem se moze dodeliti vie metoda i oni ne mogu da vrate
vrednost.
Kada se deklarie klasa, mogu se napraviti i objekti delegata koji se zatim koriste za
pamenje i pozivanje metoda sa odgovarajuim potpisom metode.
Pojam dogaaja
Dogaaji ili Events predstavljaju promene stanja u programu koje, kada se dogode,
pozivaju odgovarajue metode koje su zaduene za obradu.
Upotreba dogaaja
Kada dodajemo dogaaj klik dugmadima, to radimo duplim klikom mia. Na taj nain
dodajemo dogaaj koji je najspecifiniji za izabranu kontrolu ili formu. Meutim,
61/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Dogaaj koje se obino kreira za forme je Load koji se poziva prilikom startovanja
programa ili pri prikazivanja forme.
Kolekcije
Kolekcije su standardne strukture podataka koje dopunjuju nizove. Nizovi su jedina
kolekcija koja je ugraena u C# jezik. Sve ostale kolekcije su ugraene u prostor
imena System.Collections.
Interfejsi
Interfejsi u prostoru SystemCollection koji sun am trenutno zanimljivi su:
ICollection definie veliinu i enumeratore za sve kolekcije.
IComparer sadri metode za komparaciju dva objekta.
IDictionary predstavlja kolekciju parova (klju,vrednost).
IDictionaryEnumerator - enumeracija kroz elemente renika.
IEnumerable sadri enumerator koji omoguava jednostavnu iteraciju kroz kolekciju.
IEnumerator - jednostavna iteracija kroz kolekciju.
IList interfejs predstavlja kolekciju objekata kojima se moe pristupati preko indeksa.
Klasa ArrayList
Elementima liste pristupa se preko indeksa kao i kod niza. Za razliku od niza nije
neophodno unapred poznavati broj elemenata niza. Najee koriene metode ove
klase su: Metoda Add(object) dodaje objekat na kraj liste. Metoda Clear() brie sve
elemente iz liste. Metoda Insert(pozicija, vrednost) ubacuje objekat vrednost na
pozicuju pozicija. Metoda RemoveAt(index) brie elemenat sa indeksom index iz
liste. GetEnumerator() metoda vraa iterator koji se koristi za iteraciju(prolaz) kroz
62/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
elemente liste. Metoda Sort sortira elemente liste. Metoda Reverse() prikazuje
elemente liste u inverznom redosledu. Metoda ToArray() kopira elemente liste u
jednodimenzionalan niz.
}
}
Iteraciju kroz listu realizuje metoda GetEnumerator koja vraa enumerator liste. While
petlja slui za tampanje elemenata liste. Enumerator se na poetku pozicionira
ispred prvog elementa kolekcije. Prvim pozivom metode MoveNext on se pozicionira
na prvi element liste, sledeim pozivom na drugi itd. Kada se stigne do kraja liste
metoda MoveNext vraa false. Property Curent daje tekui element liste.
Da bi korienje kolekcija bilo mogue, uitavamo prostor imena Collections:
using System.Collections;
Red (Queue)
Redovi predstavljaju realizaciju FIFO (first-in, first-out) strukture podataka. Metoda
Enqueue slui za dodavanje elemenata u red. Ulazni parametar ove metode je tipa
object tj. moe biti bilo koji tip podataka. Skidanje elemenata iz reda vri se
korienjem metode Dequeue koja nema ulazne parametre. Kada se pozove ova
metoda iz reda se izbacuje najstariji lan tj. lan koji je prvi ubaen u red. Za
jednostavan prolazak kroz red koristi se metoda GetEnumerator koja vraa
enumerator reda.
U nastavku je ilustrovana upotreba reda. Najstariji lan u redu je karakter A' pa se
pozivom metode Dequeue on izbacuje iz reda. Rezultat izvravanja sekvence koda
prikazan je ispod koda.
public class QueuePrikaz
{
63/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
}
}
Stek (Stack)
Stack je LIFO (Last-in, first-out) struktura. Element koji se poslednji stavi na stek, prvi
se skida sa steka. Metoda Push stavlja element na vrh steka. Metoda Pop skida
poslednje stavljeni element sa steka. Metoda GetEnumerator takoe daje
enumerator steka koji slui za jednostavan prolaz kroz elemente steka.
Ovde je prikazan primer upotrebe stack strukture, dodavanje elemenata na stack,
skidanje elemenata sa stack-a, prolazak kroz elemente steka.
}
}
Hash tabela
Hash tabela je struktura podataka dizajnirana za brzo pretraivanje. To se postie
dodeljivanjem kljua svakom objektu koji se uva u tabeli. Stringu "Idi na sever"
dodeljuje se klju N'. Vrednosti koja odgovara kljuu N' se pristupa korienjem
izraza tabela['N'], gde je tabela instanca klase Hashtable. Metoda GetEnumerator()
takoe vraa enumerator koji je tipa IDictionaryEnumerator. Pomou ovog
enumeratora se moe prikazati klju i njemu pridruena vrednost za sve elemente
tabele.
64/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
}
}
Nastavni as 13 Izuzeci
Izuzeci
Greke su uvek mogue, mogu nastati u bilo kom trenutku izvravanja programa.
Ovom injenicom stalno moramo da se rukovodimo.
Upravo zbog ove injenice postoji glavna razlika izmeu dobrog i loeg softvera,
odnosno, dobrog i loeg programa. Dobar program je onaj koji je u stanju da
identifikuje i obradi nastalu greku.
Kod tradicionalne provere greaka morali smo da piemo kod slian ovome:
int kodGreke = 0;
FileInfo izvor = new FileInfo(kod.cs);
if (kodGreke == -1) goto greka;
int duina = (int)izvor.Length;
if (kodGreke == -2) goto greka;
char[] sadraj = new char[duina];
if (kodGreke == -3) goto greka;
...
65/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
greka: ...;
66/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
67/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Specifinost ove hijerarhije klasa izuzetaka se ogleda u tome to veina klasa nema
nikakvu dodatnu funkcionalnost u odnosnu na svoje osnovne klase.
try blok sadri kod koji se odnosi na logiku programa u kome se mogu javiti ozbiljne
greke.
finally blok sadri kod kojim se oslobaaju resursi ili preduzimaju bilo kakve druge
akcije koje bi trebalo da budu izvrene na kraju try ili catch blokova. Veoma je vano
znati da se ovaj blok izvrava u svakom sluaju (bez obzira na to da li je podignut
izuzetak)
try
{
//logika programa
}
catch
{
// obrada greke
}
finally
{
// oslobadjanje resursa
}
68/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
I pored ovoga, mogue je da nam finally blok nije potreban pa se on moe izostaviti.
try
{
int i = int.Parse(Console.ReadLine());
int j = int.Parse(Console.ReadLine());
int k = i / j;
}
catch (OverflowException ofe)
{
Console.WriteLine(ofe);
}
catch (DivideByZeroException dbze)
{
Console.WriteLine(dbze);
}
69/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
70/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Koordinatni sistem
Da bi se bolje razumelo svojstvo Location evo nekih dodatnih objanjenja u vezi
koordinatnog sistema koji se primenjuje kada je re o postavljanju objekata na ekran
i odnosima izmedu prozora u Windows operativnom sistemu.
Pozicija nekog prozora iji je roditelj desktop racuna se od gornjeg levog ugla ekrana,
kao to je to prikazano na slici. Ose koordinatnog sistema orijentisane su tako da
rastu od leve strane nadesno za x osu i od vrha nadole za y osu.
71/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Nakon selektovanja miem, kontrola se uzima i otupta (drag and drop) na tekui
prozor, odnosno formu. Kontrola e biti pozicionirana na kursoru mia.
72/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
73/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Location
Drugi primer uobiajenog svojstva svih kontrola je njihova lokacija (Location).
Naravno ovo svojstvo je veoma bitno za vizuelni izgled forme, ali postoje takoe i
kontrole koje se postavljaju na formu sa namerom da obezbede dodatnu
funkcionalnost bez potrebe da budu vidljive. To je izuzetak kada pozicija kontrole nije
od znaaja. Ovo svojstvo je opisano koordinatama X i Y. Ovo je pozicija gornjeg
levog ugla kontrole u odnosu na prozor na kome se kontrola nalazi. Obratite panju
da je rec o vrednosnom tipu, jer su X i Y definisani kao celi brojevi) a celi brojevi se
realizuju kao strukture.
Size
Kada je rec o grafikim svojstvima kontrole, osim pozicije, treba spomenuti i njenu
veliinu Size. Svi objekti su po prirodi pravougaonog oblika pa se velicina
jednostavno opisuje. Svojstva koja opisuju velicinu su: irina ( Width ), odnosno
visina ( Height ). Ukoliko se kontrola ne postavlja programski ve u toku dizajna
forme, promena veliine se obavlja jednostavnim korienjem mia, uz pomo
pravougaonika koji oznaava selektovanu kontrolu. Na pravougaoniku se miem
pritisne kvadrati zavisno od dimenzije koju elimo da promenimo, a zatim se
povlaenjem mia menja dimenzija kontrole.
Drugi nain da se promene parametri kontrole ( ne samo veliina ) je koristeci
Properties prozor. Medu svojstvima kontrole lako se prepoznaje svojstvo Size ispred
koga se nalazi znak +. Ovaj znak, tipino za Windows, omoguuje ekspandovanje
stavke. Ispod ove stavke se nalaze posebno Width i Height.
Naravno, sva svojstva mogu se postavljati i programski. Bilo na samom
startu pri kreiranju kontrola/formi, bilo u kodu.
Na primer:
74/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Bounds
Pozicija zajedno sa veliinom smetene su u jednom svojstvu kontrole koje se naziva
Bounds. Ovo svojstvo daje pravougaonik kontrole/forme. U kodu ovim svojstvom lako
se vri repozicioniranje i promena veliine kontrole.
Text
Veoma korisno svojstvo svake kontrole/forme je Text. Naravno da postoji kod
kontrola koje mogu prikazati tekst. Na primer, kod kontrole labela Text svojstvo uva
tekst koji kontrola prikazuje. Kod kontrole dugme predstavlja tekst koji se prikazuje
na dugmetu. Dalje, kod forme predstavlja tekstualni sadraj u naslovnoj liniji itd, itd.
Promena ovog svojstva izvodi se u toku dizajna koristeci Properties prozor i biranjem
Text polja a zatim ukucavanjem sadraja. Obratite panju da je podrazumevani tekst
u Unicode formatu, tj. lako moete koristiti srpska ili neka druga slova. Naravno da se
tekst moe menjati i programski.
Na primer:
Visible
Ranije smo pomenuli svojstvo koje odreduje da li je kontrola vidljiva ili ne. Ovo
svojstvo se naziva Visible a vrednosti su bulovog tipa ( Boolean type ) True/False.
Ako kontrola nije vidljiva onda se uobicajeno kae da je sakrivena - hidden. Ovo
svojstvo takodje se moe programski menjati jednostavnim dodeljivanjem vrednosti.
Ukoliko kontrola nije vidljiva onda nije ni dostupna logicno. Drugim recima ona je za
korisnika sa stanovita unosa i prikaza informacija potpuno bez funkcije. To ne znaci
da su takve kontrole nepotrebne naprotiv. U toku izvravanja programa one se
mogu uciniti vidljivim i dostupnim, ili nevidljivim i nedostupnim, u zavisnosti od toga
kakva vrsta podataka se unosi i ta se sa kontrolom radi.
Enabled
Kada je kontrola vidljiva to ne znaci obavezno da je i dostupna korisniku. Posebno
svojstvo definie da li kontrola moe primiti ulaz od korisnika cak i kada je vidljiva.
Ovo svojstvo se naziva Enabled i takode je bulovog tipa. Ako je kontrola vidljiva, a
Enabled svojstvo postavljeno na vrednost false, to znaci da korisnik moe samo citati
vrednosti te kontrole bez mogucnosti da ih menja. Podrazumevani izgled kontrole u
tom slucaju je blago zasivljenje (dimmed). Ovo svojstvo se cesto programski, u
samom kodu menja. Obicno kada unos nekih podataka povremeno (ili stalno) treba
zabraniti, a prikaz podataka ostaviti.
75/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
TabIndex i TabStop
Ovde cemo pomenuti jo jedno veoma bitno svojstvo u programiranju na grafickim
okruenjima (GUI). Ovo svojstvo nije vidljivo bar ne na prvi pogled. Obicno ga
nazivamo tab redosled ili u originalu tab ordering. Kretanje sa kontrole na kontrolu na
jednoj formi koja je aktivna moete izvesti i preko tastature koristeci Tab taster. Kada
se on pritisne fokus kontrole se prebacuje na sledecu. Upravo tab svojstvo odreduje
redosled kontrola u ovom slucaju.
I ne samo to. Kada govorimo o tab redosledu i tab svojstvima treba znati jos neto.
Postoje kontrole koje ne mogu primiti fokus na primer labela. Takode, kontrola koja
moe da primi fokus mora imati svojsto TabStop postavljeno na true, ako treba da
primi fokus. U suprotnom ta kontrola ce biti preskocena dok pritiskate taster Tab. Na
srecu, ovo svojstvo je za kontrole koje mogu primati fokus inicijalno postavljeno na
true. Kontrole koje ne mogu primiti fokus ( primer Labela ) nemaju ovo svojstvo.
Koja pozicija u tab redosledu pripada odredenoj kontroli definie svojstvo TabIndex.
Ukoliko tu poziciju elite da promenite treba da promenite vrednost ovog svojstva.
76/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
U ovom delu nam je osnovno da uradimo iitavanje unetog teksta iz tekst boksa.
Recimo, moemo ga ispisati na novi panel.
Nakon kreiranja forme, odredimo akciju kojom emo realizovati nau zamisao. Kako
je to akcija dugmeta click, uradimo dupli levi klik na dugme OK. Odmah nakon toga
e se otvoriti prikay koda u kome emo moi da programskim kodom reimo na
zadatak.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication286
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
77/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
{
MessageBox.Show("Hello " + textBox1.Text);
}
}
}
U okviru akcije dugmeta button1_Click unesite kod sa listinga. Time emo reiti da
nam se prikae novi MessageBox sa prikazanim pozdravom i imenom koje smo uneli
u tekst boksu.
PictureBox, OpenFileDialog
Pretpostavimo da elimo da odaberemo neku sliku iz naeg raunara, da je uitamo I
prikaemo u nekom prozoru. U tom sluaju bie nam potrebno nekoliko windows
kontrola I naravno, nekoliko linija koda koje e to da omogue.
78/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication286
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
79/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
Odaberemo konkretnu sliku (u ovom primeru, prof. Dr. Jovanovia) i ona e biti
uitana u pictureBox.
80/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace dani
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
tBRedniBrojDana.Text = "unesi";
}
private void btIspisi_Click(object sender, EventArgs e)
{
int broj;
if (int.TryParse(tBRedniBrojDana.Text, out broj))
{
tBNazivDana.Text = NazivDana(broj);
}
else
{
MessageBox.Show("Redni broj dana nije dobro zadat!");
}
}
81/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
namespace Brojanje
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btNapred;
private System.Windows.Forms.Button btNazad;
private System.Windows.Forms.Button btZaustavi;
private System.Windows.Forms.Button btPonisti;
private System.Windows.Forms.Timer timer1;
private System.ComponentModel.IContainer components;
int korak;
private System.Windows.Forms.TextBox tbBroj;
public Form1()
{ InitializeComponent(); }
static void Main()
{ Application.Run(new Form1()); }
private void btNapred_Click(object sender, System.EventArgs e)
{ timer1.Enabled = true; korak = 1; }
private void btZaustavi_Click(object sender, System.EventArgs e)
{ timer1.Enabled = false; }
private void btNazad_Click(object sender, System.EventArgs e)
{ timer1.Enabled = true; korak = -1; }
private void btPonisti_Click(object sender, System.EventArgs e)
{ tbBroj.Text = "0"; timer1.Enabled = false; }
private void timer1_Tick(object sender, System.EventArgs e)
{
int broj = Convert.ToInt32(tbBroj.Text);
broj = broj + korak;
tbBroj.Text = broj.ToString();
}
}
}
CheckBox, label
Jednostavan primer za promenu fonta labele u zavisnosti od stanja check-box-a.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace primer3a
{
public class CheckBoxTest : System.Windows.Forms.Form
{
private System.Windows.Forms.CheckBox BoldCheckBox;
private System.Windows.Forms.CheckBox ItalicCheckBox;
private System.Windows.Forms.Label outputLabel;
private System.ComponentModel.Container components = null;
public CheckBoxTest()
{
InitializeComponent();
}
#region Windows Form Designer generated code
#endregion
82/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
[STAThread]
static void Main()
{
Application.Run(new CheckBoxTest());
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MessageBox1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Zdravo!", "pozdrav", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
private void button2_Click(object sender, EventArgs e)
{
DialogResult rez;
rez = MessageBox.Show("Da li zelite", "Brisanje",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (rez == DialogResult.Yes)
{
MessageBox.Show("Brisem!");
}
else
{
MessageBox.Show("Nista nisam uradio!");
83/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
}
}
}
}
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace temperature
{
public class temperature : System.Windows.Forms.Form
{
int min, max, s = 0;
private System.Windows.Forms.Label lTemp;
private System.Windows.Forms.TextBox tBTemperatura;
private System.Windows.Forms.Button btDodaj;
private System.Windows.Forms.ListBox lBTemperatura;
private System.Windows.Forms.GroupBox gBIzbor;
private System.Windows.Forms.RadioButton rBRaspon;
private System.Windows.Forms.RadioButton rBMin;
private System.Windows.Forms.RadioButton rBMax;
private System.Windows.Forms.RadioButton rBProsek;
private System.Windows.Forms.Label lIspis;
public temperature()
{ InitializeComponent(); }
static void Main()
{ Application.Run(new temperature()); }
private void btDodaj_Click(object sender, System.EventArgs e)
{
lBTemperatura.Items.Add(tBTemperatura.Text);
if (lBTemperatura.Items.Count == 1)//postavljanje min i max na prvu unetu
min = max = Convert.ToInt32(tBTemperatura.Text);
s = s + Convert.ToInt32(tBTemperatura.Text); // dodavanje temperature
zbiru s
if (max < Convert.ToInt32(tBTemperatura.Text)) // korekcija min i max
max = Convert.ToInt32(tBTemperatura.Text);
else if (min > Convert.ToInt32(tBTemperatura.Text))
min = Convert.ToInt32(tBTemperatura.Text);
gBIzbor.Enabled = true; //moze se birati tek kad se unese prva t
lIspis.Text = ""; //priprema za unos nove t, sve se uncheck i brise
tBTemperatura.Text = ""; tBTemperatura.Focus();
rBMax.Checked = rBMin.Checked = rBProsek.Checked = rBRaspon.Checked =
false;
}
private void rbProsek_CheckedChanged(object sender, System.EventArgs e)
{
if (rBProsek.Checked) //zbir se deli brojem temp u listi
{ float p = (float)s / lBTemperatura.Items.Count; lIspis.Text =
p.ToString("0.00"); }
84/85
Naziv predavanja: ZUOV KURS
C# Programski jezik
ZUOV kurs
}
private void rbMax_CheckedChanged(object sender, System.EventArgs e)
{ if (rBMax.Checked) lIspis.Text = max.ToString(); }
private void rBMin_CheckedChanged(object sender, System.EventArgs e)
{ if (rBMin.Checked) lIspis.Text = min.ToString(); }
private void rbRaspon_CheckedChanged(object sender, System.EventArgs e)
{ if (rBRaspon.Checked) lIspis.Text = (max - min).ToString(); }
}
}
85/85
Naziv predavanja: ZUOV KURS