You are on page 1of 86

Zoran irovi

Ivan Dunerski

Tehnike vizuelnog
programiranja

C#

Via elektrotehnika kola


Beograd 2005.

Recenzenti
Slobodanka eni
Izdava
Via elektrotehnika kola Beograd
Za izdavaa
Dragoljub Martinovi
Dizajn
Sneana Trstenjak
Lektor i korektor
Anelka Kovaevi

CIP Katalogizacija u publikaciji


Narodna biblioteka Srbije, Beograd
004.42236:004.738.1(075.8)
004.432.2C#(075.8)
IROVI, Zoran
Tehnike vizuelnog programiranja : C# / Zoran irovi, Ivan Dunerski.
Beograd: Via elektrotehnika kola, 2005 (MST Gaji). 241 str.: ilustr.;
24 cm
Tira 250. Bibliografija: str.187.
ISBN 86-85081-29-7
1. Dunerski, Ivan
a) Vizuelno programiranje - .NET tehnologija b) Programski jezici
C# - .NET tehnologija
COBISS.SR-ID 120683276

Predgovor
Ova knjiga namenjena je studentima Vie elektrotehnike kole u
Beogradu, kao prirunik za predmet Tehnike vizuelnog programiranja.
Pokazane su tehnike i pravci u razvoju novih aplikacija kroz veliki
broj primera. Svi primeri raeni su na razvojnom okruenju - Microsoft
VisualStudio.NET.
Knjiga moe posluiti svima koji ele da naue osnovne tehnike rada
na .NET platformi, odnosno C# programskog jezika. Gradivo je prilagoeno
itaocima koji vladaju osnovama OOP-a, pa je naglasak na vizuelnom
programiranju.

U Beogradu, januara 2005. godine

Autori

SADRAJ

. OSNOVE .NET PLATFORME .....................................................1

Poreenje: C# vs. C++/Java ................................................................................................ 2


C# i Java ......................................................................................................................... 3
C# u odnosu na C++ ....................................................................................................... 4
Hello World ..................................................................................................................... 5
Proverite da li je .NET framework instaliran.................................................................. 5
Komentari ....................................................................................................................... 6
Mala/velika slova............................................................................................................ 6
Metod Main .................................................................................................................... 7
Prevoenje (kompajliranje) koda.................................................................................... 7

2.

UVOD U VISUAL C#.NET.......................................................9

IDE Integrisano Razvojno Okruenje .............................................................................. 9


Toolbar ( paleta sa alatima ).............................................................................................. 11
Toolbox (kutija sa alatima) ................................................................................................ 12
Solution Explorer, Class View, Resource View, Properties.............................................. 13
Class View .................................................................................................................... 15
Dodavanje nove klase projektu ......................................................................................... 16
Dodavanje metoda i polja.................................................................................................. 18
Tipovi aplikacija................................................................................................................ 20
Promenljive u C#............................................................................................................... 20
Vrednosni tip promenljive ............................................................................................ 21
Referentni tip promenljive............................................................................................ 22
Svojstva u C# .................................................................................................................... 23
Dodavanje svojstava iz IDE ......................................................................................... 25

3.

DIZAJN KONTROLA ............................................................29

Osobine Windows kontrola ............................................................................................... 29


Relacija roditelj-dete .................................................................................................... 30
Koordinatni sistem........................................................................................................ 30
Postavljanje kontrole na formu.......................................................................................... 31
Selektovanje kontrole, podeavanje pozicije i veliine ..................................................... 32
Zajednika svojstva Windows kontrola............................................................................. 33
Name............................................................................................................................. 33
Location........................................................................................................................ 34
Size ............................................................................................................................... 34
Bounds.......................................................................................................................... 35

Text ............................................................................................................................... 35
Visible........................................................................................................................... 36
Enabled......................................................................................................................... 36
Fokus kontrole i aktivan prozor.................................................................................... 36
TabIndex i TabStop....................................................................................................... 37
Programsko kreiranje kontrola .......................................................................................... 38
Postavljanje kontrole u fokus ....................................................................................... 42

4.

DOGAAJI............................................................................43

Spy++ ................................................................................................................................ 43
Delegati ............................................................................................................................. 45
Dogaaji i IDE .................................................................................................................. 47
Dogaaji vezani za forme i kontrole ................................................................................. 51
Paint ............................................................................................................................. 52
Resize............................................................................................................................ 52
Dogaaji tastature......................................................................................................... 52
Dogaaji mia............................................................................................................... 53

5.

FORMA .................................................................................55

Izgled forme ...................................................................................................................... 55


Naslovna linija - Title bar............................................................................................. 56
Ikona - Icon .................................................................................................................. 56
Sistemska dugmad ........................................................................................................ 59
Klijentska oblast ........................................................................................................... 61
BackgroundImage......................................................................................................... 62
WindowState................................................................................................................. 62
ShowInTaskbar............................................................................................................. 62
Kreiranje objekta forme .................................................................................................... 62
Zatvaranje forme ............................................................................................................... 63
Pokretanje forme ............................................................................................................... 63

6.

WINDOWS KONTROLE ......................................................67

Dugme ............................................................................................................................... 67
Text ............................................................................................................................... 67
TextAlign ...................................................................................................................... 68
DialogResult................................................................................................................. 68
Image, ImageAlign, ImageList, ImageIndex................................................................. 68
FlatStyle........................................................................................................................ 69
Radio-dugme ..................................................................................................................... 69
Checked ........................................................................................................................ 70
CheckAlign ................................................................................................................... 70

Appearance................................................................................................................... 70
Polje za potvrdu................................................................................................................. 71
Checked ........................................................................................................................ 72
Alignment...................................................................................................................... 72
CheckState .................................................................................................................... 73
ThreeState..................................................................................................................... 73
Appearance................................................................................................................... 74
TEKST kontrole ................................................................................................................ 74
Labela ........................................................................................................................... 74
TextBox ........................................................................................................................ 75
Kombo polje ................................................................................................................. 75

7.

APLIKACIJE SA VIE FORMI..............................................79

Aplikacije sa viestrukim dokumentima - MDI ................................................................ 85

8.

KONTEJNERI KONTROLA ..................................................89

Forma ................................................................................................................................ 89
Panel.................................................................................................................................. 89
Osobine panel kontrole................................................................................................. 89
GroupBox.......................................................................................................................... 90
Stranice svojstava.............................................................................................................. 90
Kontrola Property Sheet ............................................................................................... 93
Dock ............................................................................................................................. 95
ImageList ...................................................................................................................... 96
MultiLine ...................................................................................................................... 97
Alignment...................................................................................................................... 99
Appearance................................................................................................................... 99
Text ............................................................................................................................. 100

9.

DIJALOZI ..............................................................................101

Dialog Box ...................................................................................................................... 101


Kreiranje..................................................................................................................... 102
AcceptButton .............................................................................................................. 102
CancelButton .............................................................................................................. 103
Vrste dijaloga .................................................................................................................. 103
Modalni dijalozi.......................................................................................................... 103
Nemodalni dijalozi ..................................................................................................... 104

10.

MENIJI.............................................................................107

Glavni meni ..................................................................................................................... 107


Kreiranje..................................................................................................................... 107
Komande menija sa tastature ...................................................................................... 108
Preice ........................................................................................................................ 108
Dodavanje akcija ........................................................................................................ 111
Meniji MDI aplikacija ................................................................................................ 112
Kontekstni meni .............................................................................................................. 113

11.

TOOLBAR.......................................................................117

Osobine i kreiranje .......................................................................................................... 117


Programiranje.................................................................................................................. 121

12.

UVOD U GRAFIKU .......................................................123

Klasa Graphics................................................................................................................ 124


Strukture.......................................................................................................................... 127
Klasa Pen ........................................................................................................................ 128
Klasa Brush ..................................................................................................................... 131

13.

UVOD U XML ..................................................................133

XML deklaracija ............................................................................................................. 133


XML Tag......................................................................................................................... 134
Elementi XML-a ............................................................................................................. 135
XML atributi ................................................................................................................... 136
Visual C# i XML............................................................................................................. 137
DataSet ....................................................................................................................... 137
Kreiranje XML fajla ................................................................................................... 138
Kreiranje XML datoteke editorom teksta ................................................................... 138
Kreiranje XML fajla pomou VS.Net ........................................................................ 139
Kreiranje XML koda pomou klase XmlDocument.................................................... 141
XML Atributi ............................................................................................................. 143

14.

WEB-SERVISI .................................................................149

Komunikacija sa aplikacijom .......................................................................................... 149


Traenje Web servisa ...................................................................................................... 150

Metode Web servisa ........................................................................................................ 151


.NET okruenje i Web servisi ......................................................................................... 151
Kreiranje Web-servisa ................................................................................................ 151
Dodavanje Web-metoda ............................................................................................. 153
Testiranje .................................................................................................................... 154
Implementacija Windows klijenta .............................................................................. 155

15.

OSNOVE ADO.NET-A ....................................................160

ODBC.............................................................................................................................. 160
Data Source Name .......................................................................................................... 160
Konekcija ........................................................................................................................ 162
DataAdapter.................................................................................................................... 166
DataSet............................................................................................................................ 170
DataGrid ......................................................................................................................... 173
Pristupanje podacima objekta DataSet ....................................................................... 173
Promena podataka u bazi............................................................................................ 174
Objekti Command i DataReader ................................................................................ 175

16.

.NET SKLOPOVI .............................................................177

Osobine ........................................................................................................................... 177


Samoopisivanje........................................................................................................... 177
Instalacija sklopa ........................................................................................................ 177
Komponente................................................................................................................ 177
Sastav sklopova ............................................................................................................... 178
Implementacija sklopa pomou IDE ............................................................................... 178
MSIL Disassembler .................................................................................................... 180
Atributi sklopova............................................................................................................. 183
Verzija sklopa.................................................................................................................. 185
Kompatibilnost verzija ............................................................................................... 185
Privatni i deljeni sklopovi................................................................................................ 186

17.

LITERATURA................................................................187

PRIMERI..........................................................................................189

Osnove .NET platforme

1. OSNOVE .NET PLATFORME


.NET (dot-net) je ime najmodernije platforme koje Microsoft vezuje za
softverske tehnologije budunosti. U nazivu je osnovna poruka koju
nosi ova tehnologija - dostupnost u svakom trenutku na svakom
mestu. Ova platforma predstavlja dugoroni i strategijski plan razvoja
ne samo u Microsoftu. .NET daje realne osnove da postane osnovna
platforma razvoja modernih aplikacija. Radni okvir .NET razvijen je sa
ciljem da obezbedi okruenje za razvoj svih modernih aplikacija na
Windows operativnom sistemu.
Jedna od osnovnih osobina ove platforme je njena orijentacija ka
distribuiranim aplikcijama preko Interneta. Ovo sa sobom nosi
obavezno jo prednosti:

Distribuirane aplikacije su vie objektno orijentisane;

Ovaj
stil
programiranja
ubrzava
stvaranje
kolekcije
specifinog
koda
na
jednom
mestu,
nasuprot
dosadanjem stilu gde se stvaraju redundantne kopije na
mnogo mesta. (Redundantnost je pojam koji se koristi u
tehnici kada je re o nepotrebnom viku ili preobimnosti.) Ovo
svakako poveava efikasnost i opredeljuje za ovakve aplikacije;

Ovaj tip apikacije prua softverske celine raspoloive razliitim


ureajima preko interfejsa;

Kontrolisanjem pristupa u realnom vremenu (real-time) ka


distribuiranim vorovima ( delovi jedne softverske celine )
mogue je lake kontrolisanje rada takvih aplikacija. Ovaj
pristup pomera aplikacije od objektno orijentisanih u
pravcu 'services provided';

Biblioteka klasa razvijena je od samog poetka koristei


dragocena iskustva. Ovo daje veoma lepu osobinu, a to je dobar
dizajn, dosledno i dobro definisanje osnovnih tipova;

Jezika nezavisnost. Ovo je postignuto postojanjem meujezika,


IL (Intermediate Language, ili MSIL), tj. kd napisan na bilo

TVP C#

kom jeziku koji ima podrku za .NET prevodi se na kd razumljiv


tom meujeziku;

Podrka za Web (XML) servise. .NET ima razvijene alate za


jednostavno pisanje XML servisa;

Poboljani pristup dinamikim Web stranicama baziran na


ASP.NET tehnologiji;

Efikasniji pristup podacima preko ADO.NET klasa;

.NET postavlja i novi pristup za zajedniko korienje koda.


Nasuprot tradicionalnih dll biblioteka, uvodi se koncept
sklopova (assembly);

Zajedniko funkcionisanje razliitih platformi imperativ je u


distribuiranim aplikacijama. Zato je bilo neophodno obezbediti
standardizaciju u razmeni podataka. Tako je .NET platforma
sagraena na standardima tehnologije XML i SOAP. Ukoliko se prvi put
sreete sa pojmom XML ne brinite. Rad sa XML je veoma dobro podran
u .NET-u i prilino olakan upotrebom radnog okruenja.
Rad takvih aplikacija podrazumeva da postoji .NET Framework. .NET
Framework sadri CLR ( Common Language Runtime ) kao i kolekcije
klasa ovog okruenja. Posebno istiemo ASP.NET ( nova generacija
Active Server Pages tehnologije ) i WinForms ( slui razvoju desktop
aplikacija ).
Jo par detalja o CLR...
CLR izvrava kd koji je kompajliran na .NET platformi. CLR
specifikacija je otvorena za sve platforme, ukljuujui i non-Windows.
Takoe, svi programski jezici mogu se koristiti za rad sa .NET klasama.
Ove karakteristike obezbeuju pravljenje distribuiranih aplikacija ije
celine mogu da rade na nezavisnim platformama i ak pisane razliitim
programskim jezicima.
Svi jezici koji su obuhvaeni novim paketom Microsoft VisualStudio.NET
imaju podrku za .NET klase. Kako svi oni imaju ispod CLR to ih ini
ravnopravnim vie nego ikada. Meutim, C# je posebno napravljen
novi programski jezik upravo za .NET. Drugi programski jezici na ovoj
platformi su postojali i pre nastanka .NET. To ovom programskom
jeziku omoguava optimalno korienje .NET okruenja.

Poreenje: C# vs. C++/Java


2

Osnove .NET platforme

Za nekog ko tek treba da pone sa uenjem novog programskog jezika


uvek je aktuelno pitanje zbog ega treba da uloi napor za njegovo
savladavanje i ta tim ulaganjem dobija. Danas su, vie nego ikada,
programski jezici moni, tako da kvalitet softvera zavisi najvie od
vrednosti programera. Ipak, razlike i slinosti izmeu jezika postoje i
dobro ih je poznavati. Zbog aktuelnosti izveemo poreenje jezika C#
sa Javom i C++.

C# i Java

C# i Java svrstavaju se u naslednike jezika C. Pripadaju jezicima


nove generacije i ukljuuju savremene osobine. Na primer, oba
jezika imaju garbage collection (skuplja memorijskih
otpadaka u upravljanoj dinamikoj memoriji) koji oslobaa
programera razmiljanja o delovima programiranja niskog nivoa.
Sintaksno jezici su slini.

Osnovna zajednika osobina za oba jezika je da se prevoenje


(kompajliranje) vri do meujezika Intermediate Language (IL).
Za C# taj jezik se naziva Microsoft Intermediate Language
(MSIL), dok je za Javu to Java bytecode. Za oba jezika IL moe
biti startovan kao interpretator ili just-in-time (JIT) prevodilac.
C# ipak obezbeuje dalje prevoenje u prirodan - mainski kod
native code. Za razliku od Java bajtkoda koji se najee
interpretira, u .NET IL uvek se prevodi u pravo vreme. Na ovaj
nain uvaju se performanse aplikacije. Takoe, ne prevodi se
cela aplikacija odjednom ve samo oni delovi koji se pozivaju u
toku izvravanja programa (run-time).

Dalje, C# sadri vie osnovnih tipova podataka od Jave.

Takoe C# sadri enumeratore i preklapanje operatora za


korisnike tipove.

Kao i Java, C# naputa viestruko nasleivanje koje je postojalo


u C++. Osobina polimorfizma je neto uslonjena dodavanjem
opcija overriding/hiding ( kasnije e biti detaljnije objanjene ).

C# uvodi novu vrstu objekata koja ima puno slinosti sa


klasama tzv. delegate ( delegates ). Delegati sadre detalje
nekog metoda (slino kao pokazivai na funkcije u C++ jeziku).

Za razliku od Jave koja viedimenzionalne nizove implementira


preko jednodimenzionalnih (drugim reima pravi nizove nizova),
C# sadri prave pravougaone nizove.

TVP C#

C# u odnosu na C++
Mada su slinosti sa VB i Javom oigledne, ipak C# je najblii C++.

Jedna od najvanijih promena u odnosu na C++ je u tome da se


zahteva fajl sa zaglavljima. Novi pristup je dobijen korienjem
tzv. folding editora, koji moe da sklopi i rasklopi kd metoda,
odnosno da ga prikae kao deklaraciju ili kao definiciju metoda.
(Ovaj editor moe to isto da uradi i sa komentarima.)

.NET runtime na kome se izvrava C# sadri upravljanje


memorijom upotrebom objekata garbage collector. Zbog toga
je korienje klasinih pointera u C# manje vano nego u C++.
Klasini pointeri mogu se koristiti u C#, ali samo gde je kd
oznaen kao 'unsafe' i to pre svega ima smisla kada su
performanse najvanije.

Postoje jo neke izmene u odnosu na C++. Na primer:


-Odsustvo globalnog prostora, sve je u klasama;
-Sve je izvedeno iz praklase Object. Ovo vai i za vrednosne i za
referentne tipove. To je preduslov da funkcionie garbage collector;
-Nema viestrukog nasleivanja klasa, samo interfejsa;
-Sigurnost tipova: garantuje se da e u svakoj promenljivoj biti
vrednost tipa za koji je promenljiva deklarisana;
-Pravilo izriite dodele promenljivoj pre korienja, u skladu sa
sigurnou tipova (obavezna inicijalizacija ).
Sutinska razlika je prisustvo CLR tj. IL za C#, o emu je ve bilo
govora.
ANSI C++ se bazira na tehnologiji koja je stara vie od 10 godina, tako
da nema podrku za unicode (pogledajte www.unicode.org) ili za
generisanje xml dokumentacije.
Mada C++, Java i C# spadaju meu 10 najpopularnijih programskih
jezika, pravo poreenje se svodi na aktuelnost pojedinih programskih
jezika. U poslednjih par godina jedino je C# uspeo da zabelei porast
popularnosti. Pre svega ovo je izbor onih koji vole C jezik, ali i onih koji
su nauili da programiraju na C/C++, a eleli bi da naue jo vie o
novim tehnologijama. Budunost pripada jeziku C#.

Osnove .NET platforme

Hello World
Po dobrom starom nepisanom pravilu, svi primeri poinju tradicionalnim
programom Hello World. U ovom poglavlju videemo ta nam je sve
potrebno da bismo krenuli sa programiranjem u C#.

Proverite da li je .NET framework instaliran


Pre svega da bismo mogli da koristimo C# ili .NET klase na nekoj
maini moramo imati instaliran .NET framework SDK. Ukoliko ste
instalirali Visual Studio .NET ne brinite, instalacijom ovog paketa vaa
maina sadri i .NET framework.
Ukoliko niste sigurni ta vaa maina sadri, pogledajte u Control Panel
u spisak instaliranih programa. Na slici ispod vidi se primer postojanja
jedne verzije platforme .NET Framework.

TVP C#

Da biste neto i napisali potreban vam je jedan najobiniji editor teksta.


Kd je dat ispod.

using System;
public class HelloWorld
{
public static void Main()
{
// komentar u jednoj liniji
/*
komentar
vise
linija
*/
Console.WriteLine( "Hello World! );
}
}

Iz primera treba uoiti sledee karakteristike C# jezika.

Komentari
Iz koda se vidi i nain na koji mogu da se piu komentari u C#.
Sintaksa je uobiajena i za C++. Komentari se dele na linijske i oni na
poetku imaju dve kose crte. Druga vrsta komentara se protee izmeu
znakova /* odnosno */ i prenosi se na vie linija.

Mala/velika slova
C# pravi razliku izmeu malih i velikih slova - case-sensitive. Ako bi u
prethodnom primeru napisali console (malim poetnim slovom)
umesto Console (velikim poetnim slovom) program se ne bi preveo,
a prevodilac bi prijavio greku.

Napomena: Odvajanje
programskom jeziku C.

naredbi

kodu

je

identino

kao

C# je objektno orijentisan programski jezik i sve naredbe moraju


stajati u klasama. Drugim reima, zapamtite da C# nema globalnog

Osnove .NET platforme

prostora, kao to je to u C++ jeziku. Klasa u kojoj je smeten ceo kd


ovog primera zove se HelloWorld i ima jednu jedinu naredbu:
Console.WriteLine( "Hello World! );

Osim imena klase , na samom vrhu, treba primetiti liniju


using System;

Ova naredba omoguava da se nadalje u kodu koriste sve metode iz


prostora imena System, a da eksplicitno ne navedete re System. Tako
se klasa Console sa metodama za rad sa konzolom, koja pripada
prostoru imena System, moe pozvati
Console.WriteLine(.)

Umesto
System.Console.WriteLine(.)

tzv. puna kvalifikacija imena.

Metod Main
U klasi HelloWorld nalazi se metod Main. Obratite panju da je prvo
slovo veliko ime se pravi razlika u odnosu na C funkciju main. Ova
funkcija je deklarisana kao static i public. Program moe imati samo
jednu ulaznu taku (entry point) i ona se ostvaruje upravo preko ovog
metoda.

Prevoenje (kompajliranje) koda


Da biste preveli ovaj kd potrebno je da pozovete kompajler sa
komandne linije ili koristite integrisano okruenje. Kao primer
pokazaemo upotrebu linijskog kompajlera za ovaj kd.
U jedan DOS prozor unesite:
csc HelloWorld.cs

Ako se kompajliranje uspeno odradilo u istom direktorijumu nai ete


fajl

TVP C#

helloworld.exe

Pokretanje ovog programa vri se ako otkucate samo ime ( sa ili bez
ekstenzije ) a zatim pritisnete ENTER.
Kompajliranje iz okruenja je jednostavno i radiemo ga u narednim
primerima.

Primer: Postavljanje kompajlera u path


Verovatno da ste imali problem sa pokretanjem kompajlera. Ukoliko
imate instaliran .NET Framework morate postaviti folder u kome se
nalazi kompajler csc u putanju koja e se pretraivati pri startovanju
nekog programa. Ove putanje oznaene su posebnom promenljivom
okruenja koja se naziva PATH.
1. Kliknite na Start->Control Panel oo
2. Zatim kliknite na System
3. Na dijalogu System Properties kliknite na tab Advanced, a zatim
na Environment Variables
4. U sekciji System Variables odaberite Path a zatim kliknite na Edit
5. Dodajte na kraju ; sa putanjom do direktorijuma gde se nalazi
csc.exe. Na primer:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\
Wbem;C:\WINDOWS\Microsoft.NET\Framework\v2.0.40607

6. Potvrdite pritiskom na OK

Uvod u Visual C#

2.

UVOD U VISUAL C#.NET

IDE Integrisano Razvojno Okruenje

Visual Studio .Net IDE (Integrated Development Environment)


predstavlja izuzetan interfejs za stvaranje i testiranje aplikacija. Tipovi
aplikacija koje VS.NET podrava su najrazliitiji i ne postoji jedinstven
ablon za sve. Zbog toga se u projektovanju nove aplikacije ona mora
pridruiti nekoj od grupa.

Primer: Kreiranje novog projekta korienjem osnovnog menija.


1. Izaberite File->New->Project...
2. Na Project dialog prozoru izaberite Visual C# Projects u listi
Project Types
3. Na listi Templates izaberite Windows Application
4. U tekst polje Name unesite ime vaeg projekta ili moete
prihvatiti ve ponueno ime, na primer WinForms1

TVP C#

5. Potvrdite unos pritiskom na dugme OK. Nova aplikacija e biti


kreirana sa podrazumevanom formom.
6. Da biste preveli i pokrenuli vau aplikaciju odaberite iz glavnog
menija
Debug->Start Without Debugging

10

Uvod u Visual C#

7. Test aplikaciju moete zatvoriti pritiskom na dugme


se u programsko okruenje.

i vraate

Toolbar ( paleta sa alatima )


Inae, ispod glavnog menija nalazi se paleta sa dugmiima (na kojima
su slike koje asociraju na funkciju ) koji pokreu neke najee
koriene komande. Ta paleta se naziva toolbar.

Postoji vie tipova kontrole toolbar. Ako pored njega kliknete desnim
dugmetom mia videete spisak sa ozaenim objektima toolbar koji su
aktivni. Sliice koje vidite pripadaju tzv. standardnom toolbar objektu.
Bar nazivamo posebnim prozorom, koji je deo aplikacije i na kome se
uobiajeno nalazi neka paleta alatki. Takoe, uobiajeno je da se ta
paleta lepi za neku stranu prozora glavne aplikacije, ali moe stajati i
samostalno.
Ako sa glavnog menija odaberete Tools->Customize moete
podeavati alatke koje e biti na radnoj povrini ili dodavati nove. Ovo
podeavanje izvodite na tabu ( kartici ) Toolbars, kao to je prikazano
na slici ispod.

11

TVP C#

Na kartici Commands moete dodavati sopstvene komande nekom od


objekata toolbar.

Kao to je i pomenuto radno okruenje se moe podesiti (customize) po


slobodnoj volji, tako da prua mogunost programeru da se u njega
lako uklopi i udobno smesti.

Toolbox (kutija sa alatima)


Uz levu ivicu ekrana nalazi se bar (traka) sa natpisom Toolbox (kutija
sa alatima dizajnera) vertikalno orijentisan. U objektu toolbox
razvrstane su kontrole po kategorijama. Na liniji gde je naslov postoji
dugme pribadaa (sa skraenim opisom Auto hide)
, kojim se menja
ponaanje ove kontrole. Pritiskom na pribadau bar moe biti fiksiran
za ivicu glavnog prozora. Ukoliko je pribadaa u gornjem poloaju bar
je podeen tako da nestaje kada se mi pomeri sa njega. Ovo je
podrazumevano ponaanje okruenja, sa idejom da se povea korisna
povrina ekrana kada se kutija sa alatima ne koristi.

12

Uvod u Visual C#

Solution Explorer, Class View, Resource View,


Properties

13

TVP C#

Na desnoj strani ekran je podeljen u dve sekcije. Gornja sekcija


ukljuuje razliite tabove, kao to su Class View, Resource View i
Solution Explorer. U donjoj sekciji na desnoj strani nalazi se prozor koji
prikazuje svojstva stavki koje su selektovane na gornjoj.

14

Uvod u Visual C#

Naravno, jo jednom da ponovimo, izgled radne povrine je potpuno


proizvoljan i mogue ga je prilagoavati sopstvenim eljama. Opis koji
je dat vai za inicijalni izgled IDE okruenja.
Zbog znaaja koji ima u kreiranju aplikacija sada emo pokazati neke
mogunosti koje nam prua Class View. Upotrebu ostalih alata
pikazaemo kasnije na konkretnim primerima.

Class View
Class View daje prikaz klasa u projektu koji stvarate i ujedno vam
omoguava da dodajete i menjate postojee klase. Prikaz klasa dat je u
obliku stabla, dakle hijerarhijski ureenih. Na slici je dat jedan primer
projekta test.

vor najveeg nivoa predstavlja sam projekat test. Sledei nivo


vorova su prostori imena iz projekta. U gornjem primeru postoji samo
jedan. U prostoru imena, koji se takoe naziva test, sadrane su dve
klase: Form2 i Form3. Klasa Form2 sadri dva privatna polja button1
odnosno
components,
zatim
privatne
metode
Main(),
InitializeComponent() i button1_Click (...). Klasa Form2 sadri i
konstruktor Form2(), zatienu metodu Dispose(bool).
Ako proirimo vorove Bases and Interfaces videemo da je u korenu
klasa Object. Ova klasa se nalazi u korenu svih klasa jezika C#. Ovo
smo pominjali kada smo nabrajali prednosti C# jezika.

15

TVP C#

Dodavanje nove klase projektu


Pomou Class View prikaza moete dodati novu klasu vaem projektu.
U ovom prikazu pritisnite desnim tasterom mia projekat i odaberite
stavku u meniju Add Class. Drugi nain je izborom stavke menija
Project->Add Class.
Pojavljuje se arobnjak za kreiranje klasa C# Class Wizard, kao na
slici ispod

16

Uvod u Visual C#

Znaenje polja dato je u tabeli ispod.

Naziv polja

Opis

Class Name

Ime nove klase

Namespace

Naziv prostora
pridruuje

imena

kome

se

klasa

File Name

Ime fajla u kome e biti smetena definicija


klase

Access

Definie mogunost pravljenja referenci u


drugim delovima i drugim aplikacijama

Class Modifiers

Apstraktne i zapeaene klase kontroliu


korienje klase u vezama nasleivanja.

17

TVP C#

Kasnije e biti govora o ovome.


Comment

Komentar koji se kasnije i vidi u IDE editoru


preko Intelli-Sense programa.

Kartica Base Class

Definisanje osnovne klase za klasu koju


kreirate. Dostupne su ne samo klase iz .NET
Frameworka ve i klase iz vaeg projekta.

Kartica Inheritance

Definisanje interfejsa koje implementirate u


vaoj klasi.

Dodavanje metoda i polja


Na slian nain kao to smo dodali novu klasu projektu moemo dodati
novo polje jednoj klasi. Dakle, koristei Class View pritiskom na desni
taster na klasu kojoj elite da dodate novo polje dobijate meni gde
birate stavku Add a zatim birate stavku koju dodajete klasi, kao na slici
ispod.

18

Uvod u Visual C#

Na slikama ispod dati su arobnjaci za dodavanje novog polja klasi,


odnosno za dodavanje novog metoda.

19

TVP C#

Ne zaboravite da ovi arobnjaci slue da programeru olakaju posao.


Sve to oni urade moete uraditi i runo ukoliko niste zadovoljni kodom
koji generiu ili smatrate ( volite ) da ovo treba da radite runo.

Tipovi aplikacija
Pre nego to nastavimo sa novim stvarima vratimo se na primer
kreiranja novog projekta. Na listi Templates odabrali smo Windows
application. Ovo smo uradili preutno, sa namerom da to pre kreirate
vau .NET Windows aplikaciju i osetite bar na trenutak mogunosti
okruenja koje je ispred vas. Sada emo pojasniti neke od opcija koje
vam stoje na raspolaganju.
ablon ( Template )

Kreira se...

Windows Application

Windows aplikacija sa jednom praznom


poetnom formom, sa svim osobinama koje
takva aplikacija mora da ima.

Console Application

aplikacija koja se izvrava iz komandne


linije ili sa konzolnog prozora.

Empty Project

nita. Sav
aplikaciju.

Windows Service

servis koji se izvrava u pozadini.

Class Library

.NET klasa koja se moe pozvati iz drugog


koda.

ASP.NET Web Service

klasa koja radi kao Web servis

ASP.NET Web App.

stranice i klase koje generiu HTML


odgovor poslat pretraivau sa ovih
stranica.

kod

morate

sami

uneti

Promenljive u C#
Postoje dve vrste promenljivih u C#.
vrednosnog tipa, i referentnog tipa.

20

Promenljive

mogu

biti

Uvod u Visual C#

Vrednosni tip promenljive


Ove promenljive sadre podatak. One su sline kao primitive types u
Javi. Svi tipovi su izvedeni iz klase Object. Vrednosne promenljive ne
mogu da sadre null vrednost za razliku od referentnih tipova. Ove
promenljive se uvaju na steku.

C#
Type

.NET Framework Ozna Duina


Type
en [bajt]

Opseg vrednosti

Defa
ult

sbyte

System.Sbyte

Da

-128 do 127

short

System.Int16

Da

-32768 do 32767

int

System.Int32

Da

-2147483648 do
2147483647

0L

long

System.Int64

Da

9223372036854775
808 do
9223372036854775
807

byte

System.Byte

Ne

0 do 255

ushort

System.UInt16

Ne

0 do 65535

uint

System.UInt32

Ne

0 do 4294967295

0
0

ulong

System.UInt64

Ne

0 do
1844674407370955
1615

float

System.Single

Da

7 cifara preciznost

0.0F

double

System.Double

Da

15-16 cifara
peciznost

0.0D

decimal

System.Decimal

Da

12

28-29 cifara
peciznost

0.0M

char

System.Char

N/A

6-bitni Unicode
karakter

'\0'

bool

System.Boolean

N/A

true ili false

false

Primer upotrebe vrednosnih promenljivih.


int x = 99;
int y = x;
x = 138;

21

TVP C#

U gornjem primeru prikazana je osnovna karakteristika vrednosnih


tipova. Promenljiva y uva kopiju vrednosti koja je inicijalno
postavljena u promenljivoj x, tj. sadri vrednost 99. Ako se vrednost
promenljive x promeni na 138 u sledeoj liniji koda ovo nema uticaja
na vrednost promenljive y.

Referentni tip promenljive


Ovaj tip promenljivih uva reference na memorijske adrese sa
vrednostima i one se alociraju na tzv. heap memorijskom delu. Heap je
deo memorije u kome se dinamiki alociraju promenljive. Ovaj tip
promenljivih poznat je jo i kao objekti. Ovo je razlika u odnosu na
C++. Ove promenljive uvaju reference na stvarne podatke tj. na
stvarni objekat u memoriji.
Primer: Kd koji prikazuje razlike vrednosnog i referencijalnog tipa
promenljive.
using System;
namespace Project1
{
class Class1
{
public int Value = 0;
}
class Test
{
static void Main()
{
int val1 = 0;
int val2 = val1;
val2 = 123;
Class1 ref1 = new Class1();
Class1 ref2 = ref1;
ref2.Value = 123;
Console.WriteLine("Values: {0}, {1}", val1, val2);
Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
Console.WriteLine("Press ENTER to end");
Console.Read();
}
}
}

Rezultat:

22

Uvod u Visual C#

Rezimirajmo:
Promenljiva referencnog tipa pravi se svaki put kada deklariete
promenljivu kao:

klasu

interfejs

niz

string

objekat

delegat

Promenljiva vrednosnog tipa se pravi kada deklariete promenljivu tipa:

Integer

Floating

Boolean

Enumeration

Structure

Svojstva u C#
Svojstvo daje (postavlja) informacije o objektu kome pripada. Svojstvo
je jedan metod ili par metoda ( to se klijentskog koda tie ), ali se

23

TVP C#

ponaa kao polje. Na primer, kada pomerate neku kontrolu svojstvo


Location daje vam informaciju o poziciji gde se ta kontrola nalazi.
Tekstualni sadraj je opisan svojstvom Text, itd.
Svojstvo moe da da informaciju o objektu i/ili da postavlja neku
vrednost za objekat. Drugim reima svojstva mogu da budu read-write,
ali i samo jedno od ta dva, bilo koje.
Svojstva su neobina i po tome to su preuzeta iz programskog jezika
VB, a ne iz C++ ili Jave. Svojstva se ponaaju kao atributi, ali za
razliku od njih svojstva ne predstavljaju samo vrednost neke
promenljive, ve su po prirodi funkcije kao i metode.
Na primer, upotreba jednog svojstva definisanog u klasi Form:
//frm1 - objekat ( tacnije forma ) i definisan je klasom System.Windows.Form
frm1.Height = 500;

Prilikom izvrenja ovog koda prozor e dobiti visinu 500, a korisnik e


moi da vidi ovu promenu na ekranu. Sintaksno, kd je isti kao da smo
izvrili podeavanje nekog polja, ali sutinska razlika je u tome to je
pozvan metod koji vri promenu visine.
Sintaksa za definisanje jednog svojstva najbolje se vidi iz sledeeg
primera:
public string myProperty
{
get
{
// podesvanja
return Ovo je samo primer!;
}
set
{
// podesavanja
}
}

Svojstvo se definie u okviru neke klase kojom se opisuje objekat. U


gornjem primeru svojstvo je tipa string i nosi naziv myProperty. Drugim
reima, vri se itanje i podeavanje vredosti nekog stringa uz sve
ostale akcije koje su skrivene iza metoda koje definiu svojstvo.
Ukoliko svojstvo ima metode get i set za njega kaemo da je readwrite. Ukoliko ima samo metodu get kaemo da je read-only, a ako ima
samo metodu set, kaemo da je write-only.

24

Uvod u Visual C#

Programski jezik C# ne dozvoljava podeavanje razliitih modifikatora


pristupa (private, public ili protected) pristupnim metodama get i set.
Napomena:
itaoca molimo da pogleda prirunike za OOP ili C++ ukoliko nije
siguran u znaenje prethodno pomenutih modifikatora pristupa.

Primer: U klasi Property dodato je svojstvo Name, a u klasi Class1


pokazana je upotreba tog svojstva.
using System;
namespace ConsoleApplication1
{
public class Property
{
public string Name
// Svojstvo (Properitet)
{
get
{
return name;
}
set
{
name = value;
}
}
private string name; // Field/Polje
}
class Class1
{
static void Main()
{
Console.Write("Name: ");
Property property = new Property();
property.Name = Console.ReadLine();
Console.WriteLine(property.Name);

// set prop
// get prop

}
}
}

Dodavanje svojstava iz IDE


Osim to se mogu programski dodati na nain koji je prikazan kroz
primer, IDE daje sopstveni alat pomou koga moete dodati proizvoljno

25

TVP C#

svojstvo nekoj klasi. Pretpostavimo da ste kreirali neku aplikaciju na


nain:
1. Pokrenite Microsoft Visual Studio .NET
2. Na stranici Start Page izaberite New Project (ili, na glavnom
meniju, File->New->Project...)
3. Na New Project dijalogu u Project Types listi birate Visual C#
Projects
4. U Templates listi birate Windows Application (.Net)
5. U Name tekst polju zamenite <Enter name> sa test
6. U kombo polju Location prihvatite predlog ili otkucajte sami
7. OK
8. Pritisnite F5 da biste testirali program
9. Zatvorite ga i vraate se u VS
Ovo je standardni deo za pravljenje okvira jedne windows aplikacije u
kome dalje delujemo.
10. Otvorite pogled na klase u vaoj aplikaciji Class View
11. Desnim tasterom mia kliknite na klasu Form1 u koju dodajemo
novi metod
12. Poto se otvara pomoni meni, kao na slici, odaberite stavku Add

26

Uvod u Visual C#

13. A zatim odaberite Add Property


14. Otvara se novi dijalog u kome podeavate parametre koji se tiu
svojstva koje dodajete, na primer kao na slici ispod

27

TVP C#

15. Poto ste sve popunili zavravate dugmetom Finish. Automatski se


vraate u kd na mesto gde je kreirano telo novog svojstva
zajedno sa komentarom.
/// <summary>
/// // test primer
/// </summary>
public string myProperty
{
get
{
return null;
}
set
{
}
}

Poto smo dodali nae svojstvo nekoj klasi ono postaje za IDE potpuno
ravnopravno kao i sva ostala svojstva. Nadalje ovo svojstvo se nalazi u
listi ponuenih komandi koje nudi IDE pri pisanju koda. Pri tome je
pravilno pridruena sliica koja oznaava da je re o svojstvu, a dodatni
uti pravougaonik sa upustvom predstavlja onaj komentar koji ide uz
svojstvo.

Za IDE editor se kae da ima osobinu Intelli-Sense. Kada ponete da


kucate prikazuje imena klasa, polja, metoda, svojstava. Takoe,
prikazuje listu parametara metoda kada se odabere ime metode.
Ukoliko postoje preoptereene metode (mada je pojam poznat iz C++
objasniemo ga kasnije) prikazuje listu metoda sa odgovarajuim
parametrima.

28

Dizajn kontrola

3.

DIZAJN KONTROLA

Kada kreirate neku aplikaciju koja sadri interakciju sa korisnikom (


teko je zamisliti primer bez toga ) sasvim sigurno je da ete morati da
imate objekte kojima obezbeujete razmenu informacija izmeu
aplikacije i korisnika. Ti objekti e prikazivati podatke korisniku ili e
prenositi podatke od korisnika do vaeg programa. Ovi objekti se
nazivaju kontrole ( i to Windows kontrole ).

Osobine Windows kontrola


Kontrole koje se postavljaju na forme po svojoj prirodi i nameni
razliite su. Istovremeno, postoje i mnoge slinosti meu njima koje su
veoma znaajne za programere. Prvo, kada pominjemo kontrole u
ovom poglavlju mislimo na kategoriju Windows kontrola. Ovo je
napomena koju autori namerno istiu zbog raznovrsnosti kontrola koje
ovo okruenje nudi korisniku tj. pogrameru.
Zajedniko za sve kontrole je da su po svojoj prirodi takoe i prozori.
ta to znai videemo kasnije. Za sada recimo to da sve imaju veinu
slinih svojstava. Prihvatanje odreenih dogaaja tipino je za kontrole.
Neki dogaaji su specifini samo za odreenu kontrolu dok su drugi
zajedniki.
Veoma je dobro i vano za programere da koriste odreenu
nomenklaturu kada je re o dodeljivanju imena kontrolama, formama
pa i tekuim promenljivima. Ime treba da bude to vie opisno tj. da
to vie opisuje ono to predstavlja. Nekada je za to potrebno vie od
jedne rei. U nepisanoj C# nomenklaturi takva imena poinju malim
slovom a svaka nova re velikim. Na primer: firstName, dateOfBirth
Ukoliko ste nekada pisali due programe jasno vam je o emu se radi.
Teko je odravati vei kd bez ovakvih pravila. Ukoliko pak radite u
timu razlog je jo vei. U tom sluaju morate ulagati dodatan napor da
razumete tui kd, ali ako je on slian vaem i ako postoje ovakva
pravila to predstavlja manji problem.

29

TVP C#

Relacija roditelj-dete
Postoji nekoliko razliitih relacija izmeu prozora koji ine jednu ili vie
aplikacija. Za nas u ovom trenutku, kada govorimo o pozicijama
kontrola, bitan odnos je roditelj-dete tzv. parent-child relationship. Na
primer, kontrola koju ste postavili na neku formu predstavlja prozor iji
roditelj je drugi prozor tj. Forma. Ovo je podrazumevana relacija kada
se kontrole postavljaju i manifestuje se lepljenjem kontrole za tu
formu. Pomeranjem forme pomeraju se sve kontrole na njoj, tj. sva
deca prozori. Ista relacija postoji izmeu formi koje pripadaju nakoj
MDI aplikaciji. ( Pojam MDI aplikacija bie kasnije detaljnije razmatran,
za sada je dovoljno da pomenem kao primer Word ili Exel gde se
istovremeno mogu otvoriti nekoliko dokumenata u posebnim prozorima
i svi prozori su u zajednikom prozoru glavne aplikacije. )
(Osim odnosa izmeu prozora roditelj-dete postoji i druga relacija,
koja bi na ovom mestu unela konfuziju, a ne bi doprinela razumevanju i
nju autori svesno preskau.)

Koordinatni sistem
Da bi bolje razumeli svojstvo Location daemo neka dodatna
objanjenja u vezi koordinatnog sistema koji se primenjuje kada je re
o postavljanju objekata na ekran i odnosima izmeu prozora u Windows
operativnom sistemu.

30

Dizajn kontrola

Pozicija nekog prozora iji je roditelj desktop rauna 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.
Rastojanje od koordinatnog poetka take do leve ivice je svojstvo
Left. Adekvatna ostala svojstva zovu se Right, Top, Bottom.

Postavljanje kontrole na formu


Kontrola se bira sa toolbox palete na levoj strani ekrana. Kategorije na
paleti toolbox obezbeuju nam bri izbor traene kontrole.

Kada se eljena kontrola nae ona se miem selektuje, a zatim


prebaci na tekui (current-vaei, tekui) prozor ( formu ) takoe
pritiskom mia. Kontrola e se nai na poziciji gde je bio kursor mia.
Izgled jedne forme sa nekim kontrolama dat je ispod.

31

TVP C#

Postoje jo neke varijante dodavanja kontrola na formu.

Ukoliko uradite dvostruki klik na neku kontrolu ona e biti


automatski dodata formi u gornjem levom uglu.

Ukoliko morate da postavite puno istih kontrola na formu ( to nije


tako redak sluaj ) pokuajte se tasterom Ctrl. Naime, selektujte
kontrolu ali sa pritisnutim Ctrl tasterom ( toolbox treba da bude
fiksiran ). Kontrola ostaje selektovana pa moete obinim klikom
na mia da postavite ovu kontrolu proizvoljan broj puta na formu.

Selektovanje kontrole, podeavanje pozicije i


veliine
Da biste mogli da vrite naknadne promene pozicije kontrole ili nekih
svojstava, kontrola se mora selektovati. Ovo se izvodi jednostavnim
klikom mia na nju. Oko kontrole se pojavljuje pravougaonik sa 8 malih
kvadratia koji nam olakavaju promene dimenzija kontrole u
odreenim pravcima.

32

Dizajn kontrola

Da bismo selektovali vie od jedne kontrole moramo drati pritisnute


tastere Shift ili Ctrl. Zatim se pritiska jedna po jedna eljena kontrola.
Poslednja ima pravougaonik sa crnim kvadratiima oko nje. Drugi nain
da se selektuje skup kontrola je pritiskom na povrinu forme i
povlaenjem mia se formira pravougaonik, a sve controle u njemu da
postaju selektovane.
Pomeranje odreene kontrole vrite tako to miem pritisnete tu
kontrolu a zatim dok drite mi pritisnut povlaite kontrolu preko
forme. Poto je pomerite na eljenu poziciju otpustite taster mia i
kontrola zauzima novu poziciju. Ako ste selektovali vie od jedne
kontrole na isti nain moete pomerati i grupu kontrola.
Drugi nain je da selektujete kontrolu a onda koristei strelice na
tastaturi izvodite pomeranje kontrole po formi. Korak pomeraja
odgovara mrei na formi (grid). Ukoliko elite preciznije pomeranje
koristite pritisnut taster Ctrl.

Zajednika svojstva Windows kontrola

Name
Svaka kontrola ima svojstvo Name. Ovo svojstvo omoguava da se
preko imena pristupi nekoj kontroli ili formi. Ime mora postojati i ono

33

TVP C#

se automatski dodaje pri kreiranju, tj. pri postavljanju neke


kontrole/forme. Na primer, kada se neka aplikacija formira automatski
se postavlja prva forma i njoj se dodeljuje ime Form1. Svaka sledea
forma dobija novo ime sa narednim brojem: Form1, Form2....
Isto pravilo vai i za kontrole koje se postavljaju na forme. One
dobijaju imena po automatizmu koje im IDE okruenje dodeljuje a
bazira se na tipu kontrole. Tako na primer tekst polja dobijaju imena
text1, text2...

Location
Drugi primer uobiajenog svojstva svih kontrola je njihova lokacija
(Location). Naravno ovo svojstvo je veoma bitno za vizuelni izgled
forme, ali moram pomenuti da postoje 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 re o vrednosnom tipu, jer su X i Y definisani kao celi
brojevi) a celi brojevi se realizuju kao strukture.

Size
Kada je re o grafikim svojstvima kontrole, osim pozicije, treba
spomenuti i njenu veliinu Size. Svi objekti su po prirodi pravougaonog
oblika pa se veliina jednostavno opisuje. Svojstva koja opisuju veliinu
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.

Cursor

Funkcija
Promena visine
Promena irine

Promena i visine i irine u razliitim pravcima

34

Dizajn kontrola

Drugi nain da se promene parametri kontrole ( ne samo veliina ) je


koristei Properties prozor. Meu 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:
static void Main()
{
Form1 Fm = new Form1();
Fm.Size
= new System.Drawing.Size(450, 320);
Application.Run(Fm);
}

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 koristei 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:
static void Main()
{
Form1 Fm = new Form1();
Fm.Text
= "Employment Application";

35

TVP C#

Fm.Size
= new System.Drawing.Size(450, 320);
Application.Run(Fm);
}

Visible
Ranije smo pomenuli svojstvo koje odreuje 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
uobiajeno kae da je sakrivena - hidden. Ovo svojstvo takodje se
moe programski menjati jednostavnim dodeljivanjem vrednosti.
Ukoliko kontrola nije vidljiva onda nije ni dostupna logino. Drugim
reima ona je za korisnika sa stanovita unosa i prikaza informacija
potpuno bez funkcije. To ne znai da su takve kontrole nepotrebne
naprotiv. U toku izvravanja programa one se mogu uiniti 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 znai obavezno da je i dostupna
korisniku. Posebno svojstvo definie da li kontrola moe primiti ulaz od
korisnika ak i kada je vidljiva. Ovo svojstvo se naziva Enabled i
takoe je bulovog tipa. Ako je kontrola vidljiva, a Enabled svojstvo
postavljeno na vrednost false, to znai da korisnik moe samo itati
vrednosti te kontrole bez mogunosti da ih menja. Podrazumevani
izgled kontrole u tom sluaju je blago zasivljenje (dimmed). Ovo
svojstvo se esto programski, u samom kodu menja. Obino kada unos
nekih podataka povremeno (ili stalno) treba zabraniti, a prikaz
podataka ostaviti.

Fokus kontrole i aktivan prozor


Pojam fokusa i aktivnog prozora bitni su za razumevanje relacija meu
prozorima i za objanjavanje nekih svojstava ( a kasnije i dogaaja ).
Za kontrolu se kae da je u fokusu ako kontrola moe da primi ulaz sa
tastature. Takvo stanje poseduju kontrole, ali na primer i stavke u listi.
Ono se moe posebno grafiki oznaiti to se u podrazumevanom
vizuelnom podeavanju i radi.

36

Dizajn kontrola

Pojam aktivnog prozora ne vezuje se za kontrolu koja pripada nekoj


formi ve za samu formu. Kontrola koja ima fokus nalazi se na
aktivnom prozoru. Samo jedan prozor je aktivan u jednom trenutku.

Na gornjoj slici dat je prikaz jednog primera. Jasno je da je Form1


aktivni prozor a textBox1 u fokusu i da se nalazi na tom prozoru.

TabIndex i TabStop
Ovde emo pomenuti jo jedno veoma bitno svojstvo u programiranju
na grafikim okruenjima (GUI). Ovo svojstvo nije vidljivo bar ne na
prvi pogled. Obino 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 koristei Tab taster. Kada se on
pritisne fokus kontrole se prebacuje na sledeu. Upravo tab svojstvo
odreuje redosled kontrola u ovom sluaju.
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. Takoe, kontrola koja moe da primi fokus mora imati svojsto
TabStop postavljeno na true, ako treba da primi fokus. U suprotnom ta

37

TVP C#

kontrola e biti preskoena dok pritiskate taster Tab. Na sreu, 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 odreenoj kontroli definie
svojstvo TabIndex. Ukoliko tu poziciju elite da promenite treba da
promenite vrednost ovog svojstva.

Programsko kreiranje kontrola

Ve smo videli kako se kreiranje kontrola izvodi na vizuelan nain,


selektovanjem odreenih kontrola sa liste Toolbox i dodavanjem na
formu. Postoje razlozi kada se kreiranje kontrole ne moe izvesti na taj
nain ve morate to uraditi programski.
Klase za upravljanje kontrolama nalaze se u prostoru imena System.
Unutar ovog prostora imena nalazi se Windows, a u njemu prostor
imena Forms. Sve kontrole raspoloive za .Net programiranje su
kreirane u System.Windows.Forms prostoru imena.
Svaka kontrola predstavlja jedan tip objekata (promenljive). Kontrole
su opisane klasama pa se deklarisanje kontrola obavlja na isti nain kao
i svih ostalih promenljivih.

ClassName VariableName;
Na primer: Deklarisanje objekta btnSubmit tipa Button u prostoru
imena System.Windows.Forms.

System.Windows.Forms.Button btnSubmit;
Da bi kontrola (objekat) zaista mogla da se koristi mora se odvojiti i
memorijski prostor, korienjem operatora new, i odraditi sva
neophodna podeavanja. Podeavanja se obavljaju u konstruktoru koji
se automatski poziva pri kreiranju objekta pozivom operatora new.

38

Dizajn kontrola

Dat je primer runog dodavanja kontrole u vau klasu Form1.

public class Form1 : System.Windows.Forms.Form


{
System.Windows.Forms.Button btnSubmit;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components =
null;
public Form1()
{
btnSubmit = new System.Windows.Forms.Button();
btnSubmit.Location = new
System.Drawing.Point(88, 2);
btnSubmit.TabIndex = 0;
btnSubmit.Text = "Submit";
Controls.Add(btnSubmit);
...
}

Linijom koda
System.Windows.Forms.Button btnSubmit;

na poetku se deklarie promenljiva btnSubmit. Deklarisana je kao


podatak koji pripada klasi Button u okviru prostora imena Forms,
tanije: System.Windows.Forms.Button. Poto je re o referentnom tipu
podataka moramo odvojiti memorijski prostor na heapu za ovaj objekat
i pozvati konstruktora tog objekta.
Ovo se obavlja preko operatora new:
btnSubmit = new System.Windows.Forms.Button();

Sa ove dve linije koda mi jesmo kreirali objekat u osnovnom


programskom smislu, ali ukoliko prevedemo kd i startujemo program
videemo da se dugme ne nalazi na formi tj. da kreiranje nije izvedeno
tako da bude i vidljivo.
Inicijalna vrednost svojstva Visible je true tako da nije neophodno
podeavanje ove vrednosti. Takoe, svojstvo Size ima poetnu
vrednost.

39

TVP C#

Ostaje da podesimo poziciju dugmeta i opciono tekst na dugmetu.


Pozicija je vrednosnog tipa i podeavanje izvodimo postavljanjem
vrednosti direktno ili korienjem objekta Point(,). U ovom drugom
sluaju koji je dat u primeru objekat Point mora se kreirati operatorom
new.
btnSubmit.Location = new System.Drawing.Point(88, 2);

Naredbe koje postavljaju tekst na dugme i


neophodne za kreiranje dugmeta na formi.

Tab

redosled

nisu

btnSubmit.TabIndex = 0;
btnSubmit.Text = "Submit";

Ono to je neophodno da bi dugme zaista zaivelo na formi je naredba:


Controls.Add(btnSubmit);

Koristi se svojstvo Controls i metod Add. Svojstvo Controls je read-only


tipa
i
moe
se
koristiti
samo
za
dobijanje
objekta
Control.ControlCollection koji sadri kolekciju kontrola (koje pripadaju
nekoj kontroli Formi ). Add je metod koji pripada ovoj klasi i
obezbeuje dodavanje novog objekta ( tipa Control ) kontejneru.

Uporedimo ovaj kd sa onim to se dogaa kada jednu kontrolu sa


toolbox-a postavimo na formu. Prvo dodajmo jedno dugme sa svim
podrazumevanim vrednostima na neku poziciju na formi. Ova akcija je
adekvatna sledeim promenama u kodu u klasi koja opisuje formu na
koju se postavlja kontrola:
1. Dodata je deklaracija objekta koji predstavlja tu kontrolu. U naem
sluaju prvo je dodato jedno dugme:
private System.Windows.Forms.Button button1;

2. Unutar funkcije InitializeComponent() vri se kreiranje objekta, a


zatim i njegova inicijalizacija.
this.button1 = new System.Windows.Forms.Button();
//
// button1
//
this.button1.Location = new System.Drawing.Point(96,
120);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(136, 24);
this.button1.TabIndex = 0;
this.button1.Text = "button1";

40

Dizajn kontrola

3. U istoj metodi se kasnije vri dodavanje ove kontrole kontejneru


Controls u formi
//
// Form1
//
this.Controls.AddRange(new
System.Windows.Forms.Control[]{this.button1});
Primetite da dizajner koristi metod AddRange(), a ne Add(), koji je
gore korien za runo dodavanje jedne kontrole u kontejner.

Dakle iza jednostavne tehnike drug and drop stoji desetak linija koda.
Bitno je da razumete da je sve to uradite koristei IDE predstavljeno
promenama u kodu projekta na kome radite. Drugim reima, sve je to
mogue i programski na isti, ili slian, nain uraditi. Alati vam stoje na
raspolaganju za jednostavniji i lakki rad.
Sada ete videti ta se dogaa ako dodate formi jo jedno dugme i
jednu labelu, na isti nain ( preko liste toolbox ).
1. Deklaracije
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Label label1;
2. Kreiranje i inicijalizacija
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(96, 120);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(136, 24);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
//
// button2
//
this.button2.Location = new System.Drawing.Point(152, 168);
this.button2.Name = "button2";

41

TVP C#

this.button2.Size = new System.Drawing.Size(88, 24);


this.button2.TabIndex = 1;
this.button2.Text = "button2";
//
// label1
//
this.label1.Location = new System.Drawing.Point(112, 64);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(120, 24);
this.label1.TabIndex = 2;
this.label1.Text = "label1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.label1,
this.button2,
this.button1});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}

Postavljanje kontrole u fokus


Ranije smo objasnili pojam fokusa kontrole u Windows operativnim
sistemima. Naglasimo jo jednom da fokus oznaava da je kontrola
spremna da primi ulazne podatke. Na primer, ako se neko dugme
nalazi u fokusu to se prikazuje takastim pravougaonikom oko teksta
na tom dugmetu (obratite panju na oznaku za podrazumevano dugme
jer se ona esto mea sa fokusom). Ako se tekst kontrola nalazi u
fokusu onda se u njoj nalazi kursor koji trepe (tada je oigledno da
kontrola prima ulaz sa tastature). Kada se neka stavka liste nalazi u
fokusu tada je ona oiviena takastim pravougaonikom.
Programski fokus dajemo nekoj kontroli pozivom metode Focus(). Na
primer:

bool Focus();

Zadatak: Dodajte formi dve tekst kontrole upotrebom Dizajnera i podesite da


druga kontrola ima inicijalno fokus.

42

Forma

4.

DOGAAJI

Dogaaji (events) obezbeuju aplikacijama da prepoznaju i da reaguju


na akcije bilo korisnika bilo drugih aplikacija. Pripadaju najvanijim
osobinama vieprocesnih operativnih sistema kao to je Windows. U
toku rada neke aplikacije kontrole i forme ( preciznije - prozori )
neprekidno alju poruke operativnom sistemu o svim promenama i
akcijama korisnika. Zamislite vau radnu povrinu na raunaru na kojoj
je obino pokrenuto nekoliko aplikacija. Dodajte svakoj aplikaciji
prozore koji joj pripadaju, na kraju dodajte veliki broj servisa koji rade
u pozadini i koje ne vidite. Jasno vam je da je broj poruka koji se
obradi u jednoj sekundi jako veliki i da ne sme da optereti operativni
sistem. Vieprocesni rad baziran je na dogaajima.
Iako razliitih poruka ima jako puno postoje i poruke koje programeri
sami mogu dodavati za svoje potrebe. Poruke su svrstane prema
svome znaenju ili tipu kontrole kojoj pripadaju. Od programera se
oekuje da zna za osnovne poruke i da ume, koristei Help, da pronae
sve informacije o nekoj poruci.

Spy++
Spy++ je poseban programski alat, deo Visual Studia, namenjen
praenju poruka nekog procesa ili prozora ( i jo poneto ). Spy++
moete da pokrenete iz menija Tools ili sa spiska programa
Programs->Microsoft Visual Studio .Net > Visual Studio .Net Tools>Spy++

43

TVP C#

Sa menija odaberite Spy->Log Messages...

44

Forma

a zatim koristei alatku FinderTool odaberite prozor koji elite da


pratite. Karticom Messages podeavate, filtrirate, vrste poruka koje
elite da pratite. Nadalje sve poruke koje se obrauju u tom prozoru ( a
koje ste filtrirali ) moete da pratite u prozoru, kao na slici

Jo jednom, dogaaj je akcija kojom se poruka obrauje, dok je poruka


informacija koja se obrauje. Dakle, dogaaj je opisan sa dva podatka:
vrednost koju poruka nosi sa sobom i metod kojim se ta poruka
obrauje. Oba podatka su argumenti jednog dogaaja. Prvi mora biti
klasa izvedena iz klase EventArgs, a drugi mora biti delegat.
Pre nego to nastavimo sa delegatima navedimo jo par pojmova.
Objekat koji izaziva (triggers) neki dogaaj naziva se event sender
poiljalac dogaaja. Objekat koji hvata dogaaj naziva se event
receiver ili primalac dogaaja.

Delegati
Delegat je pojam uveden sa C# (itaj .NET). Delegati se koriste za
prenos metoda kao argumenata drugim metodama. Mada se delegati
mogu smatrati novom vrstom objekata sutinski delegati su pokazivai

45

TVP C#

na funkcije, koje ste sretali u programskom jeziku C. Sa bitnom


osobinom da su tipski bezbedni ( type-safe function pointer or a
callback).
Kod svih objekata u programskom jeziku C# ( pa ako hoete i u C++ )
pri korienju neke klase/delegata prvo morate da deklariete
odgovarajui objekat koji je tipa te klase/delegata, a zatim da napravite
primerak tog objekta.
Deklaracijom delegata opisuje se vrsta metode koju delegat
predstavlja. Sintaksa jedne deklaracije delegata moe da bude:
delegate void myDelegate(int a, int b);

Prethodni primer opisuje metod koji vraa void a kao parametre ima
dve celobrojne vrednosti tipa int. Ako se prisetite programskog jezika C
jasno ete uoiti analogiju kada se koriste pokazivai na funkcije.
delegate int myDelegate(int a, int b);
je deklaracija delegata koji vraa celobrojnu vrednost, a za ulazne
argumente ima dve celobrojne vrednosti. Pretpostavimo da negde u
vaoj klasi imate definisane dve funkcije koje odgovaraju delegatu, tj.
da vraaju int i da imaju dva argumenta tipa int. esto se kae da
imaju isti potpis. Na primer:
int add( int a, int b ){return a+b;}
int sub( int a, int b ){return a-b;}
Kada pravimo analogiju sa objektima recimo da ove dve funkcije
odgovaraju klasama za tipine objekte. One definiu ponaanje
delegata koje tek treba da kreiramo. Kreiranje delegata vri se na isti
nain kao i kod svih drugih objekata, pomou operatora new.
myDelegate x = new myDelegate( add );
myDelegate y = new myDelegate( sub );
Nadalje, imamo dva objekta x,y koji su po svojoj prirodi funkcije, a
koje moemo koristiti na isti nain kao i te funkcije kojima su oni
opisani, dakle:
int r = x( 4, 3 ); // r = 7;
r = y( 4, 2 );
// r = 2;

Veba: Napraviti program za sortiranje niza (koji e koristiti algoritam


QuickSort ili BubbleSort), sa proizvoljnom funkcijom za poreenje dva
elementa niza.

46

Forma

Poto sada poznajete osnovne stvari o delegatima moemo da


nastavimo zapoetu priu o dogaajima.

Dogaaji i IDE
IDE daje programeru prilino jasnu sliku o dogaajima koje moe da
pridrui nekoj kontroli ili formi. Na prozoru Properties postoji dugme
. Kada kliknete na to dugme dobijate spisak dogaaja koji
Events
su pridrueni kontroli ili formi koja je selektovana. Na slici ispod dat je
prikaz Properties prozora sa listom dogaaja koji stoje na raspolaganju
korisniku za formu.

Dogaaje koji su vezani za neki objekat moemo videti i ako otvorimo


Object Browser, kao na slici ispod:

47

TVP C#

Vratimo se na prozor Properties i otvorimo listu sa dogaajima. Lista je


podeljena u dve kolone. Ime svakog dogaaja prikazano je na levoj
strani. Kratak opis nalazi se na samom dnu i on vam moe pomoi oko
lakeg snalaenja. (Taj opis se moe iskljuiti ako smeta koristei
kontekstni meni sa tool bara.) Sa desne strane je kombo polje gde
moete uneti novo ime i time kreirati novu metodu koja e biti vezana
za taj dogaaj, ili izabrati neku od ve postojeih sa liste.

48

Forma

Pretpostavimo da ste uneli novo ime myHandler, a zatim pritisnuli


taster Enter, vraate se u kd na mestu ge je kreirana nova funkcija
private void myHandler(object sender, System.EventArgs e)
{
}
koja je zaduena za dogaaj Activated. Osim ove promene u kodu nai
ete u funkciji
private void InitializeComponent()
liniju koda kojom se nova funkcija pridruuje dogaaju Activated
this.Activated += new System.EventHandler(this.myHandler);
Zapazite da je metod myHandler proizvoljnog imena i da je zaduen za
posebne korisnike akcije (myHandler nije jedina akcija koja se obavlja
kada se registruje dogaaj) . Funkcija myHandler ima tano definisane
ulazne argumente (dve promenljive tipa object odnosno EventArgs) i
povratnu vrednost tipa void.
Moda ste se upitali gde su delegati? Delegati koji se tiu standardnih
dogaaja, tj. dogaaja koje alje operativni sistem, ve su definisani u
okviru klasa koje opisuju Windows kontrole.
EventHandler je delegat definisan u .NET-u u prostoru imena System
sa deklaracijom
public delegate void EventHandler(object sender, EventArgs e);
i predstavlja potpis svih funkcija za obradu dogaaja.
Operatorom new napravljen je pokaziva na funkciju koja je identina
funkciji myHandler i taj pokaziva je dodeljen posebnom objektu
Activated koji pripada klasi Form.
Zato je Activated poseban objekat? Ako pogledamo u spisak svih
lanova klase Form nai emo i definiciju
public event EventHandler Activated;
Dakle, vidimo da postoji kljuna re event i ona definie da li neki
delegat odgovara dogaaju, tj. nekoj promeni ili akciji. Delegat moe
imati jedan ili vie pridruenih metoda.
Rezime: Da biste napisali svoje metode koje e reagovati na dogaaje
morate proi kroz sledee korake:

49

TVP C#

1. Kreiranje delegata. Ako definiete sopstveni dogaaj, morate


osigurati da postoji delegat koji e se koristiti sa kljunom rei
event. Ako je dogaaj predefinisan u .NET Framework-u dovoljno
je da znate samo naziv delegata;
2. Kreiranje klase koja sadri:
a. dogaaj kreiran od nekog delegata,
b. metode koje pozivaju (izazivaju) neki dogaaj;
3. Definiite jednu ili vie klasa koje povezuju metode sa dogaajem.
Svaka od ovih klasa sadri:
pridruivanje jedne ili vie metoda, koristei += ili -=
operatore, dogaajima u baznoj klasi,
definiciju metoda koje e biti pridruene dogaaju;
4. Korienje dogaaja:
kreirajte objekat klase koji sadri deklaraciju dogaaja. ,
kreirajte objekat klase koji sadri definiciju dogaaja.

Komanda dvostrukog klika ( ili pritisak na taster enter ) na neku stavku


na nekoj aplikaciji izaziva podrazumevanu akciju. Ukoliko esto pravite
tipine komande moete se posluiti skraenim postupkom za kreranje
podrazumevanog dogaaja neke kontrole. Kada se ta komanda izvede
u IDE okruenju, nad nekom kontrolom u toku dizajna, kompajler
kreira podrazumevani dogaaj. Vrsta podrazumevanog dogaaja zavisi
od kontrole do kontrole.
Ako na formu postavite neko dugme sa podrazumevanim parametrima i
ako pritisnete taster Enter dok je kontrola selektovana, IDE e formirati
metod za rukovanje dogaajem pritisak na levi taster mia (Click). Evo
ta se dogodilo u kodu:
1. Dodata je privatna metoda sa podrazumevanim imenom, koja e
odraditi posebne akcije kada se izvede pritisak na mia. Poto je
ime dugmeta ostalo podrazumevano - button1 - na isti nain se
formira i ime ove metode poto se jo doda naziv dogaaja.
Dakle, dodata je funkcija
private void button1_Click(object sender,
System.EventArgs e)
{
}
2. Zatim je dogaaju Click, koji je definisan u klasi Form, dodata
nova funkcija za obradu koju smo pomenuli u taki 1., dakle
this.button1.Click+=new
System.EventHandler(this.button1_Click);

50

Forma

Primer: Napiite konzolnu aplikacju koja e periodino ( na svakih 100


ms ) da ispie vrednost celobrojnog brojaa svaki put u novoj liniji i
uveen za 1.
using System;
using System.Timers; //dodati obavezno
namespace timer
{
class Class1
{
int brojac = 0;
Timer myTimer;
void inittimer()
{
myTimer = new Timer( 100 ); // definisan je period od 100ms
/* metodama koje reaguju na dogadjaj kada istekne 100ms dodata
* je fja myAction
* potpis ovog metoda odgovara ElapsedEventHandler
*/
myTimer.Elapsed += new ElapsedEventHandler( myAction );
}
[STAThread]
static void Main(string[] args)
{
// instanciranje objekta x tipa Class1
Class1 x = new Class1();
// inicijalizacija tajmera
x.inittimer();
// start tajmera
x.myTimer.Start();
// zatvaranje konzolnog prozora pritiskom na ENTER
Console.ReadLine();
}
void myAction( object source, System.Timers.ElapsedEventArgs e )
{
brojac ++;
Console.WriteLine( brojac.ToString() );
if( brojac >= 100 )
myTimer.Stop();
}
}
}

Dogaaji vezani za forme i kontrole


51

TVP C#

Paint
Iscrtavanje kontrola u grafikim okruenjima ini kontrole vidljivim i
predstavlja veoma bitnu i zahtevnu operaciju. Kontrole se iscrtavaju
kada se vri promena njihovog poloaja ili kada tek postaju vidljive.
Kad god treba iscrtati kontrolu izvrava se dogaaj Paint. Sintaksa
ovog dogaaja je:

void PaintEventHandler(object sender, PaintEventArgs e);

Znai, da bi se iscrtavanje izvelo, PaintEventArgs parametar se


prosleuje delegatu PaintEventHandler. Ovaj parametar nosi
informaciju o oblasti koju treba iscrtati i grafikom objektu za
iscrtavanje.

Resize
Veliina kontrole je parametar koji se menja u toku izvravanja
aplikacije bilo akcijama minimizovanja, ili maksimizovanja prozora, bilo
namernim podeavanjima koje je obezbeeno kodom te aplikacije. Pri
tome nije samo bitna nova pozicija i veliina kontrole ve i prethodna.
Razlog je to u ponaanju kontrole treba obezbediti da se ona moe
vratiti na prethodnu veliinu.
Kada se veliina kontrole promeni nastaje dogaaj Resize() sa tipom
EventArgs.

Dogaaji tastature
Posebna klasa dogaaja koje windows kontrole obrauju su dogaaji sa
tastature. Tastatura predstavlja jedan od dva osnovna ureaja za unos
podataka u kontrole. Drugi je mi.
Kad god se pritisne neki taster aktivira se dogaaj KeyDown, a tip
poruke je KeyEventArgs. Analogno postoji i poruka kada se taster
otpusti - KeyUp i ona je takoe tipa KeyEventArgs. Ukoliko
korisnika interesuje da detektuje koji karakter je pritisnut prethodne
dve poruke nisu dobar izbor. KeyPress poruka se emituje ako korisnik
pritisne taster koji je tipa karaktera. Dakle, ovo mora biti neki
prepoznatljiv simbol. Mala slova, brojevi, znaci interpunkcije itd.
Ukoliko se na primer pritisne Shift+5 tj. taster % detektuje se kao
jedan karakter tj. KeyChar=37 '%'.

52

Forma

Dogaaji mia
U nameri da ne ponavljamo ono to svi znaju neemo da objanjavamo
ta je mi i kako radi. Pomenuemo samo osnovne dogaaje vezane za
ovaj ureaj koji slui za unos podataka.
Upotreba mia izaziva: promenu pozicije kursora, pritisak tastera (levo,
desno, srednje), otputanje istih tastera i na kraju skrolovanje ako mi
ima toki. Takoe se posebno detektuje i dvosturki klik. Pritisak na levi
taster je Click, a na desni Right-Click.
MouseDown je poruka koja se dogaa kada se pritisne levi taster
mia. MouseEventArgs je tip ove poruke.
Analogno je i za otputanje tastera tj. MouseUp, odnosno
MouseEventArgs koji se prosleuje MouseEventHandler na obradu.
Pomeraj
mia
se
MouseEventArgs.

detektuje

53

porukom

MouseMove

tipa

Forma

5.

FORMA

Izgled forme
Forma je osnovni grafiki objekat koji se koristi u aplikacijama koje
rade u grafikom okruenju kao to su Windows-i. Sama forma ne znai
nita. Njena osnovna uloga je da dri kontrole i obezbeuje
interakciju korisnika sa raunarom.

Polazna ( ili osnovna ) forma dobija se na startu. Kreiranje neke druge


obavlja se kasnije eksplicitno kroz dizajn te aplikacije, videemo
kasnije.

1. Pokrenite Microsoft Visual Studio .NET


2. Na stranici Start Page izaberite New Project (ili, na glavnom
meniju, File -> New -> Project...)
3. Na New Project dijalogu u Project Types listi birajte Visual C#
Projects
4. U Templates listi birajte Windows Application (.Net)

55

TVP C#

5. U Name tekst polju zamenite <Enter name> sa WinForms2


6. U kombo polju Location prihvatite predlog ili otkucajte sami
OK
7. Pritisnite F5 da bi testirali program
8. Zatvorite ga, i vraate se u VS.

Na prikazu klasa primeujete da je kreirana klasa Form1 izvedena iz


klase Form koja pripada prostoru imena System.Windows.Forms
public class Form1 : System.Windows.Forms.Form
Na ovaj nain klasa Form1 nasleuje (poseduje) sve osobine roditeljske
klase. Ali, osim to sadri sve osobine Form klase, moete joj dodeliti
posebne metode, polja, koje su samo vama od interesa. Takoe, ovoj
klasi moete dodavati i druge Widnows kontrole i time uiniti formu da
izgleda i funkcionie onako kako elite.

Naslovna linija - Title bar


Forma se sastoji iz razliitih grafikih celina koje zajedno ine da se cela
forma ponaa tipino kao jedan prozorski objekat i kao objekat koji
uva ostale objekte tj. kontrole ( kontejner kontrola ). Gornji deo forme
obino je oznaen posebnom bojom. Naziva se naslovna linija title
bar i uva itljivi naziv forme.

Ovaj tekst pripada svojstvu Text forme. Dakle,


popunjavanjem ovog svojstva u prozoru Properties.

dodajete

ga

Ikona - Icon
Na levom delu naslovne linije forma prikazuje malu sliku koju nazivamo
ikonom
ili
sistemskom
ikonom.
Visual
Studio
obezbeuje
podrazumevanu ikonu za sve forme. Ako pak elite da koristite drugu
ikonu to moete izvesti biranjem Icon polja u prozoru Properties kada
. Tada se otvara
je forma selektovana, a zatim kliknite na dugme
Open dijalog pomou koga moete nai novu ikonu koju e aplikacija
nadalje koristiti. Inae, ako ikonu elite da promenite programski
morate prvo ikonu programski kreirati. Ikona je u prostoru imena
System.Drawing. Primer:

56

Forma

private void Form1_Load(object sender, System.EventArgs e)


{
System.Drawing.Icon IC = new
System.Drawing.Icon("C:\\Programs\\alarm1.ico");
}

Ako dodajete novu ikonu vaoj aplikaciji uradite sledee:

1. Na glavnom meniju odaberite Project -> Add New Item...

2. Kliknite na Icon a zatim kliknite na Open

3. Otvara se editor za crtanje ikona, kao na slici

57

TVP C#

4. Nacrtajte ikonu koristei boje sa palete Colors i alatke sa menija


Image

5. Nastavljate sa dizajnom kontrole i izaberite na glavnom meniju


Image -> New Image Type... Na dijalogu New Icon Image Type
selektujte prvi izbor 16x16, 16 colors

58

Forma

6. Klik OK.
7. Da biste napravili ikonu transparentnom ostavite istu boju koja je
bila na startu kao pozadinsku.

8. Ctrl + F5 i testirajte program

Sistemska dugmad
U krajnjem desnom uglu naslovne linije nalaze se sistemski dugmii:
minimize
, maximize
, restore ili dugme za zatvaranje prozora
.
Postojanje ovih dugmia je takoe opciono, tj. nema smisla da se sve
forme minimizuju, ovo naroito vai za modalne dijaloge, o emu emo
govoriti kasnije. Podeavanje ovih sistemskih dugmia izvodi se
svojstvima MinimizeBox odnosno MaximizeBox.

59

TVP C#

Kako biste to uradili programski moete videti na primeru


private void Form1_Load(object sender, System.EventArgs e)
{
System.Drawing.Icon IC = new
System.Drawing.Icon("C:\\Programs\\alarm1.ico");
Icon = IC;
MinimizeBox = true;
MaximizeBox = false;
}

Ako iskljuite dugmie minimize, odnosno maximize to najverovatnije


znai da ne elite da se dimenzije ovog dijaloga menjaju. Meutim to
naalost ne znai i to. I dalje to moete izvesti na isti nain kao i ranije.
Ovo svojstvo pripada delu fome koji se naziva Borders. Koristei
prozor Properties i svojstvo FormBorderStyle moete se igrati ivicama
forme. Ako izaberete FixedDialog dobiete formu bez mogunosti da
menja svoje dimenzije

Na primer
private void Form1_Load(object sender, System.EventArgs e)
{
System.Drawing.Icon IC = new
System.Drawing.Icon("C:\\Programs\\alarm1.ico");
Icon = IC;

60

Forma

MinimizeBox = true;
MaximizeBox = false;
FormBorderStyle = FormBorderStyle.FixedDialog;
}

Ako elite od forme da napravite neku paletu alatki, tj. nekakav tool,
preporuuje se (potujui nepisane windows grafike standarde) da
forma ima samo malo Close dugme. Tool moe biti sa ivicama koje
dozvoljavaju promenu veliine, ili ne tj.
FormBorderStyle = FormBorderStyle.FixedToolWindow;

odnosno

FormBorderStyle = FormBorderStyle::SizableToolWindow;

Tool prozor ima naslovnu liniju male visine i nema ikonu, kao na slici

Klijentska oblast
Najvei deo forme pripada oblasti koju obino nazivamo klijentskom ili
samo telo forme. Na tu povrinu postavljamo kontrole ili je koristimo
kao grafiku oblast preko koje ispisujemo tekst ili iscrtavamo neto.
Ova oblast mora imati inicijalno postavljeno svojstvo pozadinske boje
BackColor. Boju biramo iz palete ukoliko koristimo Properties prozor ili
iz Color strukture programski:

61

TVP C#

BackColor = Color.AliceBlue;

BackgroundImage
Ako ipak vie volite da u pozadinu postavite neku sliku onda koristite
svojstvo BackgroundImage na primer

Bitmap Bg = new Bitmap("C:\\Programs\\test.bmp");


this.BackgroundImage = Bg;

WindowState
Kada je forma u veliini istoj kao kad je i postavljena u toku dizajna,
kaemo da je stanje forme normal. Moe se posebno podesiti da bude
minimizovana ili maksimizovana kada se aplikacija pokrene. Ovo se
podeava svojstvom WindowState. Podrazumevana vrednost ovog
svojstva je Normal, tj. forma e se pojaviti na nain na koji je
podeena u dizajnu. Ukoliko pak programski elite da promenite izgled
forme tj. da je minimizujete ili maksimizujete u nekom delu koda onda
se to izvodi svojstvima Minimized ili Maximized.
Fm.WindowState = FormWindowState.Maximized;

Ovo svojstvo se koristi i kod itanja stanja forme. Drugim reima, kada
elite da proverite stanje vae forme programski potrebno je da
vrednost ovog svojstva poredite sa odgovarajuim vrednostima Normal,
Maximized ili Minimized.

ShowInTaskbar
Kada kreirate jednu aplikaciju koja se sastoji od vie formi ( to je u
praksi najei sluaj ) morate da podesite da se sve forme ne vide u
liniji na dnu ekrana task bar, koja pokazuje koje su sve aplikacije
otvorene (taskbar presence). Uobiajeno je da samo jedna ( poetna ili
glavna ) forma bude prikazana, dok se ostale moraju sakriti. Ovo se
regulie pomou svojstva ShowInTaskbar.

Kreiranje objekta forme


62

Forma

Kreiranje forme obavljate na isti nain kao i svih ostalih objekata. Klasa
Form je u okviru prostora imena Forms, u okviru prostora imena
System. Prikaz forme obezbeujete metodom Show. Na primer
Form3 f = new Form3();
f.Show();

Zatvaranje forme
Kao to kreirate jednu formu da biste preko nje izveli neke UI akcije,
tako je morate i zatvoriti poto zavrite sa tim. Zatvaranje forme
obavljate pomou metode Close(). Sintaksa je
void Close();
Ako ovom metodom pokuate da zatvorite glavnu formu vae aplikacije
zatvarate i vau aplikaciju

Pokretanje forme
Kada su dve ili vie formi pokrenute na vaem raunaru samo jedna
moe primati ulaz od korisnika ( ovo smo ve spominjali ). Takva forma
ima naslovnu liniju drugaije obojenu od ostalih i predstavlja aktivni
prozor. Ostali prozori su neaktivni.
Dogaaj Activated() detektuje kada neki prozor postaje aktivan.
Pokretanje prozora izvodi se ili korisniki, putem mia na primer, ili
programski metodom Activate().
Nasuprot ovog dogaaja postoji i dogaaj koji registruje trenutak kada
neka forma gubi korisniki ulaz. Ovo je dogaaj Deactivated().

Primer: Napravite sopstvenu klasu koja e


postavljate kruna dugmad u vaoj aplikaciji.

vam

omoguiti

da

1. Treba da znate da je klasa koja je zaduena za kontrolu dugme u


C# Button i pripada prostoru imena System.Windows.Forms.
Ukoliko ovo niste ranije znali morate prvo nai informaciju o kontroli
dugme iz Helpa koji vam stoji na raspolaganju dok radite sa IDE.
Drugi nain je da koristei paletu sa kontrolama postavite dugme na
formu, a zatim u kodu pronaete o kojoj klasi je re.

63

TVP C#

2. Dodajte novu klasu koristei IDE okruenje. Na ovom mestu


obratite panju na karticu koja se tie bazne klase. Pogledajte sliku

3. Poto dugme mora da bude kruno mora se promeniti funkcija koja


je zaduena za njegovo iscrtavanje i to tako da je van kruga povrina
transparentna a u krugu definisane boje.
Ovo znai da se virtuelni metod, koji je zaduen za iscrtavanje u klasi
Button, mora promeniti tj. izvriti nadjaavanje (redefinisanje) ovog
metoda. Ovo se izvodi iz alatke Class View tako to otvorite Bases and
Interfaces u roditeljskoj klasi Button, a zatim u sledeoj roditeljskoj
klasi ButtonBase, gde nalazite metod OnPaint(...), kao na slici

64

Forma

Zatim, pritiskom na desni taster mia na metodi OnPaint birate stavku


Add, a potom jedinu stavku Override, kao to je prikazano na slici:

Na ovaj nain je dobijena funkcija zaduena za iscrtavanje dugmeta

65

TVP C#

protected override void OnPaint (System.Windows.Forms.PaintEventArgs


pevent)
{
}

Oblast koja se iscrtava definisana je posebnim grafikim objektom.


Njega samo pominjemo, bez dublje analize detalja. Detaljnije grafiku
obraujemo u posebnom poglavlju. Ostavljamo itaocu da proba sam
da dodaje nove osobine ovoj klasi.
Ukoliko samo ubacite promenu ovog parametra na mestu gde se
iscrtava dugme, na sledei nain
protected override void OnPaint(System.Windows.Forms.PaintEventArgs
pevent)
{
System.Drawing.Drawing2D.GraphicsPath el= new
System.Drawing.Drawing2D.GraphicsPath();
el.AddEllipse( 0,0,this.Width,this.Height );
this.Region = new System.Drawing.Region( el );
}

dobijate elipsasto dugme sa svim osobinama kao i kod pravougaonog.


Jedino to ovo dugme neete nai u paleti kontrola ve ga morate
runo postavljati u kodu.
4. Postavite ovo dugme na formu na isti nain kao i standardno
pravougaono dugme. Prvo deklariete sam objekat.
private test3.RoundButton rb;
Zatim dodate kd za kreiranje kontrole i inicijalizaciju parametara koji
se tiu pozicije, veliine kontrole. U primer je ukljuen i dogaaj klikmia.
this.rb = new test3.RoundButton();
this.rb.Location = new System.Drawing.Point(10, 10);
this.rb.Name = "rb";
this.rb.Size = new System.Drawing.Size(262, 94);
this.rb.TabIndex = 1;
this.rb.Click += new System.EventHandler(this.rb_Click);

Ne zaboravite da dodate kontrolu kontejneru kontrola koji e pripadati


formi, dakle
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.button1,
this.rb});

66

Kontejneri kontrola

6.

WINDOWS KONTROLE

Dugme
Dugme je Windows kontrola koja se koristi za iniciranje jedne akcije.
Akcija se izvodi kada se miem klikne na dugme. esto se klasino
dugme naziva i komandno dugme. Naravno, postoje i druge kontrole
koje mogu inicirati akciju tako to se klikne na njih ba kao i kod
dugmeta. Vizuelno, dugme je kontrola od koje korisnik programa
oekuje neku akciju kada izvri pritisak na njega.
Sa stanovita programera jedno dugme zahteva kontejner kontrolu.
Kontejner moe biti forma, toolbar ili neto drugo.
Najee dugme u Windows aplikacijama je pravougaona kontrola koja
prikazuje re ili kratku reenicu. Tekst na dugmetu obino opisuje
akciju koja sledi pritiskom na to dugme. U .Net aplikacijama ova
kontrola se realizuje korienjem Button kontrole. Postavlja se na
klasian nain korienjem liste toolbox ili programski. Kada postavite
neko dugme na formu, nadalje moete izvesti njeno podeavanje
korienjem svojstava ove kontrole preko Properties prozora.

Text
Najbitnije svojstvo dugmeta za korisnika je poruka na njemu. Ova
poruka zapisana je u svojstvu koje se naziva Text. Tekst se uvek
prikazuje na vrhu kontrole i moe biti dodatno formatiran. Uobiajeno
je da opisuje akciju koju dugme pokree/izvrava.
Najei tekstovi koje dugmad prikazuju su OK i Cancel. Poruka OK se
obino prikazuje na dijalozima koji informiu korisnika o nekoj greci,
nekom stanju, ili je to samo informacija koja zahteva potvrdu od
korisnika. Ukoliko se korisniku daje mogunost da odustane od
nastavka neke akcije obino se nudi Cancel dugme.
Naravno, tekst na dugmetu moe se programski menjati u toku
izvravanja aplikacije, u zavisnosti od stanja u kome se aplikacija
nalazi, na primer:
Button1.Text = "Let Me Go!";

67

TVP C#

Postoji jo jedno svojstvo veoma znaajno upravo za dugme. To je


podrazumevano dugme. Samo jedno dugme na kontejneru kontrola
moe biti podrazumevano. Ono ima to svojstvo da pritiskom na taster
Enter, kada je aktivna forma tog dugmeta, biva pritisnuto, tj. startuje
se akcija koju ono inicira. Tanije, ako neko drugo dugme ima fokus
(vidljiv je takasti pravougaonik na njemu) izvrie se akcija tog
dugmeta. Inae, izvrava se akcija dugmeta koje je podrazumevano
(vidljiva je tamna ivica).

TextAlign
Mesto teksta na dugmetu odreuje svojstvo TextAlign, kao na slici
ispod.

DialogResult
Kada korisnik klikne na neko dugme da bi zatvorio dijalog vano je da u
kodu postoji informacija o tome na koje dugme je kliknuto. .Net
okruenje prua mehanizam kojim se moe izvesti ova identifikacija.
Ovo se postie korienjem svojstva DialogResult. Vrednost moe biti
neka iz odreenog skupa koji je definisan. Mogue vrednosti su None,
OK, Cancel, Abort, Retry, Ignore, Yes, i No. Podeavanjem neke od ovih
vrednosti preko Properties prozora definiete vrednost koju dijalog
vraa, ako se pritiskom na vae dugme izvede zatvaranje istog
dijaloga.

Image, ImageAlign, ImageList, ImageIndex


U grupu dugmadi pripadaju i bitmapirana dugmad. Ove kontrole
imaju osobine dugmadi ali prikazuju i sliku tj. bitmapu, a mogu
prikazati i naslov na vrhu. Da biste napravili ovakvo dugme morate
imati na raspolaganju neku bitmapu, ili je morate sami kreirati. Zatim,
u prozoru Properties, koristei polje Image, birate eljenu bitmapu ili
ikonu. Kada dodate sliku treba da postavite sliku na eljeni nain
koristei ImageAlign svojstvo. Drugi nain je da se koristi ImageList

68

Kontejneri kontrola

svojstvo koje se kreira na osnovu nekoliko slika, a zatim se koristei


ImageIndex specificira koja slika e biti prikazana.

FlatStyle
Standardno, dugme se prikazuje kao da je izdignuto. Ako elite da
promenite ovakav izgled menjaete svojstvo FlatStyle:

Flat: Dugme je prikazano kao ravno. Kada se miem pree preko


njega ono postaje istaknuto ( highlighted );

Popup: Dugme se prikazuje kao ravno. Ipak, kada se miem


stane na njega ivice dugmeta se pojavljuju tako da dugme tada
izgleda izdignuto;

Standard: Standardni izgled na koji ste ve navikli i standardno


ponaanje;

System: Zavisi od operativnog sistema koji se koristi za detalje


obratiti se MSDN-u.

Radio-dugme
Radio-dugme, neko ga naziva jo i opciono dugme, je kontrola krunog
oblika koja se pojavljuje u grupama sa drugima kontrolama istog tipa, tj.
vie radio-dugmadi pojavljuju se zajedno. Svako dugme sastoji se od
malog praznog kruga i labele koja opisuje dugme, tj. daje korisniku neku
informaciju o akciji. Kada korisnik pritisne jedno od dugmia koji su u
grupi ono dobija oblik  a ostali ostaju prazni. Ovo znai da se grupom
radio-dugmia realizuje korisnika akcija izbora samo jedne stavke iz
grupe.

69

TVP C#

Kontrola je bazirana na klasi RadioButton. Kreiranje kontrole izvodite


programski, koristei konstruktor klase i postupke koje smo ve
pominjali, ili u toku dizajna jedne forme ( ili nekog drugog kontejnera
kontrola ) izborom sa paleta Toolbox. Radio-dugme moe da postoji
samo u grupi, zato je potrebno ukljuiti svu radio-dugmad u neku
drugu kontrolu koja i vizuelno moe odvojiti grupu radio-dugmia od
drugih kontrola, odnosno drugih grupa radio-dugmadi. Najea
kontrola koja se koristi za to je GroupBox kontrola.

Checked
Ovo svojstvo definie da li je radio-dugme selektovano ili ne. Ukoliko
jeste, to znai da su sva ostala neselektovana. Osim za itanje stanja u
kome se dugme nalazi isto svojstvo moete upotrebiti i u suprotnom
pravcu. Ovim svojstvom moete programski podeavati izbor nekog
radio-dugmeta. Na primer:
private void Form1_Load(object sender, System.EventArgs e)
{
this.radioButton2.Checked = true;
}

CheckAlign
Podrazumevano podeavanje radio-dugmeta je tako izvedeno da se
krui nalazi sa leve strane od teksta koji je pridruen ovoj kontroli.
Kao i kod polja za potvrdu, i ovde postoji puno mogunosti za fino
podeavanje prikaza. Pozicija kruia u odnosu na tekst vri se pomou
svojstva CheckAlign. Mogue vrednosti su: TopLeft, TopCenter,
TopRight, MiddleRight, BottomRight, BottomCenter, odnosno
BottomLeft. Programski podeavanja moete izvesti kao na primeru:
private void Form1_Load(object sender, System.EventArgs e)
{
this.radioButton1.CheckAlign = ContentAlignment.MiddleRight;
}

Appearance

70

Kontejneri kontrola

Podrazumevano podeavanje izgleda radio-dugmeta je takvo da je ono


ispunjeno velikom takom ako korisnik selektuje to dugme. Opciono,
moete podesiti da ono radi kao toggle dugme. ta to znai? Samo
jedno dugme u grupi moe biti u donjem poloaju ( stanje selektovano
) dok su ostala u gornjem poloaju. Ako se neko drugo dugme pritisne
ono ide dole, a dugme koje je prethodno bilo u donjem poloaju ide
gore, tj. sva ostala su otputena.
Promena podrazumevanog prikazivanja ove kontrole izvodi se preko
svojstva Appearance. Programski to moeti izvesti kao na primeru:
private void Form1_Load(object sender, System.EventArgs e)
{
this.radioButton1.Appearance = Appearance.Button;
}

Polje za potvrdu

Polje za potvrdu je kontrola koja daje samo dve opcije: potvreno ili
prazno. Vizuelno ova kontrola prikazuje malo kvadratno polje na koje
korisnik moe da klikne (tanije, korisnik moe da klikne na celu
kontrolu ukljuujui tekst). Na startu polje je prazno . Ako korisnik
klikne na njega oznaka o potvrdi pojavljuje se u kvadratnom polju .
Da bi se korisniku omoguilo da zna ta polje za potvrdu predstavlja
kontroli je pridruena labela koja prikazuje tekst. Kada je kvadratno
polje prazno , vrednost je false. Kada je polje ispunjeno oznakom za
potvrdu , vrednost je true.

71

TVP C#

Ovaj objekat definisan je klasom

CheckBox.

1. Kreirajte novu Visual C# Windows Application.


2. Promenite inicijalni naziv forme.
3. Da dodate polje za potvrdu kliknite na CheckBox dugme unutar
liste toolbox, a zatim na formu.
4. Promenite svojstvo Name. Ovo svojstvo se menja preko Properties
prozora. Ukucajte cbExtraCheese i pritisnite Enter.
5. Kliknite na Location. Unesite 16, 16 i pritisnite Ente.r
6. Kliknite na Text. Unesite &Extra Cheese.
7. Pokrenite aplikaciju.

Checked
Podrazumevano ponaanje ove kontrole je da se pojavljuje netriklirana
(nepotvrena), tj. njena vrednost je inicijalno postavljena na False. Da
bi se promenila korisnik treba da klikne na kontrolu. Meutim, ako
elimo da je svojstvo inicijalno postavljeno na vrednost True, tj. da
kontrola pri prvom pojavljivanju bude potvrena, moemo ili promeniti
vrednost svojstva Checked na true, ili programski to uiniti na sledei
nain:
private void Form1_Load(object sender, System.EventArgs e)
{
this.checkBox1.Checked = true;
}

Da biste proverili da li je polje selektovano treba da proitate vrednost


svojstva Checked.

Alignment

72

Kontejneri kontrola

Podrazumevano, kvadrati se pojavljuje na levoj strani labele. .Net


okruenje vam prua puno razliitih izbora kojima moete podeavati
prikaz kontrola. To se na ovoj kontroli moe potvrditi.
Najea podeavanja tiu se pozicije kvadratia u odnosu na tekst cele
kontrole. Ta podeavanja se izvode pomou svojstva CheckAlign.
Mogue vrednosti su: TopLeft, TopCenter, TopRight, MiddleRight,
BottomRight, BottomCenter, i BottomLeft.
Programski podeavanja izvodite postavljanjem vrednosti CheckAlign,
ali preko enumeratora ContentAlignment, na primer:
private void Form1_Load(object sender, System.EventArgs e)
{
this.checkBox1.CheckAlign = ContentAlignment.MiddleRight;
}

CheckState
Neretko, kontrola Checkbox osim stanja True, odnosno False, treba da
pokae i neko meustanje. Ovo stanje obino se naziva "half-checked"
ili u nekom slobodnom prevodu polupotvreno. U tom stanju polje za
potvrdu izgleda kao da je onemogueno ( disabled ). Ovakvo specifino
ponaanje kontrolie se preko svojstva CheckState. Da biste podesili
meustanje postavite vrednost ovog svojstva na Indeterminate ili
programski:
this.checkBox1.CheckState = CheckState.Indeterminate;

ThreeState
Jedino svojstvo CheckState dozvoljava postavljanje polja za potvrdu u
meustanju. Ako elite da se koriste tri stanja dugmeta za potvrdu, na
primer oznaeno, poluoznaeno i neoznaeno, koristite svojstvo
ThreeState.
Postavljanjem svojstva CheckState ( Boolean tipa ) na vrednost True
korisnik treba da klikne dva do tri puta do eljene vrednosti. Dobijanje
stanja dugmeta za potvrdu u ovom sluaju izvodite preko svojstva
Indeterminate.
Primer postavljanja nekog polja za potvrdu tako da ima tri stanja:
private void Form1_Load(object sender, System.EventArgs e)
{
this.checkBox1.Checked = true;
this.checkBox1.ThreeState = true;

73

TVP C#

Appearance
Oekivani izgled ove kontrole je kvadrati koji moe da primi komandu
od korisnika aplikacije ili prikae neku tekuu vrednost. Meutim,
alternativa je da polje za potvrdu prikaete i kao standardno dugme. U
tom sluaju kada kliknete na njega ono ostaje u donjem poloaju, tj.
poloaj dugmeta dole ili gore odreuje u stvari stanje polja za potvrdu
True odnosno False. Ako korisnik klikne na dugme jo jednom ono se
podie u gornji poloaj.
Da biste promenili standardni prikaz treba promeniti svojstvo
Appearance. Sa vrednosti Normal prebaciti na vrednost Button.
Programski to moete uiniti ovako:
private void Form1_Load(object sender, System.EventArgs e)
{
this.checkBox1.Appearance = Appearance.Button;
}

TEKST kontrole

Labela
Labela je kontrola za prikaz teksta. Korisnik ne moe direktno da menja
tekst u ovoj kontroli. Labela moe biti koriena sama na formi, za
ispisivanje tekstualnih poruka u toku izvravanja programa, ili stajati uz
neku drugu kontrolu koju svojim tekstom dodatno opisuje.
Da biste kreirali jednu labelu kliknite na dugme Label na listu Toolbox a
zatim na formu.
Programski, kreiranje ove kontrole ide na nain koji smo ve upoznali.
Koristei operator new kreirate objekat koristei podrazumevani
konstruktor. Kada kreirate ovu kontrolu podesite njena svojstva, na
primer:
private void Form1_Load(object sender, System.EventArgs e)
{
Label lblFirstName = new Label();

74

Kontejneri kontrola

lblFirstName.Text = "&First Name";


lblFirstName.Location = new System.Drawing.Point(20, 80);
this.Controls.Add(lblFirstName);
}

TextBox
Kontrola tekst polje koristi se za prikaz tekstualnih poruka ili za
unoenje teksta. Tekst polje je kontrola pravougaonog oblika. Povrina
za prikaz, odnosno unos teksta, zauzima celu povrinu kontrole. Zbog
toga uz ovo tekst polje, uobiajeno, ide labela kojom se opisuje
namena tekstualnog polja.
Kreiranje ove kontrole izvodi se tako to kliknete na TextBox, a zatim
na formu.
Tekst polje kontrola bazirana je na klasi TextBox. Uz pomo ove klase
moe se programski kreirati i modifikovati novo tekstualno polje.

Kombo polje
Kombo polje je standardna grafika kontrola koju ste sigurno ve sreli.
Kontrola sadri listu stringova koje korisnik aplikacije moe videti pre
nego to izabere samo jednu sa liste. Tipino, kombo polje je kontrola
pravougaonog oblika sa tekstualnim poljem i jednim dugmetom sa
strelicom nadole. Ovim dugmetom otvara se lista stavki koje stoje na
raspolaganju. Kada otvori listu korisnik jednostavnim klikom na eljenu
stavku, ili koristei tastere strelice nadole i gore ( pritiskom na Enter ),
bira eljenu stavku iz liste.

75

TVP C#

Stavka koju je korisnik izabrao pojavljuje se u tekst polju kombo polja.


Postoje razliita podeavanja kojima se moe podesiti izgled i
ponaanje ove kontrole. Pretraga uz pomo poetnih slova takoe je
ukljuena u ovu kontrolu i veoma je znaajna ako je broj stavki u listi
veliki, na primer ako je kontrola vezana za neki bazu podataka.
Standardno, kreiranje kontrole izvodite preko Toolbox palete ili
programski. Dodavanje stavki u listu najee se obavlja samo
programski. Na primer:
private void Form1_Load(object sender, System.EventArgs e)
{
this.comboBox1.Items.Add("Small");
this.comboBox1.Items.Add("Medium");
this.comboBox1.Items.Add("Large");
this.comboBox1.Items.Add("Jumbo");
}

Naravno da stavke kombo polja koje se nee menjati moete dodati i


preko Properties prozora i polja Collection, kao na slici ispod.

Pritiskom na dugme
slici:

otvara se dijalog za unos stavki liste, kao na

76

Kontejneri kontrola

Stavke se u listu ove kontrole unose kao pojedinane linije teksta.


Pogledajmo kako se programski utvruje stavka koju je korisnik
odabrao. Ovo je nezaobilazni deo kada se koristi ova kontrola. Za
dobijanje vrednosti koju je korisnik izabrao koristi se svojstvo Text.
Isto svojstvo moe se koristiti i za prikaz izabrane vrednosti:
private void comboBox1_SelectedIndexChanged(object sender,
System.EventArgs e)
{
this.label1.Text = this.comboBox1.Text;
}

Kombo box koristi listu stavki i njihovih indeksa za izbor i prikaz. To


znai da moete koristiti tekst ili indeks neke stavke da biste saznali ta
je korisnik izabrao, ili da bi programski podesili vrednosti.

77

You might also like