You are on page 1of 670

Modl 1: Programlamaya giri

Hedefler

Program nedir?
Programc kimdir?
Programlama Dilleri
Programlama Dillerinin Tarihesi
Programn Derlenmesi

Bu modlde, bir programcnn bilmesi gerek temel programlama kavramlarna


giri yaplacaktr. Bir program oluturan eler, alma sreci tamamlanana
kadar getii aamalar ayr ayr ilenecektir. Bu kavramlar programcnn ve
programlama dillerinin tanmlanmasna yardmc olacaktr.

Bu modln sonunda:
Bir programn alma prensibini aklayabilecek,
Programc kavramn tanmlayabilecek,
Deiik programlama dillerinin geliimini aklayabilecek,
Derleme ilemini tanmlayabileceksiniz.
2 Modl 1: Programlamaya Giri

Konu 1: Program nedir?

Bilgisayarn, bir ii yapmas iin tasarlanan


komutlar zinciri

Program Trleri
Sistem Programlar
Srcler (Driver)
Uygulamalar

Gnmzde bilgisayarlarn kullanm alanlar byk lde artmtr. Dolaysyla


ilerimizi daha hzl ve dzenli bir ekilde yapmamz, bilgisayarlar ne kadar iyi
kullandmza baldr. Bunun iin ise, eitli amalara gre yazlan
programlar kullanrz.

Program, bilgisayarn belli bir ii yapmas iin tasarlanan komutlarn tmdr.


Kullanm amalar ve yerlerine gre birok deiik program tr vardr:

Sistem programlar
Her program, bir iletim sistemi zerinde alr. letim sistemi, dier
programlarn almas iin gerekli olan kaynaklar ve ortam salar.
Srcler (Driver)
letim sistemi ile donanm aygtlar arasnda iletiim salayan programlardr.
Klavye ile yazlan yazlarn alglanmas iin, klavyenin src program
kullanlr.
Uygulamalar
letim sistemi zerinde alan, kullanclarn ihtiya duyduu ilevleri
salayan programlardr.
Konu: 1 3

Bir internet sitesini gezmek istediimizde, Internet Explorer taraycs


kullanlabilir. Bu uygulama, iletim sistemine sitenin istenilen sayfadaki yaz ve
resimleri almasn ister. letim sistemi, a kartyla (Ethernet) src program
sayesinde internet sitesinin sunucusuna istei gnderir.

(Ref: MOC 2667 Introduction to Programming - Module 1 - sayfa 3)

Programlarn alma modeli

Veri Girii
lem
Sonu

Kullanc lem

Bilgisayar

Veri girii
Printer

Sonu

Programlarn kullanlmasndaki ama, girilen bilgilerin ilenip istenilen ekilde


sonularn retilmesidir.
Veri girii
Program, kullanclarn veri girmesi ile balar. Girilen veriler daha sonra
ilenmek zere hafzada saklanr.
lem
Veriler, programn yazlma ekline gre bir dizi ilemden geirilir.
Sonu
lenen veriler kullancya aktarlr.

Programlar, belli kurallar erevesinde yazlr. Bu yazm kurallar sayesinde


bilgisayar, programn ileyiini anlar ve gerekli sonular kartr. Yazlan
programlar, belirtilen yazm kurallar kontrol edilerek derlenir. Bu derleme ilemi
4 Modl 1: Programlamaya Giri

sonunda, yazlan kaynak kodlar bilgisayarn anlayaca tek dile evrilir. Makine
dili denilen bu dil, sadece 1 ve 0 saylarndan olumaktadr.

rnek: ATM makinesinden para ekmek


1. Kullanc ATM makinesine kartn yerletirir
2. ifresini girer.
3. ATM cihaznda alan uygulama kartta yazan bilgileri okur
4. ifre kontrol ilemi yaplr.
5. ifre doru girilmise kullanc ekmek istedii miktar girer.
6. Bankadaki hesap kontrol edilir.
7. Uygunsa kullancya deme yapar.

Konu 2: Programc Kimdir?

Belirli ilevlere sahip programlar gelitirir


Kullanlan teknolojiyi, platformu iyi
tanmas gerekir

Programc trleri
Mimar
Gelitirici
Test Mhendisi

Programc, belirli ilevlere sahip programlar gelitirebilen uzmanlardr. Bir


programcnn, zerinde alt platformu, kulland teknolojileri iyi tanmas
ve bilgisayarn anlayaca mantksal dilde dnebilmesi gerekmektedir.
Programclarn ou genellikle ayn ii gerekletirse de, stlendikleri grevlere
gre gruba ayrlabilir:

Mimar
Programlarn yazlmas iin gerekli teknolojileri belirleyen, gerekli durumlarda
programn daha kolay ynetilmesi iin kk paralara ayran programcdr.
Konu: 1 5

Gelitirici
Program yazan kiidir.

Test mhendisi
Programn gelitirilmesi aamasnda, hatann kaynaklarn bulan ve
gelitiricilere raporlayan programcdr.

(Ref: MOC 2667 Introduction to Programming - Module 1 - sayfa 9)

Konu 3: Programlama Dilleri

Programc ile bilgisayarn haberlemesini


salar
Programlar 1 ve 0 saylarndan oluan
makine diline evrildikten sonra altrlr
Programlama Dilinin zellikleri:
Szdizimi (Syntax)
Gramer
Semantik

2500den fazla programlama dili


mevcuttur.

Dnyada konuulan her dilin amac iletiim salamaktr. Farkl kltrlerden


insanlarn anlaabilmesi iin ortak konutuklar bir dil gerekir. Programla
dillerinin amac da bilgisayar ile programcnn haberlemesidir. Programc,
bilgisayara hangi komutlarn altrmas gerektiini bilgisayarn anlayaca
dilden konuarak syler.

Bilgisayarda, programlar makine diline evrildikten sonra alr. 1 ve 0


saylarndan oluan bu makine dili, en alt seviye dildir. Dolaysyla programlarn
bu dilde yazlmas olduka zordur. Programclar konuma diline daha yakn,
kolay anlalabilecek diller kullanmaktadr. Bu dillere yksek seviye programla
dilleri denir. Programlama dillerinin seviyeleri makine diline yakn olup
olmamas ile llr.
6 Modl 1: Programlamaya Giri

Bir programlama dili u unsurlardan oluur:

Sz dizimi (Syntax)
Bir dil, kendine ait kelimeler ile konuulur. Programlama dillerinin de benzer bir
davran vardr. Programlama dillerindeki bu kelimeler, programlama dilinin
anahtar kelimeleridir - komutlardr.
Gramer
Programlama dillerini kullanmak iin sadece kelimeleri bilmek yeterli deildir.
Eer anlaml bir ekilde bir araya getirilemiyorsa, bu kelimeler hibir anlam
ifade etmez.
Semantik (anlamsal)
Bir dili, kelimeleri doru bir gramer kullanm ile bir araya getirerek kullanabiliriz.
Ancak konuulan kelimelerin ne iin kullanld da nemlidir. Bir programlama
dilinin zelliklerinin nasl ve ne iin kullanld da, bu dilin semantiidir.

rnein bir finans program, Yeni Trk Liras cinsinden bir miktar dolara
evirecektir. Yaplacak ilem o andaki parite deerini merkez bankasndan
ektikten sonra, girilen miktar bu deerle arpp kullancya gstermektir.
Kullanlan programlama dili ARP, GSTER, ETLE komutlar ile bu ilemi
gerekletirecektir.

ARP ETLE GSTER miktar parite sonu

Bu ekilde yazlan program sz dizimi asndan dorudur. Girilen veriler ve


komutlar dnda, programlama dilinin anlamayaca bir kelime
kullanlmamtr. Ancak komutlar yanl srada kullanlmtr. ARP komutu
hangi saylar arpmas gerektiini bilemeyecektir.

parite ETLE sonu ARP miktar


GSTER parite

Komutlar ve deikenleri, programlama dilinin gramerine gre doru yerlerde


kullanmamz gerekir. Bu ekilde kullanlan komutlar doru bir ekilde alr.
Fakat GSTER komutunun ne iin kullanld yani semantii de nemlidir.
stenilen, miktar ile pariteyi arpmak, sonuca eitlemek ve sonucu gstermektir.

sonu ETLE miktar ARP parite


GSTER sonu

(Ref: http://www.cs.sfu.ca/~cameron/Teaching/383/syn-sem-prag-meta.html)

u ana kadar 2500den fazla programlama dili yazlmtr. (Ref:


http://www.oreilly.com/pub/a/oreilly/news/languageposter_0504.html)
Konu: 1 7

Bunlardan bazlar Pascal, Basic, C, C++, Java, Javascript, Cobol, Perl,


Python, Ada, Fortran, Visual Basic .NET, Microsoft Visual C# programlama
dilleridir.

Yksek seviye programlama dillerine Visual Basic .NET, Microsoft Visual C++
dillerini rnek verebiliriz. C ile iletim sistemi yazlabilindiinden daha alt seviye
bir dil olarak deerlendirilir.

Programlama Dillerinin Tarihesi

Makine dili 10110110, 11011110


Yordamlarn (Subroutine) ve
Ktphanelerin (Library) olumas
1957 FORTRAN
1959 COBOL
1968 Pascal
1972 C
Nesneye Ynelik Programlama Dilleri:
C++, JAVA
2000 .NET
Visual Basic .NET, Visual C#

Bilgisayarlar, icat edilmeleriyle birlikte belli bir ii yapmak iin bir dizi komutlara
ihtiya duymulardr. En bata ok basit ilemler yapan bu komutlar zamanla
nesneye ynelme (object orientation) gibi ileri seviyede zellikler kazanmtr.

lk programlama dilleri, bilgisayarlarn zerinde baz aralarn yerlerini


deitirerek veya yeni bileenler eklenerek yaplyordu. Programn ilemesi iin
bir devinime ihtiya vard. Eskiden programlar fiziksel olarak yazlyordu. Daha
sonra fiziksel programlama yerini elektrik sinyaline brakt. Artk, kurulan
elektronik devrelere dk ya da yksel voltajda akm gnderilerek bilgisayarn
davran belirlenmeye baland. Yksel voltaj 1, dk voltaj 0 saylarn ifade
ediyordu. Bylelikle bugn de kullanlan makine dilinin ortaya kmas iin ilk
admlar atlm oldu.

Ancak bu ekilde programlar yazmak, sistemi oluturan elektronik devrelerin


her program iin batan kurulmasn gerektiriyordu. Bylelikle programlar baz
8 Modl 1: Programlamaya Giri

kavramlar erevesinde yazlmaya baland. ncelikle bilgisayar donanm her


program iin batan kurulmamal, bunun yerine basit bir donanmn zerine
yazlan komutlar kullanlmaldr. Daha sonra, programlar tek bir komutlar zinciri
yerine, kk paralar halinde yazlmaldr. Bu paralarn programn iinde
defalarca kullanlabilmesi yordam (subroutine) kavramn ortaya karmtr. Bu
modelin kullanlmas ise mantksal karlatrmalar, dnglerin kullanlmasn
ve yazlan kodlar tekrar kullanld iin ktphane (library) mantn ortaya
karmtr.

1957 ylnda IBM, dk seviye (makine diline yakn) bir programlama dili olan
FORTRAN dilini ortaya kard. FORTRAN ile beraber basit mantksal
karlatrmalar, dngler, (true-false) lojik ve (integer, double) saysal
deikenler kullanlmaya baland.

1959 ylnda, bu programlama dilinin zelliklerini alp, giri k (Input Output


IO) gibi yeni ilevler salayan COBOL dili ortaya kt. Daha sonra 1968
ylnda, COBOL ve FORTRAN dillerinin en iyi zelliklerini alarak Pascal ortaya
kt. Ayrca Pascal dili, hafzadaki adresler zerinde ilem yapmaya olanak
veren iareti (pointer) kavramn beraberinde getirdi.

1972 ylnda C, Pascal dilindeki birok hatay gidererek ortaya kt. C dili ilk
defa Unix iletim sistemini yazmak iin kullanlmaya balanmtr. C, dk
seviye bir dil olmas, kuvvetli giri k ilemleri salamas gibi birok zellii ile
iletim sistemleri yazlmasnda tercih edilmitir.

Btn programlama dilleri birok zellie sahip olmasna ramen, modler


programlamann birok eksiini gidermek amacyla, yeni bir programlama
modeli olan nesneye ynelik programlama - OOP (object oriented
programming) ortaya karld. C dilinin ve OOP modelinin tm zellikleriyle
C++ dili oluturuldu.

C++ dilini, Sun Microsystems tarafndan kartlan Java takip etti. Java dilinin
kullanm alanlar, nesneye ynelik bir programlama dili olmas ve beraberinde
getirdii p toplama GC (garbage collection) gibi performans arttrc zellikleri
ile byk lde geniledi.

Microsoft, 2000 ylnda .NET platformunu sunarak, otuzdan fazla programlama


dilini ayn at altna toplad. VisualBasic.NET ve VisualC# .NET platformunu
kullanan gnmzdeki en gl yksek seviyeli programlama dilleri arasnda
yer almlardr. .NET platformu hakknda daha detayl bilgi iin Modl 2ye
bakn.

(Ref:
http://www.princeton.edu/~ferguson/adw/programming_languages.shtml)
Konu: 1 9

Konu 4: Programn Derlenmesi

Programlama dili derleyicisi:


Gramer ve sz dizimi kontrol
Kaynak kodlarn makine diline evrilmesi
Makine diline evrilen kodlarn altrlmas

Kaynak Kod: Makine Dili:


Derleme altrma
0110101010 Sonu
1101010101
1010101111

Programlar yazldktan sonra, almaya uygun hale getirilene kadar bir dizi
ilemden geer. Bu ilemi gerekletiren, programlama dilinin derleyicisidir.
(Compiler)

Programlar, bir programlama dilinin gramer ve sz dizimi yapsna uygun bir


ekilde yazlr.
Yazlan kodlar o dilin derleyicisi tarafndan kontrol edilir.
Kontrol ileminden sonra, bu kodlar bilgisayarn anlayaca makine diline
evrilir. Ancak bir yazm ve ya mantk hatas varsa, programcya gerekli hata
mesajn verilerek derleme ilemi iptal edilir.
Makine diline evrilen kodlar altrlr.
10 Modl 1: Programlamaya Giri

Modl Sonu Sorular & Altrmalar

zet

Program nedir?
Programc kimdir?
Programlama Dilleri
Programlama Dillerinin Tarihesi
Programn Derlenmesi

1. Var olan bir metin dosyasn (.txt) grntlemek iin Notepad programn
kullanabiliriz. letim sistemi, dosyay kullanclara gstermek iin monitr ile
iletiim kurar. Monitr iletim sisteminden gelen verilerle gerekli grntleme
ilemlerini yapar.

Bu senaryodaki program eitlerini belirtin.

2. Bir arkadamza e-posta yollamak istediimizde, e-posta adresi, konu,


mesaj bilgilerini gireriz. Daha sonra e-posta uygulamas mesajmz verilen
adrese yollar.

Programn alma modelinin aamalarn belirtin.

3. C dilini kullanarak yazdnz kodlarn bilgisayar tarafndan altrlabilir


hale gelmesi iin hangi aamalarn gereklemesi gerekir?
Modl 2: Microsoft .NET Platformu
Microsoft .NET, uygulama gelitiricilerin yazlm gelitirme srecinde altyap
ilemleri iin harcad eforu en aza indirgemek ve daha gvenli, gvenilir ve
salkl uygulamalar gelitirebilmelerini salamak iin gelitirilmi altyapdr.

Bu modl tamamladktan sonra


Microsof.NET platformu hakknda genel bilgi sahibi olacak,
.NET Framework ve bileenlerini aklayabilecek,
Microsoft .NET platformunun yazlm gelitiricilere sunduu avantajlar
tanmlayabileceksiniz.

Konu 1: Yazlm Gelitirme Dnyas


Microsoft 1975 ylnda Bill Gates ve Paul Allen tarafndan kurulduunda
vizyonu Her eve, her masaya bir PC idi. Donanm ve yazlm alanlarndaki
gelimelerin hz ve birbirlerini srekli tetiklemesinin sonucunda bilgisayar
kullanc says hzla artt. Artan kullanc says beraberinde yeni gereksinim ve
talepleri ortaya kard. Bu taleplerin doal sonucu olarak da farkl platformlar
ve farkl servis salayclar ortaya kt. letiim, finansal hizmetler, ticaret,
elence kullanclarn (zellikle internetin yaygnlamasyla birlikte) en youn
talep gsterdii hizmetler halini ald. Gnmze baktmzda Microsoftun
k noktasndaki hedefine byk oranda ulatn grebiliyoruz. Ancak
geldiimiz noktada hzla artan bilgisayar ve internet kullanc says,
beraberinde gvenlik, iletiim, entegrasyon v.b. alanlarda eitli engellerin
ortaya kmasna neden oldu.

Gelimelere kendi amzdan, yani yazlm gelitiriciler asndan baktmzda


iler ok daha zor ve zahmetli durumda. Kurumsal uygulamalarn
gelitirilmesinde performans, gvenlik, sreklilik gibi konularda belirli bir
seviyeyi yakalamak iin olduka fazla efor sarfetmemiz gerekiyor. rnein
elektronik cihazlarla soket iletiimi kuracak uygulamalar gelitirebilmek iin iki
alternatifimiz var. Birincisi 3. parti firmalar tarafndan gelitirilmi olan bileenler
satn almak ve uygulamamza entegre etmek. Dier alternatifimiz ise olduka
uzun srecek bir kodlama ile benzer bir iletiim katmann gelitirmek. Her
ikiside firmalarn birinci tercihi olmayacaktr. Sorunumuz sadece soket iletiimi
noktasnda deil elbette. Blmn banda da belirttiimiz gibi gvenlik,
performans, yetkilendirme gibi pek ok konuda uygulama gelitiriciler olduka
zahmetli altyap kodlarn gelitirmekle uramak zorunda kalyor. in kt
yan gelitirilen bu altyap kodlar ou zaman istenilen verimlilii sunmaktan
olduka uzak kalyor. Kabul etmemiz gereken ey, bu altyap kodlarn
gelitirecek bilgiye sahip olmadmz, sahip olsak bile altyap kodlarn
yazacak zamana ve i gcne sahip olmadmz, zaman ve i gc
konusundaki ihtiyalarmz karlayabilsek bile bu kodlarn testi, gvenlii,
gvenilirlii, performans ve uygulamalara entegrasyonu konusunda hi bir
2 Modl 1: Programlamaya Giri

zaman istenilen dzeye ulaamayacamzdr. Keke ihtiya duyduumuz tm


altyap ilemleri iin hazr, kullanm kolay ve esnek bir platform olsayd.

Hayalini kurduum aslnda yle bir sistem:


Bir sanal maazada cep telefonlarndan sorumlu departmanda sat mdr
olarak alyorsunuz. dndasnz ve akll cihaznza bir mesaj geliyor:
Henz piyasaya yeni km olan telefonumuz inanlmaz satlar yapyor,
telefon ok popler ve stoklarnzda olduka azalm durumda. Bu mesajn
hemen ardndan akll cihaznz zerinden, irketiniz iin fiyat ve teslim zaman
asndan en uygun olan tedarikiyi bulup ihtiyacnz kadar telefonu sipari
edebiliyorsunuz. Peki ya bu koullar altnda almyor olsaydnz?
irketinizden sizi cep telefonunuzdan arayacaklar ve problemi ileteceklerdi.
Sonra da siz irketinize ancak dnebildiiniz zaman tedarikilerle teker teker
irtibata geerek hangisinin irketiniz iin en yararl olduuna karar verecektiniz.
Sipari ve teslimat bilgileri zerinde anlatktan sonra ileminizi tamamlam
olacaktnz. Yani sadece bir ka dakikada yapabileceiniz basit bir ilem iin
belki de btn bir gnnz kaybedecektiniz. Verimliliiniz derken
zamannz etkili ekilde kullanamayacaktnz. Oysa akll cihaznz zerinden
tm bu ilemleri ksa bir ekilde zebildiinizden ie gitmenize bile gerek
kalmadan zamannz en az ekilde kullanarak irketiniz iin en iyi olan seimi
yapabilirsiniz.

Kesinlikle iler ok daha verimli ve kolay ilerlerdi.. Elbette bu kurulabilecek


hayallerin sadece mobil platforma ynelik blmnden bir kesit.
Konu: 1 3

Sorunun Temeli
Microsoft, vizyonu dorultusunda att admlarn yazlm gelitiricilere yansyan
sonularn srekli izliyordu ve yazlm gelitiricilerin sorunlarn u balklar
altnda ele alyordu.
Uygulamalarn, sistemlerin ve kurumlardaki birimlerin ve farkl
kurumlarn arasndaki iletiim sorunu.
alanlarn ihtiya duyduklar verilere, ihtiya duyduklar an,
kesintisiz, hatasz ve gvenli bir ekilde ve istedikleri platformdan
eriebilmeleri.
Uygulama gelitirme srecinde, gelitiricilerin altyap kodlar ile
uramas ve bunun sonucunda uygulama gelitirme ve test sresinin
uzamas.
Bir uygulamann farkl platformlarda altrlabilmesi iin ayn ilemleri
gerekletirecek kodlarn tekrar tekrar yazlmas ihtiyac.

Microsoft 1990 ylnda, yaanacak 10 ylda ngrerek bu ve benzeri sorunlara


zm sunacak, uygulama gelitiricilerin ve son kullanclarn ilerini
kolaylatracak bir platform gelitirmeye balad. Microsoft bu platforma
ylesine inanyorduki kaynaklarnn %80inden daha fazlasn, yani kaderini bu
platforma balamt. ok geni bir analiz ve gelitirme ekibinin almalarnn
sonucunda ortaya kan rn 2000 ylnda dnyaya sunulduuna insanlarn
karlarnda grdkleri yap karsnda hissettiklerini tanmlamak iin
kullanlabilecek en uygun kelime; Hayranlkt.

Microsoft.NET Platformu her trl yazlm gelitirme ihtiyacna ynelik hazr bir
altyap sunarak uygulama gelitiricilerin windows, web ve mobil platformlara
ynelik uygulamalar, ok daha hzl, kolay ve gl bir ekilde
gelitirebilmelerine olanak tanyordu. Uygulama gelitiriciler ifreleme, kimlik
dorulama, yetkilendirme, soket iletiimi, her trl veri kaynana ynelik
veritaban ilemleri, xml ve web servisi teknolojilerine kadar burada
saymadmz (editrler bir modln 100 sayfay gemesine pek scak
bakmyorlar) ve hatta milyonlarca snf ve fonksiyonlar hazr ekilde
karlarnda grdler. Bu gne kadar gnler, haftalar ve hatta aylar harcayarak
gelitirmeye altklar bu yaplarn hepsini karlarnda kullanma hazr bir
ekilde grmekten de son derece memnunlard.
Modl 3: Microsoft Visual Studio Arayz

Hedefler

Visual Studio alma ortam


Start Page
Menler
Solution Explorer Paneli
Toolbox Paneli
Properties Paneli
Help Kullanm

Bu modl, Microsoft Visual Studio ara yzn tanmay salar ve etkili bir
biimde kullanmay gsterir. Ev ve i yerindeki alma ortamn dzenlemek
daha verimli almay salar. Yazlm gelitirilirken de allan ortam tanmak
ve kiiselletirmek rahat allmas asndan nemlidir.

Bu modl tamamladktan sonra:


Microsoft Visual Studio alma ortamn tanyacak,
Menlerin ilevlerini aklayabilecek,
Balang sayfasnn zelliklerini kullanabilecek,
Solution Explorer, Toolbox, Properties panellerini tanyacak,
Microsoft Visual Studio Yardm etkili bir ekilde kullanabileceksiniz.
2 Modl 3: Microsoft Visual Studio Arayz

Konu 1: Visual Studio alma Ortam

Visual Studio bir dosya editrdr

alma Sayfalar
Sekmeler halinde gsterilir
Ara ubuklar
Men komutlarna grsel ara yz
zel ara ubuklar tanmlanabilir
Menler
Paneller
Sabitlenebilir, Kayan, Gizlenebilir pencereler

Visual Studio, ok gelimi zelliklere ve yardmc aralara sahip bir dosya


editrdr. .NET platformu zerinde gelitirilen proje dosyalar dnda metin
dosyalar, sql, rtf uzantl dosyalar da dzenlenebilir. Visual Studio ortamn
oluturan ve kullanmn kolaylatran drt ana bileen vardr:

alma Sayfalar (Tab Pages)


Visual Studio ortamnda dosyalar, birer alma sayfas olarak alr. Bu
dosyalar sekmeler halinde sralanr. Sayfalar arasnda CTRL-TAB ksa yolu ile
gei yaplr.
Bu alma modelinde, sadece bir sayfa grnr ve zerinde alma yaplr.
Ancak Visual Studio bize, alma ortamn paralara blme imkn verir.

rnek:
o Visual Studio alma ortamn an. Balang sayfas karnza
kar. (Eer balang sayfasn gremiyorsanz, Help mensnden
Show Start Page komutunu sein)
o View mensnden, Web Browser alt mensne iaret edin ve Show
Browser komutunu sein. Visual Studio amak istediimiz Internet
taraycs iin yeni bir sayfa oluturur.
o CTRL tuuna basl tutarak TAB tuuna basn. Atnz Internet
taraycsndan balang sayfasna dner.
Konu: 1 3

o Balang sayfasna sa tklayn ve kan menden New Vertical


Tab Group komutunu sein. Visual Studio birden fazla sayfa
zerinde alma imknn, sayfalar sekme gruplarna ayrarak
salar.
o Balang sayfasn, sayfa balna basl tutarak, Internet
taraycsnn bulunduu sekme grubuna tayn.

PUCU: Visual Studio ortamn bir web taraycs olarak kullanabilirsiniz.

Ara ubuklar (Toolbars)


Visual Studio, men komutlarn iin grsel ksa yollar ara ubuklar ile sunar.
Benzer ilemler iin kullanlan komutlar bir ara ubuunda gruplanr. rnein
Standart ara ubuu, yeni dosya oluturmak, bir dosyay amak - kaydetmek
gibi genel dosya ilemleri iin kullanlr.
Ara ubuklar, varsaylan olarak menlerin altnda bulunur. Ancak ubuklar
tanarak yerlerini deitirebilir veya kayan duruma getirilebilir. Ayrca istenen
ubuklar saklanlabilir veya gsterilebilir. Ara ubuklarn listesini grmek iin
View mensnden Toolbars alt mensne iaret edin.

Visual Studio bize kendi ara ubuklarmz oluturma imkn da verir. Farkl
ilevlere sahip komutlar gruplanp, kiisel ara ubuu oluturulabilir.

rnek:
o Balang sayfasnn stndeki bir ara ubuuna
sa tklayn. kan men, var olan tm ara
ubuklarn listeler. aretli olan ubuklar eklenmi
ubuklardr. Bu listeden Web ara ubuunu sein.
o Web ara ubuu zerine ift tklayn. Bu ilem
ubuu floating (kayan men) duruma getirir.
Tekrar ift tklandnda, ubuk Dockable (sabit
duruma) gelir.
o Ara ubuuna sa tklayn. Listenin en altndaki
Customize (zelletir) komutunu sein.
o Toolbars sekmesinde New (yeni) komutuna tklayn.
kan pencerede ubua Genel lemlerim yazn.
Ok tuuna basn. Visual Studio verilen isimde bir
ara ubuu oluturur ve kayan durumda
grntler.
4 Modl 3: Microsoft Visual Studio Arayz

o Commands (komutlar) sekmesinde, Categories


(kategoriler) listesinden Help kategorisini sein. Bu
listenin yan tarafnda bulunan Commands listesinden
Index komutunu bulun. Bu komutu tayp,
oluturduumuz Genel lemlerim ara ubuuna
brakn.

Bu ekilde u komutlar da ekleyin.

Categories Commands

Tools Options
File Exit
View Show Web Browser
Window Close All Documents

o Ara ubuunu, alma ortamnn altna tayarak sabitleyin.


o Ara ubuuna sa tklayn ve listeden Genel lemlerim ubuunu seerek
alma ortamndan kaldrn.

Menler
Birok alma ortamnn yapt gibi Visual Studio da, benzer eler zerinde
ilevleri olan komutlar menler halinde gruplar. Ara ubuklarndan fark sabit
Konu: 1 5

olmalar ve zelletirmeye ak olmamalardr. Menler bu modlde detayl


olarak ele alnacaktr.

Paneller
Paneller, Visual Studio iindeki pencerelerdir. alma ortamnda birok panel
bulunmasyla beraber, Solution Explorer, Toolbox, Object Browser, Properties,
Watch, Output, Search Result, Task List gibi ska kullandmz paneller
vardr.

PUCU: Grmek istenilen paneller View mensnden seilebilir.

Paneller, Visual Studio ortam iersinde istenilen yere tanabilir veya


sabitlenebilir. Panellerin birka genel zellii vardr:

o Auto Hide (Otomatik Gizle):


Panelin, fare zerindeyken gzkmesi ve fare ekildikten sonra gizlenmesidir.
o Dockable (Sabitlenebilir):
Panelin, Visual Studio ortam iersinde bir yerde sabitlenebilme zelliidir.
o Floating (Kayan):
Kayan paneller herhangi bir yere sabitlenemez. Ancak her sayfann stnde
durur ve bylece srekli grnr.

Panellerin bu zellikleri Window mensnden eriilebilir.

rnek:
o View mensnden Other Windows alt mensn iaret edin ve
Favorites panelini sein. Panelin balnda, biri Auto Hide dieri
Close olan iki dme grlr.
o Auto Hide dmesine basarak paneli gizleyin.
o Paneli tekrar sein, Window mensnden Auto Hide zelliini
sein. Daha sonra ayn menden Floating zelliini sein. Panelin
tanabildii ancak sabitlenemedii grlr.
o Panel seili iken, Window mensnden Dockable zelliini sein. Bu
sefer panelin, tand zaman alma ortamnn herhangi bir yerine
sabitlenebildii grlr.
o Panel seili iken, Window mensnden Hide komutunu sein. Paneli
tekrar amak iin bu etaplar tekrarlayn.
6 Modl 3: Microsoft Visual Studio Arayz

Konu 2: Start Page

Visual Studio ortamnn balang


sayfasdr

Projects
Oluturulan Visual Studio projeleri listesi
Online Resources
nternet zerindeki kaynaklar
Kod rnekleri, gncellemeler, makaleler
My Profile
alma ekline gre zel ayarlar

Visual Studio alma ortamn atmz zaman karmza ilk gelen balang
sayfasdr. Bu sayfa blmden oluur.

Projects
O ana kadar altnz projeleri gsterir. Bu menden son projelerinizi
aabilirsiniz. Son projelerde gzkmeyen bir proje (Open Project) veya yeni
bir proje (New Project) aabilirsiniz.
Online Resources
Bu blmde rnek uygulamalar (Find Samples) ipular bulabilir, en yeni
teknolojileri, gncellemeleri veya en son eklenen haberleri takip edebilir, MSDN
ktphanelerinde kod rnekleri, makaleler aratrabilirsiniz.
My Profile
Bu blmde alma eklinize gre bir profil seebilirsiniz. Profiller; kullanlan
ksa yollara, panellerin yerlerine ve grnmlerine, Visual Studio yardmn
kullanrken yaplan filtrelemeye gre deiir.

rnein, profili Visual C# Developer olarak ayarlarsak Dynamic Help paneli,


sayfalarn sa tarafnda ivili olarak durur. Yardm panelinde bir arama yapmak
istediimizde ise, sonular Visual C# filtresine gre kar. Ayrca Solution
Explorer paneli CTRL-ALT-R ksa yolu ile alr.
Konu: 1 7

Grnm, ksa yollar ve yardm filtresi birbirinden bamsz olarak da


ayarlanabilir. Bu durumda seilen profil, custom (zel) olarak gzkecektir.

At Startup seeneklerinden, Visual Studio alrken hangi pencerenin


gzkeceini belirleyebilirsiniz. rnein, balangta en son altnz
projenin almasn istiyorsanz, Load last loaded solution seeneini tercih
etmelisiniz.

PUCU: Giri sayfasn kapattktan sonra, Help mensnden Show Start Page
seeneine tklayarak aabilirsiniz.
8 Modl 3: Microsoft Visual Studio Arayz

Konu 3: Menler

Birok uygulamada kullanlan benzer


men grnm

File, Edit
Dosya, metin dzeni ilemleri
View, Window
Paneller, alma sayfalar grnmleri
Project, Build, Debug
Proje, derleme ve hata ayklama ilemleri
Tools, Help
Yardmc aralar, yardm seenekleri

Visual Studio menleri birok uygulamann menlerine benzer niteliktedir.


Men isimlerinde, belirli bir harfinin alt izilmitir. Belirtilen harfler ALT tuu ile
birlikte basldnda, o menlere ksa yolla ulalr. Men komutlarnn
bazlarnda ise, sadece o komuta zel bir ksa yol tanmldr. Bu ksa yollar
CTRL veya SHIFT gibi birka tu kombinasyonu ile gerekleir.

File (Dosya)
Tm dosya ilemleri bu men altndadr. Standart ara ubuu ile bu
mendeki baz komutlara ulalr. File mensndeki komutlar ile:
o Yeni bir proje, bir dosya veya bo bir solution (zm) oluturmak,
o Oluturulmu bir projeyi veya var olan bir dosyay amak,
o Web zerinde paylatrlm dosya veya projeler amak,
o Ak olan dosya veya projeleri kapatmak,
o Recent Files (en son kullanlan dosya veya projeler) amak,
o Dosyalar kaydetmek, yazdrmak mmkndr.
Edit (Dzenle)
Tm yaz dzenleme ilemleri iin, bu mendeki komutlar kullanlr. Text
Editor ara ubuu da bu mennn komutlarna ksa yoldur. Edit
mensndeki komutlar ile:
o Copy, Cut, Paste, Delete, Select All gibi temel ilemler
o Find And Replace, Go, Bookmark gibi navigation ilemleri
Konu: 1 9

o Outlining ile metinleri gruplama ilemleri


o Satrlar yorum satr yapma, yorum satrlarn kaldrma, byk
kk harf evrimi gibi ileri seviye ilemler gerekletirilir.
View (Grnm)
Visual Studio alma ortamndaki tm paneller bu men komutlaryla gsterilir.
Ayrca Navigate Backward ve Navigate Forward komutlaryla en son
allan satra geri dnlr.
Project (Proje)
Projeye dosya eklemek, karmak, proje zelliklerini gstermek iin bu men
kullanlr.
Build (Derleme)
Projelerin almak zere derlenmesi iin gereken komutlar, bu men
altndadr.
Debug (Hata Ayklama)
Projede hata ayklarken gereken komutlar Debug mens altndadr. Projenin
debug durumunda balatmak, BreakPoints (hata ayklarken durulmas gerek
satrlar ayarlamak) gibi ilemler yaplr.
Tools (Aralar)
Visual Studio ile beraber yklenen yardmc aralarn listelendii mendr.
Ara ubuklarn zelletirmek iin kullanlan Customize seenei gibi
Options seenei de en sk kullanlan zelliklerden biridir.

Visual Studio alma ortamnn tm ayarlar Options mensnden yaplr.


Environment ve Text Editor en sk kullanlan seeneklerdir.

Environment (Ortam): Sayfa dzeni ve grnm ayarlar, yaz tipi (font) ve renk
ayarlar, komutlar iin ksa yol ayarlar, Internet taraycs ayarlar, yardm ve
dinamik yardm ayarlar yaplr.

Text Editor (Metin Dzenleyicisi): Farkl programlama dillerine zg yaz dzeni


yaplr.

rnek:
o Tools mensnden Options komutunu sein.
o Sol panelde bulunan Environment mensnden Fonts and
Colors (Yaz dzeni ve Renkler) sekmesine gelin.
o Sa panelde bulunan Display items (eleri Listele)
mensnden Text alannn sein ve Item background (e arka
plan) zelliini Light Grey (Ak Gri) olarak belirleyin. Tm
sayfalarn arka plan rengi ak gri olacaktr.
10 Modl 3: Microsoft Visual Studio Arayz

o Sol panelde Environment mensnden Web Browser sekmesine


gelin. Home Page (ana sayfa) zelliinin altndaki Use Default
seeneini kaldrn ve metin kutusuna www.bilgeadam.com yazn.
o Sol panelde Text Editor mensnden C# alt mensn sein.
Burada Visual C# diline zel metin dzenleme seenekleri bulunur.
Sa panelde, Display sekmesinin altnda Line Numbers (Satr
Numaralar) seeneini iaretleyin. Bu seenek, Visual C#
projelerinde alrken satr numaralarn gsterir.

Window (Pencere)
Sayfalarn ve panellerin grnmleri ve zelliklerini deitirmek iin kullanlan
komutlar bu men altnda bulunur. Tm ak alma sayfalar bu men altnda
grld gibi, istenen sayfa seilerek n plana getirilir. Ayrca, Close All
Documents (Tm Sayfalar Kapat) komutu ile ak olan btn sayfalar kapatlr.
Auto Hide All (Tmn Otomatik Gizle) komutu ile, sabit hale getirilmi tm
paneller gizlenir.
Help (Yardm)
Visual Studio alma ortamnda ok sk kullanlan yardm panellerinin
grnm bu men ile salanr. Bu men ile ayrca, kullanlan Visual Studio
alma ortamnn srm hakknda bilgi alnr, son gncellemeler kontrol edilir,
teknik destek iin gereken e-posta adreslerine veya telefonlara ulalr.

Yardm kullanm bu modlde detayl olarak ele alnacaktr.


Konu: 1 11

Konu 4: Solution Explorer Paneli

Visual Studio projeleri, bir Solution


altnda toplar
Solution iinde bulunan tm dosyalar,
klasrler grntlenir
Panele ait ara ubuu basit ilemler
gerekletirir
Refresh, Show All Files, Properties

Visual Basic profilinde, CTRL-ALT-L ile


ulalr

Visual Studio alma ortamnda projeler bir solution (zm) altnda alr. Bir
solution iine farkl dilde ve tipte projeler dhil edilebilir. Visual Studio ile bir
solution aldnda, Solution Explorer paneli ile solution iinde bulunan tm
projeleri, ilgili dosya ve klasrleri grntler. Panelde koyu yaz tipinde gzken
proje, solution iindeki balang projesidir.

Bu panelden, eler zerinde silme, kopyalama, tama, ismini deitirme


ilemleri yaplabilir. Ayrca panelin st ksmnda, seilen e zerinde basit
ilemler gerekletirmek iin bir ara ubuu bulunur.

Refresh (Yenile)
Proje dosyalar zerindeki deiikliklerin gzkmesini salar.
Show All Files (Btn Dosyalar Gster)
Seilen projenin bulunduu klasrdeki tm dosyalar ve alt klasrleri gsterir.
Panelde gzken beyaz eler proje iine dhil edilmemi elerdir. Projede
kapsamnda kullanlmak istenen eler (rnein arka plan resmi), zerine sa
tklanp Include In Project komutu ile projeye dhil edilmelidir.
Properties (zellikler)
Paneldeki tm elerin zellikleri, Properties komutu ile grlebilir. Bu komut
seildiinde, enin zellikleri Properties paneli ile grntlenir. (Properties
paneli bu modlde detayl olarak ele alnacaktr.)
12 Modl 3: Microsoft Visual Studio Arayz

Solution Explorer paneli, View mensnden grlebildii gibi, varsaylan


klavye seeneklerinde CTRL-ALT-L ksa yolu ile de grlebilir.

(Ref: MSDN, Solution Explorer)

Konu 5: Toolbox Paneli

Projelerde kullanlan eitli bileenler


listelenir
Nesneler, sekmeler halinde gruplanr
Windows Forms, Web Forms, ClipBoard Ring

Visual Basic profilinde, CTRL-ALT-X ile


ulalr
Konu: 1 13

Toolbox (Ara Kutusu) paneli, projelerde kullanlan eitli bileenlerin


listelendii paneldir. Buradaki eler, sekmeler iinde gruplanmtr. Her
sekme, ortak platformlarda alan veya benzer ilevleri olan nesnelere
sahiptir. rnein, Data sekmesinde veri taban ilemlerinde kullanlan
bileenler vardr. Windows Forms bileenleri Windows platformunda alan
projelerde, Web Forms bileenleri ise Web tabanl projelerde kullanlan
nesnelerdir. ClipBoard Ring sekmesinde ise kopyalanan metinler bulunur.
Nesnenin silik gzkmesi, o anda allan sayfada kullanlamayaca
anlamna gelir.

Toolbox panelinde nesneler, en sk kullanlandan en az kullanlana gre


sralanmaktadr. rnein, Windows Forms sekmesinde en stte Label, Link
Label, Button, TextBox nesneleri bulunur. Nesneler, yerleri ve sralar
tanarak deitirilebilir, ayrca baka bir sekmeye de tanlabilir. Varsaylan
sralama dnda, alfabetik olarak da sralama yaplabilir.

Visual Studio alma ortamn, Toolbox panelindeki nesnelere yeni isim verme,
nesneleri silme veya panele yeni sekmeler ve nesneler ekleme imknlarn da
salar.

rnek:
o View mensnden Toolbox panelini sein
o Panelde herhangi bir yere sa tklayn ve Show All Tab (Btn Sekmeleri
Gster) komutunu sein
o Windows Forms sekmesinde TextBox nesnene sa tklayn. kan menden
Rename Item (Ad Deitir) komutunu sein ve Metin Kutusu yazn.
o Metin Kutusu nesnesini tayarak sekmenin en stne getirin.
14 Modl 3: Microsoft Visual Studio Arayz

o Panele sa tklayn ve Sort Items Alphabetically (Nesneleri Alfabetik


olarak Srala) komutunu sein. Metin Kutusu nesnesinin, alfabetik srada
yerini ald grlr.
o Panele sa tklayn ve Add Tab (Sekme Ekle) komutunu sein. Sekmeye
Medya ismini verin.
o Sekmeye sa tklayn ve Add/Remove Items (Nesne Ekle/Kaldr) komutunu
sein. Customize Toolbox diyalog kutusu kar. Burada Toolbox paneline
eklenebilecek tm bileenler listelenir. Com Components sekmesine gelin ve
listeden Windows Media Player nesnesini iaretleyin. Ok tuuna basarak,
diyalog kutusunu kapatn. Windows Media Player nesnesinin, oluturulan
Medya sekmesine eklendii grlecektir.

Toolbox paneli varsaylan klavye seeneklerinde CTRL-ALT-X ksa yolu ile


ulalr.

Konu 6: Properties Paneli

Visual Studio ortamndaki nesnelerin


zelliklerini listeler
zellik ad Deeri
zellikler kategorilere gre gruplanmtr,
alfabetik olarak da sralanabilir

F4 ile her yerden ulalr

Properties (zellikler) paneli, seilen bir nesnenin zelliklerini grntler.


Paneldeki grnm, zellik ad - deeri eklindedir. Silik olarak gzken
zellikler salt okunurdur ve deitirilemez. Panelin zerindeki alr liste,
alma sayfasndaki nesneleri listeler. Buradan istenilen nesne seilerek
zellikleri grntlenir.
Konu: 1 15

Paneldeki zellikler kategorilere gre gruplanmtr, ancak alfabetik olarak da


dizilir. Panelin stnde bulunan ara kutusundan Categorized
(Kategoriletirilmi) veya Alphabetic (Alfabetik) seilerek zelliklerin
grnmleri deitirilir.

Panelin en altnda bulunan blmde, her zelliin aklamas bulunur.

pucu: Bir nesnenin zerindeyken F4 tuuna basnca, Properties paneli


grntlenir.
16 Modl 3: Microsoft Visual Studio Arayz

Konu 7: Help Kullanm

En sk kullanlan kaynaktr
MSDN (Microsoft Developer Network) ktphaneleri
Dynamic Help
erii, seilen nesnelere gre deiir
F1 ile dinamik yardm
Search
Zengin arama seenekleri
Index
Alfabetik konu dizini
Contents
MSDN ktphanelerinin hiyerarik grnm

Yazlm gelitirirken en ok kullanacamz kaynaklar yardm dosyalar


olacaktr. Bir programlama dilinin ok eitli zellikleri, kullanm farkllklar
olabilir. yi bir programc btn bu zellikleri ezbere bilen deil, bu zellikleri en
ksa srede bulan, renen ve kullanandr. Yardm dosyalarnn kullanmn
bilmek, programcln temelini oluturan nemli unsurlardan biridir.

DKKAT: Visual Studio Yardmn kullanmak iin, MSDN (Microsoft Developer Network)
yardm ktphanelerinin yklenmi olmas gerekiyor.

Visual Studio Yardm programcya, gelimi zelliklere sahip paneller ve


yardm dosyalar ile geni bir kullanm kolayl salar.

Visual Studio Yardm dosyalarnn yaps balk, ierik, ilikili konular (See
Also) blmlerinden olumutur. Ayrca her yardm dosyasnn altnda
bulunan Send Comments balants ile konu hakknda yorum gnderilebilir.

Visual Studio Yardm panelleri Dynamic Help, Search, Index ve Contents


olarak drde ayrlr. Bu paneller, Help mensnden ulalabilir.
Konu: 1 17

Dynamic Help (Dinamik Yardm)

Dynamic Help paneli, ierii otomatik olarak deien bir aratr. Kod yazarken,
panellerde veya sayfalarda nesneler seildiinde, kullancnn baka bir ilem
yapmasna gerek kalmadan, o nesne hakknda yardm konularn listeler. F1
tuuna bastmz zaman ise seilen nesneye ait, Dynamic Help panelindeki
ilk yardm konusu yeni bir sayfada grntlenir.

Paneldeki yardm konular Help, Samples ve Getting Started olarak


blme ayrlmtr. Help blmnde, seilen nesne, bu nesneyle ilikili olan
kavramlarn listelendii blmdr. Samples, konuyla ilgili kod rnekleri bulunan
yardm dosyalarn gsterir. Getting Started allan sayfalara gre
deien, temel ilemleri ieren balang yazlarn gsterir.

Search (Arama)

MSDN ktphanelerinde arama yaplan paneldir. Look for metin kutusuna,


aranacak anahtar kelimeler girilir. Filtreleme (Filtered by) ile arama
sonular belli konulara gre snrlanr ve istenmeyen seeneklerin gsterilmesi
engellenir.

Search panelinde, Search in titles only, Match related words,


Search in previous results, Highlight search hits arama
seenekleri bulunur:

Search in titles only: Sadece konu balklarnda arama yapar, ierik


ksmna bakmaz
Match related words: Kelimeleri yazld gibi arar, benzer yazml kelimeleri
aramaz.
Search in previous results: lk aramadan sonra aktif olan bu seenek ile
kelimeler, bir nceki aramada bulunan sonular arasna baklr.
Highlight search hits: Bulunan yardm sayfalarnda, aranan kelimelerin
seili olmasn salar.
18 Modl 3: Microsoft Visual Studio Arayz

Bulunan sonular Search Results (Arama Sonular) panelinde gsterilir. Bu


panelde
o Title, konunun baln
o Location, MSDN ktphanelerinde hangi balk altnda bulunduunu
o Rank, konunun, aranlan kelimeye olan yaknlk derecesini ifade eder.

Index (Dizin)
Yardm dosyalarndaki btn konular alfabetik srada dizer. Filtreleme ilevi,
arama panelinde olduu gibidir. Bu panelin zellii, aranacak kelime yazlrken,
bu kelime ile balayan tm konularn alfabetik srada gsterilmesidir. Bu
ekilde, aranan konulara ok hzl bir ekilde ulalabilir.

Eer bir konu ile ilgili birden fazla yardm dosyas varsa, Index Results (Dizin
Sonular) panelinde bu seenekler gsterilir.

Contents (erik)
Contents panelinde, tm MSDN ierii konulara gre hiyerarik yapda,
kategorilere ayrlm olarak gsterilir. Bu panelde de ayn ekilde filtreleme
yaplarak istenmeyen ierikler kartlabilir.

Bir yardm dosyas akken, Help mensnden Sync Contents (erik


Senkronizasyonu) komutu seilerek o yardm dosyasnn Contents panelindeki
yeri bulunabilir.

LAB 3.1: Help Kullanm


Bu lab tamamlandktan sonra:
Dynamic Help kullanmn renecek,
Search paneli ile arama yapabilecek,
Contents paneli ile MSDN ktphanelerinin hiyerarik yapsn renecek,
Index paneli ile ierie hzl bir ekilde ulaabilecek,
Yardm dosyalarn yorumlayabileceksiniz.

Bu lab tamamlamak iin, MSDN yardm ktphaneleri yklenmi olmaldr.

Dynamic Help
1. Help mensnden Show Start Page komutuna tklayn.
2. Help mensnden Dynamic Help komutunu seerek Dynamic Help
panelini an. Panelde gsterilen ilk konunun ismi nedir?
Konu: 1 19

3. CTRL-ALT-X tularna basp Toolbox panelini an. Dynamic Help


mensnde ne deiti?
4. Toolbox panelinde, Windows Forms tabnda Button nesnesini sein.
Dynamic Help panelindeki ilk konunun ismi ne olarak deiti?
Button seiliyken F1 tuuna basn. Alan sayfann ismi nedir?

Contents
1. Help mensnden Sync Contents komutuna tklayn. Button
Members konulu yardm dosyas hangi konularn altnda bulunuyor?
2. Contents panelinin ilk bal olan Visual Studio .NET altnda, Gettings
Assitance altnda, "Using Help in Visual Studio .NET altnda, Tips for
Using the Help Keyword Index konulu yardm an. File mensnden
Print komutunu sein ve sayfay yazdrn.

DKKAT: Sayfay yazdrmak iin bilgisayarnza bal bir yazc bulunmas gerekiyor.
PUCU: Yardm dosyalarn yazdrmak, zellikle uzun metinlerde, kolay alma imkn
salar.

3. Contents panelini kapatn.

Search
1. Help mensnden Search komutunu sein. Look for metin kutusuna
Visual Studio .NET yazn. Search in titles only, Match related
words seeneklerini iaretleyin. Search dmesine basn.
Ka tane konu bulundu? En st dereceli konu nedir?
2. Search in previous results seeneini iaretleyin. MSDN
kelimesini aratn. Ka konu bulundu?
3. Search in previous results seeneini kaldrn. MSDN kelimesini
tekrar arattnz zaman ka konu bulunur? Search in titles only
seeneini kaldrnca ka konu bulunur?
4. Search Results ve Search panellerini kapatn.

Index
1. Help mensnden Index komutuna tklayn. Look for metin kutusuna "file
types" yazn. lk kan konu nedir?
2. Filtre olarak Visual C# sein. lk hangi konu gsteriliyor?
3. File Types konusu zerine tklayn. Alan sayfada Solution Files (.sln and
.suo) adl blm inceleyin.
4. Project Files balnda, Visual Basic and Visual C# alt bal altnda,
File Types and File Extentions in Visual Basic and Visual C# konusuna
tklayn.
20 Modl 3: Microsoft Visual Studio Arayz

5. Alan yardm dosyasn inceledikten sonra, sayfann See Also bal


altnda What's New in Projects konusuna sa tklayn. Alan menden
Open Link in New Window komutunu sein. Window mensnden New
Vertical Tab Group komutunu sein.
Bir nceki yardm dosyasyla arasndaki benzerlikleri inceleyin.
6. Window mensnden Close All Documents seenei ile btn sayfalar
kapatn ve Visual Studio ortamndan kn.

Modl Sonu Sorular & Altrmalar

zet

Visual Studio alma ortam


Start Page
Menler
Solution Explorer Paneli
Toolbox Paneli
Properties Paneli
Help Kullanm

1. Visual C# profili iin, Object Browser paneline hangi ksa yolla ulalr?
2. Visual Studio ortamnda tm sabitlenmi panelleri gizlemek iin hangi men
komutu kullanlr?
3. Properties panelindeki zellikler alfabetik olarak nasl sralanr?
Modl 4: Visual C# .NET le Windows Tabanl
Programlama

Hedefler

Windows Tabanl Uygulamalar


zellikler, Metotlar, Olaylar
Windows kontrolleri
Deiken, Sabit Tanmlar
Veri Tipleri
Operatrler

Windows tabanl uygulamalar, Windows iletim sistemi zerinde alan


uygulamalardr. Windows uygulamalar Windows formlar ve kontrollerinden
oluur. Visual Studio bu formlarn ve zerindeki kontrollerin tasarmn, kodlarn
yazlmn byk lde kolaylatrarak uygulama gelitirme srecini daha hzl
ve kolay hale getirir.

Bu modl tamamladktan sonra:


Windows tabanl programlamada kullanlan kontrolleri tanyacak,
Kontrollerin zellik, metot ve olay kavramlarn renecek,
Visual C# .NET dilinde deiken, sabit tanmlamay renecek,
Veri tiplerini tanyacak,
Operatrleri kullanabileceksiniz.

HERKES N UNIX
2 KISIM I:

Konu 1: lk Uygulama (Hello World, The


Time Is..)

Windows tabanl ilk uygulama


private void Button1_Click(object sender, System.EventArgs e)
{
MsgBox("Hello World! The time is " + DateTime.Now);
}

Visual C#.NET ile yazacamz Windows uygulamas ekrana, Hello World!


yazsn ve o anki zaman gsteren bir bilgi mesajn kartr.

Visual Studio alma ortamn an.


File mensnden, New alt mensne iaret edin ve Project komutunu
sein. New Project diyalog kutusu, yazlaca dile, alaca ortama gre
deien projeleri tiplerini listeler.
Proje tiplerinden Visual C#Project ve Windows Application tipinin seili
olduunu kontrol edin.
Name zelliine HelloWorld yazn ve Ok tuuna basn. Alan Windows
projesinde balang olarak bir adet Windows Form tasarm grnmnde
alr.
Toolbox panelinden Button kontroln formun zerine srkleyip brakn.
Properties panelini aarak Button kontrolnn Text zelliine Hello World!
yazn.
Eklenen Button kontrolne ift tklayarak kod sayfasna gein. Button
kontrolne basldnda altrlacak kodu yazn:
MessageBox.Show("Hello World! The time is " + DateTime.Now);

NOT: Yazdnz kodun ne anlama geldiini belirtmek iin yorum satrlar kullanmak,
kodlar okumay kolaylatrr. Yorum satrlar // ile balayarak yazlmaldr.

HERKES N UNIX
BLM 1: 3

MessageBox.Show metodunun yazld kodun stne, yaplmak istenileni


belirten bir yorum satr yazn.
// MessageBox.Show metodu ile kullancya Merhaba diyoruz.
// Now zellii ile o andaki saat ve gn
// deerlerini de kullancya gsteriyoruz.
F5 tuuna basarak projeyi altrn.

PUCU: alma sayfalarn isimlerinin yannda yldz iaretinin gzkmesi, o sayfada


deiiklik yapldn ancak daha kaydedilmediini belirtir. Proje dosyalarnz CTRL-S
tularna basarak ska kaydedin.

Konu 2: zellikler, Metodlar Ve Olaylar

zellikler
Grnm, yerleim, davranlara zgdr
Properties paneli
Text, Name, Size, BackColor
Metotlar
Yaplan ilemler
Parametre ile, Parametresiz arlrlar
Focus, Select, Hide, Show
Olaylar
Balarna gelen ilemlerdir
Click, MouseDown, Enter

.NET Kontrolleri temel kavramdan oluur.

zellikler
zellikler, kontrollerin grnm, yerleimi veya davranlarna zel
niteliklerdir. rnein bir Button kontrolnn Text zellii, zerinde yazan
yazya erimemizi salar.
Kontrollerin zellikleri, tasarm annda Properties panelinden ulalabilecei
gibi, kod tarafnda da okunup deitirilebilir.
Kontrollerin birok zellii hem okunabilir hem de deitirilebilir. Ancak baz
zellikler salt okunur (ReadOnly) ve salt yazlr (WriteOnly) olabilir. Bu tip
zellikler Properties panelinde gzkmezler.

Kontrollerin birok ortak zellikleri vardr.

HERKES N WINDOWS
4 KISIM I:

Text (Yazi)
Kontrollerin Text zellii, zerinde grntlenen yazdr. Bu zellik alma
annda ska okunup deitirilerek, kullancyla iletiim salanr.
TextBox kontrolne girilen bir deerin okunup Label kontrolne yazlmas iin,
kontrollerin Text zellikleri kullanlr.

private void button1_Click(object sender,


System.EventArgs e)
{
label1.Text = textBox1.Text;
}

Name (sim)
Name zellii kontrollere ulamak iin kullanlan zelliktir. Birok kontroln Text
zellii ayn olabilir. Ancak her biri ayr birer nesne olduklar iin, Name
zellikleri benzersiz olmas gerekir.

textBox2.Text = textBox1.Text;

ki TextBox kontrolnn yazlar ayn, fakat isimleri farkldr.


Size (Byklk)
Kontrollerin byklk zelliidir. Height (ykseklik) ve Width (genilik)
zelliklerinden oluur. Genellikle tasarm annda belirlenen bu zellik, alma
annda da deitirilebilir.

label1.Height = 10;
label1.Width = 20;
BackColor (Arka plan rengi)
Kontrollerin arka plan renginin ayarland zelliktir. Bu zelliin deeri, Color
(renk) nesnesinde tanml deerler ile belirlenir.
ForeColor (nalan rengi)
Kontrollerin zerindeki yazlarn rengini belirler.

private void button1_Click(object sender,


System.EventArgs e)
{
button1.BackColor = Color.Black;
button1.ForeColor = Color.White;
}

HERKES N UNIX
BLM 1: 5

Visible (Grnr)
Kontrollerin ekranda grnp grnmediklerini belirleyen zelliktir. True ve
False olmak zere iki deer alabilir. Boolean veri tiplerinden bu modlde
bahsedilecektir.

private void button1_Click(object sender,


System.EventArgs e)
{
// Label kontroln gizle
label1.Visible = false;

// Label kontroln gster


label1.Visible = true;
}

Metotlar

Metotlar kontrollerin yapt ilemlerdir. Metotlar parametreyle veya


parametresiz arlabilir. Parametreyle armak, metodun girilen deere gre
ilem yapacan belirtir. rnein Focus (Odaklan) metodu, parametre
beklemeden alr ve kontroln seilmesini salar.

private void button1_Click(object sender,


System.EventArgs e)
{
// lem yapldktan sonra
// TextBox kontrolne odaklan
textBox1.Focus();
}
Kontrollerin baz ortak metotlar vardr.
Select (Se)
Select metodu Focus ile ayndr ama TextBox kontrolnn Select
metodunun dierlerinden bir fark daha vardr. TextBox iindeki yazy, verilen
parametreler gre belli bir ksmn ya da hepsini seer.

private void button1_Click(object sender,


System.EventArgs e)
{
textBox1.Text = "Yazlm Uzman";
textBox1.Focus();

// Sekizinci karakterden sonra,


HERKES N WINDOWS
6 KISIM I:

// be karakter se
textBox1.Select(8, 5);
}

BringToFront (ne Getir)


st ste duran kontroller arasndan en ne getirir.
SendToBack (Arkaya Gnder)
st ste duran kontrollerin en arkasna gnderir.
Hide (Sakla)
Kontroln gzkmesini engeller.
Show (Gster)
Kontroln gzkmesini salar.

Olaylar:

Olaylar kontrollerin bana gelen ilemlerdir. Olaylarn metotlardan fark, bu


ilemler kontrollerin elinde olmadan gereklemesidir. rnein bir Button
kontrolne tklanmas, o kontroln istei dnda yaplmtr. Bu olayn
tetiklemesinde kontroln bir rol yoktur. Bu olaylar gerekletii zaman
yaplmas gereken ilemler, ilgili olayn yordamna yazlr. Button1 isimli
kontroln zerine tkland zaman gerekletirmek istenen eylemler
Button1_Click yordamna yazlr.

Visual Studio, olaylarn yordam isimlerini Kontrolsmi_Olaysmi olarak


biiminde yazar.

Kontroller ile alrken benzer olaylar kullanlr.

Click (Tklandnda)
Kontrol zerine tkland zaman tetiklenen olaydr. Windows tabanl
programlamada en sk kullanlan olaylardan biridir.
MouseDown (Mouse tuu basldnda)
Fare, kontroln zerindeyken herhangi bir tuuna basld zaman gerekleen
olaydr. Bu olay, Click olayndan nce alr.
MouseUp (Mouse tuu brakldnda)
Fare, kontroln zerindeyken baslan tu brakld zaman alr.
Enter (Girildiinde)
Kontrol seildii veya zerine odaklanld zaman gerekleen olaydr.
Leave (kldnda)

HERKES N UNIX
BLM 1: 7

Baka bir kontrol seilmek zere kldnda, bu kontroln Leave olay


tetiklenir.
VisibleChanged (Grnrl deitiinde)
Kontroln grnp grnmediini belirten Visible zellii deitii zaman
tetiklenir.

PUCU: Olaylarn alma sralarn test etmek iin tm olay yordamlarna, mesaj kutusu
karan (MessageBox.Show) kod yazn. Daha sonra projeyi altrp kontroller zerinde
yaplan deiikliklere gre olaylarn alma sralarna bakn.

Konu 3: Visual C# .NETe Kontrollerin


Eklenmesi

Visual Studioya Kontrol Eklenmesi


Toolbox panelinden kontrollerin eklenmesi
Form
Button
TextBox
Label
ComboBox
ListBox
Timer

Windows tabanl uygulamalar gelitirirken ska kullanacamz bir grup kontrol


vardr. Form kontrol hari dier btn kontroller Toolbox panelinden seilir.
Bu kontroller srklenip Form zerine istenilen pozisyona braklr.

Kontroller, ToolBox panelinde zerine ift tklayarak da eklenebilir.

HERKES N WINDOWS
8 KISIM I:

Kontrollerin tasarm annda byklkleri, yerleri Size ve Location zellikleri ile


deitirilebilecei gibi, fare ile de istenilen ekilde ayarlanabilir.

Form
Windows uygulamalar, Windows kontrollerinin tutulduu pencereler olan
formlardan oluur. Bir Windows projesi ald zaman Form kontrol otomatik
olarak eklenir. kinci bir form eklemek iin Project mensnden Add Windows
Form komutunu seilir. Proje alt zaman balang formu grntlenir.
Balang formu projenin zelliklerinden deitirilir.

Visual Studio ortamnda formlar, tasarm sayfas ve kod sayfas olmak zere iki
farkl sayfada grntlenir. Tasarm sayfas, formun ve zerindeki kontrollerin
grnmlerini kolay bir ekilde deitirmeyi salar. Visual Studio bu sayfada
yaplan deiiklikleri kod sayfasnda e zamanl olarak gnceller. rnein bir
Button kontrolnn geniliini fare ile deitirdiimiz zaman, kod sayfasnda bu
HERKES N UNIX
BLM 1: 9

kontroln Width zellii yaplan deiiklie gre gncellenecektir. Ayn


deiiklikler properties panelinde de grlebilir.

Formlarn, dier kontrollerin zelliklerinden farkl baz zellikleri vardr.


ControlBox (Denetim Kutusu)
Form zerindeki simge durumunda kltme, ekran kaplama ve formu kapama
kutularnn grnmn ve eriebilirliini kontrol eder.
NOT: Formun ControlBox zellii False iken uygulama, Debug mensnden Stop
Debugging komutu seilerek kapatlabilir.

StartPosition (Balag Pozisyonu)


Form ald zaman nerede gzkeceini belirler. CenterScreen seenei
formu ekrann ortasnda gsterir.

Formlar ald zaman Load olay gerekleir. Eer form, balang formu olarak
seilmise, proje balad zaman altrlmak istenen kodlar bu olayn
yordamna yazlr.

private void Form1_Load(object sender,


System.EventArgs e)
{
label1.Text = "Proje balatld. Kayt zaman: "
+ DateTime.Now;
}

Button
Bir Windows dmesini temsil eder. Button kontrolne basldnda Click
olay tetiklenir. Bu olay gerekletii zaman yaplacak ilemler,
ButtonIsmi_Click yordamnda yazlr.

private void btnRenkDegistir_Click(object sender,


System.EventArgs e)
{
btnRenkDegistir.ForeColor = Color.Gray;
}

TextBox
Bir Windows metin kutusunu temsil eder. Kullanclarn deer girerek program
ile haberlemesini salamak amacyla kullanlr. TextBox kontrolndeki yaz
deitii zaman TextChanged olay gerekleir.

private void textBox1_TextChanged(object sender,


System.EventArgs e)
{
// TextBox iindeki yaz deitii zaman
// aadaki kod alr.
MessageBox.Show("Yaz deitirildi: " +
textBox1.Text);
}

HERKES N WINDOWS
10 KISIM I:

Label
Bir Windows etiketini temsil eder. Kullancya, form zerinde bir yazy
gstermek amal kullanlr. Bu yaznn grnm, Label kontrolnn baz
zellikleri ile deitirilir.
TextAlign (Yaz Hizalama)
Yaznn Label kontrol zerinde nerede duracan belirler.

Font (Yaz Tipi)


Font zellii birok alt zellik tar. Bunlardan bazlar en sk kullanlan
zelliklerdir.
o Name
Yaz tipinin ismini belirler. Varsaylan Microsoft Sans Serif
seilidir.
o Size
Karakterlerin boyutunu belirler. Varsaylan byklk 8,5
deerini alr.
o Bold (Kaln)
Yaznn kaln tipte olmasn belirler.
o Italic (Yatay)
Yaznn italik tipte olmasn belirler.
o UnderLine (Alt izgili)
Yaznn alt izgili olmasn belirler.

ComboBox
Bir Windows alan kutusunu temsil eder. ComboBox kontrol, kullanclarn
baz deerleri alan bir listeden semesini salar. Listeye tasarm annda veya
alma annda e eklenebilir. Listeye e eklemek iin kontroln Items
zelliinden faydalanlr.

HERKES N UNIX
BLM 1: 11

Tasarm annda e eklemek iin Properties panelinden Items zellii seilir.


String Collection Editor penceresinde, her enin deeri tek bir satrda
yazlr.

alma annda e eklemek iin kod sayfasnda, kontroln Items zelliinin


Add metodu kullanlr.

private void Form1_Load(object sender,


System.EventArgs e)
{
comboBox1.Items.Add("Lise");
comboBox1.Items.Add("niversite");
comboBox1.Items.Add("Yksek Lisans");
comboBox1.Items.Add("Doktora");
}

ListBox
Bir Windows liste kutusunu temsil eder. Kontroldeki eler sabit bir liste olarak
grntlenir. ListBox kontrolne e ekleme ilemi, ComboBox kontrolndeki
ilemlere ile ayndr. ComboBox kontrolnden fark, birden fazla e seilebilir
olmasdr.

private void btnBosSiniflar_Click(object sender,


System.EventArgs e)
{
listBox1.Items.Add("YU6501");
listBox1.Items.Add("YM6221");
listBox1.Items.Add("YM6102");
listBox1.Items.Add("YU6412");
}

HERKES N WINDOWS
12 KISIM I:

Timer
Bir Windows sayacn temsil eder. Saya almaya balad zaman, belirli
zaman aralklarnda Tick olay gerekleir. Timer kontrolnn Interval
deeri, Tick olaynn ka milisaniyede bir gerekleeceini belirler. rnein
Interval deeri 2000 olan bir saya, Tick olaynda yazlan kodlar iki
saniyede bir altracaktr.
Sayac balatmak iin kontroln Start metodu, durdurmak iin ise Stop
metodu kullanlr. Enabled zellii, sayacn aktif olup olmadn belirler.

private void btnBasla_Click(object sender,


System.EventArgs e)
{
// Saya 5 saniyede bir alacak
timer1.Interval = 5000;
timer1.Start();
}

private void timer1_Tick(object sender,


System.EventArgs e)
{
MessageBox.Show("Saya alyor...");
}

private void btnDur_Click(object sender,


System.EventArgs e)
{
timer1.Stop();
}

LAB 4.1: Kronometre Uygulamas


Bu lab tamamladktan sonra:
Form ve zerindeki kontrollerin grnm zelliklerini renecek,
ComboBox, ListBox kontrollerine e ekleyebilecek,
TextBox kontrolnden deer okuyabilecek,
Timer kontrolnn alma eklini reneceksiniz.

HERKES N UNIX
BLM 1: 13

Form zerine kontrollerin eklenmesi,


biimlendirin yaplmas

1. Kronometre isminde yeni bir Windows projesi an.


2. Properties panelinden, Form1 nesnesinin BackColor zelliini
Menu olarak sein. Font zelliini, yanndaki + tuuna basarak
geniletin. Font zelliinin alt zellikleri listelenir.
Name zelliini Tahoma,
Text zelliini Yazlm Uzmanl Kronometre Uygulamas,
Size zelliini 10 olarak ayarlayn.
Form grnm zellikleri, eklenecek kontrollerin (deitirilmedikleri srece)
grnmlerini de etkiler.
3. Toolbox panelinden Form zerine bir Label ekleyin. zelliklerini
atayn:
Text: Kronometrem
Font Name: Forte, Font Size: 28
Dock: Top
TextAlign: BottomCenter
4. Bir Label kontrol ekleyin. zelliklerini atayn:
Text: 0
Font Size: 30
TextAlign: MiddleCenter
Name: lblSure
5. Forma bir Timer kontrol ekleyin. Name zelliini tmrKronometre
olarak deitirin.
PUCU: Kod tarafnda kullanacanz kontrollerin isimlerini deitirmek, daha sonra
ulamak iin zaman kazandracaktr.
6. Bir ComboBox ekleyin. Text zelliini Hz Sein olarak, Name zelliini
de cmbInterval olarak deitirin. Items Collection iine srayla
1000, 2000, 3000, 4000 deerlerini girin.
Bu kontrol, alma annda Timer kontrolnn Interval zelliini
deitirmeyi, dolaysyla kronometrenin hzn ayarlamay salayacak.
7. Biri Dur, dieri Bala Text zelliklerine sahip iki Button ekleyin.
Kontrollerin Name zelliklerini srayla btnDur ve btnBasla olarak
deitirin.
8. Bir ListBox kontrol ekleyin ve Name zelliini lbKayit olarak
deitirin. Bu kontrol kronometrenin balama ve durma zamanlarn
kaydetmeyi salayacak.
9. Bir TextBox kontrol ekleyin. Name zelliini txtSure olarak deitirin
ve Text zelliinde yazan yazy silin.
10. Eklenen kontrolleri, resim (Resim numaras) de grnen ekilde
dzenleyin.

HERKES N WINDOWS
14 KISIM I:

Kodlarn yazlmas
1. Formun zerine sa tklayn ve View Code komutunu sein.
2. Alan kod sayfasnda, KalanSure isimli bir deiken tanmlayn.

public int KalanSure;

3. Formun tasarm grnmne dnn ve Bala isimli Button


kontrolne ift tklayn. btnBasla_Click yordam iine Timer kontroln
ayarlayp balatan, ListBox kontrolne kaytlar giren, kalan sreyi
Label kontrolnde grntleyen kodlar yazn.

private void btnBasla_Click( System.Object sender,


System.EventArgs e ) {
// Balang zaman "KalanSure" deikenine
atanr.
KalanSure = System.Convert.ToInt32( txtSure.Text
);

// Kalan sre kullancya gsterilir.


lblSure.Text = System.Convert.ToString(
KalanSure );

// ListBox kontrolne kayt girilir.


lbKayit.Items.Add( "Kronometre balad: " +
DateAndTime.Now.TimeOfDay.ToString() );

// ComboBox kontrolnden seilen deer,


// Timer kontrolnn alma hzn
belirler.
tmrKronometre.Interval = System.Convert.ToInt32(
cmbInterval.Text );

// Timer kontroln altrr.


tmrKronometre.Start();
}

HERKES N UNIX
BLM 1: 15

4. Dur isimli Button kontrolne ift tklayn. btnDur_Click yordam iine


Timer kontroln durduracak ve ListBox kontrolne kaytlar
ekleyecek kodlar yazn.

private void btnDur_Click( System.Object sender,


System.EventArgs e ) {
// Timer kontroln durdurur.
tmrKronometre.Stop();

// ListBox kontrolne kayt girilir.


lbKayit.Items.Add( "Kronometre durduruldu: " +
DateAndTime.Now.TimeOfDay.ToString() );
}

5. Tasarm grnmnde tmrKronometre isimli Timer kontrolne ift


tklayn. tmrKronometre_Tick yordam iine kalan sreyi azaltacak ve
sre sfrlandnda kronometreyi durduracak kodlar yazn.

private void tmrKronometre_Tick( System.Object


sender, System.EventArgs e ) {
// Her saniye getiinde sure deeri 1
azalacaktr.
KalanSure = KalanSure - 1;

// KalanSure deeri kullancya gsterilir


lblSure.Text = System.Convert.ToString(
KalanSure );

// KalanSure deeri sfra ulamsa kronometre


durdurulur.
if ( KalanSure == 0 ) {
tmrKronometre.Stop();
lbKayit.Items.Add( "Sre Doldu: " +
DateAndTime.Now.TimeOfDay.ToString() );

MessageBox.Show( "Sre doldu" );


}
}

6. Projeyi balatn, metin kutusuna 5 deerini girin. Hz Sein alan


kutusundan 1000 deerini sein ve Bala dmesine basn.
Sre baladktan ve bittikten sonra ListBox kontrolndeki deiiklikler
nelerdir?
Hz 3000 olarak seildiinde balama ve biti zamanlar arasndaki
sre ne kadardr?

Konu 4: MessageBox
MessageBox, kullancya bilgi gstermek iin alan mesaj kutusudur. Bu mesaj
kutusu drt eden oluur.
Text (Yaz): Mesaj kutusunda verilmek istenen bilgiyi tutan yazdr

HERKES N WINDOWS
16 KISIM I:

Caption (Balk): Mesaj kutusunun baldr


Buttons (Dmeler): Mesaj kutusunda hangi dmelerin
gsterileceini belirler.
Icon (Simge): Mesaj kutusunda gsterilecek olan simgeyi ve ald
zaman kartlacak sesi belirler.

MessageBox.Show("Devam etmek istiyor musunuz?", "Uyar",


MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

Mesaj kutusu, kapanrken hangi dmenin basldn DialogResult nesnesi


ile programcya bildirir.

if(MessageBox.Show("Deiiklikler kaydedilsin mi?", "Kayt",


MessageBoxButtons.YesNoCancel) == DialogResult.Cancel)
{
// ptal tuuna basld zaman
// buraya girilir.
}

HERKES N UNIX
BLM 1: 17

Konu 5: Deiken Sabit Nedir,


Deikenlerin ve Sabitlerin Tanmlanmas

Deikenlerin - Sabitlerin Tanmlanmas


Dim anahtar kelimesi ile tanmlanr
int sayi;
string kelime;

Option Explicit Off, tanmlanmam deikenlerin


kullanmna izin verir
Deikenlere, kapsam alan dndan eriilemez
Sabitler tanmlandktan sonra deitirilemez

const int buffer = 255;

Deiken Nedir, Nasl Tanmlanr


Program yazarken, baz verilerin daha sonra kullanlmak zere bir yerde
tutulmas gerekebilir. rnein bir hesaplama yaplrken, nceden hesaplanm
verileri kullanmak istenirse, bu verileri tekrar hesaplamak yerine hafzada
tutmak performans artracaktr. Veya veritabanndan alnan bir kullanc isminin
hafzada tutulmas, bu deer her istendiinde veritabanna balanp
alnmasna tercih edilmelidir. Verilerin bu ekilde hafzada tutulmas
deikenler ile salanr.
Deikenler farkl trde verileri tuttuklar iin, farkl tiplere sahip olabilirler. Bir
negatif veya pozitif sayy tutan deiken ile yaz tutan bir deiken farkl tiplere
sahiptirler.

int sayi;
string kelime;

Tanmlanan deikenlerin tipleri deiken isminden nce belirtilir.


Deiken isimlerini belirlerken baz noktalara dikkat etmek gerekir.
Boluk, nokta, soru iareti, noktal virgl, ift trnak, tek trnak, aritmetik
operatrler, karlatrma ve atama operatrleri, parantezler
kullanlamaz.
Say ile balayamaz.

HERKES N WINDOWS
18 KISIM I:

Visual C#.NET dilinde tanml anahtar kelimeler kullanlamaz.


PUCU: Deiken isimlerinde Trke karakter kullanlrsa, farkl dil seenekli iletim
sistemlerinde alma annda hata retecektir.

Hatal baz deiken tanmlar:

int int;
short (sayi);
int 333sayisi;
string kelime;
string <isim>;

Ayn tipteki deikenler tek bir satr iinde tanmlanabilir.


int sayi1, sayi2;

Deikenlere deer atamak = operatr ile yaplr. Eitliin sa tarafndaki


deer, sol tarafta bulunan deikene atanr. Dolaysyla sa taraftaki ifadenin
deeri deimez.
sayi1 = 10;
sayi2 = sayi1;

Deikenler tanmlandklar srada balang deeri alabilirler.


string isim = Enis Gnesen;

Deikenler program iinde, tuttuklar verilere ulamak iin kullanlr. Ancak


deikenlere ulamak, tanmlandklar yerde veya alt bloklarda mmkndr.
Bu kavrama deikenlerin kapsam alan (Scope) denir.
Kapsam alan dndaki bir yerden deikene ulalamaz.

namespace NameSpace1
{
class Class1
{
int SinifDegiskeni;

void Sub1()
{
int YordamDegiskeni;

while(true)
{
int DonguDegiskeni;
}
}

void Sub2()
{
int YordamDegiskeni2;
}
}
}

Tablo 0-i, kod bloklarndan hangi deikenlere ulaabilindiini gsterir.


Class1 Sub1 Sub2 Loop

HERKES N UNIX
BLM 1: 19

SinifDegiskeni Evet Evet Evet Evet


YordamDegiskeni Evet Evet
YordamDegiskeni2 Evet Evet
DonguDegiskeni Evet
Tablo 0-i

Uygulamann almas deikenlerin kapsam alanlarndayken, bu deikenler


bellekte tutulur. Dolaysyla deikenlerin tanmlandklar yer, kullanlaca
amaca gre seilmelidir. rnein bir deiken birden fazla yordamda
kullanlacaksa, bir st dzeyde (Class dzeyinde) tanmlanmalar gerekir.
Ancak sadece bir yordam iinde kullanlan deikenler class dzeyinde
tanmlanrsa, fazladan bellekte yer tutar ve performans der. Class
seviyesindeki deikenler, ayn class iindeki fonksiyonlar ile deitirebilir ve
class rneinin yaam sresinde ilgili zelliklerine eriim salanabilir.

Sabit Nedir, Nasl Tanmlanr


Sabit, srekli ayn deeri tutan deikendir. Uygulamann almas boyunca
deimeyen bir deer kullanlyorsa sabit kullanlmas, kodun kolay
okunmasn salayacaktr.
Sabitler tanmlandktan sonra deitirilemeyecei iin, tanmlandklar anda
deerlerinin verilmesi gerekir.

const int x = 1;

Sabitlerin kapsam alanlar deikenler ile ayndr.

HERKES N WINDOWS
20 KISIM I:

Veri Tipleri

Veri Tipleri
Boolean
Byte String yazi = "Veri tipleri rnekleri;

Char boolean bool = True;


char karakter = "A;
Date date tarih = #4/23/2005#;

Decimal decimal numerik = -123456789;


double cift = -1.234E-120;
Double single tek = 3.32E+100;
byte bayt = 255;
Int16 - Short short kisaSayi = -32000;

Int32 - Integer int tamSayi = 2000000000;


long uzunSayi = -123456789123456789;

Int64 Long
Single
String

Veri tipi, deikenlerin tuttuklar deerlerin trn ve bellekte tutulacak


boyutunu tanmlar. Deikenleri veri tipleri ile tanmlarken verinin boyutuna
gre bir veri tipi seilmelidir.
Visual C#.NET veri tipleri Tablo 1de listelenmitir.

Veri Tipi Boyut Deer


bool 2 Bayt true false
byte 1 Bayt 0 255
char 2 Bayt Tek bir Unicode karakteri tutar
decimal 16 Bayt Maksimum 29 haneli say tutar. +/-
79,228,162,514,264,337,593,543,950,335
arasnda deer alr
double 8 Bayt Negatif say aral:
-1.79769E+308 ile -4.94065E-324
Pozitif say aral:
4.94065E-324 ile 1.79769E+308
Int32 4 Bayt -2,147,483,648 2,147,483,647
Int16 2 Bayt 32,768 32,767
Int64 8 Bayt -9,223,372,036,854,775,808
9,223,372,036,854,775,807.
float 4 Bayt Negatif say aral:
-3.4028235E+38 ile -1.401298E-45
Pozitif say aral:
HERKES N UNIX
BLM 1: 21

1.401298E-45 ile 3.4028235E+38


string Maksimum 2,147,483,647 Unicode
karakter tutar
Tablo 1

double ve float veri tiplerinin aralnda belirtilen E + say ifadesi, 10 ^ say


ile arplacan belirtir. rnein 12 E-3 ifadesi, 12 * 0.001 anlamna gelir.
-1.7E-5 = -0.000017
-1.7E+10 = -17000000000.0
0.7432E+2 = 74.32
7432E-3 = 7.432

NOT: Int16, Int32, Int64 .NET veri tipleridir. Visual C# dilindeki karlklar short,
int, long veri tipleridir.

string yazi = "Veri tipleri rnekleri";

bool b = true;
char karakter = "A";

decimal numerik = -123456789;


double cift = -1.234E-120;
float tek = 3.32E+100;
byte bayt = 255;

short kisaSayi = -32000;


int tamSayi = 2000000000;
long uzunSayi = -123456789123456789;

Byk veri tiplerinden kk veri tiplerine dnm srasnda, deer kayplar


meydana gelebilir. rnein float tipinden short tipine yaplacak bir
dnmde virglden sonraki saylar kaybedilecektir.

float virgullu = 1.12;


short kisaSayi = (float) virgullu;
// kisaSayi deikenin son deeri 1 olur

HERKES N WINDOWS
22 KISIM I:

struct

Kullanc tanml veri tipi


struct Nokta
{ int x;
int y;
void Degistir(int yeniX , int yeniY)
{ x = yeniX;
y = yeniY;
}
}
struct Ucgen
{
Nokta n1;
Nokta n2;
Nokta n3;
}

struct veri tipleri, programclarn kendilerinin tanmlad veri tipleridir. struct,


birka veri tipinin bir araya getirilip oluturulduu bileik bir tiptir. struct veri
tiplerinde yordam tanmlar da yaplabilir.

struct Nokta
{
int x;
int y;

void Degistir(int yeniX , int yeniY)


{
x = yeniX;
y = yeniY;
}
}

struct Ucgen
{
Nokta n1;
Nokta n2;
Nokta n3;
}

HERKES N UNIX
BLM 1: 23

Dizilerle almak

Diziler
Ayn tipte veriyi bir arada tutar
Birden fazla boyutlu olabilir
string [] isimler;
string [] isimler = new string[10];
string [] isimler;
// ...
isimler = new string[4];

Length, Rank
GetLength, Clear, Reverse, IndexOf

Dizi deikenleri, ayn tipte birok veriyi bir arada tutmay salar. Benzer
ilemlerde kullanlan deikenler bir dizi altnda listelenebilir. rnein
kullancdan alnan isimler String tipinde bir dizi iinde toplanabilir.

string [] isimler;

Dizilerin ka eleman ierecei, dizi tanmlanrken ya da daha sonra belirtilebilir:

string [] isimler = new string[10];

string [] isimler;
// ...
isimler = new string[4];

Dizilerin indisleri sfrdan balar. rnekteki isimler dizisinin 4 tane String


tipinden eleman vardr.
Dizilerin elemanlarna ulamak iin, istenilen elemann indisi verilmesi gerekir.

isimler[0] = Ali;
isimler[1] = Ahmet;
isimler[2] = Mehmet;
isimler[3] = Aye;

MessageBox.Show(isimler[3]);

HERKES N WINDOWS
24 KISIM I:

Dizilere tek tek deer atanabildii gibi, tanmlarken de balang deerleri


atanabilir.

string [] isimler = {"Ali","Ahmet","Mehmet","Aye"};

Diziler tek boyutlu olduu gibi, birka boyutlu diziler de tanmlanabilir.

// lk boyutunda 5, kinci boyutunda 6 int deeri olan


// 2 boyutlu dizi
int [,] matris = new int[5,6];

Burada dizinin ilk boyutunda 5 tane eleman vardr. lk boyuttaki her eleman iin
kinci boyutta 6 eleman bulunur. Dolaysyla toplam 30 elemanl bir dizidir. Bu
dizide bir boyut daha olsayd, o boyutun her eleman iin dier boyutlardaki 30
eleman bulunacakt.
ok boyutlu dizilerin eleman saylar boyutlarndaki eleman saylarn arparak
hesaplanabilir.

int [,,,,] dizi = new int[boyut1,boyut2,boyut3,... ,boyutn];


// Eleman says:
// boyut1 * boyut2 * ... * boyutN

ok boyutlu dizilere balang deerleri, dizinin boyutu dikkate alnarak


verilmelidir. Boyutlardaki elemanlar kme parantezleri ile gruplanmaldr.

// lk boyutunda 2, ikinci boyutunda 4 eleman olan


// 2 boyutlu dizi
int [,] matris = {{1, 2, 3, 4}, {5, 6, 7, 8}};

ok boyutlu dizilerin elemanlarna ulamak iin, her boyut iin indis gstermek
gerekir.

matris[0, 0] = 1;

Baz dizi zellikleri ve metotlar


Diziler, .NET Framework iinde tanml Array snf temsil eder. Tm diziler
Array snfnda tanml zellikleri ve metotlar kullanrlar.
Length
Dizinin btn boyutlarndaki toplam eleman saysn veren zelliktir.
ComboBox [] ComboBoxDizisi = new ComboBox[20];
MessageBox.Show(ComboBoxDizisi.Length.ToString());
// Sonu = 20

int [] dizi = new int[1, 4, 4, 5, 6];


MessageBox.Show(dizi.Length.ToString());
// Sonu = 2 * 5 * 5 * 6 * 7 = 2100
Rank
Dizinin boyut saysn veren zelliktir.
MessageBox.Show(dizi.Rank.ToString());
// Sonu = 5
GetLength
HERKES N UNIX
BLM 1: 25

ndisi verilen boyutun ka elemanl olduunu gsterir. Burada indisin


sfrdan baladna dikkat edilmelidir.
int [,,,,] dizi = new int[10, 40, 50, 80, 90];
MessageBox.Show(dizi.GetLength(4).ToString());
// Sonu = 90

Clear, Reverse, IndexOf metotlar Array snfnda Shared (paylatrlm)


olarak tanml metotlardr. lemin yaplaca dizi parametre olarak verilmelidir.
Clear
Parametre olarak verilen dizinin, belirtilen indis aralndaki tm deerleri
temizler. Temizleme ileminde atanan deer, dizi elemanlarnn tiplerine
gre deiir. rnein int tipinde tanml bir dizinin elemanlar temizlenirse
0 deerini alacaktr. Buna karn String tipindeki elemanlar (bo yaz)
deerini alr.
int []dizi= {12, 13, 14, 15};
// 1. indisten balayarak, 3 eleman temizle
Array.Clear(dizi, 1, 3);
MessageBox.Show(dizi[2].ToString());
//Sonu = 0

// Dizinin tm elemanlarn temizler


Array.Clear(dizi, 0, dizi.Length);
Reverse
Parametre olarak verilen dizinin eleman srasn tersine evirir. Dizinin tm
elemanlarnn veya belirli indis aralndaki elemanlarnn sras tersine
evrilebilir.
string [] harfler = {"A", "B", "C"};
Array.Reverse(harfler);
MessageBox.Show(harfler[2]);
// Sonu = A

string [] harfler = {"A", "B", "C"};


Array.Reverse(harfler, 0, 1);
MessageBox.Show(harfler[2]);
// Sonu = C

IndexOf
lk parametrede verilen dizide, ikinci parametrede verilen deeri arar.
Aranan deer dizide bulunursa indisi, bulunamazsa -1 dndrr.
float [] notlar = {78.1, 99.9, 100, 12.2};
float maxNot = 100;
MessageBox.Show(Array.IndexOf(notlar, maxNot).ToString());
// Aranan maxNot deerinin indisi = 2

HERKES N WINDOWS
26 KISIM I:

Debug

Debug
BreakPoint ile alma durdurulur
Deikenlerin durumlar izlenir
Autos, Locals, Watch panelleri
Kodlar arasnda ilerlenerek her etapta
deikenler izlenir
Step Into, Step Over, Step Out, Continue

Visual Studio Debug arac, alma annda kodlar arasnda satr satr
ilerleyerek hatalar bulmay salar. ncelemeye balamak istenen kod satr
zerinde bir BreakPoint (durma noktas) konarak, hata ayklaycnn bu satr
altrlmadan nce orada durmas salanr.

Uygulama altrldnda, BreakPoint konulan kod satrna kadar durmaz.


Belirtilen satra sra gelindiinde, kod sayfasnda, o an zerinde bulunan satr
ok ile gsterilir. Visual Studio ile hata ayklarken, tanmlanan deikenlerin o
andaki deerler incelenerek mantksal hatalar bulunabilir.

HERKES N UNIX
BLM 1: 27

Hata ayklama srasnda baz Visual Studio panelleri, deikenlerin, kontrollerin


ve nesnelerin deerlerini listelemek iin kullanlabilir. Bu paneller Debug
mensnde Windows alt mensnden gsterilir.
Autos Paneli
almakta olan satrdaki ifade ile bir nceki ifadede bulunan deiken ve
kontrollerin deerlerini listeler.
Locals Paneli
inde bulunan kapsam alanndaki tm deikenlerin deerlerini listeler.
Watch Paneli
Deeri incelenmek istenen deiken veya kontroller bu panele elle yazlmaldr.

Kodlar arasnda ilerlemek ve hata ayklamaya devam etmek iin drt yol vardr.
Bu komutlar Debug mensnden veya Debug ara ubuundan ulalabilir.
1. Step Into
Kod satrnda bir yordam altrlacaksa, bu yordamn iine girer. Bu
yordam farkl bir yerde ise, ilgili sayfa alr ve hata ayklamaya devam
edilir.
2. Step Over
Herhangi bir yordam iine girmeden, iindeki kapsam alannda almaya
devam eder.
3. Step Out
Bulunan yordamdan karak hata ayklamaya devam eder.
4. Continue
Birden fazla durma noktas yerletirilmise, bir sonraki noktaya kadar
almaya devam eder.
Hata ayklama, altrlacak hibir satr kalmadnda durur ve uygulama
normal almasna devam eder. Durma noktalar kaldrlarak ya da pasif hale
getirilerek uygulamann durmas engellenebilir.
Btn durma noktalarn kaldrmak iin Debug mensnden Clear All
BreakPoints komutu, pasif hale getirmek iin Disable All BreakPoints
komutu verilmelidir. Durma noktalarn aktif hale getirmek iin tekrar ayn komut
seilmelidir.

HERKES N WINDOWS
28 KISIM I:

Altrma
Bu uygulamada veri tiplerinin kullanm yerlerine, diziler ile alma rneklerine
baklacaktr.

struct veri tipi


1. Snf isminde bir Windows projesi an.
2. Alan form zerine sa tklayarak View Code komutunu sein. Kod
sayfasnda class dzeyinde bir struct tanmlayn.
public struct Ogrenci {
public string Isim;
public string Soyad;
public char Sube;
public float OrtalamaNotu;
public bool DevamEdiyor;
}
3. Ogrenci tipindeki deerleri tutmak iin, class dzeyinde iki elemanl bir
dizi tanmlayn
public Ogrenci[] ogrenciler = new Ogrenci[2];

4. Formun Load olayna, uygulama alrken yeni renci ekleme


kodlarn yazn.
Ogrenci ogrenci1 = new Ogrenci();

ogrenci1.Isim = "Ali";
ogrenci1.Soyad = "Veli";
ogrenci1.Sube = "C";
ogrenci1.OrtalamaNotu = 67.1;
ogrenci1.DevamEdiyor = true;

Ogrenci ogrenci2 = new Ogrenci();

ogrenci2.Isim = "Ahmet";
ogrenci2.Soyad = "Veli";
ogrenci2.Sube = "C";
ogrenci2.OrtalamaNotu = 72.9;
ogrenci2.DevamEdiyor = true;

ogrenciler[ 0 ] = ogrenci1;
ogrenciler[ 1 ] = ogrenci2;

5. Forma btnOgrenciEkle isminde bir Button kontrol yerletirin. Bu


kontroln Click olayna, diziye yeni bir renci kayd ekleyen kodu
ekleyin.
// ogrenciler dizinde bo yer kalmad iin
// diziyi, eski deerleri kaybetmeden tekrar
// boyutlandrmak gerekir.
Ogrenci[] gecici = new Ogrenci[ 3 ];
System.Array.Copy( ogrenciler, gecici,2 );
ogrenciler = gecici;

Ogrenci ogrenci = new Ogrenci();

ogrenci.Isim = "Veli";
ogrenci.Soyad = "Veli";
ogrenci.Sube = char.Parse( "D" );
HERKES N UNIX
BLM 1: 29

ogrenci.OrtalamaNotu = System.Convert.ToSingle( 92.1 );


ogrenci.DevamEdiyor = false;

ogrenciler[ 2 ] = ogrenci;

ogrenciler dizisine baka bir yordamdan nasl eriildi?


Formun Load olaynda ogrenci isimli bir deiken tanmland halde, Button
kontrolnn Click olaynda ayn isimde bir deiken nasl tanmlanabiliyor?

Dizi ilemleri
1. Forma bntOzellikleriGoruntule isminde bir Button kontrol ekleyin ve
Click olaynda, diziden indisi verilen renciyi alan kodlar yazn.
int indis = Int32.Parse(textBox1.Text);
Ogrenci secilenOgrenci = new Ogrenci();
secilenOgrenci = (Ogrenci)ogrenciler[indis];

string bilgiler = null;

bilgiler +=secilenOgrenci.Isim + " " + secilenOgrenci.Soyad;


bilgiler +="\n";
bilgiler +="Notu: " + secilenOgrenci.OrtalamaNotu + "\n";
bilgiler +="ubesi: " + secilenOgrenci.Sube + "\n";
bilgiler +="Devam ediyor mu: " + secilenOgrenci.DevamEdiyor;

MessageBox.Show(bilgiler, MsgBoxStyle.Information, "renci


Bilgileri" );

PUCU: "\n"ifadesi, String deikenlerinde yeni satra geilmesini salar.

Aritmetik ilemler
1. Forma btnOrtalamaHesapla isminde bir Button kontrol ekleyin ve
Click olaynda snfn ortalamasn hesaplayan kodu yazn.
double not1 = ogrenciler[ 0 ].OrtalamaNotu;
double not2 = ogrenciler[ 1 ].OrtalamaNotu;
double not3 = ogrenciler[ 2 ].OrtalamaNotu;

int ortalama = ( ( int )( ( not1 + not2 + not3 ) / 3 ) );


MessageBox.Show( ortalama.ToString() );

2. Not3 deikeninin tanmland yere BreakPoint koyun ve projeyi


altrn.
3. Form aldnda btnOrtalamaHesapla dmesine basn.
Uygulamann almas durma noktas konulan yerde duracaktr.
4. Debug mensnden Windows alt mensnden Autos komutunu sein.
Autos panelinde not1 ve not2 deikenlerinin deerlerini inceleyin.
5. Debug mensnden Windows alt mensnden Watch komutunu sein.
Watch panelinde Name stununa ogrenciler yazn. ogrenciler dizisini
+ dmesine basarak geniletin ve dizinin elemanlarnn deerlerini
inceleyin.
HERKES N WINDOWS
30 KISIM I:

6. Debug mensnden Step Into komutunu sein. Bu ilemi Debug


ara ubuu ile ya da F11 tuuna basarak yapabilirsiniz.
7. Gsterilen hata mesajn inceleyin. Continue dmesine basarak
uygulamay sonlandrn.
8. Uygulamay tekrar altrn ve nce btnOgrenciEkle dmesine
daha sonra btnOrtalamaHesapla dmesine basn.

Konu 8: Operatrler

Operatrler
Aritmetik Operatrler
arpma *, Blme /, Toplama +, karma -
s alma ^, Mod alma (Mod)
Karlatrma Operatrleri
Kk <, Kk Eit =<, Byk >,
Byk Eit >=, Eit =, Eit Deil <>
String Operatrleri
&, Split, ToCharArray, Insert, Remove

Visual C# .NET dilinde alrken, deikenler zerinde birok ilem yaplr.


Hesaplamalarda aritmetik ilemler, kontrollerde karlatrma ilemleri veya
mantksal ilemler yaplr. Bu ilemler iin Visual C# .NET dilinde tanml
operatrler kullanlr.

Aritmetiksel Operatrler
Bu operatrler aritmetik ilemlerinde, saylarla veya say tutan ifadelerle
kullanlr.
arpma
int sayi = 100;
sayi = 200 * 2;

Blme
double bolum;
bolum = sayi / 23;

karma

HERKES N UNIX
BLM 1: 31

int sonuc = bolum 100;

Toplama
int toplam;
toplam += sonuc;
// Bu ifade, toplam = toplam + sonuc ile ayn anlama gelir

PUCU: Aritmetik operatrleri, eittir ifadesi ile beraber kullanlrsa, ilem deikenin
kendisi ile yaplr.
Mod alma
int kalan = toplam % 42;
// Sonu, toplam deikenindeki deerin 42 ile
// blmnden kalan saydr.

Karlatrma Operatrleri
Bu operatrler veri tiplerini birbirleriyle karlatrmak iin kullanlr. Bu
operatrler ile yaplan ilemlerin sonucunda true ya da false deeri dner.
Karlatrma operatrleri yalnzca say tipleri zerinde yaplmaz.

Kk
double sayi = 1.5;
float sayi2 = 1.3;

sayi2 < sayi


// Sonu: True

Kk Eit

sayi2 <= sayi


// Sonu: True

Byk
sayi2 > sayi
// Sonu: False

Byk Eit
sayi2 >= sayi
// Sonu: False

Eit
sayi2 == sayi
// Sonu: False

Eit Deil
sayi2 != sayi
// Sonu: True

HERKES N WINDOWS
32 KISIM I:

String Operatrleri
String tipleri zerinde gerekletirilen ilemler iin tanml operatrlerdir.
String tipindeki deikenleri birbirine balama + operatr ile
gerekleir.
string isim, soyad;
string IsimSoyad = isim + " " + soyad;
Split
Belirtilen ayraca gre yazy bler, kan sonu String dizisinde tutulur.
Ayra karakterleri sonu dizisinde yer almaz.
string Kelime = "Kelime1:Kelime2:Kelime3";
string [] parcalar;
parcalar = Kelime.Split(':');
// parcalar dizisinin eleman olur:
// Kelime1
// Kelime2
// Kelime3

string [] parcalar2;
parcalar2 = Kelime.Split('m');
// parcalar2 dizisinin drt eleman olur:
// Keli
// e1:Keli
// e2:Keli
// e3

ToCharArray
String deerinin belli bir blmndeki karakterleri ya da tm karakterlerini,
Char dizisi olarak dndrr.
char []harfler = "Kelime".ToCharArray();

// Dizinin 1. elemanndan balayarak 4 karakter oku


char [] harfler = "Kelime".ToCharArray(1,4);

Insert
String tipinde bir deikenin deerine, ilk parametrede belirtilen yerden
balayarak ikinci parametredeki deeri ekler. Ancak bu deikenin
deeriyle oynamaz. Yeni oluturulan String ifadesini dndrr.
string sayilar = "0123456789";
string yeniSayilar;
yeniSayilar = sayilar.Insert(5, "--- Rakamlar ---");
MessageBox.Show(yeniSayilar);
// Sonu: 01234--- Rakamlar ---56789

Remove
lk parametrede verilen deerden balayarak, ikinci parametredeki deer
kadar karakter, deikenden karlr.
yeniSayilar = yeniSayilar.Remove(4, yeniSayilar.Length - 4);
MessageBox.Show(yeniSayilar);
// Sonu: 0123

HERKES N UNIX
BLM 1: 33

Modl Sonu Sorular & Altrmalar

zet

Windows Tabanl Uygulamalar


zellikler, Metotlar, Olaylar
Windows kontrolleri
Deiken, Sabit Tanmlar
Veri Tipleri
Operatrler

1. Arabann fren yapmas ve arabaya arplmas, .NET nesnelerinin


hangi kavramlarna girer?
2. 10 saniyede bir, ListBox kontrolne, kullancdan alnan deerleri
ekleyen kodlar yazn.
3. Deikenler ile sabitlerin fark nedir?
4. 5 < 6 = -1 ifadesi hangi Boolean deerini dndrr, neden? Option
Strict On seildiinde kan hata mesajn inceleyin.

HERKES N WINDOWS
Modl 5: Algoritma ve Dump Coding

Hedefler

Algoritma kurmak
Dump Coding zmlemesi
Ak diyagramlar

Programlamann temelinde, alma akn, izlenecek yollar belirleyen


algoritmalar vardr. Bir i yaplmaya balanmadan nce nasl planlanyorsa,
kodlamaya geilmeden nce de bir alma plan belirlenmelidir. Programlar,
bu planda yazlan kodlar belli bir sra ile okur ve iler. Dolaysyla algoritma
yapsn ok iyi kurmak gerekir. Kurulan algoritmalar ak diyagramlar ile
grsel zenginlik kazanrlar.
Dump Coding yntemi algoritmalar zmenin uzun fakat etkili bir yoludur. Bu
yntem, admlar tek tek inceleyerek algoritma akn zer.

Bu modl tamamlandktan sonra:


Algoritma kurmay renecek,
Dump Coding ile algoritmalar zmleyecek,
Ak diyagramlar ile algoritmalar grsel olarak ifade edebileceksiniz.

HERKES N UNIX
2 KISIM I:

Konu 1: Algoritma Nedir?

Algoritma
in yaplma srasnn belirlenmesidir.
, en kk etaplara ayrlr.
Olas tm hatalarn tespit edilmesi,
gerekli kontrollerin yaplmas gerekir.
Algoritmann yn belirlenmelidir
Veri girii
Kararlar
lemler

Algoritma, bir iin hangi etaplardan geilerek yaplacan gsteren alma


plandr. Algoritma bir programlama dili deildir. Programlama dillerine yol
gsteren bir yntem dizisidir. Her dilde algoritma yazlp uygulanabilir. rnein
bir cep telefonunun el kitapnda yazan, rehber kayd girmek iin izlenecek
yollar, o iin algoritmasdr.

Algoritma yazarken, programn almas iin kullanlan kaynaklarn, yaplmas


gereken kontrollerin veya ilemlerin aka ifade edilmesi gerekir. Ayrca iyi bir
algoritma, tm ihtimalleri kontrol edip istenmeyen durumlarda ne yaplmas
gerektiini belirtmesi gerekir.

rnein, bir e-ticaret uygulamasnda rn sat algoritmas karlr. Satn


alnacak rn seildikten sonra, kullancdan adet miktar bilgisi alnr.
Uygulama yazlrken, bu deerin Int16 veri tipinde olacana karar verildii
dnlrse; kullancnn girdii adet miktar bu deikene atanmadan nce
kontrol edilmelidir. Eer Int16 veri tipinin tutamayaca bir deer girilmise,
alma annda uygulamann beklenmedik ekilde durduu ya da istenmeyen
sonularn retildii gzlemlenir. Ayrca sistemin verdii hata, kullancnn
anlamayaca bir mesaj ierecei iin, uygulamann imajn da kt ynde
etkiler.

Veri girii: alma zamannda ou zaman, ileyiin tamamlanmas iin


dardan bir bilgi girilmesi gerekir. Algoritmann almas iin ihtiya duyduu
HERKES N UNIX
BLM 1: 3

veriler, ilemi balatan kiiden veya belirtilen bir kaynaktan alnabilir. Bu bilgiler
salanmadan ilem devam etmez.

Kararlar: Karar ve kontrol yaplar algoritmann akn ynlendiren en nemli


kavramlardr. Girilen veya ilem sonucunda elde edilen veriler, ilemin amacna
gre kontrol edilir ve sonuca gre algoritma ak istenilen yere ynlendirilir.

lemler: Algoritmann ak boyunca veriler zerinde deiiklikler, yeni deer


atamalar gibi ilemlere ihtiya duyulur. Algoritmalar kurulurken, yaplan
ilemlerin yaln halde, tek tek yazlmas okunabilirlii arttrr.

Algoritmalar adm sras ile alr ve karar yaplar sonucunda farkl bir yere
ynlendirilmedii mddete, bir sonraki adm ile ilemeye devam eder.

rnek: Telefon kulbesinden telefon amak iin rnek bir algoritma


1. Telefon kulbesine git
2. Telefon kart al
3. Telefon srasnda ka kii olduuna bak
4. Kii says sfrdan fazlaysa 3 e dn
5. Kap kapalysa kapy a
6. eri gir, kapy kapat
7. Telefon kartn telefona yerletir
8. Ahizeyi kaldr
9. Numaray evir
10. Konumann bitip bitmediine bak
11. Konuma bittiyse kart al, bitmediyse 10 a dn
12. Bir daha konuma yaplacaksa 7 e dn
13. Kapy a, dar k

Bu algoritmann ilemesi iin, her ihtimal gzden geirilerek, algoritma ak


gerekli yerlere ynlendirilir. rnein kapnn kapal olmas durumunda kapy
amak iin gerekli komutlar verilmelidir. Bu algoritmann ihtiya duyduu
veriler, ya kullanc tarafndan verilir ya da ilem balamadan nce belirlidir.
Sradaki kii says, telefon kart gibi veriler kullanc tarafndan salanm;
evrilecek numara, algoritma balamadan nce belirlenmitir.

HERKES N UNIX
4 KISIM I:

Konu 2: Dump Coding Nedir?

Dump Coding
Kark algoritmalarn zmlenmesi
Deikenlerin deerleri yazlarak ileyi takip
edilir.

Dump Coding, aptal kodlama anlamna gelir. Bu yntem birok kark


algoritmay zmlememizi salar.

Dump coding yntemi, algoritmann her admnda, deikenlerin tek tek


deerlerini yazp ileyii takip etmektir.

rnek: ki saynn OBEB ini (ortak blenlerin en byn) alan


algoritmalardan bir tanesi Euclid tarafndan gelitirilmitir.

1. ki say gir. Byk A, kk B


2. A says B saysna bl. Tam blnyorsa, OBEB B saysdr. k
3. A saysnn deerini, Kalan saynn deeri yap
4. A ile B saylarn yer deitir. kinci etaba dn

Bu algoritmann alma mant, Dump Coding yntemi ile adm adm


incelenir.
1. ki say girilir. A = 12 ve B = 8
2. A says, B saysna tam blnmyor. Algoritma dier etaptan devam
eder.
3. Kalan say = 4. Dolaysyla A = 4 olur.
4. A says ile B says yer deitirilir. A = 8 ve B = 4 olur. kinci etaba
dnlr.

HERKES N UNIX
BLM 1: 5

5. A says B saysna tam blnyor. OBEB = 4

Konu 3: Ak Diyagramlarnda Kullanlan


Semboller

Ak Diyagram
Bala Bitir
Veri Girii
Karar Verme
Veri Taban
Ekran
Printer
Fonksiyon
Devam

Madde madde yazlan algoritmalarn okunmas kolaydr ancak ileyiin


btnn grmek ou zaman mmkn deildir. Ak diyagramlar,
algoritmalar grsel biimde gstermeyi, dolaysyla daha anlalr hale
getirmeyi salar. Algoritmada yaplacak ilemlerin eitlerine gre eitli
semboller kullanlr.

Bala Bitir
Algoritmann hangi aamadan balayacan ve ne zaman biteceini
gsteren semboldr. Bir algoritmay temsil eden ak diyagramnda, bir
tane Bala ve bir tane Bitir sembol olmaldr.

HERKES N UNIX
6 KISIM I:

Veri Girii
Kullancdan ve baka bir kaynaktan alnan verilerin isimlerini tutar.

Karar Verme
Karar yapsn belirten semboldr. stnde koul ifadesi belirtilir.

Veri taban
Veri tabannda okuma veya yazma ilemi yapldn gsterir.

Ekran
zerinde yazlan yaznn bilgi olarak ekranda gzkeceini belirtir.

Printer
zerinde yazlan yaznn yazcdan karlacan belirtir.

lem
Bir ilem yaplacan belirten semboldr. Her ilem iin ayr bir fonksiyon
sembol kullanlmas, ak diyagramn daha anlalr klar.

HERKES N UNIX
BLM 1: 7

Fonksiyon
lem sembolne yazlamayacak byklkte ilemler, alt ilem olarak bu
sembolle belirtilir.

Konu 4: Algoritma Uygulamalar

Bilet Satma
Bir tiyatro uygulamasnn srekli gerekletirecei temel ilem bilet satmaktr.
Bu ilemi gerekletirmek iin gerekli kodlar yazlmadan nce, algoritma
kurulmaldr.

1. Kullancnn istedii oyun, gn ve yer bilgileri alnr.


2. Veritaban sorgulanarak, belirtilen gnde oynayan oyunun bo yerleri
kartlr.
3. Bo yer says sfrsa, o gnde belirtilen oyun oynamyordur ya da
oyundaki btn yerler satlmtr.
4. Her iki durumda da bilet kesilemedii iin ekrana hata mesaj gsterilir.
Gn ve oyun bilgilerini batan almak iin ilk etaba dnlr.
5. Kullancdan oturmak istedii yer bilgisi alnr.
6. stedii yerin dolu olup olmad kontrol edilir.
7. Yer dolu ise ekrana hata mesaj gsterilir ve yer bilgisi tekrar alnmak
zere 5. etaba dnlr.
8. Yer bosa, veritabannda oyunun yer kaytlar gncellenir.
9. stenilen gn, oyun ve yer bilgilerini ieren bilet yazcdan kartlr.

HERKES N UNIX
8 KISIM I:

ay Demleme
Bu rnekte, bir ay demleme ileminde yaplmas gereken ilemleri, kontrol
edilmesi gereken olaylar ieren algoritma kurulur.

1. Kullancdan su vermesi beklenir.


2. Suyu stma ilemi yaplr.
3. Suyun kaynayp kaynamad kontrol edilir. Kaynamamsa 2. etaba
dnlr.
4. ay daha nceden hazr olduu iin, kullancdan beklenmez. Demlie
ay koyma ilemi yaplr.
5. Kullancdan, demleme ileminin ne kadar srecei bilgisi alnr.
6. Kullancdan alnan demleme sresi ile imdiki zaman (ayn demlenmeye
balad zaman) toplanr. kan deer, BitisZamani isimli deikene atlr.
Bu deiken demleme ileminin ne zaman bitecei bilgisini tutar.
7. imdiki zaman, biti zamanndan kkse ayn demlenmesi iin ayrlan
sre daha dolmam demektir. Bu sre dolana kadar 7. etap tekrarlanr.
8. ayn demlendiini, kullancya ekran zerinde bildiren bir mesaj kartlr.

HERKES N UNIX
BLM 1: 9

niversite Eitim Notunu Hesaplama


niversitede bir dersin baar notu, genelde bir vize ve bir final notu hesaplanr.
Vize notunun katsays finalden daha dktr. Sonuta kan not 50 ve
styse renci geer, 50 altysa kalr. Bu rnek, vizenin %30 ve finalin %70
arlkl olduu baar notunun hesaplanmasn ak diyagram ile gsterir.

1. Notu hesaplanacak rencinin numaras kullancdan alnr.


2. Veritabanndan rencinin vize ve final notlar ekilir.
3. Eer final notu 28 veya daha dkse renci kalr ve 9. etaba gidilir. Bu
durumda vize notu 100 olsa dahi, sonu olarak toplanan not 50 altnda
olur. Dolaysyla rencinin kalmas kesinleir. Byle bir kontrol yaplmas,
gereksiz ilemlerin yaplmasn engeller.
4. Vize deikenine, veritabanndan alnan vize notunun %30 u atanr.
5. Final deikenine, veritabanndan alnan final notunun %70 i atanr.
6. Sonuc deikenine, vize ve final deerlerinin toplam atanr.
7. Sonuc deerinin 50den byk olup olmad kontrol edilir.
8. Sonuc 50den bykse ekrana Getiniz yazan bir mesaj kartlr.
Algoritmadan klr.
9. Sonuc 50den kkse ekrana Kaldnz yazan bir mesaj kartlr.

HERKES N UNIX
10 KISIM I:

Modl Sonu Sorular & Altrmalar

zet

Algoritma kurmak
Dump Coding zmlemesi
Ak diyagramlar

1. Algoritma kurulurken esas alnacak noktalar nelerdir?


HERKES N UNIX
BLM 1: 11

2. Dump Coding ile Algoritmann fark nedir?


3. Bir rnn bilgilerinin, veri tabanndan ekilerek kullancya
grntleme ileminin algoritmasn kurun
4. Bu algoritmay ak diyagram ile gsterin.

HERKES N UNIX
Modl 6: Karar Yaplar ve Dngler

Konu 1: Karar Yaplar

Hedefler

If Then ElseIf ile ak kontrol


Koul Operatrleri
Select Case
Karar yaplarnn kullanm yerleri

Uygulamalar altrlrken, yazlan kodlarn alma sras, satrlarn teker teker


ilenmesi ile gerekleir. Ancak ou zaman, baz kodlarn sadece belli
durumlarda almas istenir. rnein uygulama alrken kullanc ad ve
parola sorulmas, kullanclarn seviyelerine gre eriim izinleri tanmlanmas
gibi durumlarda kontrol ilemleri yaplmaldr. Bu kontroller de karar yaplar ile
gerekletirilir.
Algoritmalarn akn kontrol etmekte en byk rol, karar yaplarnndr. Visual
C# .NET dilinde farkl ekillerde kullanlan ancak benzer grevlere sahip karar
yaplar tanmldr.
Bu blm tamamlandktan sonra
if else if karar yaplar ile ak kontrol yapabilecek,
Kontrollerde kullanlan koul operatrlerinin tanyacak,
switch karar yapsn kullanabilecek,
Hangi karar yapsnn nerede kullanlacan reneceksiniz.
2 KISIM I:

if

If
Koul ifadesi True ise If blouna girilir.
Verilen koul saland zaman yaplan
ilemleri tutar.

if (gecmeNotu > 50) {


MsgBox("Getiniz tebrikler...");
}

if karar yaps, bir koul saland zaman yaplacak ilemleri kapsar. Kontrol
edilecek koul ifadesinin sonucu true deerini alrsa, kme parantezleri
arasndaki kodlar altrlr.

if(Koul)
{

rnek: Vize ve final notunu kullancdan aldktan sonra, geme notunu


hesaplayan ve notun elliden byk olmas durumunda ekrana getiniz
mesajn kartan algoritma.
BLM 1: 3

double gecmeNotu;
short finalNotu = short.Parse(textBox1.Text);
short vizeNotu = short.Parse(textBox2.Text);

gecmeNotu = finalNotu * 0.7 + vizeNotu * 0.3;

if(gecmeNotu > 50)


{
MessageBox.Show("Getiniz tebrikler...");
}

Koul Operatrleri

Koul Operatrleri
And
Or
Not
AndAlso
OrElse

Veri tipleri ve deikenler zerinde kontrol yaplrken birden fazla koula ihtiya
duyulabilir. Bu durumda, koullar birbirleriyle karlatracak operatrler
kullanlr. Bu kontrollerden dnen deerler Boolean tipinde olduu iin, koul
operatrleri de bu deerler zerinde ilem yaparlar.

& (And)
Bu ifade, verilen koullarn kesiimini alr. Eer tm koullarn deeri true ise
sonu da true olur. En az bir tane false deeri olan koul varsa, sonu false
olur.

Koul 1 Koul 2 Koul 1 && Koul 2


true true true
true false false
false true false
4 KISIM I:

false false false

| (Or)
Bu ifade, verilen koullarn birleimini alr. Eer tm koullarn deeri false ise
sonu false olur. En az bir tane true deeri varsa sonu true olur.

Koul 1 Koul 2 Koul 1 || Koul 2


true true true
true false true
false true true
false false false

&& (AndAlso)
Koullardan biri False ise, dierleri kontrol edilmeden False deeri
dndrlr. Bu tip bir kullanm, birok koulun kontrol edilmesi gerektiinde
performans arttrr.

string [] dizi;
// Diziye eleman ekleme ilemleri
// ...

if (dizi.Length > 0 && dizi[1].EndsWith("."))


{
label1.Text = "Cmle sonundaki kelime: " + dizi[1];
}

Bu rnekte, dizinin ilk eleman zerinde bir kontrol yaplmak isteniyor. Ancak
diziye eleman eklenmemise, ilk elemana ularken hata retilecektir.
Dolaysyla dizinin uzunluunu da kontrol etmek gerekir. Kontrol And ifadesi ile
yaplsayd, dizi elemann noktayla bitip bitmedii ve dizinin uzunluu kontrol
edilecekti. Bu durumda i ie if ifadeleri ile uzun bir kod yazlacakt. Pek ok
kyaslama gerekecek ve performans decekti. Ancak burada, dizi uzunluu
koulu salanmazsa, dier koula geilmeden if kontrolnden klr.

|| (OrElse)
Koullardan biri True ise, dierleri kontrol edilmeden True deeri dndrlr.

string Rol;
// Veritabanndan, kullancnn rol alnr.
// ...

// Sadece Administrator, Moderator ve Power User rolndeki


// kullanclar dosya silme ilemi yapabilirler.
if (Rol == "Administrator" || Rol == "Moderator"
|| Rol = "Power User")
{
// Dosya silme ilemleri
}
BLM 1: 5

Dosya silme ilemi iin, kullancnn rol veritabanndan alndktan sonra,


kontrol ilemi yaplr. Eer bir kullancn rol Administrator, Moderator veya
Power User rolnden biriyse dier kontrollerin yaplmas gerekmez. Bu rnekte
Rol deikeni Administrator deerine eitse, dier iki koul kontrol edilmeden
true ifadesi dner.

! (Deil)
Bir koulun deerini tersine evirir. Koul false ise true, true ise false olur.

Koul ! Koul
true false
false true

if else

If Then Else
If koulunda salanmayan tm durumlar iin
Else ifadesi kullanlr.

ElseIf
Koullarn salanmad durumlarda, yeni
kontrollerin yaplmas iin kullanlr.

Select Case
ElseIf ilevini grr ancak yazlmas okunmas
daha kolaydr.

else ifadesi, if yapsndaki koulun salanmad btn durumlarda devreye


girer.

if(Koul)
{
//Dier kodlar
}
else
{
//Dier kodlar
6 KISIM I:

rnek: Her 100 milisaniyede bir, formun renginin siyahken beyaz olmas,
beyazken ise siyah olmas iin, formun renginin kontrol yaplmas gerekiyor.

public bool Beyaz = true;

private void timer1_Tick(object sender,


System.EventArgs e)
{
if(Beyaz)
{
this.BackColor = Color.Black;
Beyaz = false;
}
else
{
this.BackColor = Color.White;
Beyaz = true;
}
}

if kontrolnde formun beyaz olup olmad bool tipindeki bir deikende


tutuluyor. Koulda beyaz adl deiken eer true ise, formun arka plan siyah
yaplr. Bu koulun salanmad durumda, yani beyaz deikeninin false
olduu durumda, else iindeki kodlar alacaktr ve formun arka plan beyaz
yaplacaktr. Her kontrolden sonra beyaz deikenin deitirilmesinin nedeni,
formun bir siyah bir beyaz olmas istendii iindir.

else if
if deyimindeki koul salanmadysa else deyimindeki kodlar alyordu.
Ancak baz durumlarda else iinde de kontrol yapmak gerebilir.

if(Koul)
{

}
else if(Koul2)
{

}
else if(Koul3)
{

rnek: Gnn saatine gre karlama mesaj kartmak iin, saat deikeni
birok kez kontrol edilmesi gerekir. Sadece bir if kontrol yaplsayd, sadece
iki karlama mesaj kartlabilirdi.

string karsilamaMesaji = " BilgeAdama hogeldiniz!";


int saat = DateTime.Now.Hour;
BLM 1: 7

if ((9 <= saat && saat < 12))


{
karsilamaMesaji = karsilamaMesaji.Insert(0,
"Gnaydn,");
}
else if (12 <= saat && saat < 16)
{
karsilamaMesaji = karsilamaMesaji.Insert(0, "yi
gnler,");
}
else if (16 <= saat && saat < 18)
{
karsilamaMesaji = karsilamaMesaji.Insert(0, "yi
akamlar,");
}

// Formun bal karlama mesajn


// gsterecek ekilde ayarlanr
this.Text = karsilamaMesaji;

switch
switch deyimi else if ile benzer ilevi grr, ancak okunmas daha kolaydr.
switch ile seilen bir deerin kontrol edilmesi Case ifadelerinde yaplr.

string karsilamaMesaji = " BilgeAdama hogeldiniz!";


int saat = DateTime.Now.Hour;

switch (saat)
{
case 9:
case 10:
case 11:
karsilamaMesaji = karsilamaMesaji.Insert(0,
"Gnaydn,");
break;

case 12:
case 13:
case 14:
case 15:
karsilamaMesaji = karsilamaMesaji.Insert(0,
"yi gnler,");
break;

case 16:
case 17:
karsilamaMesaji = karsilamaMesaji.Insert(0,
"yi akamlar,");
break;

default:
karsilamaMesaji = karsilamaMesaji.Insert(0,
"Merhaba,");
break;
}

Buradaki switch kullanm, saat deerine gre ilem gerekletirilmesidir.


Say, case ifadelerinde verilen deerler eitse ilgili kodlar altrlr. default
ise, dier koullarn salanmad tm durumlarda devreye girer.
8 KISIM I:

break ifadesi, kontroln durmas gerektiini belirtir. Saynn belli deerler


aralnda kontrol yaplmas iin bo case ifadeleri kullanlr.

Hangi Karar Cmlesi Nerede Kullanlr?

Karar Yaplarnn Kullanm Yerleri


Select Case ifadesinin yazl ve okunuu daha
kolaydr.
And, AndAlso operatrleri If yaps ile
kullanlabilir.

if ve switch karar yaplar benzer ilevler grseler de kullanm yerlerine ve


birbirlerine gre deiik avantajlar vardr. if else if karar yaplarnda,
kontrol edilen deikenlerin ya da deerlerin her seferinde tekrar yazlmas
gerekir. Bu durumda switch karar yaps, kodlarn yazln ve okunuunu
kolaylatrmas asndan tercih edilmelidir. Ancak switch ile belli deerler
aralnda kontrol yaplmas, case ifadelerinin ard ardna yazlmas gerektii
iin zordur.

Bir grup RadioButton kontrol iinden sadece bir tanesi seilebildii iin,
seilen kontrol bulmak iin else if yapsnn kullanm yeterli olacaktr.

if (RadioButton1.Checked)
{

}
else if (RadioButton2.Checked)
{

}
else if (RadioButton3.Checked)
{

}
BLM 1: 9

Ancak bu kontroller, CheckBox kontrolnn kullanm yapsna uymaz.


Formlarda birden fazla CheckBox kontrol seilebildii iin, seilen kontrolleri
bulmak iin sadece if bloklar kullanlmaldr.

if (CheckBox1.Checked)
{

if (CheckBox2.Checked)
{

if (CheckBox3.Checked)
{

Uygulama
Bu uygulama kullancya, stok durumuna veya tarihe gre deien
grntleme seenekleri sunarak, rn katalogu tantlr. rnler kategorilere
gre ayrlm bulunmaktadr ve ComboBox kontrolleri ile filtrelerden biri
seilmedii takdirde ilem gereklemez.
Stok durumu filtresi ile sadece stokta bulunan ya da stokta kalmam
satlmakta olan rnler listelenebilir. Tarihe gre filtreleme ile yeni kan rnler
ya da tm rnler gzlenebilir.
Uygulamada, ak diyagramndan koda gei aamas rahat bir ekilde
grlecektir.

Algoritmann incelenmesi
Uygulamann algoritmas balang ve rn ekleme algoritmas olarak ikiye
ayrlmtr.
Balang algoritmasnda rn kategorisinin, stok durumu ve tarih filtrelerin
seilip seilmedii kontrol yaplr. Eer herhangi biri seilmedii zaman
kullancya ilgili mesaj gsterilir ve algoritmadan klr. Tm kontroller
yapldktan sonra, ilgili kategorideki rnlerin listeye eklenmesi iin dier
algoritma devreye girer.
10 KISIM I:

rn ekleme algoritmas, ilk algoritmada seilen kriterlere gre, kullancya


gsterilecek rn listesini doldurur. Bu algoritma balang olarak kategori
numarasn alr. Bu kategorideki stokta bulunan rnleri listeye ekler. Stok
durumu filtresinde Hepsi deeri seiliyse, stokta o an bulunmayan rnler de
listeye eklenir. Tarih filtresinde Son kanlar deeri seiliyse, eski rnler
listeden kartlr.
BLM 1: 11

Forma kontrollerin eklenmesi


1. UrunYelpazesi isminde bir Visual C# Windows Projesi an.
2. Forma biri lbUrunler dieri lbKategoriler isminde iki ListBox
kontrol ekleyin. lbUrunler liste kutusu tm filtreler uygulandktan
sonra kan rnleri listeler. lbKategoriler liste kutusuna kategori
isimleri ekleyin:
Video
Kitap
Yazlm
3. Forma biri cmbTarihSirasi dieri cmbStokDurumu isminde iki
ComboBox kontrol ekleyin. cmbTarihSirasi son rnleri;
cmbStokDurumu stoktaki rnleri gsteren filtre olarak kullanlacaktr.
cmbTarihSirasi elemanlarna Son kanlar ve Tm rnler
deerlerini, cmbStokDurumu elemanlarna Sadece Stoktakiler ve
Hepsi deerlerini ekleyin.
4. lblMesaj isminde bir Label kontrol ekleyin. Dock zelliini Buttom
yapn. Bu kontrol filtrelerin seilmedii durumda hata mesajlarn
gsterecektir.
5. lblSecilenUrunler isminde bir Label kontrol ekleyin ve
lbUrunler liste kutusunun stne yerletirin. Bu kontrol, seilen
rnlerin hangi kategoride olduunu gsterecektir.
6. Forma btnListele isminde bir Button kontrol ekleyin.
12 KISIM I:

Kodlarn yazlmas
Bu uygulamada kodlarn tamam btnListele dmesinin Click olayna
yazlacaktr. Kodlar arasndaki numaralar ak diyagramnda ilenen durumlara
referans gnderir. Algoritma 1, balang algoritmasndaki numaralar;
Algoritma 2, rn ekleme algoritmasndaki numaralar ifade eder.
1. btnListele dmesine ift tklayn ve Click olayna gelin. Dmeye
her basldnda liste kutusuna ard ardna eler eklenmemesi ve
hata mesajlarnn temizlenmesi iin gerekli kodlar yazn.

lblMesaj.Text = "";
lbUrunler.Items.Clear();

2. Kategori listesinden, stok ve tarih filtreleri iin alan kutulardan


elerin seili olup olmad kontrol yaplr. Eer seilmemi bir
deer varsa, ilgili hata mesaj lblMesaj etiketinde grntlenir.

// Algoritma 1 - 1
if ( cmbStokDurumu.SelectedIndex == -1 &&
cmbTarihSirasi.SelectedIndex == -1 ) {
lblMesaj.Text = "Stok Durumu ve Tarih Sras
seiniz.";
// Algoritma 1 - 2
}
else if ( cmbStokDurumu.SelectedIndex == -1 ) {
lblMesaj.Text = "Stok Durumunu seiniz.";
// Algoritma 1 - 3
}
else if ( cmbTarihSirasi.SelectedIndex == -1 ) {
lblMesaj.Text = "Tarih Srasn seiniz.";
// Algoritma 1 - 4
}
else if ( lbKategoriler.SelectedIndex == -1 ) {
lblMesaj.Text = "Kategori seiniz.";
}
else {
// Algoritma 1 - 5
3. if else if deyimlerinde tm kontroller yapldktan sonra else
ifadesine geilir. Algoritmann ak bundan sonra rn ekleme
ilemiyle devam edecektir.

switch ( lbKategoriler.SelectedIndex ) {
case 0:
// Sadece stokta bulunan rnler eklenir.
// Algoritma 2 - 2
lbUrunler.Items.Add( "MSDN Tv Visual C# 5" );
lbUrunler.Items.Add( "MSDN Tv Visual C# 4" );

// Stokta bulunan veya bulunmayan rnlerin Hepsi


// seiliyse, kalan rnler de listeye eklenir.
// Algoritma 2 - 3
if ( cmbStokDurumu.SelectedIndex == 1 ) {
// Algoritma 2 - 4
lbUrunler.Items.Add( "MSDN Tv Visual C#" );
lbUrunler.Items.Add( "MSDN Tv Visual C# 2" );
lbUrunler.Items.Add( "MSDN Tv Visual C# 3" );
}
BLM 1: 13

// Eski rnlerin gsterilmesi istenmiyorsa


// listeden kartlr.
// Algoritma 2 - 5
if ( cmbTarihSirasi.SelectedIndex == 0 ) {
// Algoritma 2 - 6
lbUrunler.Items.Remove( "MSDN Tv Visual C#" );
lbUrunler.Items.Remove( "MSDN Tv Visual C# 2" );
}
break;

4. Dier iki kategori iin liste ekleme ilemleri ayndr.


case 1:
lbUrunler.Items.Add( "Yazlm Uzmanl 1" );
lbUrunler.Items.Add( "Yazlm Uzmanl 2" );
lbUrunler.Items.Add( "Yazlm Mhendislii Orta Dzey"
);
lbUrunler.Items.Add( "Yazlm Mhendislii leri Dzey"
);

if ( cmbStokDurumu.SelectedIndex == 1 )
{
lbUrunler.Items.Add( "Yazlm Mhendislii Balang
Dzeyi" );
lbUrunler.Items.Add( "Access Giri" );
}

if ( cmbTarihSirasi.SelectedIndex == 0 )
{
lbUrunler.Items.Remove( "Yazlm Uzmanl 1" );
}
break;

case 2:
lbUrunler.Items.Add( "Visual Studio 6.0" );
lbUrunler.Items.Add( "Visual C# .NET Standard 2003" );
lbUrunler.Items.Add( "Visual C# C# Standard 2003" );

if ( cmbStokDurumu.SelectedIndex == 1 )
{
lbUrunler.Items.Add( "Visual Studio .NET 2005" );
}

if ( cmbTarihSirasi.SelectedIndex == 0 )
{
lbUrunler.Items.Remove( "Visual Studio 6.0" );
}
break;

5. swicth ifadesinde tm eklemeler yapldktan sonra ikinci algoritma


biter. lk algoritmann son aamas olan, kullancya hangi kategoride
rn seildiini gsteren mesaj yazlr ve if karar yaps sonlanr.

// Algoritma 1 - 6
lblSecilenUrunler.Text = lbKategoriler.Text + "
Kategorisindeki rnler";
}
14 KISIM I:

Konu 2: Dngler

Hedefler

For Next Dngs


While, Until Dngleri
Do Loop Dngs
ie dngler
Dnglerin kullanm yerleri

Algoritmalarda baz ilemlerin tekrar almas iin, onlar her seferinde


yazmak gerekir. Ancak bu zm, ok fazla tekrar iin hem yazmay hem de
okumay zorlatrr. rnein yz elemanl bir diziye rasgele say atanmas iin
ilemin yz defa yazlmas gerekir. Dngler ile ilem sadece bir defa yazlr ve
tekrar saysna gre bu ileme geri dnlr.
BLM 1: 15

Bu blm tamamlandktan sonra


For ve While dngsn tanyacak,
ie dngler kullanabilecek,
Hangi dngnn nerede kullanldn reneceksiniz.

For

For Next
Saya, belirtilen aralkta olana kadar ilem
yaplr.
Step ifadesi, sayacn artaca ya da azalaca
miktar belirler.
Next ifadesi, sayac otomatik artrr ya da azaltr.

int fahr;
int derece;
for (int derece = 0; derece <= 100; derece += 10)
{
fahr = derece * 1.8 + 32;
Label1.Text += fahr + " Fahrenheit= ";
Label1.Text += derece + " Celcius" + "\r\n";
}

For dngs bir ilemin belirli sayda yaplmas iin kullanlr.

for (int i = 0; i < 10; i++)


{
MessageBox.Show(Merhaba);
}

Bu dngde 3 parametre vardr.


lk parametre sayacn balang deerini belirler. rnekte, saya
deikeni tanmlanp 0 deeri atanmtr.
kinci parametre bir koul ifadesidir. Bu koul saland srece dng
devam eder. rnekteki dng, i deeri 10dan kk olduu srece
devam edecektir.
nc parametre, her dngden sonra yaplmas gereken ilemi
belirtir. rnekte, her ilemden sonra i deeri bir artrlr.
16 KISIM I:

Dnglerde kullanlan sayalar sadece belli bir sayda ilem yapmay


salamaz. Sayalarn artma veya azalma admlar belirli olduu iin, kod
iersinde ou zaman bu avantajdan yararlanlr.

listBox1.Items.Add("Karakter - ASCII kod karl");

for (int i = 50; i <= 255; i = i + 2)


{
listBox1.Items.Add(Microsoft.VisualBasic.Strings.Chr(i)
& " - " & i)
}

rnein dizi ilemlerinde, dizinin her elamanna ulamak iin saya


kullanlabilir. Sayacn artma hz bir olduu iin dizi[sayac] ifadesi, srayla
dizinin elemanlarna ulamay salar.

int [] dizi = new int[10];


Random r = new Random();

for (int i = 0; i < dizi.Length ; i++)


{
dizi[i] = r.Next(100);
}

DKKAT: Deiken tanmlamalar For dngsnn iinde de yaplabilir. Bu durumda,


deikenin kapsam alan bu dngyle snrl kalr.

For dnglerinin i ie kullanm


ou zaman For dnglerindeki her etap iin baka bir dngnn kurulmas
gerekir. rnein bir mterinin birden fazla telefon numaras bir dizi iinde
tutuluyorsa, btn mterilerin telefonlarn listelemek iin iki dng
kullanlmas gerekir. lk dng tek tek mterileri almak iin, alt dng ise her
mterinin telefonlarn almak iin kullanlmaldr.
BLM 1: 17

public struct Musteri {


public string Isim;
public string Soyad;
public string[] Telefonlari;
}

public Musteri[] Musteriler;


// Musteriler dizisi dolduruyor
// ...

private void Button1_Click( System.Object sender,


System.EventArgs e )
{
int i, j;

for ( i=0; i<=Musteriler.Length - 1; i++ ) {


// lk mteri seiliyor
Musteri m = Musteriler[ i ] ;

Label1.Text += m.Isim + " " + m.Soyad;


Label1.Text += " mterisinin telefonlar:"
+ "\n";

for ( j=0; j<=m.Telefonlari.Length - 1; j++


) {
Label1.Text += m.Telefonlari[ j ] ;
Label1.Text += "\n";
}
}
}
Birden fazla boyutlu dizilerde ilem yaparken de For dngs i ie
kullanlabilir. rnein iki boyutlu bir tabloda, ilk boyut iin bir for dngs, dier
boyut iin de baka bir for dngs kullanlarak dizinin tm elemanlarna
ulalabilir.

Random r = new Random();


string[,] tablo = new string[ 5, 5 ];

byte i = 0;
for ( i=1; i<=4; i++ )
{
tablo[ 0, i ] = "Yazar " + i;
tablo[ i, 0 ] = "Kitap " + i;
tablo[ ( ( int )( r.Next(3)) ) + 1, ( ( int )(
r.Next(3) ) ) + 1 ] = "X";
}

tablo isminde String deerleri tutan bir dizi oluturulur ve dizinin ilk satrna
yazar isimleri, ilk stununa da kitap isimleri konur. For dngsnn sayac
birden balad iin dizinin 0,0 koordinatl ilk elemanna deer atanmaz.

Yazar 1 Yazar 2 Yazar 3 Yazar 4


Kitap 1
Kitap 2
Kitap 3
Kitap 4
18 KISIM I:

Daha sonra tablonun dier elemanlarna rasgele X deerleri atanr. Bu deer


hangi yazarn hangi kitab yazdn gsterecektir.
r.Next(3) + 1 ifadesi 1 4 arasnda rasgele say retir. Bu say tablo
dizisine indis olarak verildiinde ise, kalan hcrelerde X deeri elde edilir.

Yazar 1 Yazar 2 Yazar 3 Yazar 4


Kitap 1 X
Kitap 2 X
Kitap 3 X
Kitap 4 X

Tablonun tm elemanlarn listelemek iin i ie iki For dngs kullanlmaldr.

for ( int j=0; j<=tablo.GetLength( 0 ) - 1; j++ )


{
for (int h=0; h<=tablo.GetLength( 1 ) - 1; h++ ) {
Label1.Text += System.Convert.ToString( tablo[ j, h ]
);
}
Label1.Text += "\n";
}
Yazarlar ve Kitaplar tablosu hazrlandktan sonra, hangi yazarn hangi kitab
yazdn bulmak iin yine tablo elemanlar iinde dolap X deerini aramak
gerekir. lk For dngs ile Kitaplar satrnda, ikinci For dngs ile Yazarlar
stunlarnda gezilir.

for (int j=0; j<=tablo.GetLength( 0 ) - 1; j++ )


{
for (int h=0; h<=tablo.GetLength( 1 ) - 1; h++ )
{
// Tablonun her elemannn deeri
// X deeri ile karlatrlr.
if ( tablo[ j, h ] == "X" ) {
Label2.Text = tablo[ 0, h ] + ", ";
Label2.Text += tablo[ j, 0 ];
Label2.Text += " kitabn yazyor";

break;
}
}
Label1.Text += "\n";
}
Tablonun her eleman kontrol edilir ve X deeri bulunduu zaman yazar ismi
ve kitap ismi ekrana yazdrlr. Yazar isimleri, dizinin ikinci boyutunun ilk
srasnda tutulduu iin tablo[0,h] kodu ile ulalr. Kitap isimleri ise, dizinin
ilk boyutunun ilk srasnda tutulduu iin tablo[j,0] kodu ulalr. Buradaki h
ve j deikenleri o anda kontrol edilen elemann tablodaki indisleridir.

break ifadesi, o anda bulunan For dngsnden kmay salar. Bu rnekte


ikinci For dngs yazarlar stunu zerinde dnd iin, bu dngden
kldnda, ilk For dngsne tekrar geilir. Bu sefer yeni bir kitap iin
BLM 1: 19

yazarlar kontrol edilir. Sonuta bir kitab birden fazla yazar yazmasna ramen,
grntlenecek olan sadece ilk yazardr.

While

While
Verilen koul gerekletii srece ilem
yaplr.
Sayac deitirmek iin kod yazlmas
gerekir.

int toplam = 0;
short sayac = InputBox("Bir say girin");
while (sayac > 0) {
toplam += sayac;
sayac -= 1;
}

While dngs bir koul gerekletii srece alan dngdr.

while(Koul)
{

Birden ona kadar olan saylarn toplamn hesaplamak iin, bir ve on arasndaki
saylar tek tek yazlp toplanabilir. yi bir yntem olmasa da sonucu verir. Ancak
kullancnn girdii bir sayya kadar toplam almak iin bir dng gerekir.

int toplam = 0;
int sayac = int.Parse(txtSayiGirisi.Text);
while (sayac > 0)
{
toplam += sayac;
sayac -= 1;

Burada kullancnn girdii saydan itibaren sfra kadar giden bir dng kurulur.
Dng sayacn sfrdan byk olduu her durum iin alacaktr. Saya
sfrlandnda ise dngden klr.
20 KISIM I:

Sonsuz Dngler
While dngs saya ile kullanlrken, sayacn deitirilmesine dikkat edilmesi
gerekir. Eer saya deitirilmezse, While ifadesindeki koul hep true deeri
alaca iin sonsuz dngye girilir.

Sadece sayacn kontrol edilmedii durumlarda deil, koullarn


yazlmalarndaki mantk hatalar da sonsuz dngye sebebiyet verir.
int i = 0;

while (i < 10 | i > 5)


{
label1.Text = "Sonsuz dngye girildi";
i += 1;
}

For dngsnde saya, artrma ifadesindeki deerden fazla bir sayda


azaltlrsa yine sonsuz dngye girilir. Bu dngnn almas, int veri tipinin
alabilecei minimum deere ulanca hata ile sonlanr.

for(int i = 0; i <= 9; i += 3)
{
MessageBox.Show("Sonsuz dng");
i -= 4;
}

Uygulama
Bu uygulamada, bir satran tahtas zerindeki bir filin hareket alan hesaplanr.
Satran tahtas rasgele talarla doldurulur. Verilen bir koordinatta bulunan fil,
apraz hareketlerine gre nereye ilerleyebilecei bulunur. Eer filin nnde bir
ta varsa, bu tan bulunduu yere ve daha gerisine ilerleyemeyecektir. Filin
drt bir yanna apraz olarak hareket edebilecei gz nnde bulundurulmas
gerekir.

Tahtann doldurulmas
1. Satranc isminde bir Windows projesi an.
2. Form zerine lbHareketAlani isminde bir ListBox, btnGoster isminde
bir Button ekleyin.
3. btnGoster dmesinin Click olayna 8 x 8 boyutunda bir dizi tanmlayp
dolduran kodlar yazn. Bu dizi bool tipinde deerler tar. Verilen indisteki
elemann deeri true olmas, o koordinatta bir tan bulunduunu belirtir.
lbHareketAlani.Items.Clear();
int a,b;

Random r = new Random();


bool[,] tahta = new bool[ 8, 8 ];

for ( a=0; a<=7; a++ ) {


for ( b=0; b<=7; b++ )
{
int sonuc = (r.Next() % 2);
BLM 1: 21

if (sonuc == 1)
{
tahta[ a, b ] = true;
}
else
{
tahta[ a, b ] = true;
}
}
}

Hareket Alan
Tahta zerindeki bir fil, drt apraz yne doru ilerleyebilir. Dizide apraz olarak
ilerlemek x ve y koordinatlarnn eit oranda artmas ve azalmas demektir.
Dizide ilerlerken x ve y koordinatlarnn sfrdan kk ve dizinin boyutundan
byk olmamasna dikkat edilmelidir. Drt farkl yne gre, koordinatlar artacak
ya da azalacaktr.

1. Fili tahta zerine yerletirmek iin kullancdan koordinatlar aln.


byte x = byte.Parse( txtFilinXKoordinati.Text ) ;
byte y = byte.Parse( txtFilinYKoordinati.Text ) ;

2. 0, 0 ynne doru olan yoldaki talarn kontroln yapn. Filin x ve y


koordinatlarn birer drerek, koordinatlarda ta var m yok mu kontrol
edilir. Eer ta yoksa bu kareye ilerlenebildiini, lbHareketAlani liste
kutusuna koordinat eklenerek gsterilir. Yol zerinde bir ta varsa, daha
fazla ilerlenemeyecei iin While dngsnden klr.
int i = 1;
while ( x - i >= 0 & y - i >= 0 )
{
if ( !( tahta[ x - i, y - i ] ) ) {
lbHareketAlani.Items.Add((x -
i).ToString() + " - " + (y - i).ToString() );
i += 1;
}
else {
break;
}
}

3. 7, 0 ynne doru ilerlenir ve olas hareketler liste kutusuna eklenir.

i = 1;
while ( x + i < tahta.GetLength( 0 ) & y - i >=
0 ) {
if ( !( tahta[ x + i, y - i ] ) ) {
lbHareketAlani.Items.Add( (x +
i).ToString() + " - " + (y - i).ToString() );
i += 1;
}
else {
break;
}
}

4. 7, 7 ynne doru kontrol yaplr.


22 KISIM I:

i = 1;
while ( ! ( x + i >= tahta.GetLength( 0 ) | y +
i >= tahta.GetLength( 1 ) ) ) {
if ( !( tahta[ x + i, y + i ] ) ) {
lbHareketAlani.Items.Add( (x +
i).ToString() + " - " + (y + i).ToString());
i += 1;
}
else {
break;
}
}

5. 0, 7 ynne doru talar kontrol edilir.


i = 1;
while ( x - i >= 0 & y + i < tahta.GetLength( 1
) ) {
if ( !( tahta[ x - i, y + i ] ) ) {
lbHareketAlani.Items.Add( (x -
i).ToString() + " - " + (y + i).ToString() );
i += 1;
}
else {
break;
}
}

Debug
Kodlar yazldktan sonra indislerin doru kullanldn, dnglerde mantksal
hatalar yaplmadn kontrol etmenin en kolay yolu hata ayklayc ile
almaktr. Bu rnekte birok dng kurulmutur, filin drt hareket ynndeki
engeller kontrol edilir. Tm hareketlerin ileyiine Debug ile kolayca baklr.
1. TextBox ile filin koordinatlarnn alnd yere BreakPoint koyun ve projeyi
altrn.
2. x ve y koordinatlarna 0 deerini girin. Filin, tahtann sol st kesinde
olduu varsaylr.
Bu durumda fil hangi ynde ilerleyebilir? Step Into komutu ile kodlar arasnda
ilerleyin ve hangi dng iine girdiini bulun.
3. Locals panelinde i deikeninin deerini izleyin. Ayn panelde tahta
dizisinin, o anda kontrol edilen deerine bakn. x ve y deerlerinin bir
fazlasn alarak, dier deerin true ya da false olduunu kontrol edin.

Konu 3: Hata Yakalama


Bir uygulama gelitiricisi program yazarken ok eitli hatalarla karlaabilir.
Visual C# .NET ortaya kan hata durumlarnda, ok detayl hata mesajlarn
uygulama gelitiricisine gnderir. Bu hata mesajlar, hatalarn nerede, nasl
yapldn ok detayl bir ekilde gsterir. Hatalarn en ince ayrntsna kadar
ilenmesi, uygulama gelitirmede byk kolaylk salar.
Visual C# .NET hata mesajlar, alma zaman (Run Time) ve tasarm zaman
(Design Time) hatalar olarak ayrlabilir.
BLM 1: 23

Tasarm zaman hatalar, kodlarn yazlmas srasnda derleyici tarafndan


bulunan ve Task List panelinde gsterilen hatalardr. Task List panelinde
hatann aklamas, hatann projenin hangi dosyasnda ve dosyann kanc
satrnda bulunduunu gsterir. Tasarm zaman hatalar szdizimi yanl
kullanldnda meydana gelir.

alma zaman hatalar, uygulama alrken yaplmas imknsz bir ilemin


gerekletirilmesi srasnda meydana gelir. rnein TextBox ile bir saynn
alnmas srasnda, kullanc String tipinde bir deer girerse alma
zamannda bir hata oluur.

int []dizi = new int[10];


for (int i = 0; i <= dizi.Length; i++)
{
Label1.Text &= dizi(i)
}

Buradaki hata mesaj, dizinin byklnn dnda bir indis verildiini belirtir.

Visual C# .NET dilinde uygulama gelitirirken oluabilecek tm hatalar .NET


FrameWork ats altnda Exception snflar halinde tanmlanr. rnein
dizinin byklnden farkl bir indis verildiinde IndexOutOfRangeException
hatas ortaya kar. Tm hatalar gibi bu hata da Exception taban snfndan
tremitir.
24 KISIM I:

Try Catch Finally

Try Catch Finally


alma zamannda kan hatalarn ilenmesini salar.
Try, hata dourabilecek kodlar tutar.
Catch, hata yakalandktan sonra alacak kodlar tutar.
Finally, her iki durumdan sonra alacak kodlar tutar.

int dosya = FreeFile();


try {
string kayit = "Kayt Zaman: " + Now;
kayit += "\r\n" + "Uygulama kaytlar...";
FileOpen(dosya, "C:\\Log.txt", OpenMode.Binary, OpenAccess.Write);
FilePut(dosya, kayit);
} catch (Exception ex) {
MsgBox(ex.Message);
} finally {
FileClose(dosya);
}

alma zamannda ortaya kan hatalar uygulamann beklenmedik bir ekilde


sonlanmasna neden olur. Uygulamann devam etmesi iin bu hatalarn
yakalanp ilenmesi gerekir. Try Catch Finally bloklar iinde, alma
zaman hatalar meydana geldii durumlarda almas istenen kodlar yazlr.
Try blou iine, alrken hata retebilecek kodlar yazlrken, Catch blou
iine, hata olutuunda yaplmas gereken ilemler yazlr.

int sayi, sonuc;

try
{
Random r = new Random();
sayi = r.Next(3);
sonuc = 100 / sayi;
MessageBox.Show("Blme ilemi baarl, sonu: "
+ sonuc.ToString());

}
catch (Exception ex)
{
MessageBox.Show("Blme ilemi baarsz. Hata
Mesaj: " + ex.Message);

Bu rnekte retilen rasgele bir say ile blme ilemi yaplyor. Say sfr deerini
aldnda blme ilemi hata retecektir. Dolaysyla bu ilem Try blou iine
yazlmaldr. Catch blounda, ilemin baarsz olduunu belirten bir mesaj
BLM 1: 25

yazlr. Exception nesnesinin Message zellii, hatann olutuu zaman


retilen mesaj tutar. Exception nesnesinin zellikleri Catch iinde
kullanlmayacaksa, tanmlanmasna gerek yoktur.
try
{

}
Catch
{
label1.Text = "Exception kullanlmyor.";
}

Finally blounda, Try Catch iinde yaplan tm ilemlerden sonra


altrlacak kodlar yazlr. Finally blounda yazlan kodlar hata meydana
gelse de gelmese de altrlacaktr.

try
{
// Dosya a
// Dosya ilemleri
}
catch (Exception ex)
{
// Dosya alrken veya ilem yaplrken
// hata meydana geldi.
}
finally
{
// Dosya kapat
}

Finally blounda, genellikle, kullanlan kaynaklar serbest braklr. rnekte,


bir dosya alyor. Dosya ama veya dosyaya veri yazma ilemlerinde bir hata
meydana geldiinde, Catch ifadesinde bu hata yakalanp ilgili mesaj
kullancya gsterilir. Finally blou her halkarda alaca iin dosya
kapama ilemi burada yaplr.

Lab 1: ifreleme Algoritmas


Bu uygulamada, verilen bir yaz ifrelenerek bir dizi sayya evrilir. Bu saylar,
yazda geen karakterlerin Ascii kodlarnn karm bir halidir. ifreyi zmek
iin, ifrelemede izlenen yollarn tersi uygulanr.
PUCU: ifreleme algoritmalarnda yazy ifrelerken izlenen yollarn geri dn
olmaldr. rnein rasgele saylar kullanlarak ifrelenen bir yazy, tekrar rasgele saylar
kullanarak zlemez.

ifreleme:
Verilen yaznn ifrelenmesi etaptan oluur:
Yaznn karakterleri Ascii kodlarna evrilir.
Kodlar, gerekiyorsa balarna 0 konarak, 4 haneli yaplr ve sral halde
bir String deikeninde tutulur.
26 KISIM I:

Sral ekilde yazlan kodlar, bir batan bir sondan karakter alnarak
tekrar dzenlenir.
rnek: acf kelimesinin ifrelenmesi:
a c f karakterleri Ascii kodlarna evrilir.
a = 97
c = 99
f = 102
Kodlar balarna sfr konarak 4 haneli yaplr.
0097
0099
0102
Sral halde bir String deikenine yazlr.
009700990102
Saynn ortasna kadar, nce batan daha sonra sondan rakam
alnarak tekrar yazlr. Siyah olarak gsterilen rakamlar, dizinin
sonundan alnmtr.
0
02
020
0200
02009
020091
0200917
02009170
020091700
0200917009
02009170090
0 2 0 0 9 1 7 0 0 9 0 9 = ifre

Projenin almas
1. Visual Studio ortamnda, Sifreleme isminde bir Windows projesi an.
2. Alan forma lblSifre isminde bir Label kontrol, btnSfrele
isminde bir Button kontrol ekleyin. Bu kontroller kullancdan alnan
yaznn ifrelenip grntlenmesini salayacaktr.
3. Alan forma lblDesifre isminde bir Label kontrol ve
btnSfreyiCoz isminde bir Button kontrol ekleyin. Bu kontroller
ifrelenmi yaznn lblSifre kontrolnden alnarak, ifrelenip
grntlenmesini salayacaktr.
DKKAT: ifreleme algoritmasnn tm kodlar btnSifrele kontrolnn Click olayna
yazlacaktr.
BLM 1: 27

Ascii Kodlarna evirme

1. ifrelenecek yaznn girilmesi iin gerekli kodu yazn. Bir yaz girilene
kadar kullancdan yaz istemek iin do while dngsn kullann.
string yazi = null;

// Algoritma 1 - 1
do {
yazi = txtSifrelenecekYazi.Text;
}
while ( ! ( yazi.Length > 0 ) );

2. Girilen yaznn karakterlerini bir dizide toplamak iin String


deikeninin ToCharArray() metodunu kullann.
// Algoritma 1 - 2
char[] karakterler = yazi.ToCharArray();

3. Karakterlerin Ascii kodu karln tutmak iin kodlar isminde bir dizi
yaratn. Karakterler dizisindeki tm elemanlar zerinde ilem yapmak
iin bir dng kurun. Karakterler dizisindeki her karakteri Asc hazr
fonksiyonu ile Ascii koduna evirin.

int uzunluk = karakterler.Length - 1 ;


string[] kodlar = new string[ uzunluk + 1 ];

int i;
// kelimedeki her karakterin ASCII kodu alnr
for ( i=0; i<=uzunluk; i++ )
{
28 KISIM I:

// Algoritma 1 - 3
kodlar[ i ] = ( Microsoft.VisualBasic.Strings.Asc(
karakterler[ i ] ) ).ToString();
}

4. Bu algoritma sonunda elde edilen kodlar dizisi, ifrelenecek olan


yaznn her karakterinin Ascii kodunu tutar. Bu dizi dier algoritmann
giri deeri olarak kullanlacaktr.

Sral Kodlara evirme


Ascii karakter kodlar 0 255 arasnda deer alr. Dolaysyla her kod
maksimum haneli olacaktr. ifre oluturulurken yaplan son
dzenlemede kolaylk salamak iin, bu kodlar 4 haneli yaplr. Daha
sonra bu kodlar diziden ekilerek SiraliKodlar adl bir String
deikenine yazlr.

1. Dizideki kodlar sral bir ekilde tutmak iin SiraliKodlar adl bir
deiken tanmlayn. lk algoritmadan alnan Ascii kodlarn tutan
kodlar dizisi zerinde bir dng kurun.
string SiraliKodlar = null;
short j = 0;
while ( j <= kodlar.Length - 1 ) {

j += 1;
}

DKKAT: 2 4 etaplarnda yazlacak tm kodlar While dngsnn iine yazlacaktr.

Bu dngde kullanlacak Ascii kodunu bir deikene atan kodu yazn.


BLM 1: 29

// Alogritma 2 - 1
string AsciiKodu = kodlar[ j ];

2. AsciiKodu deikeninde tutulan kodun 4 haneli hale getirilmesi iin


ka tane sfr eklenmesi gerektiini bulun. Eklenecek sfrlarn says, 4
AsciiKodu deikeninin uzunluu kadardr. rnein 192 kodlu bir
deikene eklenmesi gerenken sfr says 4 3 = 1 tanedir.
byte eklenecek = System.Convert.ToByte( 4 - AsciiKodu.Length
);

3. Eklenecek say kadar alacak bir dng iinde, sfr ekleme ilemini
yapn.
for ( i=0; i<=eklenecek - 1; i++ ) {
// Alogritma 2 - 3
AsciiKodu = AsciiKodu.Insert( 0, "0" );
}

4. Dzenlenmi AsciiKodu, SralKodlar deikenine yazn ve sayac


bir artrarak dier Ascii koduna gein.

// Alogritma 2 - 4

SiraliKodlar += AsciiKodu;

j += 1;

Algoritma sonunda ortaya kan deer, karakterlerin 4 haneli Ascii kodlarn


tutan bir String deikenidir. Bu deiken dier algoritmada, tekrar
dzenlenmek zere kullanlacaktr.

ifrenin oluturulmas
Bir nceki algoritmada elde edilen SralKodlar deikeni halen istenilen
ifreli yaz deildir. nk 4 haneli kodlar sral bir ekilde durur ve kolayca
zlebilir. ifrenin ilk bakta anlalmasn daha da zorlatrmak iin,
sralanm kodlar biraz daha kartrlr.
30 KISIM I:

1. Dngde kullanlacak J sayacn sfrlayn ve ifrenin tutulaca


deikeni tanmlayn
// Algoritma 3 - 1
j = 0;
string Sifre = null;

2. SralKodlar deikeni zerinde yaplacak ilem says, bir batan


bir sondan ilerlendii iin, deikenin uzunluunun yars kadardr.
Sayacn bu uzunlua kadar tanml olan bir dng oluturun.
// Algoritma 3 - 2
while ( j < SiraliKodlar.Length / 2 ) {

j += 1;
}
DKKAT: 3 4 etaplarnda yazlacak tm kodlar Do While dngsnn iine
yazlacaktr.
3. ifreye, SralKodlarn j indisli karakterini ekleyin.
//Algoritma 3 - 3
Sifre &= Mid(SiraliKodlar, j + 1, 1)

4. ifreye, SralKodlarn uzunluk j indisli karakterini ekleyin.


// Algoritma 3 - 3
Sifre += Strings.Mid( SiraliKodlar, j + 1, 1 );

5. Sonu olarak kan ifre, girilen yaznn Ascii kodlarnn kark


dzende tutulmas ile oluturulur.

// Algoritma 3 - 4
Sifre += SiraliKodlar.Substring(SiraliKodlar.Length - j - 1,
1 );

ifreyi zmek
ifreleme algoritmas kullanlarak oluturulan ifrenin zlmesi, izlenen
yollarn tersi uygulanarak gerekletirilir. Deifre algoritmas iki etaptan oluur.
1. Bir batan bir sondan karakter alnarak ifrelenen Ascii kodlar, sral
kodlar haline dntrlr.
2. 4 haneli olarak duran sral kodlar, karakterlere evrilir. Karakterler ard
ardna konarak deifre ilemi gerekletirilir.
rnek: acf kelimesinin ifrelenmi hali 020091700909 eklindedir. Bu kelime
ifrelenirken, karakterleri 4 haneli Ascii kodlarn evrilmi ve bu kodlarn
rakamlarnn sras deitirilmiti. Bu ifrenin nce 4 haneli sral kodlar haline
getirilmesi iin, ifrelenen yntemin tersi ilenir. Srayla okunan rakamlar nce
baa daha sonra sona yazlr.
BLM 1: 31

ifre: 0 2 0 0 9 1 7 0 0 9 0 9
Sral kodlara evrim:
Srann ilk yars Srann son yars
0 2
00 02
009 102
0097 0102
00970 90102
009700 990102

Sonu olarak elde edilen sral Ascii kodlar, srann ilk yars ve son yarnsn
birleimi olur: 0097 0099 0102
DKKAT: Srann ilk yars oluturulurken, rakamlar sona eklenir. Ancak srann son
yars oluturulurken rakamlar baa eklenir.
Bu 4 haneli kodlar String deerinden Integer deerine evrilir ve bu
deerlerin karl olan karakterler yazlr.
0097 97 a
0099 99 c
0102 102 f
Elde edilen karakterler birletirildiinde ifre zlm olur: acf
DKKAT: Deifre algoritmasnn tm kodlar btnSifreyiCoz kontrolnn Click olayna
yazlacaktr.

ifreyi Sral Kodlara Dntrme


Bu algoritma verilen ifreyi sral Ascii kodlarna dntrr.

1. ifreyi lblSifre etiketinden aln ve sral kodlarn oluturulmas iin


gereken deikenleri tanmlayn.
// Algoritma 1 - 1
string Sifre = lblSifre.Text;

string SiraliKodlar = null;

short i = 0;
32 KISIM I:

// Baa ve sona rakam eklenecei iin


// deikenlere balang deerleri verilir
string ilkYarisi = "";
string sonYarisi = "";

2. ifrenin tm elemanlar zerinde bir dng kurarak, sral kodlarn ilk


ve son yarsn oluturun. Kodlarn ilk yars, ifrenin tek haneli
rakamlar ile; kodlarn son yars, ifrenin ift haneli rakamlar ile
oluturulur. Dolaysyla dngnn sayac ikier ikier artmaldr.
ifrenin i indisli rakamn srann ilk yarsna, yanndaki rakam (i + 1
indisli rakam) srann son yarsna ekleyen kodlar yazn.
for ( i=1; i<=System.Convert.ToInt16( Sifre.Length ); i+=2 )
// Algoritma 1 - 2
// Srann ilk yarsnn sonuna rakam eklenir.
ilkYarisi += Strings.Mid( Sifre, i, 1 );

// Algoritma 1 - 3
// Srann son yarsnn bana rakam eklenir.
sonYarisi = sonYarisi.Insert( 0, Sifre.Substring(i , 1 ) );
}

3. Sral kodlarn ilk yars ve son yars birletirilir. Elde edilen deer, 4
haneli Ascii kodlarnn srayla tutulduu bir String deeridir.
// Algoritma 1 - 4
SiraliKodlar = ilkYarisi + sonYarisi;

Sral Kodlarn Okunmas


lk algoritmada elde edilen sral Ascii kodlar, bu algoritmada okunarak
karakterlere evrilir ve ifre zlm olur.

1. ifre zld zamanki deerinin tutulaca deikeni tanmlayn ve


sral kodlar zerinde bir dng kurun. Sral kodlarn 4 haneli kodlardan
BLM 1: 33

olutuu iin, dngde bir seferde 4 rakam alnacaktr. Bunun iin


dngnn sayac 4 artrlmaldr.
i = 0;
string yazi = "";
while ( i < SiraliKodlar.Length ) {

i += 4;
}
DKKAT: 2 3 etaplarnda yazlacak tm kodlar Do While dngsnn iine
yazlacaktr.

2. Dng her seferinde bir Ascii kodu alr. Bu deeri tutan bir deiken
tanmlanr ve sral kodlardan 4 haneli rakam bu deikene atanr.
int AsciiKodu;

// Algoritma 2 - 1
AsciiKodu = int.Parse( SiraliKodlar.Substring(i , 4 ) ) ;

3. Alnan Ascii kodunun karakter karl bulunur ve yazi deikenine


eklenir.
// Algoritma 2 - 2
yazi += Microsoft.VisualBasic.Strings.Chr( AsciiKodu );

4. Dng sonunda elde edilen deer lblDesifre etiketine yazlr.


// Algoritma 2 - 3
lblDesifre.Text = yazi;

Lab 2: Sralama Algoritmas


Bu algoritma, bir dizinin elemanlarn kkten bye sralar.

Dizinin Doldurulmas
1. Siralama isimli bir Windows projesi an
2. Form zerine biri lbSirasiz, dieri lbSirali isimli iki ListBox ekleyin.
Bu kontroller dizinin srasz ve sral halini listeler.
3. btnListele ve btnSirala isimli iki Button ekleyin.
4. Formun kod tarafna gein ve bir dizi tanmlayn. Bu dizi bir ok yordamn
iinde kullanlaca iin global olarak tanmlanr.
public string[] dizi = new string[ 5 ];

5. btnListele dmesinin Click olayna, diziyi kark bir ekilde isimlerle


dolduran kodlar yazn:
dizi[ 0 ] = "Enis";
dizi[ 1 ] = "Engin";
dizi[ 2 ] = "Tamer";
dizi[ 3 ] = "Kadir";
dizi[ 4 ] = "Fulya";

int i;
for ( i=0; i<=dizi.Length - 1; i++ ) {
ListBox1.Items.Add( dizi[ i ] );
}
34 KISIM I:

Dizinin Sralanmas
Sralama algoritmas, dizi zerinde bir dng kurar ve srayla dizinin bir
eleman seilir. Bu eleman iin bir baka dng kurulur ve seilen elemann
indisine kadar olan tm elemanlarla bir karlatrma yaplr. Kk olan srann
bana konmak iin byk olan ile yer deitirilir.

rnek
1. Dizinin 2. eleman seilir: Engin
Dizinin 2. indisine kadar olan elemanlarla karlatrlr. Engin deeri alfabetik
srada Enis deerinden kk olduu iin, bu iki deer yer deitirilir.
Sra, Engin Enis Tamer Kadir Fulya olur.
2. Dizinin 3. eleman seilir: Tamer
Dizinin 3. indisine kadar olan elemanlarla karlatrlr. Tamer deeri, Enis
ve Engin deerlerinden byk olduu iin sralama deimez.
3. Dizinin 4. eleman seilir: Kadir
Dizinin 4. indisine kadar olan elemanlarla karlatrlr. Kadir < Tamer
olduu iin bu iki deer yer deitirilir.
Sra, Engin Enis Kadir Tamer Fulya olur.
Kadir deeri , Enis ve Engin deerlerinden byk olduu iin sralama
deimez.
4. Dizinin 5. eleman seilir: Fulya
Dizinin 5. indisine kadar olan elemanlarla karlatrlr. Fulya < Tamer
olduu iin bu iki deer yer deitirilir.
Sra, Engin Enis Kadir Fulya Tamer olur.
Fulya < Kadir olduu iin bu iki deer yer deitirilir.
Sra, Engin Enis Fulya Kadir Tamer olur.

Dizideki tm deerler kontrol edildii iin algoritmadan klr.


BLM 1: 35

1. btnSirala dmesinin Click olayna, dizi zerinde bir dng tanmlayn.


Bu dng dizinin (1 indisli) ikinci elemanndan balayarak dizi sonuna
kadar devam edecektir. Daha sonra bu dng iine baka bir dng daha
yazn. Bu dng, ilk dngnn sayacndan balar ve sfr olana kadar
devam eder. kinci dngnn amac, ilk dngde seilen eleman, dizinin
bana kadar olan elemanlarla karlatrmaktr.
int i;

for ( i=1; i<=dizi.Length - 1; i++ ) {


int j = i;
while ( j != 0 && String.Compare(dizi[ j ], dizi[ j - 1
]) == -1 ) {
// Yer deitirme Algoritmas

j -= 1;
}
}

While dngs, j deeri sfr olana kadar ve dizinin kontrol edilen deeri bir
nceki deerden kk olana kadar devam eder. Burada, dizi elemanlarnn
kontrolnn sadece bir defa (bir nceki eleman ile) yapld dnlebilir.
Ancak kk eleman yer deitirildiinde j deeri bir drlr. Dng tekrar
alt zaman, ayn eleman bu sefer dizinin kalan elemanlaryla karlatrlr.
AndAlso operatr, j deerinin sfr olma durumunda dier kontroln
yaplmamas iin kullanlr. Dier kontrolde dizi(j 1) ifadesi, negatif indisli
deere ulalmak istendii iin hata mesaj verir.
36 KISIM I:

2. Yer deitirme algoritmas, bir deikenin deerinin geici bir yerde


tutulmas ile gerekletirilir.

Sralama algoritmasnda dizinin j ve j - 1 indisli deerleri yer deitirilir.


While dngs iinde Yer deitirme Algoritmas yazan yorum satrn
kaldrn ve yerine algoritma kodlarn yazn.
// Yer deitirme
string temp = dizi[ j - 1 ];
dizi[ j - 1 ] = dizi[ j ];
dizi[ j ] = temp ;

3. lbSirali liste kutusunda dizinin yeni srasn grntleyen kodlar yazn.


for (int t=0; t<=dizi.Length - 1; t++ ) {
ListBox2.Items.Add( dizi[ t ] );
}

Lab 3: Arama Algoritmas


Arama algoritmalar, sral bir liste zerinde bir deerin aranmasdr. Kark
srada olan bir listede yaplan arama, ancak listenin bandan sonuna kadar
tm elemanlarnn kontrol edilmesi ile gerekleir. Bu yntem byk dizilerde
performans drr. Belirli bir srada olan dizilerde ise daha hzl arama
yntemleri kullanlmaldr. Bu labda ikili arama yntemi (Binary Search)
incelenecektir.

DKKAT: kili arama yntemi sadece sral bir dizi zerinde uygulanabilir. Ya da elimizdeki
dizi ncelikle sralanr.
BLM 1: 37

NOT: kili arama ynteminde byk kk kyaslamas yapldndan dizinin sral olmas
gerekir.

Dizinin sralanmas
Arama algoritmas sral bir dizi zerinde alaca iin, dizi oluturulduktan
sonra sralanmas gerekir.
1. IkiliArama isminde bir Windows projesi an.
2. Forma btnAra isimli bir Button ve lbDizi adl bir ListBox ekleyin.
3. Kod sayfasna gein ve global bir dizi tanmlayn.
public int[] dizi = new int[ 11 ];

4. Formun Load olayna diziyi rasgele saylar ile doldurmak iin gereken
kodlar yazn.
int i;
Random r = new Random();

for (i=0; i<=10; i++ )


{
dizi[ i ] = r.Next(1000);
}
5. Diziyi sralayn ve deerlerini lbDizi adl listeye ekleyin.
Array.Sort( dizi );
for ( i=0; i<=10; i++ ) {
ListBox1.Items.Add( dizi[ i ] );
}

Arama algoritmas
kili arama algoritmas, dizi zerinde aranacak deeri nce srann ortasndaki
deerle karlatrr. Dizi kkten bye sral olduu iin, eer aranan deer
ortadaki deerden kkse arama, dizinin ilk yarsnda devam eder. Dizinin
dier yars aranan deerden byk deerler ierdii iin, aramaya dhil
edilmez.

rnek
Kkten bye sral dizi zerinde 9 deeri aranacaktr.
Dizi: 1 2 4 7 9 10 12 18

1. Son, ba ve orta deikenleri tanmlanr: Son deeri dizinin son


elemannn indisini, ba deeri dizinin ilk elemannn indisini, orta
deeri ise son + ba / 2 deerini alr. Orta deeri virgll bir deer
alrsa tam sayya evrilir.
2. Balang olarak ba -1, son dizi uzunluu deerini alr.
Ba = -1
Son = 8
Orta = (8 1) / 2 = 3

3. Dizinin orta indisli deeri alnr. Dizi(3) = 7


38 KISIM I:

4. Aranan 9 deeri, yediden byk olduu iin, dizini son yarsnda


aranr. Ba deikenine orta deeri verilirse, dizinin balang indisi
deitirilir, bylece aramalar dizinin son yarsnda gereklemi olur.
Dizi: 9 10 12 18
Ba = 3
Son = 8
Orta = (8 + 3) / 2 = 5
5. Dizinin orta indisli deeri alnr. Dizi(5) = 10
6. 9 deeri, ondan kk olduu iin, kalan dizinin ilk yarsnda aranr.
Dizi: 9 10
Ba = 3
Son = 5
Orta = (5 + 3) / 2 = 4
7. Dizinin ortasndaki deer alnr: 9
8. Bylece 9 deerinin indisi orta deeri olur.
BLM 1: 39

Kodlar
Arama algoritmasnn kodlar btnAra dmesinin Click olayna yazlacaktr.
1. Algoritma iin gerekli bas, son ve orta deikenlerini tanmlayn ve
balang deerlerini verin. Aranan deerin indisini tutmak iin de bir
deiken tanmlayn.
int son = dizi.Length;
int bas = -1;
int orta;
int indis;

2. Kullancdan aranacak deeri girmesini isteyin.


int hedef = int.Parse(textBox1.Text);
40 KISIM I:

3. Dizide aranacak deer kalmad zaman kan bir dng kurun. Son
ve bas deerleri arasndaki fark bire dtnde, dizide aranacak
deer kalmamtr.
while ( son - bas > 1 ) {

4. While dngs iine, dizinin orta indisli deerini alan ve bu deeri


aranan deerle karlatran kodlar yazn.
orta = ( son + bas ) / 2;
if ( dizi[ orta ] > hedef ) {
son = orta;
}
else if ( dizi[ orta ] < hedef ) {
bas = orta;
}
else {
indis = orta;
MessageBox.Show( "ndis: " +
indis.ToString());
return;
}

Eer dizinin ortasndaki deer aranan deerse, indis bulunmu demektir.


orta deikeni kontroln yapld deerin indisini tuttuu iin, sonu orta
deeri olur ve yordamdan klr.
5. Eer istenen deer bulunamadan dngden klrsa, indis -1 deerini
alr. End While ifadesinden sonra, aranan deerin bulunamadn
belirten kodu yazn.
indis = -1;
MessageBox.Show( "ndis: " + indis + " Aranan deer
bulunamad");
BLM 1: 41

Modl Sonu Sorular & Altrmalar

zet

Algoritma kurmak
Dump Coding zmlemesi
Ak diyagramlar

1. if ifadesi hangi veri tipini kontrol eder?


2. if - switch karar yaplarnn farklar nelerdir?
3. true | false & false
(true | false) & false
ifadeleri hangi deerleri dndrr?
4. 4 boyutlu bir dizinin tm elemanlarn doldurmak iin, dizi zerinde ka
tane dng kurulmaldr?
5. Uygulamalar derledikten sonra hatalar hangi yollarla grlebilir?
6. Finally bloundaki kodlar ne zaman alr?
7. Sral arama ynteminde (Linear Search) dizinin elemanlarnn sral
olmas gerekli midir?
8. Sral arama yntemin bir dizi zerinde uygulayn.
Modl 7: Fonksiyonlar ve Yordamlar

Hedefler

Sub Function kullanm


.NET Tarih, String, Matematik
fonksiyonlar
Online Offline yardmn etkin kullanm

Uygulama gelitirirken, bir ilemin birok yerde kullanld zamanlar olur. Bu


gibi durumlarda bir kere yazlan kodlar, farkl yerlerde tekrar yazlr. Uygulama
zerinde bir deiiklik yaplmak istenirse, tekrar yazlan kodlarn tek tek
bulunup deitirilmesi gerekir. Bylece hem uygulamann yazm zorlar hem
de deiik yapmak giderek imknsz hale gelir. Bu problemler, birok yerde
yaplmas istenen ilemlerin fonksiyonlar ve yordamlar iinde yazlmas ile
zlr. Sadece fonksiyon ve yordamlarn isimleri kullanlarak, istenen yerlerde
kodlar altrlr.
Yaplan ilemin sonucunda oluan deer isteniyorsa fonksiyonlar kullanlr.
rnein veritabanna yeni bir kullanc ekledikten sonra kullancnn ID
numaras isteniyorsa fonksiyon kullanlmaldr. Eer yaplan ilemlerin sonunca
bir deer dndrlmyorsa yordamlar kullanlr. rnein bir ComboBox
kontrolne e ekleme ilemi yordam iine yazlabilir.
.NET atsndaki nesnelerin birok fonksiyon ve yordamlar vardr. Tm
fonksiyon ve yordamlarn ka parametre ald, geriye dn deerinin ne
olduu, hangi nesneye ait olduklar ezberlenemez. Dolaysyla Visual Studio
yardmnn kullanlmas kanlmazdr.

Bu modl tamamlandktan sonra:


Yordam ve fonksiyon kullanarak kodlarnzn ynetilebilirliini ve
esnekliini artracak,
Fonksiyon ve yordamlarn farklarn ayrt edebilecek,
2 KISIM I:

.NET atsndaki tarih ve zaman, matematik, String fonksiyonlarn


tanyacak,
Offline ve Online yardm etkin bir ekilde kullanabileceksiniz.

Konu 1: Void (Yordam)

Void
Dn deeri olmayan kod bloklardr.
Birok yerde kullanlacak kodlar,
yordamlar ile gruplanmaldr.

void Temizle()
{
Label1.Text = "";
ListBox1.Items.Clear();
}

Yordamlar dn deeri olmayan kod bloklardr. Bu yordamlar void ifadesi ile


belirtilir.

void YordamIsmi()
{

Uygulama iinde birok yerde alacak kodlar yordam iinde yazlr. Bu kodlar,
iine yazldklar yordamn ismi ile arlarak, istenilen yerde tekrar
altrlabilir. rnein bir uygulama balarken form zerindeki kontrollerin
temizlenmesi gerekiyorsa, bu kodlar bir daha yazmamak iin yordam
kullanlabilir.

void Temizle()
{
label1.Text = "";
listBox1.Items.Clear();
}

Yordam tanmlarken parantezler iine, alabilecei parametreler yazlr. Eer


yordam parametre almyorsa parantezlerin ii bo braklr.
BLM 1 3

void YazilimUrunleriEkle()
{
ComboBox1.Items.Add("Yazlm Uzmanl");
ComboBox1.Items.Add("Yazlm Mhendislii");
Label1.Text = "Yazlm paketleri eklendi...";
}

Yordamlar tanmladktan sonra baka bir yordam veya fonksiyon iinde


kullanlr. Yordam kullanmak iin, gerekli yere isminin yazlmas yeterlidir.

Void DersleriListele()
{
switch( ComboBox1.SelectedIndex )
{
case 0:
Temizle();

ListBox1.Items.Add("Access - likisel
Veritabanlar");
ListBox1.Items.Add("Programlamaya Giri Ve
Algoritma");
ListBox1.Items.Add(".NET Framework");
ListBox1.Items.Add("VB.NET ile Windows Tabanl
Programlama");
ListBox1.Items.Add("ASP.NET ile Web Tabanl
Programlama");

Label1.Text = "Yazlm Uzmanl dersleri


yklendi." ;
break;

case 1;
Temizle();

ListBox1.Items.Add("SQL Server Veritaban


Ynetimi");
ListBox1.Items.Add("Visual Studio .NET ile
Uygulama Gelitirme");
ListBox1.Items.Add("ADO.NET ile Veri Ynetimi ve
XML");
ListBox1.Items.Add("XML Web Services, .NET
Remoting ve COM+");
ListBox1.Items.Add("Proje Ynetimi");

Label1.Text = "Yazlm Mhendislii dersleri


yklendi.";

break;

default:
Temizle();
Label1.Text = "Yazlm paketi seiniz.";
break;
}
}

Burada ComboBox kontrolnden seilen deerin kontroln indis zerinden


yaplmas, YazilimUrunleriEkle yordamnda eklenen elemanlarn sras
deiirse problem yaratr. Liste kutusuna eklenen dersler yanl paketlerde
gzkr. Ancak ComboBox kontrolnn seili metni zerinden kontrol yaplrsa
4 KISIM I:

da, eklenen isimler deitii zaman bir problem ortaya kar. Bu durumda iki
yordamn birbirine bamll grlr. Bu rnekte, bir yordamda deiiklik
yapld zaman dier yordamn alma ekli de kontrol edilmelidir.
Label ve ListBox kontrollerini temizleyen kodlar sadece iki satr olduu iin
Temizle yordamnda yazlmayabilirdi. Ancak bu kodlar DersleriListele
yordamnda defa kullanld iin her deiiklikte, kodun yazld yer
bulunup gerekli dzeltmeler yaplacakt. rnein temizle ilemi, liste kutusunda
Dersler metni gzkecek ekilde deitirebilir. Bu durumda, deiiklii
sadece Temizle yordamnda yapmak yeterli olur.

Void Temizle()
{
Label1.Text = "";
ListBox1.Items.Clear();
ListBox1.Items.Add("Dersler: ");
}

Parametre Kullanm

Parametre Kullanm
Parametreler ile yordamlarn davranlar
deitirilir.

Params, ayn tipten snrsz parametre


girilmesini salar.

Yordamlarn baz deerlere gre farkl ilem yapmas istenebilir. lemin bal
olduu bu deerlere parametre veya argman denir. Yordamlar parametre
alacak ekilde tanmlanp, arldklar srada istedikleri parametreleri verilerek
kullanlr.
Void YordamIsmi(VeriTipi Parametre1, VeriTipi Parametre2, )
{

}
BLM 1 5

rnein uygulamann birok yerinde kullancya bilgi vermek amal mesaj


kutular kullanlr. Eer bu mesajlar bir yordam iine yazlrsa, daha sonra
mesajlar bir Label zerinde gsterilecek ekilde deitirmek kolay olacaktr.
Yordamn gsterecei mesajlar parametre olarak verilmesi gerekir.

Void MesajGoster(string mesaj)


{
Label1.Text = mesaj;
}

Void Yordam1()
{
//...
MesajGoster("1. Yordam iinden alr.");
}

Void Yordam2()
{
//...
MesajGoster("2. Yordam iinden alr.");
}

Void Yordam3()
{
// ...
MesajGoster("3. Yordam iinden alr.");
}

Yordamlar arrken tm parametrelerin belirtilen veri tipte verilmesi gerekir.


Yordamlar tanmlarken parametreleri isimleri ve veri tipleri belirtilmelidir. Ayrca
parametreler deer tipi ya da referans tipi olarak geilecei belirtilmelidir.

Yordamn normal akndan klmak istenirse Return ifadesi kullanlr.

Void MusteriBilgisi(int MusteriId)


{
if( ! MusteriId > 0 )
Return

// MusteriId deerine gre


// mteri bilgileri veritabanndan ekilir.
}

Diziler parametre olarak kullanldklarnda byklkleri verilmez. Fakat


parantezler kullanlarak, verilen parametrenin dizi olduu belirtilmelidir.

void MatrisTopla(int [,] matris1 , int [,] matris2)


{
int x = matris1.GetLength(0);
int y = matris1.GetLength(1);

if (x != matris2.GetLength(0) || y !=
matris2.GetLength(1))
{
MessageBox.Show("Matris boyutlarnn byklkleri
birbiriyle ayn olmaldr.");
6 KISIM I:

return;
}

int [,] sonuc = new int[x - 1, y - 1];

for(int i = 0; i < x; i++)


{
for (int j = 0 ; j < y; j++)
{
sonuc[i, j] = matris1[i, j] + matris2[i, j];
}
}
}

Diziler yordamlara parametre olarak geilirken, sadece isimleri verilir.

int [,]m1 = {{1, 3, 5}, {7, 9, 11}};


int [,]m2 = {{0, 2, 4}, {6, 8, 10}};

MatrisTopla(m1, m2)

Params
Yordamlar ve fonksiyonlar arrken parametrelerin mutlaka girilmeleri
gerekir. Ancak baz durumlarda yordamlara ve fonksiyonlara girilecek
parametrelerin says tasarm zamannda belli olmaz. params anahtar kelimesi
ile yordamlara, ayn veri tipinde parametre dizisi verilebilir. params ile verilen
dizi yordamn son parametresi olarak tanmlanmaldr.

public void YasOrtalamasi( string sinif, params


byte[] Yaslar ) {
int toplam = 0;
double ortalama = 0.0;

int i;
for ( i=0; i<=Yaslar.Length - 1; i++ ) {
toplam += Yaslar[ i ];
}

// Parametre verilmezse i = 0 olur


if ( i > 0 ) {
ortalama = toplam / i;
}
MessageBox.Show( sinif + " snfnn ya
ortalamas: " + ortalama);
}

Ya ortalamasn hesaplayan bu yordamn ilk parametresi verilmek zorundadr.


params ile tanml olan dizi, yordam arlrken girilen tm parametreleri tutar.
Fakat girilen bu parametrelerin veri tipleri ayn olmak zorundadr. Bu rnekte
girilecek yalar Byte tipinde olacaktr.
BLM 1 7

private void Button1_Click2( System.Object sender,


System.EventArgs e ) {
// lk parametre verildikten sonra,
// istenen sayda parametre verilebilir
YasOrtalamasi("YU6112", 45, 14, 25, 28);

// Yalar parametre olarak verilmeyebilir


YasOrtalamasi("YU6112");
}

Parametrelerin snrl olmamas, dizilere eleman ekleme ilemini kolaylatrr.


rnein bir diziye birok eleman eklemek iin, bu elemanlarn bir dizi iinde
parametre verilmesi gerekir.

public string[] Raf;


public void KitapEkle( string[] Kitap ) {
// Raf dizisine, kitaplar dizisinin
// elemanlar eklenir.
}

Bu yordamn kullanm iin, eklenecek deerlerin nce bir diziye aktarlmas


gerekir. Yordamn yazlmas kolay ancak kullanm zordur. Bu yordam
kullanacak programcnn ii params ile kolaylatrlr.

public void Mesaj( string msg ) {


Label1.Text += msg + "\n";
}

public void KitapEkle( string Kitap, byte Genisletme


) {
if ( Genisletme == 0 ) {
Mesaj( "Dizi boyutu geniletilemedi..." );
return ;
}

// Geniletme faktr kullancya brakld iin


// dizide bo alanlar olabilir. lk bo alan bulunup
// veri buraya aktarlr.
int i;
while ( i < Raf.Length ) {
if ( Raf( i ) == ( ( System.String[] )( "" )
) ) {
Raf( i ) = ( ( System.String[] )( Kitap
) );
return;
}
i += 1;
}

// Dizide bo yer yoksa yeniden boyutlandrlr.


string[] Temp = new string[ i + Genisletme ];
System.Array.Copy( Raf, Temp, Raf.Length );
Raf = Temp;
Raf[ i + 1 ] = Kitap;
}

nce, diziye bir tek eleman ekleyen yordam yazlr. Dizinin tm alanlar
doluysa, geniletme parametresinde verilen deer kadar tekrar boyutlandrlr.
8 KISIM I:

Geniletme deikeni Byte veri tipinde tanml olduu iin negatif deer
alamaz. Dolaysyla dizinin boyutunun kltlmesi engellenmi olur.
Bu yordam tek bana kullanlabilir olduu gibi, diziye birok eleman ekleyecek
yordama yardmc niteliindedir.

public void Ekle( params string[] Kitaplar ) {


for ( i=0; i<=Kitaplar.Length - 1; i++ ) {
// Geniletme faktr 5 ile tek tek kitap eklenir.
KitapEkle( Kitaplar[ i ], 5 );
}
Mesaj( Kitaplar.Length + " kitap rafa eklendi."
);
}

Bu yordam ise snrsz parametre alarak, dizi ilemlerinde programcya kolaylk


salar.
private void Button1_Click( System.Object sender,
System.EventArgs e ) {
Ekle( "Kitap1", "Kitap2", "Kitap3" );
}

Void Main

Void Main
Balang yordamdr.
Application snf kullanlarak, istenen
formlar yklenir.
public static void Main()
{
Application.Run( new Form1() );
}

Yeni bir yordam tanmlarken Main yordam hari istenilen isim verilebilir. Main
yordam btn uygulamalarn giri noktasdr. Windows uygulamalarnda
formlar yklenmeden nce o form iinde tanml Main yordam altrlr. Bu
Main yordamnda Application snf balang formunu Run metodu ile
BLM 1 9

ykler. Application snf, .NET Framework atsnda, uygulamalar


balatmak, ynetmek ve sonlandrmak iin kullanlr.
Projenin zelliklerinden balang nesnesi Sub Main olarak ayarlanrsa,
uygulama alt zaman tm projede Main yordam arar. Windows
uygulamalar gelitirirken Main yordam yazlrsa balang formunun da bu
yordam iinde belirtilmesi gerekir. Bu yordam bir modln iinde tanmlanabilir.

public static void Main()


{
Application.Run( new Form1() );
}

Application snfnn Run metodu, parametre olarak balang formu ister.


Uygulama balad zaman hangi formun almas isteniyorsa, bu formdan
oluturulup parametre olarak verilir. New anahtar kelimesi, snflar oluturmak
iin kullanlr.

Balang formu olarak seilen bir Windows formunda Main yordam


tanmlanrsa, bu yordam static olarak tanmlanmaldr. static metotlar
uygulama genelinde paylatrlan sabit metotlardr.

public static void Main()


{
MessageBox.Show("Balang formlar kod ile
yklenmelidir.");
}

Balang formu olarak ayarlanm bir formun iine bu Main yordam


tanmlanrsa, formu yklemek iin herhangi bir kod yazlmad iin uygulama
sadece mesaj kutusunu gsterecektir.
10 KISIM I:

Konu 2: Fonksiyonlar

Function
lem yapldktan sonra deer dndrlr.
Return ifadesinden sonraki kodlar
altrlmaz.

bool KontrolOk()
{
if (TextBox1.Text.Length > 0 &
ComboBox1.SelectedIndex > -1)
{
return false;
}
return true;
}

Fonksiyonlar bir ilem yaptktan sonra geriye deer dndrrler. rnein bir
arpma fonksiyonunun dn deeri, parametre olarak verilen iki saynn
arpm olacaktr. Fonksiyonlarn tanmlar deikenler gibidir.

DnVeriTipi Fonksiyon(VeriTipi Param1, ...)


{

Fonksiyonlarn geriye dn deerleri Return ifadesi ile yaplr.

bool KontrolOk()
{
if (TextBox1.Text.Length > 0 & ComboBox1.SelectedIndex
> -1)
{
return false;
}

return true;
}

private void Button1_Click( System.Object sender,


System.EventArgs e ) {

if (! KontrolOk())
{
MessageBox.Show("Seiminizi yaptktan sonra devam
edebilirsiniz.");
return;
BLM 1 11

// Kontrol tamamlandktan sonra yaplacak ilemler


}

Bu fonksiyonun almas Return ifadesinden sonra yazlan deerin


dndrlmesiyle sonlanr. Burada dikkat edilmesi gereken nokta, fonksiyon
deer dndrdkten sonra sonland iin Return ifadesinden sonra gelen
hibir kod altrlmaz. Eer dn deerini belirledikten sonra baka bir
ilemin yaplmas isteniyorsa, fonksiyon ismi kullanlr. Fonksiyonun ismi bir
deiken gibi gzkse de, temsil ettii deer fonksiyonun dn deeridir.

float GunlukKur(string Cinsi)


{
Switch(Cinsi)
{
Case "d":
Case "D":
Return 1.43;

Case "e":
Case "E":
Return 1.81;

Case "s": "


Case "S":
Return 2.91;
}
}

public double KurHesapla( float Miktar, string Cinsi


) {
return Miktar * GunlukKur( Cinsi );

// Bu satrdan sonra yazlan kodlar ilenmez.


}

private void Button1_Click1( System.Object sender,


System.EventArgs e ) {
Label1.Text = System.Convert.ToString(
KurHesapla( -1000, "d" ) );
}

rnek: Snf geme notunun hesaplanmas, geriye bir sonu dndrlecei


iin fonksiyon ile yazlmas gereklidir. Parametre olarak final ve vize notlar
alnr ve bu deerlerle hesaplanan geme notu sonu olarak dndrlr. Vize
notlarnn girilmesi zorunlu deildir, dolaysyla bu deerler params olarak
verilebilir.

public int NotHesapla( int Final, float


VizeKatSayisi, params int[] vizeler ) {
int vizeToplam = 0;
double vizeOrtalama = 0.0;

int i;
12 KISIM I:

for ( i=0; i<=vizeler.Length - 1; i++ ) {


vizeToplam += vizeler( i );
}

if ( i > 0 ) {
vizeOrtalama = vizeToplam / i;
}

float finalKatSayisi = 1 - VizeKatSayisi;

return finalKatSayisi * Final + VizeKatSayisi *


vizeOrtalama;
}

Fonksiyonun ilk parametresi final notudur. Final notu bir tane olaca iin
girilmesi zorunludur. Daha sonra vize notlarnn ortalamas hesaplanarak final
notu ile toplanr. Parametre olarak verilen vize katsays, vize notlarnn
ortalamadaki arlklarn belirler.

private void Button1_Click( System.Object sender,


System.EventArgs e ) {
int gecmeNotu;
gecmeNotu = NotHesapla( 70,
System.Convert.ToSingle( 0.6 ), 90, 80, 86, 75, 90 );
MsgBox( gecmeNotu );
}

Fonksiyonlar ve Yordamlarn Ar Yklenmesi

Function Sub OverLoad


Ayn isimde birden fazla metot yazlmasdr.
Parametreleri farkl olmaldr.

public void UrunAra( int UrunId ) {


// rn numarasna gre arama yaplr.
}
public int UrunAra( string UrunIsmi )
{
// rn ismine gre arama yaplr.
// Bulunan rnn numaras dndrlr.
}
BLM 1 13

Fonksiyon ve yordamlar kullanrken, ayn isimde birden fazla


tanmlanabildikleri grlr. Buna Ar Yklenme (OverLoad) denir. Bir
yordamn ve fonksiyonun ar yklenmesi kullanmn kolaylatrr. Ayn isimde
farkl seenekler sunmas metotlarn kullanln arttrr.

public void UrunAra( int UrunId ) {


// rn numarasna gre arama yaplr.
}

public int UrunAra( string UrunIsmi ) {


// rn ismine gre arama yaplr.
// Bulunan rnn numaras dndrlr.
}

public int UrunAra( string UrunIsmi, DateTime


UretimTarihi ) {
// rn ismine ve retim tarihine gre arama yaplr.
// Bulunan rnn numaras dndrlr.
}

public int UrunAra( DateTime UretimTarihi ) {


// retim tarihine gre arama yaplr.
// Bulunan rnn numaras dndrlr.
}

Metotlarn ayn isimde olmasnn ayrm parametrelerin veri tipi ve saysna


gre yaplr. Metotlarn isimleri, parametre says ve parametrelerin veri tipleri
metotlarn imzalarn (Method Signatures) oluturur. rnein rn
numarasna gre arama yapan yordamn imzas UrunAra(int) eklindedir.
int parametre alan bir UrunAra isminde baka bir yordam veya fonksiyon
tanmlanamaz. Fonksiyonlarn dn tipleri ile imzalar tanmlanmaz.

Metotlar ar yklerken dikkat edilmesi gereken baz noktalar vardr.


mzalar ayn olan metotlar tanmlanamaz
Fonksiyonlar yordamlarla, yordamlar da fonksiyonlarla ar
yklenebilir.
Fonksiyonlar dn tiplerine gre ar yklenemez.
14 KISIM I:

Konu 3: String Fonksiyonlar

String Fonksiyonlar
CompareTo
Concat
CopyTo
EndsWith & StartsWith
ToUpper & ToLower
Join
SubString
Trim, TrimEnd, TrimStart

String fonksiyonlar, kullanld String deeri stnde verilen parametrelere


gre deien ilemler yaparlar. Sonu olarak geriye dndrdkleri deerler,
fonksiyonun ileyi amacna gre deiir.
CompareTo
Bu fonksiyon, ilemin yaplaca deeri parametre olarak verilen deerle
karlatrr. ki deer bir birine eitse 0, parametredeki deer alfabetik
olarak nde ise 1, deilse -1 deeri dndrlr.

string yazi1 = "BilgeAdam";


string yazi2 = TextBox1.Text;

switch ( yazi1.CompareTo( yazi2 ) ) {


case 0:
MessageBox.Show( "Yazlar birbirine
eit");
break;
case 1:
MessageBox.Show( yazi1 + ", " + yazi2 +
" kelimesinden sonra geliyor");
break;
case -1:
MessageBox.Show( yazi1 + ", " + yazi2 +
" kelimesinden nce geliyor");
break;
}

Concat
String deerlerini birletirmek iin kullanlr. Parametre tipi params olduu
iin, snrsz String deikeni birletirilebilir.
BLM 1 15

string kurum = "BilgeAdam";

Label1.Text = String.Concat("Kurum: ", kurum, "ubeler: ",


"\n", "Fatih", "Bakrky", "Kadky", "Beikta", "Town
Center");

CopyTo
BU fonksiyon ile bir String deikenin belli bir ksm, bir karakter dizisine
kopyalanr. Ayrca kopyalanacak dizinin hangi indisten itibaren
balanaca da belirtilir.

string yazi = "BilgeAdam";


char[] Karakterler = new char[ 11 ];

// Yaznn 5. karakterinden itibaren alnan 4 karakter,


// karakterler dizisinin 3. indisinden balanarak
// diziye kopyalanr.
yazi.CopyTo( 5, Karakterler, 3, 4 );

// Karakterler dizisinin son hali:


// _ _ _ A d a m _ _ _ _

Burada dikkat edilmesi gereken nokta, karakterlerin kopyalanaca dizinin


byklnn yeterli olup olmaddr. Dizinin kopyalanmaya balanacak
indisi ile kopyalanacak karakterlerin uzunluunun toplam, dizi
byklnden kk olmaldr

EndsWith & StartsWith


Bu fonksiyonlar, String deikeninin, parametrede verilen String
deeriyle baladn ya da bittiini gsterir. Geriye dn deeri Boolean
tipindedir.
bool degisken.EndsWith(string deger)

bool degisken.StartsWith(string deger)

string HtmlTag = "<table>";


if ( HtmlTag.StartsWith( "<" ) &
HtmlTag.EndsWith( ">" ) )
{
MessageBox.Show( "Yazm doru");
}
ToUpper & ToLower
ToUpper, String deikenin iindeki kk karakterleri bye; ToLower,
byk karakterleri ke evirir.
string yazi = "bilgeADAM";

MessageBox.Show(yazi.ToUpper());
// Sonu: BLGEADAM
MessageBox.Show (yazi.ToLower());
// Sonu: bilgeadam

Join
Bir String dizisindeki elemanlar, parametre olarak verilen ayra karakteri
ile birletirerek tek bir String deikeni dndrr.
16 KISIM I:

string [] yazi = {"sim", "Soyad", "Adres", "Email",


"Telefon"};
MessageBox.Show(String.Join(";", yazi));

// Sonu: sim;Soyad;Adres;Email;Telefon

SubString
Verilen bir String deerinin, bir blmn String olarak dndren
fonksiyondur. stenen karakterlerin hangi indisten balayaca parametre
olarak geilir. Bu durumda, balang karakterinden sona kadar okunur.
Ancak fonksiyonun, ka karakter okunacan belirten bir parametre kabul
eden ar yklemesi de vardr.

string yazi = "BilgeAdam";


MessageBox.Show (yazi.Substring(5));
// Sonu : Adam

MessageBox.Show (yazi.Substring(5, 2));


// Sonu : Ad

Trim, TrimEnd, TrimStart


Trim fonksiyonu, parametre olarak verilen bir karakteri, String deikeninin
bandan ve sonundan kaldrr.
TrimEnd fonksiyonu parametrede verilen karakteri String deikeninin sadece
sonundan, TrimStart ise sadece bandan kaldrr.

string yazi = "--------Merhaba--------";

MessageBox.Show (yazi.Trim("-"));
// Sonu: Merhaba

MessageBox.Show (yazi.TrimEnd("-"));
// Sonu: --------Merhaba

MessageBox.Show (yazi.TrimStart("-"));
// Sonu: Merhaba--------
BLM 1 17

Konu 4: Matematiksel Fonksiyonlar

Matematiksel Fonksiyonlar
Abs
Ceiling & Floor
Cos, Sin, Tan
Exp
Log
Max & Min
Pow
Sqrt

Uygulamalarda ou zaman matematiksel hesaplamalara ihtiya duyulur. Bu


hesaplamalar kolaylatran hazr matematik fonksiyonlar vardr. Bu
fonksiyonlar .NET Framework atsnda System.Math uzay alannn iinde
tanmlanmtr.

Abs
Verilen bir saynn mutlak deerini dndrr. Dnen deer her durumda
pozitif olacaktr.

Math.Abs(-123)
// Sonu: 123

Ceiling & Floor


Ceiling fonksiyonu, Double veri tipinde verilen bir saydan byk, en
kk tamsayy verir. Floor fonksiyonu verilen saydan kk, en byk
tam sayt verir.
Math.Ceiling(-12.231231)
// Sonu: -12

Math.Ceiling(12.231231)
// Sonu: 13

Math.Floor(-12.231231)
// Sonu: -13

Math.Floor(12.231231)
// Sonu: 12
18 KISIM I:

Cos, Sin, Tan


Bu fonksiyonlar temel trigonometrik ilemleri gerekletirir. Cos fonksiyonu
verilen derecenin kosinsn, Sin saynn sinsn ve Tan saynn
tanjantn hesaplar. Parametre olarak verilen derece radyan (360 derece)
deeri olarak kabul edilir.

double Derece = 90;


Math.Cos(Math.PI * Derece / 180);
Math.Sin(Math.PI * Derece / 180);
Math.Tan(Math.PI * Derece / 180);

Exp
Bu fonksiyon, e sabitinin deerini (yaklak 2,718281 deerini),
parametrede verilen say ile ssn alr.
Math.Exp(4)
// Sonu yaklak: 54,59815

Log
Logaritmik hesaplamalar iin kullanlan bir fonksiyondur. Taban
parametresi verilmezse saynn e tabannda logaritmasn alr.

Math.Log(1000, 10)
// Sonu: 3

Math.Log(Math.E)
// Sonu: 1

Max & Min


Max fonksiyonu verilen iki sayy karlatrarak byk olan, Min
fonksiyonu ise saylardan kk olan dndrr.

Math.Max(100, 200)
// Sonu: 200
Math.Min(100, 200)
// Sonu: 100

Pow
lk parametrede verilen bir saynn, ikinci parametredeki deer kadar
ssn alr.

Math.Pow(10,3)
// Sonu: 1000

Sqrt
Verilen saynn karekkn hesaplar.

Math.Sqrt(441)
// Sonu: 21
BLM 1 19

Konu 5: Tarih ve Zaman Fonksiyonlar

Tarih ve Zaman Fonksiyonlar


DateAdd
DateDiff
CompareTo
DaysInMonth
IsLeapYear
Parse
ToLongDateString & ToLongTimeString
ToShortDateString & ToShortTimeString

Tarih ve zaman fonksiyonlar Date veri tipi zerinde hesaplamalar yapan


fonksiyonlardr. Bu fonksiyonlar System.DateTime uzay alannda tanmldr.

CompareTo
String ifadelerinde olduu gibi, tarih ve zaman deerleri zerinde de
karlatrma yaplabilir. CompareTo fonksiyonu, ilem yaplan tarih ile
parametre olarak verilen tarihi karlatrr. Parametredeki tarih kkse 1,
bykse -1 veya eitse 0 dndrr.

DateTime d = #03/23/2002#;
MessageBox.Show (d.CompareTo(Now).ToString());

DaysInMonth
lk parametrede verilen yln, ikinci parametrede verilen aynda ka gn
olduunu dndrr.
DateTime.DaysInMonth(2002, 2)
// Sonu: 28

IsLeapYear
Verilen bir yln artk yl olup olmadn hesaplar. Dn deeri True ya da
False tipindedir.

DateTime.IsLeapYear(1200))
// Sonu: True
20 KISIM I:

Parse
Parametrede verilen String bir ifadeden Date veri tipine evrim ilemini
yapar. String ifadesinde verilen ifadenin doru bir tarih ve zaman tipinde
olmas gerekir.
DateTime.Parse("23.04.2005 20:20:00")
DateTime.Parse("22 July 2005 02:00 PM")
DateTime.Parse("18 Haziran 1980")

ngilizceden farkl bir dilde girilen ay isimlerinin tarih tipine evrilmesi


iin, uygulamann kltr o dilde ayarlanmas gerekir.

// Uygulama kltr Franszca yaplr.


Application.CurrentCulture = New Globalization.CultureInfo("fr-
FR");
// temps deikeninin deeri 23/05/2005 olacaktr.
DateTime temps = DateTime.Parse("23 Mai 2005");
// Bu kod hata verecektir.
DateTime zaman = DateTime.Parse("23 Mays 2005");

ToLongDateString & ToLongTimeString


Verilen tarihi uzun tarih ve zaman formatnda gsteren fonksiyonlardr.

DateTime d = #1/29/2005 12:59:22 PM#;

d.ToLongDateString()
// Sonu: 29 Ocak 2005 Cumartesi

d.ToLongTimeString()
// Sonu: 12:59:22

ToShortDateString & ToShortTimeString


Verilen tarihi ksa tarih ve zaman formatnda gsteren fonksiyonlardr.

DateTime d = #1/29/2005 12:59:22 PM#;

d.ToShortateString()
// Sonu: 29 Ocak 2005

d.ToShortTimeString()
// Sonu: 12:59
BLM 1 21

Konu 6: Offline ve Online Yardmn Etkin


Kullanm
Visual C#.NET dilinde uygulama gelitirirken .NET Framework iinde tanml
bir ok nesnenin fonksiyon ve yordamlar kullanlr. Ancak her yordam ve
fonksiyonun ald parametreleri ve ne ie yaradklarnn ezbere bilinmesi
mmkn deildir.
Modl 3 Help Kullanm blmnde MSDN offline yardmnn kullanlmasndan
ve neminden bahsedilmiti. MSDN ktphanelerinin Visual Studio iine
kurulmamas durumunda online yardm aralar kullanlabilir. Visual Studio,
balang sayfasnn Online Resources sekmesinde birok arama kolayl
sunar.

Offline Yardm

Offline Yardm
IntelliSense
Index, Search, Contens, Dynamic Help
Uygulama: String.Format fonksiyonunun
aratrlmas

Uygulama gelitirirken, kodlarn yazlmasnda IntelliSense aracndan byk


lde faydalanr. IntelliSense, bir kodun yazlmas srasnda ald
zaman, yazlan kodlarla balayan tm metot, zellik ve nesneleri programcya
sunar. O anda zerinde bulunan enin aklamas, ald parametreler gibi
bilgileri de gsterir.
22 KISIM I:

Visual Studio iinde MSDN ktphanelerinde istenen konularn aranmas iin


Index, Search, Contents ve Dynamic Help panelleri kullanlr. Sonu
bulunduu zaman yeni bir alma sayfasnda gsterilir. Bu sayfada aranan
kavram ile ilgili detayl bilgiler ve rnekler mevcuttur.

rnek: String veri tiplerinin yazdrlmasn deiik formatlarda yazdrlmas


String.Format fonksiyonu ile kullanlr.
1. Visual Studio ortamnda bir proje an ve kod sayfasnda
String.Format yazn. Fonksiyonu yazdktan sonra parantezi an ve
IntelliSense aracnn kard meny inceleyin.
Fonksiyon ka parametre alabiliyor?
Aa ve yukar oklarla men iinde ilerleyerek fonksiyonun ar
yklenmi durumlarn inceleyin.
Fonksiyonun ka tane ar yklemesi yazlm?
2. Format yazsnn stne geldikten sonra F1 tuuna basn ve dinamik
yardmn at sayfaya bakn. Bu sayfa fonksiyonun tm ar
yklemelerini gsterir.
3. Parametre olarak String ve params Object alan fonksiyona tklayn.
kan sayfa fonksiyonun detaylarn listeler.
lk olarak fonksiyonun sz dizimi verilmitir. Burada
parametre isimleri ve tipleri zerinde balantlar grnr. Bu
balantlar ile ilgili yardm dosyas alr.
Parameters blmnde bu fonksiyonun ald parametrelerin
tipleri ve kullanm amalarn gsterilir.
Return Value fonksiyonun dn deerinin hangi tipte
olduu ve nasl olutuu gsterilir.
Exceptions blmnde bu fonksiyon kullanlrken meydana
gelebilecek hatalar listelenir.
Remarks blm, fonksiyonun kullanm yerleri,
parametrelerin nasl kullanlaca, parametreler kullanlrken
dikkat edilmesi gereken yerler, balantl konular gibi
fonksiyon hakknda detayl bilgi verir.
Example blmnde, fonksiyonun kullanmna rnekler
verilir.
Requirements blmnde, fonksiyonun alabilmesi iin
gereken aralar ve platformlar listelenir.
BLM 1 23

See Also blm, fonksiyon ile ilikili kavramlara balantlar


sunar.
Remark blmndeki tanmlamalardan ve Examples blmndeki rneklerde
fonksiyonun nasl kullanldn inceleyin.
4. Kod sayfanza gein ve String.Format fonksiyona bir rnek yazn.
int ocak = 1000;
int subat = 1100;

MessageBox.Show(String.Format("Ocak ay maa {0:C} -- ubat


ay maa: {1:c}", ocak, subat));

5. Formatlama ilemleri hakknda daha fazla bilgi almak iin,


fonksiyonun yardm sayfasna gelin ve Remarks blmnde
Formatting Types balantsna tklayn. Ya da Index panelinden
Formatting Types yazn ve yardm sayfasn an.
kan sayfada her veri tipi iin kullanlan formatlama seenekleri vardr.
Numeric Format Strings balantsna tkladktan sonra alan sayfada
NumberFormatInfo balantsna tklayn.
Format Character tablosunda deiik formatlama seeneklerini inceleyin
ve kodunuzda deneyin.

6. Web ara ubuundan geri tuuna basarak veya Alt Sol Ok ksa
yolu ile String.Format Method balkl ilk atnz sayfaya dnn.
7. Parametre olarak IFormatProvider, String ve params Object
alan fonksiyon tanmna tklayn. Fonksiyonun kullanmn inceledikten
sonra, bu kullanma bir rnek yazn.

MessageBox.Show (String.Format(New
Globalization.CultureInfo("it-IT"), "Bugn: {0:dddd MM
yyyy}", DateTime.Now));

8. Bu rnekte uygulamann kltr ayarlar deitirilmeden, tarihin istenen


kltr ayar ile gsterilmitir. Kltr ayarlarnn tanmlanmasn
incelemek iin Index yardm panelinde CultureInfo yazn ve about
CultureInfo Class indeksini sein. kan Index Result
penceresinde CultureInfo Class indeksini sein.
9. Bu sayfada kan kltr isimlerini rneinizde kullanarak deiik
sonular inceleyin.

NOT: Trke dil ailesi iin Globalization.CultureInfo("TR-tr") kullanlr


24 KISIM I:

Online Yardm

Online Yardm
Online MSDN Ktphaneleri
Start Page Online Resources
Uygulama: Undo yordamnn aratrlmas

MSDN ktphanelerinde offline olarak yardm almak hzl ve etkili bir


yntemdir. Ancak bu yardm dosyalarnn gncellenmesi iin MSDN
srmnn yenilenmesi gerekir. Online yardm MSDN ktphanelerinin
internet ortamnda yaynlanmasdr. Yeni rnekler, makaleler ve dzeltmelerle
gncellenen bu yardm dosyalarna http://msdn.microsoft.com adresinden
ulalabilecei gibi, Visual Studio ortamndan da bu dosyalar iinde arama
yaplabilir.

rnek: Windows uygulamasnda kullanlan bir metin kutusunda Geri Al


(Undo) ilemi yaplmak isteniyor fakat fazladan kod yazlmak istenmiyor. Bunun
iin .NET Framework atsnda hazr bir metodun olup olmad kontrol
edilmesi gerekir. Online yardm ile gerekli arama yapldktan sonra kan
sonular yorumlanr.
1. Balang sayfasn (Start Page) an ve Online Resources sekmesine
gelin.
2. Sol paneldeki menden Search Online mensne gelin ve Search For
altndaki metin kutusuna TextBox Undo yazn. Sonularn MSDN Online
iinde hangi duruma gre filtrelenebildiini gsteren balantlar kar.
Sonular
Tm MSDN iinde,
MSDN kod ve kardan yklemelerde,
MSDN teknik makalelerinde,
Microsoft bilgi veri kaynanda,
BLM 1 25

Microsoft.com genelinde filtrelenebilir.


3. Search results for All of MSDN balantsna tklayn ve kan sonular
inceleyin. Aranan kaynak .NET Framework iinde kullanlabilmesi istendii
iin TextBoxBase.Undo Method (.NET Framework) yardm konusuna
tklayn.
4. MSDN Online ktphanelerinin sayfa dzeni, ierii offline yardm ile
ayndr. TextBoxBase taban snfnn Undo metodunu inceleyen bu yardm
sayfasnda, metot tanmlamas, Remarks, Examples, Requirements ve
See Also blmleri grlr. Examples blmnde Visual C# kodlarnn
altnda Undo metodunun kullanmn inceleyin.
5. Undo yapldktan sonra silinen kelimelerin bir listede tutulmas ve listeye
ekleme ileminin kolay bir ekilde yaplmas isteniyor. Bunun iin Sol
panelde bulunan menlerin stndeki Search For metin kutusuna
ArrayList yazn ve kan sonularda ilk balantya tklayn.
6. ArrayList snfnn Count, Item zelliklerini ve Add metodunu inceleyin.
Ve uygulamanz tamamlamak iin bu zellikleri kodunuzda kullann.
ArrayList silinenler = New ArrayList;

Void GeriAl()
{
// Metin kutusunda geri alnacak bir veri varsa
if (TextBox1.CanUndo)
{

// Eski deerler listeye eklenir.


silinenler.Add(TextBox1.Text);
TextBox1.Undo();
GeriAlinanKelimeler();
}
}

// Listeleme ilemini yapan yordam


void GeriAlinanKelimeler()
{
ListBox1.Items.Clear();
for (int i = 0; i < silinenler.Count; i++)
{
// i indisli Item, liste kutusuna eklenir.
ListBox1.Items.Add(silinenler.Item(i));
}
}

Lab 1: Kelime Oyunu


Bu uygulamadaki oyun, girilen bir kelimenin son harfleriyle balayan baka bir
kelimenin girilmesidir. Oyunun seviyesi, girilecek kelimenin kontrol edilecek
harf saysdr. rnein ikinci seviyede, ilk girilen kelime Masa ise, bir sonraki
kelime sa ile balamaldr. nc seviyede bu kelime asa ile balamaldr.
Kullanc, oyuna ilk seviyeden balar ve be kelime bildii zaman bir sonraki
seviyeye geer. Toplam alnan puan, bilinen kelime saysnn seviye kadar
kuvveti alnarak hesaplanr.
26 KISIM I:

Projenin Almas
1. KelimeOyunu isminde bir Window projesi an ve forma listedeki kontrolleri
ekleyin.
btnBasla ve btnGiris isminde iki Button
txtKelime isminde bir TextBox
lblMesaj isminde bir Label
tmrSure isminde bir Timer
2. Projenizin kod sayfasna gein ve uygulama boyunca kullanlacak global
deikenleri tanmlayn.
// Kontrol edilecek kelime
public string kelime;

// Oyunun seviyesi
public byte OyunSeviyesi = 1;

// Timer kontrolnde kullanlacak sre


public int kalanSure = 5;

// Bilinen kelime says


public int tekrar = 0;
3. Uygulamaya giri Sub Main yordamndan yaplr. Bu yordamda
kullancdan, formun balnda grntlenecek bir kullanc ad istenir.
Eer kullanc ad bo girilirse form yklenmeden uygulamadan klr.

// Uygulamann giri noktas


public static void Main() {
string KullaniciAdi = null;
KullaniciAdi =
Microsoft.VisualBasic.Interaction.InputBox( "Kullanc Ad
girin:", "", "", -1, -1 );

if ( KullaniciAdi == "" ) {
return;
}

Form1 oyun = new Form1();


oyun.Text = KullaniciAdi + " yaryor";
oyun.ShowDialog();
}

Yardmc Yordam ve Fonksiyonlar


Uygulamann tamamnda kullanlacak kodlar yordam ve fonksiyonlar halinde
yazlarak hem ynetilmesi hem de kullanlabilirlii artrlr. Uygulamada
kullanlacak yordam ve fonksiyonlar tabloda listelenmitir.
sim Parametreler lev
Temizle Zaman sfrlar ve
TextBox kontrolne
Focus verir
OyunuBaslat Balang kelimesi
alnarak Timer balatlr.
OyunuBitir String neden Sreyi durdurur, puan
BLM 1 27

ve biti nedeni
kullancya gsterir.
Bilgi String mesaj Label kontrolnde
mesaj grntlenir.
SonrakiKelimeBilgi Girilecek kelimenin
hangi harflerle
balayacan gsterir.
SeviyeAtla Byte seviye Oyunun seviyesini
artrr.
Kontrol String kelime1, String kinci kelimenin, ilk
kelime2 kelimenin harfleriyle
baladnn kontrol
yaplr.
PuanHesapla Byte seviye, Short Tekrar deerinin, seviye
tekrar kadar ss alnr.

1. Yordamlar ve fonksiyonlar yazn


Temizle yordam
public void Temizle() {
kalanSure = 5;
TextBox1.Text = "";
TextBox1.Focus();
}
OyunuBaslat yordam

public void OyunuBaslat() {


Temizle();
kelime = TextBox1.Text;

tmrSure.Start();

SonrakiKelimeBilgi();
}
OyunuBitir yordam

public void OyunuBitir( string neden ) {


tmrSure.Stop();
Bilgi( neden );

Temizle();

int puan;
puan = PuanHesapla( OyunSeviyesi,
System.Convert.ToInt16( tekrar ) );
MessageBox.Show( "Puannz: " + puan);
}
Bilgi yordam

public void Bilgi( string kelime ) {


Label1.Text = kelime;
}
SonrakiKelimeBilgi yordam
28 KISIM I:

public void SonrakiKelimeBilgi() {


string mesaj = null;
mesaj += Microsoft.VisualBasic.Strings.Right(
kelime, OyunSeviyesi );
mesaj += " ile balayan bir kelime girin";

Bilgi( mesaj );
}
SeviyeAtla yordam

public void SeviyeAtla( byte seviye ) {


OyunSeviyesi = seviye;

OyunuBitir( seviye + ". seviyeye geildi" );


SonrakiKelimeBilgi();
}
Kontrol fonksiyonu

public bool Kontrol( string kelime1, string kelime2


) {
// kinci kelimenin banda oyun seviyesi kadar
// karakter alnr.
string bas = kelime2.Substring( 0, OyunSeviyesi
);

// kinci kelime, ilk kelimenin sonu ile balyorsa


// doru girilmitir. True deeri dner.
return kelime1.EndsWith( bas );
}

PuanHesapla yordam

public int PuanHesapla( byte seviye, short tekrar ) {


return Math.Pow( tekrar, seviye );
}

Olaylarn yazlmas
1. tmrSure kontrolnn Tick olayna kalan sreyi kontrol eden kodlar yazn
private void tmrSure_Tick( System.Object sender,
System.EventArgs e ) {
if ( kalanSure <= 0 ) {
OyunuBitir( "Sreniz doldu" );
}
else {
kalanSure -= 1;
}
}
2. btnBasla dmesinin Click olayna, oyunu balatan yordam yazn

private void btnBasla_Click( System.Object sender,


System.EventArgs e ) {
OyunuBaslat();
}
BLM 1 29

3. btnGiris dmesinin Click olayna, girilen kelimeyi alp kontrolleri yapan


kodu yazn. Burada dikkat edilmesi gereken nokta, tekrar saysnn seviye
ile doru orantl olmasdr.

private void btnGiris_Click( System.Object sender,


System.EventArgs e ) {
string girilen = TextBox1.Text;

if ( !( Kontrol( kelime, girilen ) ) ) {


string neden = null;
neden = "Girilen kelime, ilk kelimenin son
";
neden += OyunSeviyesi + " harfi ile
balamyor";

OyunuBitir( neden );
}
else if ( tekrar > 5 * OyunSeviyesi ) {
SeviyeAtla( System.Convert.ToByte(
OyunSeviyesi + 1 ) );
}
else {
tekrar += 1;
kelime = girilen;
SonrakiKelimeBilgi();
Temizle();
}
}
30 KISIM I:

Modl Sonu Sorular & Altrmalar

zet

Sub Function kullanm


.NET Tarih, String, Matematik
fonksiyonlar
Online Offline yardmn etkin kullanm

1. Yordam ile fonksiyon arasndaki fark nedir?


2. Main yordam formlarn ve modllerin iinde nasl tanmlanr. Kendi Main
yordamnz yazn.
3. Yordam ve fonksiyonlar uygulamalarda kod tekrarn nasl nler?
4. Yordam ve fonksiyonlarn snrsz parametre almasn salayan params
neden sonda tanmlanr?
5. Farkl kltrlerde tarih, zaman, metin deerlerini gstermek iin gerekli
olan snflar ve fonksiyonlar nelerdir?
6. Yordam ya da fonksiyon ierisiden yordam ya da fonksiyonlar arlabilir
mi? Uygulamasn yazn.
7. Bir yordam ya da fonksiyon kendisini arabilir mi? (Recursive)
Uygulamasn yazn.
Modl 8: Veri Tipleri zerine leri Bak

Hedefler

Deer Veri Tipleri


Referans Veri Tipleri
Organizasyon yaps
ByVal ByRef

.NET iinde tanmlanabilen veri tipleri temel (primitive) veri tipleri ya da


kullancnn tanmlad veri tipleridir. Temel veri tipleri .NET iinde tanmlanm
ve baz nemli zellikleri olan tiplerdir. rnein 32 bitlik bir sayy temsil eden
Int32 deer tipi temel bir tiptir. Bu temel tipin zerinde aritmetik ilemler
yaplabilir. struct olarak tanmlanan kullanc veri tipleri zerinde aritmetik
ilemler yaplamaz.
Temel ve kullanc tanml veri tipleri, deer tipi ve referans tipi olarak ikiye
ayrlr. struct bir deer tipi, Class ise bir referans tipidir. Deer tipleri bellein
stack blgesinde, referans tipleri heap blgesinde depolanr. Deer tiplerinin
oluturulmas ve silinmesi, sadece deerleri zerinde ilem yapld iin
kolaydr. Deer tipinin mr bittii zaman stack yapsndan hemen kaldrlr.
Referans tiplerinin oluturulmas, yok edilmesi ekstra bir performans gerektirir.
Ancak iki veri tipinin de birbirlerine gre avantajlar vardr.

Bu modl tamamlandktan sonra:


Temel ve kullanc tanml deer tiplerini tanyacak,
Temel ve kullanc tanml referans tiplerini tanyacak,
Veri tiplerinin bellei kullanm renecek,
ref kavramn renecek,
Referans ve deer tiplerinin nerede kullanlacan reneceksiniz.
2 Modl 1: Programlamaya Giri

Konu 1: Deer Tipleri

Deer Tipleri
Built-In Deer Tipleri
.NET iinde tanml veri tipleridir.
// Visual C# tanm deer tipi
short sayi = 10;
// .NET Framework tanm deer tipi
Int16 sayi2 = 10;

User-Defined Deer Tipleri


Structure yaps ile oluturulan kullanc
tanml veri tipleridir.
public struct Ucgen {
public int kenar1;
public int kenar2;
public int kenar3;

public Ucgen( int kenar_1, int kenar_2, int kenar_3 ) {


this.kenar1 = kenar_1;
this.kenar2 = kenar_2;
this.kenar3 = kenar_3;
}
}

Deer tipindeki deikenlerin tuttuklar deerler bellekte stack yapsnda


bulunur. Bir deer tipindeki deikenin, baka bir deikene atanmas, deerin
olduu gibi kopyalanmas ile gerekleir. Dolaysyla ne zaman bir atama
ilemi yaplsa, deer tipinin bir kopyas bellekte oluturulur. Bu durum ok
karmak deerler ve byk veri bloklar iin performans drr. Ancak deer
tipleri, tanml olduu yerden kldnda bellekten hemen silinir.

Built-In Deer Tipleri


Built-In deer tipleri olarak bahsedilecek temel tipler, .NET iinde tanml olan
veri tipleridir. Bu deer tipleri saylar, ondalk saylar, bool deerlerini, tarih
zaman deerlerini, karakterleri temsil eden yaplardr. Bu tipler, tm .NET dilleri
tarafndan kullanlabilir ekilde tanmlanr. Ancak Visual C# dilinde bu deer
tiplerine belirli isimler ile ulalr.

Visual C# .NET Framework Deer


bool System.Boolean True / False
Byte System.Byte 8 bit uzunluunda say
Char System.Char 16 bit uzunluunda
Unicode karakter
Decimal System.Decimal 128 bit uzunluunda
say
Konu: 1 3

Double System.Double 64 bit uzunluunda


kayan tipte say
int System.Int32 32 bit uzunluunda say
Long System.Int64 64 bit uzunluunda say
Short System.Int16 16 bit uzunluunda say
float System.Single 32 bit uzunluunda
kayan tipte say

// Visual C# tanm deer tipi


short sayi = 10;

// .NET Framework tanm deer tipi


Int16 sayi2 = 10;

Kullanc Tanml Deer Tipleri


Uygulamalarda ou zaman Built-in deer tiplerinin salamad zel veri
tiplerine ihtiya duyulur. rnein bir gen tipi, kenarlar temsil eden tane
say tutan bir deer tipi olarak oluturulabilir.
Kullanc tanml deer tipleri Visual C# .NET dilinde struct ile oluturulur.

public struct Ucgen {


public int kenar1;
public int kenar2;
public int kenar3;

public Ucgen( int kenar_1, int kenar_2, int


kenar_3 ) {
this.kenar1 = kenar_1;
this.kenar2 = kenar_2;
this.kenar3 = kenar_3;
}

}
struct tiplerinde en az bir veri tipi tanml olmas gerekir.
struct tiplerinde bo parametreli constructor tanmlanamaz. Deer
tipleri tanmlandklarnda bu constructor ile oluturulur. Ancak bir veya
daha fazla parametre alan constructor metotlar kullanlabilir.
struct veri tipleri Class yapsna benzer, ancak deer tipi olduklar
iin oluturulmas yok edilmesi daha kolaydr.
4 Modl 1: Programlamaya Giri

Konu 2: Referans Tipleri

Referans Tipleri
Built-In Referans Tipleri
Object, Built-In referans tipidir.
Array, dizilerin Built-In referans tipinde
olmasn salar.

User-Defined Referans Tipleri


Class yaps ile oluturulan kullanc tanml
referans tipleridir.
// Kullanc tanml referans tipi
public class Class1 {
public int Deger;
}

Referans tipindeki deerlere eriimler, bu deerlerin bellekte oluturulduu


yerin adresi ile salanr. Bu deerler bellekteki heap blgesinde oluturulur.
Referans tipindeki deikenlerin, baka deikenlere atama ilemleri bellekteki
adreslerin kopyalanmas ile gerekleir. Dolaysyla ayn adresteki veriyi
gsterir. Bu iki deikenden herhangi biri deitiinde, dieri de deimi
olacaktr.
Snf ve dizi yaplar referans tipleridir. Dizilerin tuttuklar deerlerin says ou
zaman nceden bellidir ama boyutlar ve uzunluklar deiebilir. Dolaysyla dizi
deikenlerinin ismi, elemanlarnn bellekte tutulduklar ilk yerin adresini temsil
eder. Ancak dizilerin tuttuklar deerler referans tipinde olmayabilir.

Built-in Referans Tipleri


.NET iinde tanml olan class, array yaplar Object snfnda tremitir.
Object snf .NET iinde tanml Built-in referans tipidir. Deikenler
tanmlandklar srada tipleri belirtilmezse Object tipinde oluturulur.

Kullanc tarafndan oluturulan diziler, bir Array snfndan tretilir. Bu snf,


diziler zerinde ilemleri kolaylatracak birok zellik ve metot tanmlar.
rnein Length zellii dizinin toplam eleman saysn verir, Sort metodu ise
dizideki elemanlarn sralanmas ilemini yapar. Dolaysyla Array snf, diziler
iin Built-in referans tipi salar.
Konu: 1 5

// Parametre olarak verilen dizinin balang adresidir.


// Dolaysyla, bu adres blgesinde tanml
// deerlere ulalabilir.

public void Goruntule( int[] dizi ) {


for ( i=0; i<=dizi.Length - 1; i++ ) {
Label1.Text += dizi[ i ];
}
}

Kullanc Tanml Referans Tipleri


.NET iinde tanml snflar kullanlabildii gibi, birok nesneyse ynelik
programlama dilinde kullanclar da kendi snflarn oluturabilirler. .NET
Framework atsnda, kullanclarn oluturduu bu snflar Object snfndan
trer. Dolaysyla bu snflar kullanc tanml referans tipleridir.

// Kullanc tanml referans tipi


public class Class1 {
public int Deger;
}

public void Test1() {


Class1 sinif = new Class1();
sinif.Deger = 10;

Class1 sinif2 = null;

// Sinif deikeninin tuttuu adres bilgisi


// dier deikene aktarlr. Dolaysyla Sinif2
// deikeni de bellekte ayn yeri temsil eder.
sinif2 = sinif;

// Sinif deikenin tuttuu adres blgesindeki


// deer deitirilir.
sinif.Deger = 15;

// Sinif2 deikeni de ayn adresi gsterdii iin


// sonu 15 olur.
MessageBox.Show(sinif2.Deger.ToString());
End Sub
6 Modl 1: Programlamaya Giri

Konu 3: Organizasyon Yapsn nceleme

struct Organizasyon Yaps Ve Bellein


ncelenmesi

Structure Organizasyon Yaps


Tanmlandklar anda Stack blmnde
oluturulur.
Parametre geilen tipler kopyalanr.
Stack
public void Test() {
Ogrenci Ali = new Ogrenci();
Ogrenci Veli = new Ogrenci( "Veli", "Mehmet" );
Goruntule(Veli);
} ogr
public void Goruntule( Ogrenci ogr ) {
MessageBox.Show (ogr.adi + " " + ogr.soyadi); Veli
}
Ali

struct veri tipi, deer tipi olduu iin, tanmlandklar anda bellekte stack
blmnde oluturulur. Bellekte ayrlan yer struct iinde tanml olan Built-in
veri tiplerinin toplam boyutu kadardr.
Visual C# .NET dilinde struct veri tipleri New anahtar kelimesiyle de
oluturulabilir. Ancak bu constructor metotlar parametre alacak ekilde
tanmlanmaldr. Varsaylan parametresiz constructor metotlar CLR tarafndan
ilenir. Dikkat edilmesi gereken bir durum da, New ile oluturulan deikenler
yine bir deer tipidir ve stack alannda tutulur.

NOT: Classlardan nesne olutururken New anahtar kelimesi kullanlr ancak bu nesneler
heap alannda tutulur.

public struct Ogrenci {


public string adi;
public string soyadi;

public Ogrenci( string isim, string soyisim ) {


this.adi = isim;
this.soyadi = soyisim;
}
Konu: 1 7

public void Test2() {


// 1 - renci deeri tanmland srada
// stack alannda yer ayrlr
Ogrenci Ali = new Ogrenci();

// 2 - New ile tanmlanan deikenler de stack


// alannda oluturulur.
// Fark, bu deikenin balang deeri almasdr.
Ogrenci Veli = new Ogrenci( "Veli", "Mehmet" );

// 3 - Parametre olarak sipari nesnesinin


// adresi verilir
Goruntule(Veli);
End Sub

public void Goruntule( Ogrenci ogr ) {


MessageBox.Show (ogr.adi + " " + ogr.soyadi);
}

1. Ali deikeni tanmlanrken Stack yaps

Deiken Ali.soyadi
Deer =
Deiken Ali.adi
Deer =
Ali Ogrenci

2. Veli deikeni tanmlanrken Stack yaps

Deiken Veli.soyadi
Deer = Mehmet
Deiken Veli.adi
Deer = Veli
Veli Ogrenci

Deiken Ali.soyadi
Deer =
Deiken Ali.adi
Deer =
Ali Ogrenci
8 Modl 1: Programlamaya Giri

Bu deikenler oluturulduktan sonra, bir yordama parametre olarak


verildiklerinde, tm deerleri kopyalanr. Deer tipindeki deikenler atama
ilemlerinde, olduklar gibi kopyalanr.

3. Goruntule yordam arld zaman Stack yaps

Degisken ogr.soyadi
Deer = Mehmet
Deiken ogr.adi
Deer = Veli
ogr Ogrenci

Deiken Veli.soyadi
Deer = Mehmet
Deiken Veli.adi
Deer = Veli
Veli Ogrenci

Deiken Ali.soyadi
Deer =
Deiken Ali.adi
Deer =
Ali Ogrenci

Test isimli yordamdan klnca, bu deikenler oluturulduklar srayla stack


yapsndan kaldrlr.
Konu: 1 9

Class Organizasyon Yaps Ve Bellein


ncelenmesi

Class Organizasyon Yaps


Tanmlandklar anda Stack blmnde
oluturulur.
Parametre geilen tipler kopyalanr.
public void Test() {
Siparis ilkSiparis = null;
ilkSiparis = new Siparis(
DateAndTime.Now, "Enis Gnesen", "Visual
Studio.NET 2003" ); Heap Stack
ilkSiparis = new Siparis(
DateAndTime.Now.AddYears( -1 ), "Enis
Gnesen", "Visual Studio.NET 2002" );

Siparis ikinciSiparis = new Siparis();


ilkSiparis = ikinciSiparis; Siparis parametreSiparis
ilkSiparis.Urun = "BilgeAdam Yazlm
Uzmanl"; Siparis ikinciSiparis
Goruntule( ikinciSiparis );
} Siparis ilkSiparis
public void Goruntule( Siparis
parametreSiparis ) {
MessageBox.Show (parametreSiparis.Urun);
}

Classlardan (Snf) nesneler oluturulduklar zaman bu nesnelerin deerleri


heap blgesinde tutulur. Ancak bu nesneleri gsteren bir adres tutucusu
oluturulur ve bu adresin deeri de stack alannda depolanr.

public class Siparis {


public DateTime Tarih;
public string AliciIsmi;
public string Urun;

public Siparis() {

public Siparis( DateTime Tarih, string Isim,


string Urun ) {
this.Tarih = Tarih;
this.AliciIsmi = Isim;
this.Urun = Urun;
}
}

public void Test() {


// 1 - Sipari referans oluturulur
Siparis ilkSiparis = null;

// 2 - Yeni bir nesne oluturulup,adresi


10 Modl 1: Programlamaya Giri

// bu referansa aktarlr
ilkSiparis = new Siparis( DateAndTime.Now, "Enis
Gnesen", "Visual Studio.NET 2003" );

// 3 - Yeni bir nesne daha oluturulur ve adresi


// deikene aktarlr
ilkSiparis = new Siparis(
DateAndTime.Now.AddYears( -1 ), "Enis Gnesen", "Visual
Studio.NET 2002" );

// 4 - Yeni bir referans ve nesne oluturulur


Siparis ikinciSiparis = new Siparis();

// 5 - ki deikenin ayn bellek alann gstermesi


// salanr
ilkSiparis = ikinciSiparis;

// 6 - Bu alandaki rn ismi deitirilir


ilkSiparis.Urun = "BilgeAdam Yazlm Uzmanl";

// 7 - Parametre olarak sipari nesnesinin


// adresi verilir
Goruntule( ikinciSiparis );
End Sub

public void Goruntule( Siparis parametreSiparis ) {


MessageBox.Show (parametreSiparis.Urun);
}

1. ilkSiparis tanmlanrken Stack Alan

Deer = 0x00000000
(Bellekte bo bir alan gsterir)
ilkSiparis

Heap Alan
Nesne Adres Bilgisi

2. ilkSiparis oluturulurken Stack Alan

Deer = 0x00000012
ilkSiparis

Heap Alan
Konu: 1 11

Nesne Adres Bilgisi


Siparis 0x00000012
Tarih = 10.05.2005
AliciIsmi = Enis Gnesen
Urun = Visual Studio.NET 2003

3. ilkSiparis referansna baka bir nesne verilirken Stack Alan

Deer = 0x00000056
(Gsterdii adres deeri deiir)
ilkSiparis

Heap Alan
Nesne Adres Bilgisi
Siparis 0x00000056
Tarih = 10.05.2004
AliciIsmi = Enis Gnesen
Urun = Visual Studio.NET 2002
Siparis 0x00000012
Tarih = 10.05.2005 (Bu adres alanna artk hibir referans
AliciIsmi = Enis Gnesen ulamyor)
Urun = Visual Studio.NET 2003

4. ikinciSiparis oluturulurken Stack alan

Deer = 0x00000088
ikinciSiparis

Deer = 0x00000056
ilkSiparis

Heap Alan
Nesne Adres Bilgisi
Siparis 0x00000088
Tarih =
12 Modl 1: Programlamaya Giri

AliciIsmi =
Urun =
Siparis 0x00000056
Tarih = 10.05.2004
AliciIsmi = Enis Gnesen
Urun = Visual Studio.NET 2002
Siparis 0x00000012
Tarih = 10.05.2005
AliciIsmi = Enis Gnesen
Urun = Visual Studio.NET 2003

5. ikinciSiparis in adres bilgisi ilkSiparis e atanrken Stack Alan

Deer = 0x00000088
ikinciSiparis

Deer = 0x00000088
(Gsterdii adres ikinci sipari
referans ile ayn olur)
ilkSiparis

Heap Alan
Nesne Adres Bilgisi
Siparis 0x00000088
Tarih =
AliciIsmi =
Urun =
Siparis 0x00000056
Tarih = 10.05.2004 (Bu nesneyi gsteren referans
AliciIsmi = Enis Gnesen kalmamtr)
Urun = Visual Studio.NET 2002
Siparis 0x00000012
Tarih = 10.05.2005
AliciIsmi = Enis Gnesen
Urun = Visual Studio.NET 2003
6. ilkSiparis in gsterdii nesnenin rn ismi deitirilirken Stack
Alan
Konu: 1 13

Deer = 0x00000088
ikinciSiparis

Deer = 0x00000088
ilkSiparis

Heap Alan
Nesne Adres Bilgisi
Siparis 0x00000088
Tarih =
AliciIsmi =
Urun = BilgeAdam Yazlm Uzmanl
Siparis 0x00000056
Tarih = 10.05.2004 (Referanslarn kaybetmi nesneleri,
AliciIsmi = Enis Gnesen Garbage Collector bellekten siler)
Urun = Visual Studio.NET 2002
Siparis 0x00000012
Tarih = 10.05.2005 (Referanslarn kaybetmi nesneleri,
AliciIsmi = Enis Gnesen Garbage Collector bellekten siler)
Urun = Visual Studio.NET 2003

7. ikinciSiparis in gsterdii deer Goruntule yordam ile gsterilirken


Stack alan

Deer = 0x00000088
parametreSiparis

Deer = 0x00000088
ikinciSiparis

Deer = 0x00000088
ilkSiparis

Heap Alan
14 Modl 1: Programlamaya Giri

Nesne Adres Bilgisi


Siparis 0x00000088
Tarih =
AliciIsmi =
Urun = BilgeAdam Yazlm Uzmanl

Sonu olarak gsterilen deer, heap alannda 0x00000088 adres numaral


nesnenin rn ismi olur. Parametre olarak verilen nesneler heap alannda
tekrar oluturulmazlar. Referans olarak geen deikenler aslnda deer
tipleridir. Ancak nesnenin tm deil sadece adres deerinin kopyas
oluturulur.

ByVal ve ByRef ncelemesi

ByVal ByRef
ByVal
Parametreye, deikenin deeri geer.
public void ElemanDegistir( int[] dizi, int index, int
yeniDeger ) {
dizi[ index ] = yeniDeger;
}

ByRef
Parametreye, deikenin adresi (referans)
geer.
public void Ekle( ref string Kelime, string eklenecek ) {
Kelime = Kelime.Insert( 0, eklenecek );
}

Fonksiyon ve yordamlara parametre verilirken varsaylan olarak, deikenlerin


deerleri verilir. Parametre olarak verilen deikenler zerinde deiiklik
yaplmas iin bu parametrelerin bulunduu adres bilgilerine ihtiya vardr.
Referans tipindeki deerler parametre olarak geildiklerinde, referanslar verilir.
Ancak deer tipleri parametre olarak verildiklerinde bu deerler kopyalanr ve
asl deikenin tuttuu deere ulalamaz. Bu karklklar zmek iin,
yordamlarda parametreler ref olarak belirtilir.
Konu: 1 15

Normal parametre olarak verilecek deikenin deeri ile ilem yaplacan


belirtir. Dolaysyla bu parametrenin deeri deitirilemez.

// Deiecek olan kelime normal verilmitir


public void Ekle( string Kelime, string eklenecek )
{
Kelime = Kelime.Insert( 0, eklenecek );
}

private void Button1_Click1( System.Object sender,


System.EventArgs e ) {
string mesaj = "Hello";

Ekle( mesaj, " World" );


MessageBox.Show (mesaj);
}

mesaj deikenin deeri, yordama deer olarak verilmitir. Dolaysyla


yordamn zerinde alt deer, mesajn bir kopyasdr. Bellek alannda
fiziksel olarak farkl yerlerde dururular. Yani deiiklik yaplan deer, sadece bir
kopyadr. Yordam sonlandnda kopya olarak oluturulan deer silinecek ve
asl deer deimemi olarak kalacaktr. Bu durumda parametre olarak mesaj
deikeninin adresi verilmelidir. Dolaysyla yordamdaki parametrenin ref
olarak tanmlanmas gerekir.

public void Ekle2( ref string Kelime, string


eklenecek ) {
Kelime = Kelime.Insert( 0, eklenecek );
}
Parametre olarak referans tipinde bir deiken verilirse bir fark olmaz.
Referans tipleri, nesnelerin bulunduu heap alanlarnn adresini tutar.
Dolaysyla normal tanmlanan parametreye referans tipinin deeri (adres
bilgisi) kopyalanr. Bu kopya zerinden ayn adres alannda deiiklik yaplr.

// Parametre ByVal ile tanml olsa dahi, deitirir


// dizinin belirtilen indexteki deeri,
// adres olarak eriilir.

public void ElemanDegistir( int[] dizi, int index,


int yeniDeger ) {
dizi[ index ] = yeniDeger;
}

private void Button1_Click( System.Object sender,


System.EventArgs e ) {
int[] sayilar = new int[ 3 ];

sayilar[ 0 ] = 111;
sayilar[ 1 ] = 222;
sayilar[ 2 ] = 333;

ElemanDegistir( sayilar, 1, 1000000 );


MessageBox.Show( sayilar[ 1 ] );
// Sonu = 1000000
16 Modl 1: Programlamaya Giri

Modl Sonu Sorular & Altrmalar

zet

Deer Veri Tipleri


Referans Veri Tipleri
Organizasyon yaps
ByVal ByRef

1. Deer deikenleri ve referans deikenleri arasndaki fark aklaynz.


Her iki deiken tipinin de yer ald parametreleri ieren bir yordam yazn.
Deikenlerin verilerinin deiip deimediinin gzlemleyin.
2. struct yapsn aklaynz. Kompleks bir veri tipi stucture yapsnda
kodlayn. Yazlan veri tipinin uzunluunu hesaplayn.
Modl 9: Windows Programlama

Hedefler

Listeleme Kontrolleri
ListBox, TreeView, ComboBox
Resim Kontrolleri
PictureBox, ImageList
Dzenleme Kontrolleri
TabControl, Panel, HScrollBar, VScrollBar
Zaman ve Tarih Kontrolleri
DateTimePicker, MonthCalendar
Dinamik Kontroller
alma annda eklenen kontroller

Visual C#.NET ile Windows Tabanl Programlama modlnde, Windows


Formlarna ve kontrollerine giri yaplmt. .NET atsnda, Windows
uygulamalarnn grnm ve kullanm zenginliini artrmak iin birok kontrol
vardr. Visual Studio ile varsaylan olarak gelen kontrollerin dnda birok
kontrol de Windows uygulamalarna eklenebilir.

Bu modl tamamlandktan sonra:


ListBox, TreeView, ComboBox gibi listeleme kontrollerini tanyacak,
PictureBox, ImageList gibi resim kontrollerini tanyacak,
TabControl, Panel, HScrollBar, VScrollBar gibi dzenleme
kontrollerini tanyacak,
DateTimePicker, MonthCalendar gibi zaman ve tarih kontrollerini
tanyacak
alma annda forma yeni kontroller oluturup ekleyebileceksiniz.
2 Modl 9: Windows Programlama

Konu 1: Formlar ve Windows Forms


Kontrolleri

Form Nesnesi

Formlar
Kullanc ile iletiimi salar
Show ve ShowDialog ile birden fazla
form alr.
Balang formu projenin zelliklerinden
ayarlanr.

Windows uygulamalar, kullanc ile iletiimi Form nesneleri ile salar. Formlar,
grnm zellikleri, pencere stili deitirilerek ve zerine kontroller eklenerek
zelletirilir. Ayrca birden ok form nesnesi kullanlarak, uygulamalar
zenginletirilir.

Birden Fazla Form Oluturmak


Windows uygulamalar birden fazla form nesnesinden olutuu iin, projelere
form eklemek her zaman gereklidir. Bir Windows projesine yeni bir form
eklemek iin:

1. Solution Explorer panelinden projeye sa tklayarak ya da Project


mensnden Add Windows Form komutunu seilir.
2. kan menden Windows Form esinin seili olduuna kontrol edilir ve
bir isim verilerek form eklenir.

Balang formlarnn ayarlanmasnn yan sra, uygulamada bir formdan


baka bir formun almas ve ayarlanmas sk karlalan bir durumdur. Form
nesneleri, System.Windows.Forms namespace iinde bulunan Form
Konu: 1 3

snfndan tremi snflardr. Dolaysyla yeni bir Form oluturmak iin, istenen
Form snfndan bir nesne oluturulmas yeterlidir.
frmYeni yeniForm = New frmYeni;

Yeni oluturulan formlarn gsterilmesi, formun Show ve ShowDialog metotlar


ile yaplr. ShowDialog metodu, form gsterildikten sonra, kapanana kadar
dier formlara eriimi engeller. ShowDialog metodundan sonra yazlan kodlar,
form kapandktan sonra altrlr.
frmYeni yeniForm = New frmYeni;
yeniForm.ShowDialog();

// Bu kodlar yeniForm kapandktan sonra altrlr


MessageBox.Show(Form kapand...) ;

ShowDialog ile gsterilen formlar, hangi durum ile kapandklarn belirten bir
DialogResult sonucu dndrrler. Bu kullanm MessageBox.Show hazr
fonksiyonu ile ayndr.

frmSatis frm = New frmSatis;


if (frm.ShowDialog == DialogResult.Yes)
{
// Verileri kaydet
}

Formun hangi diyalog sonucu ile dneceini, zerindeki Button kontrollerinin


DialogResult zellii ile belirlenir. Eer dmenin bu zellii Yes olarak
ayarlanmsa, Form bu dmeye baslp kapand zaman,
DialogResult.Yes deerini dndrr.

rnein bir Windows uygulamasnn, kullancnn girdii verilere gre deiik


formlarn amas iin Main yordamndan faydalanlr.. Bu yordamda,
kullancnn istedii form dinamik olarak yklenir.

public void Main1() {


string grup = null, parola = null;

grup = Interaction.InputBox( "Kullanc grubu:",


"", "", -1, -1 );
parola = Interaction.InputBox( grup + " grubuna
giri iin parola girin:", "", "", -1, -1 );

// Gruplarn parolas kontrol edilir


// ve ilgili grubun formu alr.
// Eer parola veya grup ismi yanl girilirse
// hata formu yklenir.

switch ( grup.ToUpper() ) {
case "SATI":
if ( parola.ToUpper() != "SATIS_PAROLA"
) {
HataFormuYukle( "Sat departman
parolas yanl!" );
}
else {
4 Modl 9: Windows Programlama

frmSatis satisDepartmani = new


frmSatis();
satisDepartmani.ShowDialog();
}

break;
case "YNETM":
if ( parola.ToUpper() !=
"YONETIM_PAROLA" ) {
HataFormuYukle( "Ynetim departman
parolas yanl!" );
}
else {
frmYonetim yonetimDepartmani = new
frmYonetim();
yonetimDepartmani.ShowDialog();
}

break;
default:
HataFormuYukle( grup + " isminde bir
grup bulunamad" );

break;
}

// Hata formu, verilen parametredeki mesaj


// gsterecek ekilde ayarlanr ve yklenir.
public void HataFormuYukle( string mesaj ) {
frmHata hataFormu = new frmHata();
hataFormu.lblHataMesaji.Text = mesaj;
hataFormu.ShowDialog();
}

Ayn Windows projesi iinde alan formlar almadan nce kontrollerinin


zellikleri deitirilebilir. rnein hata formu gsterilmeden nce, zerindeki
Label kontrolnn Text zellii ilgili hata mesajn gsterecek ekilde
ayarlanabilir.

Form zellikleri:
zellik Deer Tipi Aklama
AcceptButton Button Form zerinde Enter
tuuna basld zaman
tklanacak Button
kontrol
CancelButton Button Form zerinde Esc
tuuna basld zaman
tklanacak Button
kontrol
Opacity Double Formun effaflk oran (0
-1 aras)
Konu: 1 5

MaximizeBox Boolean Ekran Kapla


dmesinin grnrl
MaximizeBox Boolean Simge Durumunda
Klt dmesinin
grnrl
ControlBox Boolean Close, Maximize ve
Minimize dmelerinin
tmnn grnrl
StartPosition FormStartPosition Form ald zaman,
ekran zerindeki
konumu
TopMost Boolean Formun tm
pencerelerin zerinde
gzkmesi
FormBorderStyle FormBorderStyle Formun kenar stili
MaximumSize Size Formun alabilecei
maksimum byklk
MinimumSize Size Formun alabilecei
minimum byklk

Form Olaylar:
Olay Aklama
Click Form zerine tkland
zaman gerekleir
Closing Form kapanmadan
hemen nce gerekleir
Closed Form kapandktan
sonra gerekleir
Load Form yklenirken
gerekleir
KeyDown Form zerindeyken bir
tuun baslmas ile
gerekleir
KeyUp Baslan tuun
kaldrlmas ile
gerekleir

Form Metotlar:
Metot Aklama
Hide Formu Visible
6 Modl 9: Windows Programlama

zelliini False
yaparak, gizler
Close Formu kapatr. Eer
form balang
formuysa uygulama
sonlanr
Show Formu gsterir. Hide ile
gizlenmise, Visible
zellii True yaplr.
ShowDialog Formu diyalog kutusu
olarak gsterir.

rnek: Bir Windows formunun kapanmasn ynetmek iin, o formun Closing


olayna ve Close metoduna ihtiya vardr. Kapanmasn yavalatmak iin bir
Timer kontrol kullanlr ve formun effafl yavaa azaltlr.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
this.Text = "Hogeldiniz... " + DateTime.Now;
}

private void Form1_Closing( object sender,


System.ComponentModel.CancelEventArgs e ) {
// Kapanma olay gereklemeden nce iptal edilir
e.Cancel = true;
Timer1.Start();
}

private void Form1_KeyDown( object sender,


System.Windows.Forms.KeyEventArgs e ) {
// Shift-Ctrl-F3 tular basldnda uygulama kapanr
if ( e.Shift & e.Control & e.KeyCode == Keys.F3
) {
this.Close();
}
}

private void Timer1_Tick( System.Object sender,


System.EventArgs e ) {
// Formun grnmez hale gelince uygulama kapanr
if ( this.Opacity == 0 ) {
Application.Exit();
}
else {
this.Opacity -= 0.1;
}
}
Konu: 1 7

Label

Label
Kullancya bilgi veren etikettir.

Label kontrol Form zerinde kullancya bilgi vermek amal kullanlan


etikettir.

Label zellikleri

zellik Deer Tipi Aklama


TextAlign ContentAlignment Yaznn, etiket
zerindeki pozisyonu
belirler.
BorderStyle BorderStyle Kontroln kenar stilidir.
FixedSingle deeri,
kontroln kenar
izgilerini gsterir.
Fixed3D deeri,
kenarlarn boyutlu
olmasn salar
Image Drawing.Image Etiket zerinde
grntlenmek istenen
resmi tutar
ImageAlign ContentAlignment Etiket zerindeki resmin
nerede duracan
8 Modl 9: Windows Programlama

belirler
RightToLeft RightToLeft Etiket zerindeki yaznn
ynn belirler. Eer
Yes deerini alrsa,
yazlar sadan sola
gsterilir

Label1.BorderStyle = BorderStyle.Fixed3D;

// Visual Studio klasr altndaki simgeler kullanlabilir


Label1.Image = Image.FromFile("C:\Program Files\ _
Microsoft Visual Studio .NET
2003\Common7\Graphics\icons\Flags\FLGTURK.ICO");

Label1.ImageAlign = ContentAlignment.MiddleRight;
Label1.RightToLeft = RightToLeft.Yes;
Label1.Text = "Trke";

NOT: Resmin bulunduu yer kontroln sa tarafnda bulunacak ekilde ayarlanmasna


ramen sol tarafta gzkr. Bu durum, RightToLeft zelliinin Yes olarak atanmasndan
kaynaklanr.
Konu: 1 9

TextBox

TextBox
Kullancdan bilgi almak iin kullanlr.

Metin kutular, kullancdan bilgi almak iin kullanlr.

TextBox zellikleri

zellik Deer Tipi Aklama


MultiLine Boolean Metin kutusuna birden
fazla satrda deer
girilebilmesini salar.
False durumunda ise,
metin kutusunun
ykseklii deitirilemez
ScrollBars ScrollBars Metin kutusunda
kaydrma ubuklarnn
grnmesi. Varsaylan
olarak kaydrma ubuu
grntlenmez, ancak
Horizontal, Vertical
kaydrma ubuklar ya
da ikisi birden
gsterilebilir.
PasswordChar Char Metin kutusuna parola
girilecekse, girilen
10 Modl 9: Windows Programlama

karakterlerin hangi
karakter olarak
grneceini belirler.
WordWrap Boolean Metin kutusuna girilen
deerlerin, satr
sonlandnda bir alt
satra geilmesini belirtir.
Eer MultiLine zellii
False ise, alt satrlar
tanml olmayaca iin
bu zelliin bir etkisi
grlmez.
MaxLength Integer Metin kutusunun
alabilecei maksimum
karakter saysn belirtir.
ReadOnly Boolean Metin kutusunun
yazmaya kar korumal
olduunu belirtir.
CharacterCasing CharacterCasing Metin kutusuna
karakterler girilirken
byk veya kk harfe
evrilmesini salar.
Upper deeri byk,
Lower deeri kk
harfe evrimi salar.

TextBox Olaylar

Olay Aklama
TextChanged Metin kutusundaki yaz
deitii zaman
gerekleir.

TextBox Metotlar

Metot Aklama
Cut Seilen karakterleri siler
ancak hafzada tutar.
Copy Seilen karakterleri
kopyalar
Paste Hafzaya alnan
karakterleri metin
Konu: 1 11

kutusuna yaptrr
Clear Metin kutundaki yazlar
temizler
SelectAll Metin kutusundaki tm
yazy seer

rnek: Form zerinde girilen deerlere gre tek saylarn hesaplanmas ve


grntlenmesi ilemi iin TextBox kontrolnn birok olayndan ve
zelliinden yararlanlr.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
// Form yklenirken kontrollerin ayarlanmas:
txtAltSayi.MaxLength = 2;
txtUstSayi.MaxLength = 4;

txtSayilar.Multiline = true;
txtSayilar.ScrollBars = ScrollBars.Vertical;

txtClipBoard.ReadOnly = true;
txtClipBoard.Multiline = true;
}

// Bu olay hem txtUstSayi hem de txtAltSayi kontrolnn


// TextChanged olaynda gerekleir.
// Handles ifadesinden sonra kontroller virglle ayrlmtr
private void txtUstSayi_TextChanged( System.Object
sender, System.EventArgs e ) {
TekSayiYazdir();
}

public bool Kontrol() {


// Metin kutularna say girildiyse
if ( IsNumeric( txtUstSayi.Text ) & IsNumeric(
txtAltSayi.Text ) ) {
// ve alt limit 0 dan byk, ve st limitten kkse
int ust = txtUstSayi.Text;
int alt = txtAltSayi.Text;
if ( ust > alt & alt > 0 ) {
// giri doru yaplmtr
return true;
12 Modl 9: Windows Programlama

}
}

// Kod buraya gelirse, giri yanl yaplmtr


return false;
}

public void TekSayiYazdir() {


if ( !( Kontrol() ) ) { return; }

txtSayilar.Clear();
int alt = txtAltSayi.Text;
int ust = txtUstSayi.Text;

// Saylar metin kutusuna, tek saylarn yazdrlmas


for ( i=alt; i<=ust; i++ ) {
if ( i % 2 == 1 ) {
txtSayilar.Text += i + Constants.vbCrLf;
}
}
}

// Saylarn txtClipboard isimli metin kutusuna


kaydedilmesi:
private void btnKaydet_Click( System.Object sender,
System.EventArgs e ) {
txtClipBoard.Text = txtSayilar.Text;

// Saylarn kopyalanmas iin, nce seilmesi gerekir


txtSayilar.SelectAll();
txtSayilar.Cut();
}

// Cut yordam arldktan sonra veriler kopyalanr.


// Paste ile bu kopyalanan veriler geri yazdrlr.
private void btnYukle_Click( System.Object sender,
System.EventArgs e ) {
txtSayilar.Clear();
txtSayilar.Paste();
}
Konu: 1 13

Button

Button
Komut vermek iin kullanlan dmelerdir.

Windows uygulamalarnda, form zerinde komut dmeleri olarak kullanlr.

Button zellikleri

zellik Deer Tipi Aklama


DialogResult DialogResult Ait olduu form
ShowDialog metodu ile
arld zaman, dn
deerini belirler
FlatStyle FlatStyle Dmeye basldnda
ve dmenin zerine
gelindiinde grnen
format belirler

Button Olaylar

Olay Aklama
Click Dme zerine
tkland zaman
gerekleir
14 Modl 9: Windows Programlama

rnek: Bir formun zerindeki dmelerin DialogResult zellikleri deitirilerek,


zel bir mesaj kutusu tasarlanabilir.

private void btnIslemYap_Click ( System.Object


sender, System.EventArgs e ) {
OnayFormu onay = New OnayFormu;

onay.btnHayir.DialogResult = DialogResult.No;
onay.FlatStyle = FlatStyle.Flat;

onay.btnEvet.DialogResult = DialogResult.Yes;
onay.btnEvet.FlatStyle = FlatStyle.Flat;

if (onay.ShowDialog == DialogResult.Yes)
// Kayt ilemleri...
}
Konu: 1 15

CheckBox

CheckBox
Kullancya seenekler sunmay salar.
Birok seenek seilebilir.

Kullancnn birok seenei birden semesi iin kullanlr.

CheckBox zellikleri

zellik Deer Tipi Aklama


Checked Boolean Kontroln seili olup
olmadn belirler
CheckAlign ContentAlignement Seme kutusunun ve
zerinde yazan metnin
birbirlerine gre
konumlarn belirler
Appearance Appearance Kontroln seme kutusu
ya da dme eklinde
olmasn belirler
ThreeState Boolean Seili olup olmamas
dnda, Intermediate
durum da eklenir. Eer
kontrol Intermediate
durumundaysa Checked
zellii True olur.
AutoChecked Boolean Kontrole basld
16 Modl 9: Windows Programlama

zaman seili duruma


geileceini belirtir. Eer
bu zellik False ise,
kontroln durumunu
deitirmek iin, Click
olaynda, Checked
zelliini gncellemek
gerekir

CheckBox Olaylar
Olay Aklama
CheckChanged Seme kutusunun
durumu deitii zaman
gerekleir.

rnek: Bir GSM ebekesinden fatural hat alnda toplam tutar


hesaplanrken, baz seenekler CheckBox kontrolleri ile sunulabilir.

// Form zerindeki tm seme kutularnn durumu


// deitii zaman, toplam fiyat tekrar hesaplanr

double toplam = txtAcilisTutari.Text;

// lk faturada 22 YTL al bedeli eklenir


if ( cbOzelIletisimIlkFatura.Checked ) {
toplam += 22;
}

// KDV eklenir
if ( cbKDV.Checked ) {
toplam *= 1.18;
}

// zel letiim vergisi eklenir


if ( cbOzelIletisim.Checked ) {
toplam *= 1.25;
}

txtToplam.Text = toplam;
Konu: 1 17

RadioButton

RadioButton
Sunulan seeneklerin bir tanesini semeyi
salar.
GroupBox kontrol ile gruplanr.
GroupBox
Kontrollerin dzenlenmesini salar.
Balk yazs bulunur.
Panel
Yatay Dikey kaydrma ubuklar bulunur.

RadioButton kontrolleri, kullancya sunulan seeneklerden sadece bir


tanesinin seilmesine izin verir. Form zerinde birden fazla RadioButton
konulduunda bu kontrollerin sadece bir tanesi seili olabilir. Fakat baz
durumlarda, farkl seenek gruplar kullanlarak kullancnn birden fazla seim
yapmas istenebilir. Bu durumda, baz seenekler GroupBox kontrol ile
gruplanmaldr.

Bu kontroln zellikleri ve olaylar CheckBox kontrol ile ayndr. Sadece bir


seenek seilebildii iin, kontrollerin yaplmas CheckBox kontrolne gre
daha kolaydr.

GroupBox
Bu kontrol kontrollerin mantksal bir dzende gruplanmas iin kullanlr. inde
bulunan kontrollerin ileyilerinde bir farkllk grnmez. Bir grup RadioButton
kontrolnn, dier RadioButton kontrollerinden etkilenmemesi iin kullanlr.

Panel
GroupBox kontrol gibi, kontrollerin belli bir dzende gzkmesini salamak
iin kullanlr. GroupBox kontrolnden fark olarak yatay ve dikey kaydrma
ubuklarnn bulunur, ancak Panel zerinde balk yazs bulunmaz.
18 Modl 9: Windows Programlama

Panel zellikleri
zellik Deer Tipi Aklama
AutoScroll Boolean Panelde kaydrma
ubuklarnn
grnrln belirler

Paneller, seeneklere gre bir grup kontroln gizlenmesi veya grntlenmesi


aamasnda etkili bir rol oynar.

rnek: RadioButton, GroupBox ve Panel kontrolleri, BilgeAdam eitim anketi


formunun tasarmnda kullanlabilir. Anket, bir eitimin rnleri hakknda yaplr.
Anket bilgileri eitim ara gereleri ve eitim ierii zerinde ok iyi den ok
kt ye kadar bir deer verilmesiyle oluturulur. Sonu olarak elde edilen
anket bilgileri kullancya gsterilerek onaylamas beklenir.

Global deikenlerin oluturulmas:


// Ozet bilgilerinin tutulduu deiken
private string AnketOzet;

// Onaylama dmesinin aktif hale gelmesi iin


// tm oylamalarn yaplm olmas gerekir
private bool IcerikOyuSecildi, AracOyuSecildi;

Formun yklenmesi srasnda, kontroller zerinde yaplan ayarlar:


private void Form1_Load( System.Object sender,
System.EventArgs e ) {
// Sistem ve yazlm seeneklerini tutan
// GroupBox kontrolleri gizlenir:
Konu: 1 19

grpSistem.Visible = false;
grpYazilim.Visible = false;

// Anketleri tutan Panel kontrol gizlenir


pnlAnket.Visible = False;

// Onayla dmesi oylamadan nce pasif haldedir


btnOnayla.Enabled = False;
}

Eitimler seildiklerinde, ilgili alt seeneklerin grntlenmesi salanr.


Alt seenekler, ayr GroupBox kontrollerinde tutulur.

private void rbYazilim_CheckedChanged( System.Object


sender, System.EventArgs e ) {
// GroupBox kontrollerini grnmleri, eitimleri
// seili olmasyla doru orantldr.
grpYazilim.Visible = rbYazilim.Checked;
grpSistem.Visible = rbSistem.Checked;

UrunTemizle();
pnlAnket.Visible = False;
}

// rnler balang deerlerine evrilir


void UrunTemizle() {
rbMCSD.Checked = False;
rbMCSE.Checked = False;
rbSistemUzmanligi.Checked = False;
rbYazilimUzmanligi.Checked = False;
}

Alt rnler seildiklerinde, anket paneli grntlenir ve panelin


karlama mesajnda, ilgili rnn ismi gsterilir.
private void rbSistemUzmanligi_CheckedChanged(
System.Object sender, System.EventArgs e ) {
string panelMesaji;

// Bu olay tetikleyen RadioButton kontrol alnr


RadioButton basilan = sender;

lblKarsilamaMesaji.Text = basilan.Text + " iin


anket girii:";
pnlAnket.Visible = true;
}

Anketlerde, ilgili konularda oylama yapld zaman, oylama dmesi


aktif hale getirilir ve anket mesaj oluturulur.

// Eitim ierii iin verilen oy


private void rbCokIyi_Icerik_CheckedChanged(
System.Object sender, System.EventArgs e ) {
IcerikOyuSecildi = true;

RadioButton basilan = sender;


AnketOzetiCikar( "Eitim ierii: " + basilan.Text
);
20 Modl 9: Windows Programlama

// Eitim ara gereleri iin verilen oy

private void rbCokIyi_Arac_CheckedChanged(


System.Object sender, System.EventArgs e ) {
AracOyuSecildi = true;

RadioButton basilan = sender;


AnketOzetiCikar( "Eitim ara gereleri: " +
basilan.Text );
}

public void AnketOzetiCikar( string ozet ) {


AnketOzet += ozet + Constants.vbCrLf;

if ( IcerikOyuSecildi & AracOyuSecildi ) {


btnOnayla.Enabled = true;
}
}

Anket bilgileri oluturulduktan sonra, onay dmesi aktif hale gelir. Bu


dmeye basld zaman kullancya girdii bilgiler mesaj kutusu ile gsterilir.
Kullanc onayladktan sonra kayt ilemleri gerekleir.

private void btnOnayla_Click( System.Object sender,


System.EventArgs e ) {
string mesaj;
mesaj = "Yaplan anket sonucu: " +
Constants.vbCrLf + AnketOzet + Constants.vbCrLf;
mesaj += "Bilgileriniz kaydedilecektir. Devam
etmek istiyor musunuz?";

if ( MessageBox.Show( mesaj, MsgBoxStyle.YesNo,


"Anket Sonucu" ) == DialogResult.No ) {
return;
}
else {
// Anket kayt ilemleri...
Konu: 1 21

ListBox

ListBox
Nesnelerin listelenmesini salar.
stenen sayda e seilebilir.

Kullancya sunulan seeneklerin bir liste halinde grnmesini salar. Liste


kutusundan istenen sayda e seilebilir.

ListBox zellikleri
zellik Deer Tipi Aklama
Items ListBox.ObjectCollection Liste kutusuna
eklenen elerin
tutulduu koleksiyon
nesnesidir.
SelectedItem Object Liste kutusundan
seilen eyi alr.
SelectedItems SelectedObjectCollection Liste kutusundan
seilen eleri alr.
Seilen eler
dinamik bir dizide
tutulur.
SelectedIndex Integer Liste kutusundan
seilen enin indisini
22 Modl 9: Windows Programlama

alr.
SelectedIndices SelectedIndexCollection Liste kutusundan
seilen elerin
indislerini bir
koleksiyon
nesnesinde tutar.
DataSource Object Listenin elerinin
tutulduu veri
kaynadr. Veri
kayna bo geilirse
Items koleksiyonuna
eklenen eler
grntlenir.
DisplayMember String Veri kaynandan
gelen elerin,
kullancya
gsterilecek
zelliidir.
ValueMember String Veri kaynandan
gelen elerin, dn
deerini belirleyen
zelliidir.
SelectedValue Object Seilen enin, liste
kutusunun
ValueMember ile
belirtilen zelliidir.
SelectionMode SelectionMode Liste kutusundan ka
tane e
seilebileceini
belirtir. None deeri 0,
One deeri 1,
MultiSimple ve
MultiExtended
deerleri birden fazla
enin
seilebileceini
belirtir.
MultiColumn Boolean Liste kutusundaki
elerin biden fazla
kolonda
grntlenmesini
belirler.
Konu: 1 23

ListBox Olaylar
Olay Aklama
SelectedIndexChanged Liste kutusunda bir e
seildii zaman
gerekleir.

ListBox Metotlar
Metot Aklama
GetItemText Parametre olarak
verilen nesnenin liste
kutusunda gsterilen
yazsn dndrr.
GetSelected Parametre olarak
verilen indisteki enin
seili olup olmadn
dndrr.
FindString Parametredeki String
ifadesini liste kutusunda
arayarak, bulduu ilk
enin indisini dndrr
rnek: Tedarikiden alnacak ve stokta bulunan rnleri listelemek ve alm
satm ilemi yapmak iin ListBox kontrolleri kullanlabilir.

rnlerin tutulmas iin bir Struct oluturulur. Bu rn yapsnn


ToString metodu tekrar yazlmtr. Bunun nedeni, ListBox
kontrolnde listelenen nesnelerin grntlendii deer ToString
metodu arlarak belirlenir. Dolaysyla liste kutularnda istenen
formatta deerin gzkmesini salamak iin ToString metodunun
tekrar yazlmas gerekir.
public struct Urun {
public string Ismi;
24 Modl 9: Windows Programlama

public double Fiyat;

public Urun( string UrunIsim, double UrunFiyat )


{
Ismi = UrunIsim;
Fiyat = UrunFiyat;
}

public override string ToString() {


return string.Format( "{0} - {1:C}", Ismi,
Fiyat );
}

}
Liste kutularnn zellikleri ayarlanr ve iine eleman doldurulur.
private void Form1_Load( System.Object sender,
System.EventArgs e ) {
lbTedarikci.SelectionMode =
SelectionMode.MultiExtended;
lbStok.SelectionMode =
SelectionMode.MultiExtended;

UrunEkle();
}

public void UrunEkle() {


Urun u = new Urun();

u = new Urun( "Kalem", 1.49 );


lbTedarikci.Items.Add( u );
u = new Urun( "Silgi", 0.39 );
lbTedarikci.Items.Add( u );
u = new Urun( "Defter", 4.99 );
lbTedarikci.Items.Add( u );
u = new Urun( "Cetvel", 1.99 );
lbTedarikci.Items.Add( u );
u = new Urun( "Pergel", 2.99 );
lbTedarikci.Items.Add( u );
u = new Urun( "Not Defteri", 3.79 );
lbTedarikci.Items.Add( u );

}
Tedariki liste kutusundan, stok liste kutusuna e aktarlmas iin,
seilen deerler nce liste kutusuna eklenir. Daha sonra bu seilen
deerler, dier listede olmayaca iin tek tek kartlr.

private void btnEkle_Click( System.Object sender,


System.EventArgs e ) {
// Tedarikiden alnan rnler stok listesine eklenir
foreach ( object item in
lbTedarikci.SelectedItems ) {
lbStok.Items.Add( item );
}
// Stok listesine eklenen tm rnler
// tedariki listesinden kartlr
foreach ( object item in lbStok.Items ) {
lbTedarikci.Items.Remove( item );
}
Konu: 1 25

btnCikar.Enabled = true;
btnHesapla.Enabled = true;
}
Stok listesinden e karmak iin, ekleme ilemine benzer kodlar
altrlr.
private void btnCikar_Click( System.Object sender,
System.EventArgs e ) {
// Tedarikiden alnan rnler stok listesine eklenir
foreach ( object item in lbStok.SelectedItems )
{
lbTedarikci.Items.Add( item );
// Stok listesine eklenen tm rnler
// tedariki listesinden kartlr
foreach ( object item in lbTedarikci.Items ) {
lbStok.Items.Remove( item );
}

if ( lbStok.Items.Count == 0 ) {
btnCikar.Enabled = false;
btnHesapla.Enabled = false;
}
}

Stoktaki toplam fiyatn hesaplanmas ilemi, rnlerin fiyatlarnn alnp


toplanmas ile gerekleir.
private void btnHesapla_Click( System.Object sender,
System.EventArgs e ) {
double toplam = 0;

for (int i=0; i<=lbStok.Items.Count - 1; i++ ) {


Urun urun = ( (
WindowsApplication8.Form1.Urun )( lbStok.Items[ i ]) );
toplam += urun.Fiyat;
}
lblToplam.Text = System.Convert.ToString( toplam
);
}

Stok listesindeki bir enin seildii durumda, bu enin fiyat


grntlenir.
private void lbStok_SelectedIndexChanged(
System.Object sender, System.EventArgs e ) {
Urun secilen = new
WindowsApplication8.Form1.Urun();
secilen = ( (Urun )( lbStok.SelectedItem ) );

lblUrunFiyat.Text = string.Format( "{0:C}",


secilen.Fiyat );
}
26 Modl 9: Windows Programlama

CheckedListBox

CheckedListBox
ListBox yapsndadr.
eler iaret kutusu ile gsterilir.

Liste kutusunun tm zellik, metot ve olaylarn alr ve listedeki elerin iaret


kutusu ile gsterilmesini salar.

CheckedListBox zellikleri
zellik Deer Tipi Aklama
CheckedItems CheckedItemCollection Liste kutusunda
iaretlenmi eleri
tutar
CheckedIndices CheckedIndexCollection Liste kutusunda
iaretlenmi elerin
indislerini tutar
CheckOnClick Boolean Liste kutusunda eye
tkland zaman
iaretlenmesini belirler.
False ise ilk tklamada
e seilir, ikinci
tklamada seme
kutusu iaretlenir.

CheckedListBox Metotlar
Metot Aklama
Konu: 1 27

GetItemSelected Parametre olarak


verilen indisteki enin
seili olup olmadn
dndrr
SetItemSelected lk parametrede verilen
indisteki elemann seili
olup olmadn, ikinci
parametrede verilen
Boolean deeri ile
belirler
rnek: Kategori bana stoktaki toplam rnlerin gsterildii bir uygulamada,
listelenen kategorileri semek iin bu kontrol uygun olur.

Listede bir e seildii zaman, seilen tm kategorilerin rn stok


durumu alnr ve toplam rn says kullancya gsterilir.

private void chlistKategoriler_SelectedIndexChanged(


System.Object sender, System.EventArgs e ) {
int toplam;

// Listedeki seilen elerin rn adeti


toplanr.
for ( i=0; i<=chlistKategoriler.Items.Count - 1;
i++ ) {
if ( chlistKategoriler.GetItemChecked( i ) )
{
object secilen = null;
secilen = chlistKategoriler.Items( i );

// Stok durumunu gsteren fonksiyon arlr


toplam += StokDurumu( secilen.ToString()
);
}
}

lblToplamUrun.Text = "Seilen kategorilerdeki


toplam rn: " + toplam;
}

// Kategoriye gre, stoktaki rnlerin belirlenmesi


public int StokDurumu( string kategori ) {
switch ( kategori ) {
28 Modl 9: Windows Programlama

case "Film":
return 1100;
case "Mzik":
return 982;
case "Bilgisayar":
return 302;
case "Kitap":
return 1222;
default:
return 10;
}

// Ekleme ilemi
private void btnKategoriEkle_Click( System.Object
sender, System.EventArgs e ) {
chlistKategoriler.Items.Add( txtKategoriAdi.Text
);
}

ComboBox

ComboBox
Listelenen eler alan kutuda
grntlenir.
Listeden bir tane e seilebilir.

Liste kutusu ile ayn zelliklere sahiptir. Ancak listelenen eler alan bir
kutuda grntlenir ve listeden en fazla bir tane e seilebilir. Liste kutusuna
gre bir baka farkll ise, istee bal olarak, kullancn alan kutu zerinde
deer girebilmesidir. Dolaysyla bir TextBox kontrol gibi de davranabilir.

ComboBox zellikleri
Konu: 1 29

zellik Deer Tipi Aklama


DropDownStyle ComboBoxStyle Kontroln listeleme
stilini belirler. Simple
stil, listedeki sadece bir
eyi grntler.
DropDown stili, listenin
tm elemanlarn
grntleyerek
seilmelerini ve
kullancnn deer
girmesini saar.
DropDownList
kullancnn deer
girmesini engeller.
DropDownWidth Integer ComboBox kontrolnn
alan listesinin
geniliini belirler.
MaxDropDownItems Integer Kontrole eklenebilecek
maksimum e
saysn belirler.
MaxLength Integer Kullancnn
girebilecei maksimum
karakter saysn
belirler.
SelectedText String Seilen enin
grntlenen yazsn
belirler.
rnek: Tarih ve say formatlarn, kullancnn seimine brakarak bir say veya
tarih yazdrma ilemi ComboBox kontrolleri ile yaplabilir.

ComboBox kontrollerinin zelliklerinin ayarlanmas ve format tiplerine


e eklenmesi
private void Form1_Load( System.Object sender,
System.EventArgs e ) {
30 Modl 9: Windows Programlama

cmbFormat.DropDownStyle =
ComboBoxStyle.DropDownList;
cmbFormatString.DropDownStyle =
ComboBoxStyle.DropDownList;

cmbFormat.Items.Add( "Tarih Format" );


cmbFormat.Items.Add( "Say Format" );
}
Tarih ya da say formatlarndan biri seildii zaman, ikinci ComboBox
kontrolne deiik format seenekleri eklenir.

private void cmbFormat_SelectedIndexChanged(


System.Object sender, System.EventArgs e ) {
cmbFormatString.Items.Clear();

switch ( cmbFormat.SelectedIndex ) {
case 0:
cmbFormatString.Items.Add( "dd - MM -
yyyy" );
cmbFormatString.Items.Add( "yyyy*MM*dd
hh:mm" );
cmbFormatString.Items.Add( "dddd
dd.MM.yy hh:mm:ss" );
break;
case 1:
cmbFormatString.Items.Add( "C" );
cmbFormatString.Items.Add( "P" );
cmbFormatString.Items.Add( "N" );
break;
}

}
Format seildikten sonra metin kutusuna girilen deer alnr ve ilgili
formatta gsterilir
private void btnGoster_Click( System.Object sender,
System.EventArgs e ) {
switch ( cmbFormat.SelectedIndex ) {
case 0:
DateTime d = txtYazi.Text;
lblSonuc.Text = d.ToString(
cmbFormatString.Text );
break;
case 1:
int i = txtYazi.Text;
lblSonuc.Text = i.ToString(
cmbFormatString.Text );
break;
}

}
Konu: 1 31

NumericUpDown

NumericUpDown
Saysal deerlerin yukar aa oklar ile
seilmesini salar

DomainUpDown
Object tipinde nesnelerin seilmesini
salar.

Bu kontrol kullancnn, saysal bir deeri girmesini veya yukar aa oklar ile
semesini salar.

NumericUpDown zellikleri

zellik Deer Tipi Aklama


HexaDecimal Boolean Saylarn on altlk
tabanda
grntlenmesini
belirler.
Increment Decimal Aa yukar oklar
kullanldnda,
saylarn artma ve
azalma admlarn
belirler.
Maximum Decimal Kontrolde gsterilen
saylarn alabilecei
maksimum deeri
belirler.
Minimum Decimal Kontrolde gsterilen
saylarn alabilecei
minimum deeri
32 Modl 9: Windows Programlama

belirler.
ThousandSeparators Boolean Saylarn basamak
ayracn gsterilmesini
belirler.
Value Decimal Kontroln gsterdii
say deerini belirler.
ReadOnly Boolean True deerini alrsa
kullancnn giri
yapmasn engeller.

NumericUpDown Olaylar
Olay Aklama
ValueChanged Kontroln say deeri
deitii zaman
gerekleir

NumericUpDown Metotlar
Metot Aklama
DownButton Aa dmesine basar
ve say deerini
drr.
UpButton Yukar dmesine
basar ve say deerini
artrr.

rnek: Alarm kurarken, tarih ve zaman deerlerinin ayarlanmas


NumericUpDown kontrol ile yaplabilir.

Tarih ve zaman deerlerinin alabilecei maksimum ve minimum


deerler ayarlanr.
private void Form1_Load( System.Object sender,
System.EventArgs e ) {
nYil.Minimum = 1;
nAy.Minimum = 1;
Konu: 1 33

nGun.Minimum = 1;

nYil.Maximum = 2099;
nAy.Maximum = 12;
nGun.Maximum = 31;

nSaat.Minimum = 0;
nDakika.Minimum = 0;

nSaat.Maximum = 23;
nDakika.Maximum = 59;

nYil.Value = DateAndTime.Now.Year;
nAy.Value = DateAndTime.Now.Month;
nGun.Value = DateAndTime.Now.Day;
nSaat.Value = DateAndTime.Now.Hour;
nDakika.Value = DateAndTime.Now.Minute;
}
Bu deerlerden herhangi biri deitii zaman, doru tarih ve zaman
deerinin girilmesi kontrol edilir
private void nGun_ValueChanged( System.Object
sender, System.EventArgs e ) {
string tarih;
tarih = nGun.Value + "." + nAy.Value + "." +
nYil.Value;

if ( !( IsDate( tarih ) ) ) {
MessageBox.Show( tarih );
}

string zaman;
zaman = nSaat.Value + ":" + nDakika.Value;

if ( !( IsDate( zaman ) ) ) {
MessageBox.Show ( zaman );
}

DomainUpDown
NumericUpDown kontrol ile ayn yapdadr ancak saysal deerler yerine
Object tipinde deerler tutar. Bu deerler kontroln Items koleksiyonunda
tutulur. Kontrol, bu zellii ile liste kutusuna benzemektedir.

DomainUpDown zellikleri

zellik Deer Tipi Aklama


Items DomainUpDownItemCollection Kontroln
elerinin
tutulduu dinamik
bir listedir.
SelectedItem Object Kontrolde seilen
eyi tutar.
34 Modl 9: Windows Programlama

Wrap Boolean Liste sonuna


gelindiinde
bataki veya
sondaki eye
geri dnlmesini
belirler.

DomainUpDown Olaylar
Olay Aklama
SelectedItemChanged Kontrolde seilen e
deitii zaman
gerekleir.
rnek: Metin kutularnn deitirilmek istenen yaz tipleri DomainUpDown
kontrolnde tutulabilir.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
for ( i=0; i<=10; i++ ) {
dFont.Items.Add(
System.Drawing.FontFamily.Families[ i ].Name );
}

dFont.Wrap = true;
}

private void dFont_SelectedItemChanged(


System.Object sender, System.EventArgs e ) {
if ( dFont.SelectedIndex >= 0 ) {
TextBox1.Font = new Font(
dFont.SelectedItem.ToString, 15 );
}
}
Konu: 1 35

HScrollBar / VscrollBar

HScrollBar VScrollBar
Saysal deer tayan kaydrma
ubuklardr.

Horizontal Vertical ScrollBar kontrolleri, saysal bir deer tayan


kaydrma ubuklardr. Tuttuklar deerlerin saysal olmas bakmndan
NumericUpDown kontrolne benzer. Bu kontroller, zerlerinde kaydrma
ubuklar olmayan kontroller zerinde kullanlabilir. rnein bir ListBox, Panel
gibi kontrollerin kendi ScrollBar kontrolleri vardr. TextBox kontrolnn de
ilgili zellikleri ayarlanarak yatay ve dikey ScrollBar kontrolleri gsterilebilir.

ScrollBar zellikleri
zellik Deer Tipi Aklama
Value Integer Kaydrma ubuunun
pozisyonuna gre alnan
deeri tutar.
SmallChange Integer Kontrol, stndeki oklar ile
kaydrld zaman eklenecek
ya da kartlacak deeri tutar.
LargeChange Integer Kontrol, kaydrma
ubuundaki bolua
tklanarak kaydrldnda
zaman eklenecek ya da
kartlacak deeri tutar.
Minimum Integer Value zelliinin alabilecei
maksimum deeri tutar
36 Modl 9: Windows Programlama

Maximum Integer Value zelliinin alabilecei


minimum deeri tutar

ScrollBar Olaylar
Olay Aklama
Scroll ubuklar kaydrldklar
zaman gerekleir.
ValueChanged Kod ile ya da ubuklar
kaydrlnca Value
zellii deitii zaman
gerekleir.

rnek: Bir ComboBox kontrolnn elerini listelemek iin, aaya doru bir
kaydrma ubuu grntlenir. Ancak listedeki baz elemanlarn kontrole
smyorsa, alma annda bu kontroln genilii artrlabilir.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
hsGenislik.Maximum = ComboBox1.Width * 2;
hsGenislik.Value = ComboBox1.Width;

private void hsGenislik_Scroll( System.Object


sender, System.Windows.Forms.ScrollEventArgs e ) {
ComboBox1.Width = hsGenislik.Value;

}
Konu: 1 37

TrackBar

TrackBar
Kaydrma ubuunun pozisyonu grsel
olarak takip edilir.
Pozisyon, klavye tular ile deitirilebilir.

Bu kontrol, ScrollBar kontrollerine benzer yapdadr ancak kontrol, bir cetvel


biiminde olduu iin, zerinde durulan pozisyon grsel olarak takip edilebilir.
Kontroln, kaydrma ubuklarndan bir fark da zerine odaklanabilir olmasdr.
Dolaysyla kontroln Value deeri klavyede bulunan yukar, aa, sa, sol
oklar ve PageUp, PageDown dmeleri ile deitirilebilir.

TrackBar zellikleri
TrackBar kontrolnn birok zellii ScrollBar kontrollerinin zellikleriyle
ayndr. Fakat kontrol daha esnek hale getiren birka zellii vardr.
zellik Deer Tipi Aklama
TickStyle TickStyle Kontroln deerini gsteren
izgilerin pozisyonunu belirler
TickFrequency Integer izgiler arasnda kalan
deerlerin saysn belirler
Orientation Orientation Kontroln ynnn yatay
veya dikey olmasn salar.
38 Modl 9: Windows Programlama

TabControl

TabControl
Sekme sayfa yaps sunar.
TabPage nesnelerinden oluur.

TabControl nesnesi, iinde sekme sayfalar tutan yapdr. Bu sayfalar,


TabPage nesneleri olarak oluturulup yaplandrldktan sonra TabControl
nesnesinin TabPages koleksiyonuna eklenir. Ekleme ilemi, Properties paneli
ile tasarm annda da yaplabilir.

TabControl zellikleri
zellik Deer Tipi Aklama
HotTrack Boolean Fare ile sekme sayfalarnn
zerine gelindiinde,
isimlerinin grsel olarak
deimesini belirler
ItemSize Size Sekme sayfalarnn boyutunu
belirler
Multiline True Eklenen sekmelerin birden
fazla satrda st ste
gzkmesini belirler
ShowToolTips Boolean Fare sekme sayfalarnn
zerindeyken bilgi mesajnn
gsterilmesini belirler
SelectedTab TabPage Seilen sekme sayfasn
belirler
Konu: 1 39

SelectedIndex Integer Seilen sekme sayfasnn


indisini belirler
TabCount Integer Sekme saysn belirler
TabPages TabPageCollection Kontroln iinde bulunduu
sekme sayfalarnn
koleksiyonudur.

TabControl nesnesine TabPage sayfalar eklemek iin tasarm annda


TabPages Collection Editor penceresinden yararlanlabilir.

TabPage zellikleri
Sekme sayfalar, normal form tasarmlar gibi kontroller eklenerek yaplr.
TabPage kontrol Panel kontrolnden trer ve Panel kontrolnn tm
zelliklerini alr.
zellik Deer Tipi Aklama
ToolTipText String Bu zelliin deeri, fare
sayfann zerindeyken, bilgi
mesaj olarak gsterilir. Ait
40 Modl 9: Windows Programlama

olduu TabControl
nesnesinin ShowToolTip
zellii True olmaldr.

rnek: Bir kullanc kaydnn tek bir formda grntlenmesi isteniyorsa, bu


form TabControl ile kk sayfalara blnebilir.

DateTimePicker

DateTimePicker
Takvimden zaman deeri seilmesini
salar.
Takvim yaps alan kutu eklindedir.

Bir alan kutudan zaman deeri semeyi salar. Seilen deer Date tipinde
olur.
Konu: 1 41

DateTimePicker zellikleri
zellik Deer Tipi Aklama
CalendarTrailingForeColor Color Bir nceki ve bir sonraki
ayn gnlerinin
grntlenme rengi
CalendarTitleForeColor Color Takvim balnn nalan
rengi
CalendarTitleBackColor Color Takvim balnn arka plan
rengi
CalendarMonthBackground Color Takvim arka plan rengi
CalendarForeColor Color Takvimdeki yazlarn n
plan rengi
CalendarFont Font Takvimin gsterilecei yaz
tipi ayarlar
ShowCheckBox Boolean Tarih deerinin yannda
seme kutusunun
gsterilmesi.
Checked Boolean Seme kutusu
grntlendii zaman,
tarihin seili olup olmadn
gsterir
Format DateTimePic Kontroln grntlenecei
kerFormat
format belirler. Long, Short
deerleri uzun ve ksa tarih
formatn, Time sadece
zaman gsterir. Custom
deeri, CustomFormat
zelliine girilen formatta
gsterileceini belirler
CustomFormat String Tarihin hangi formatta
gsterileceini belirler.
Value Date Seilen tarih deerini
belirler
MaxDate Date Kontroln alabilecei
maksimum tarih deeri
MinDate Date Kontroln alabilecei
minimum tarih deeri
ShowUpDown Boolean Kontroln formunu alan
kutu ya da yukar aa
oklar formatnda gsterir.
Bu zellik True olduunda,
kontroln format,
NumericUpDown
42 Modl 9: Windows Programlama

kontrolnn formatnda
olur.

rnek: Verit tabanndan bir kaydn belli tarih aralklar ile sorgulanmas
srasnda, kullancnn balang ve biti tarihlerini semesi iin bu kontrol
kullanlr.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
TarihAyarla( dtBaslangic );
TarihAyarla( dtBitis );

public void TarihAyarla( DateTimePicker dtTarih ) {


dtTarih.Format = DateTimePickerFormat.Custom;
dtTarih.CustomFormat = "dd - MM - yyyy";
dtTarih.MaxDate = DateAndTime.Now.AddYears( 2 );
dtTarih.MinDate = DateAndTime.Now.AddYears( -2
);
}

private void btnAra_Click( System.Object sender,


System.EventArgs e ) {
DateTime basTarih, sonTarih;
basTarih = dtBaslangic.Value;
sonTarih = dtBitis.Value;

if ( DateTime.Compare( basTarih, sonTarih ) == 1


) { return; }

string Sql;
Sql = "Select * From Siparisler Where
SiparisTarih Between ";
Sql += basTarih + " And " + sonTarih;

// komutunu altr
}
Konu: 1 43

MonthCalendar

MonthCalendar
Takvimden bir zaman aral seilmesini
salar.

DateTimePicker kontrolnn alan takvimi biimindedir. Bu kontrol


kullancya, tarih alanlar zerinde daha esnek almay salar.

MonthCalendar zellikleri
DateTimePicker kontrolnn birok zelliini almasna ramen, baz
zelliklerinde deiiklikler grlr. rnein Value zellii bu kontrolde yoktur.
Bu kontrolden seilen deerler, bir tarih araldr. Dolaysyla tek bir Date tipini
tutan bir zellik yoktur.

zellik Deer Tipi Aklama


MaxSelectionCount Integer Bir seferde maksimum ka
gn seileceini belirler.
SelectionRange SelectionRange Balang ve biti
tarihlerinden oluan bir seim
aral nesnesidir.
SelectionBegin Date Seilen tarih aralnn hangi
tarihten itibaren baladn
belirler
SelectionEnd Date Seilen tarih aralnn hangi
tarihte bittiini belirler
ScrollChange Integer leri geri dmelerine
44 Modl 9: Windows Programlama

basld zaman ka ay
atlanacan belirler
MonthlyBoldedDates Date() Takvimde hangi gnlerin kaln
yaz tipinde gsterileceini
belirler. aretlenen gnler,
her ay iin kaln gsterilir.
ShowToday Boolean Takvimin alt ksmnda, sistem
takvimine gre hangi gnde
olduunu gsterir
ShowTodayCircle Boolean Takvimde, o gnn seili
olmasn belirler
ShowWeekNumbers Boolean Takvimin sol tarafnda, yln
hafta numaralarn gsterir

MonthCalendar Olaylar
Olay Aklama
DateChanged Seilen tarihten farkl bir
tarih seildiinde
gerekleir
DateSelected Yeni bir tarih seildii
zaman gerekleir.
DateChanged olay
gerekletikten hemen
sonra bu olay
gerekleir.
rnek: Yaplacak grevlerin tutulduu bir Windows uygulamasnda, grevin
balang ve biti tarihleri tek bir MonthCalendar kontrolnden kolaylkla
seilebilir.
Konu: 1 45

Grevlerin tanmlanmas iin bir Grev snf oluturulur.


public class Gorev {
public string GorevIsmi;
public DateTime BaslangicTarihi;
public DateTime BitisTarihi;

// Liste kontrollerinde grevin isminin grntlenmesi


// iin, ToString metodunu tekrar yazmak gerekir.
public override string ToString() {
return GorevIsmi;
}

public Gorev( string Isim, DateTime basTarihi,


DateTime bitTarihi ) {
this.GorevIsmi = Isim;
this.BaslangicTarihi = basTarihi;
this.BitisTarihi = bitTarihi;
}
}
Grevler eklenecei zaman, yeni bir grev nesnesi oluturulur ve
grevin balang-biti tarihleri ayarlanr.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
// Maksimum iki hafta seilsin
MonthCalendar1.MaxSelectionCount = 14;
}

private void btnEkle_Click( System.Object sender,


System.EventArgs e ) {
DateTime baslangicTarihi =
MonthCalendar1.SelectionStart;
DateTime bitisTarihi =
MonthCalendar1.SelectionEnd;
string gorevIsmi = txtYeniGorev.Text;

Gorev yeniGorev = new Gorev( gorevIsmi,


baslangicTarihi, bitisTarihi );
ListBox1.Items.Add( yeniGorev );

private void ListBox1_SelectedIndexChanged(


System.Object sender, System.EventArgs e ) {
Gorev secilen;
secilen = ListBox1.SelectedItem;

MonthCalendar1.SelectionStart =
secilen.BaslangicTarihi;
MonthCalendar1.SelectionEnd =
secilen.BitisTarihi;
txtYeniGorev.Text = secilen.GorevIsmi;

}
46 Modl 9: Windows Programlama

Timer

Timer
Zaman deeri ayarlanabilen sayatr.
Interval zellii ile, ka milisaniyede bir
alaca belirlenir.

Windows uygulamalarnda saya grevini grr.

Timer zellikleri
zellik Deer Tipi Aklama
Enabled Boolean Kontroln aktif olup
olmadn belirler.
Interval Integer Sayacn hangi zaman
aralnda bir almas
gerektiini belirler. Milisaniye
cinsindedir.

Timer Olaylar
Olay Aklama
Tick Interval zelliinde
belirtilen zaman deeri
getiinde gerekleir.

Timer Metotlar
Metot Aklama
Konu: 1 47

Start Sayac balatr


Stop Sayac durdurur

ProgressBar

ProgressBar
Yaplan ilemlerin ilerleyiini gzlemeyi
salar.
Maksimum ve minimum deerleri
arasndaki pozisyonu gsterir.

ProgressBar, belli bir andaki deerinin, alabilecei deer aralna gre


yzdesini gsterir. Yaplan bir ilemin ilerleyiini gstermesi asndan olduka
kullanl bir kontroldr.

ProgressBar zellikleri

zellik Deer Tipi Aklama


Minimum Integer Kontroln alabilecei
minimum deer belirler
Maximum Integer Kontroln alabilecei
minimum deer belirler
Value Integer Kontroln verilen deer
aralndaki pozisyonunu
belirler

rnek: ProgressBar bir saym ileminde kalan durumu gstermek iin


kullanlabilir.
48 Modl 9: Windows Programlama

ProgressBar ile durumun gsterilecei ayr bir form eklenir. Burada


sayma ileminin hz iin bir Timer bulunur. Saya her ilediinde yeni
deer ProgressBar kontrolnde gsterilir.
public int kalan;

private void Durum_Load( System.Object sender,


System.EventArgs e ) {
kalan = ProgressBar1.Maximum;
Timer1.Start();
}

private void Timer1_Tick( System.Object sender,


System.EventArgs e ) {
if ( kalan == 0 ) {
Timer1.Stop();
this.Close();
}

int aralik;
aralik = ProgressBar1.Maximum -
ProgressBar1.Minimum;

int oran = ( aralik - kalan ) / aralik * 100;


Label1.Text = oran + "% tamamland";

ProgressBar1.Value = ProgressBar1.Maximum -
kalan;
kalan -= 1;
}
Oluturulan bu form, balang formundan arlarak durum gsterilir.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
CheckBox1.Checked = true;
}

private void btnBaslat_Click( System.Object sender,


System.EventArgs e ) {
Durum frmDurum = new Durum();
frmDurum.Timer1.Interval = TextBox1.Text;

if ( CheckBox1.Checked ) {
frmDurum.ShowDialog();
Konu: 1 49

}
}

ErrorProvider

ErrorProvider
Hata mesajlarn kontrollerin yannda
gsterir.

Form zerindeki kontrollerin yannda hata mesajlar gsterilmesini salar.

ErrorProvider zellikleri
zellik Deer Tipi Aklama
BlinkRate Integer Hata simgesinin ka
milisaniyede bir yanp
sneceini belirler
BlinkStyle ErrorBlinkSytle Hata simgesinin yanp snme
stilini belirler. AlwaysBlink,
her zaman,
BlinkIfDifferentError
farkl bir hata meydana
geldiinde yanp sneceini
belirler. NeverBlink ise
simgenin yanp snmeden
grntleneceini belirler
Icon Icon Hata mesajlarnn
gsterilmesi srasnda kan
simgeyi belirler
50 Modl 9: Windows Programlama

ErrorProvider Metotlar
Metot Aklama
SetError Kontrollerin hata
mesajlarnn
belirlenmesi iin
kullanlr

ErrorProvider kontrol forma eklendii zaman, Properties panelinde,


kontrollerin ekstra zellikleri grnr. Bu zellikler, forma eklenen her
ErrorProvider iin oluturulacaktr.

zellik Aklama
IconAlignment On Hata simgesinin, kontroln
ErrorProviderIsmi
zerinde nerde bulunacan
belirler
IconPadding On Hata simgesinin, kontrolden
ErrorProviderIsmi
ka piksel uzakta duracan
belirler
Error On Varsaylan hata mesajn
ErrorProviderIsmi
belirler
rnek: Kayt ilemlerinin yapld srada, isim soyad ve TC kimlik
numaralarnn girileri ErrorProvider kontrol ile denetlenebilir.

Metin kutularnn Validating olaynda, girilen verilerin kontrolleri


yaplr ve gerektii durumlarda ErrorProvider ile hata mesajlar
gsterilir.

private void txtIsim_Validating( object sender,


System.ComponentModel.CancelEventArgs e ) {
if ( txtIsim.Text == "" ) {
ErrorProvider1.SetError( txtIsim, "sim alan
bo girilemez" );
// Bu komut olayn gereklemesini engeller
// Dolaysyla veri girilmeden bu alandan klamaz
e.Cancel = true;
}
Konu: 1 51

else {
// Eer beri doru girilmise, Error simgesini
// gizlemek iin, hata mesaj bo girilir
ErrorProvider1.SetError( txtIsim, "" );
}

private void txtSoyad_Validating( object sender,


System.ComponentModel.CancelEventArgs e ) {
if ( txtSoyad.Text == "" ) {
ErrorProvider1.SetError( txtSoyad, "Soyad
alan bo girilemez" );
e.Cancel = true;
}
else {
ErrorProvider1.SetError( txtSoyad, "" );
}

private void txtTCKimlik_Validating( object sender,


System.ComponentModel.CancelEventArgs e ) {
if ( !( IsNumeric( txtTCKimlik.Text ) ) ) {
ErrorProvider1.SetError( txtTCKimlik,
"Kimlik numaras yanl girildi" );
e.Cancel = true;
}
else {
ErrorProvider1.SetError( txtTCKimlik, "" );
}
}
52 Modl 9: Windows Programlama

PictureBox

PictureBox
Resim grntlemeyi salar.

Form zerinde bir resim grntlemek iin kullanlr.

PictureBox zellikleri
zellik Deer Tipi Aklama
Image Image Kontroln resim kaynan
belirler
SizeMode PictureBoxSizeMode Kontroln, resmi nasl
grntleyeceini belirler.
AutoSize deeri, kontroln
bykln resmin
byklne gre ayarlar.
CenterImage deeri, resmi
kontroln ortasna gelecek
ekilde ayarlar.
Normaldeeri, kontroln sol
st kesine gre
konumlandrr.
StretchImage deeri, resmi
kontroln byklne gre
boyutlandrr ve resmin tam
grnmesini salar.
Konu: 1 53

rnek: Form zerinde bir resmin deiik boyutlarda gsterilmesi iin


PictureBox kontrol tercih edilir.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
ComboBox1.Items.Add( "Normal" );
ComboBox1.Items.Add( "Ortala" );
ComboBox1.Items.Add( "Sdr" );
ComboBox1.Items.Add( "Otomatik Boyutlandr" );
}

private void ComboBox1_SelectedIndexChanged(


System.Object sender, System.EventArgs e ) {
switch ( ComboBox1.SelectedIndex ) {
case 0:
PictureBox1.SizeMode =
PictureBoxSizeMode.Normal;
break;
case 1:
PictureBox1.SizeMode =
PictureBoxSizeMode.CenterImage;
break;
case 2:
PictureBox1.SizeMode =
PictureBoxSizeMode.StretchImage;
break;
case 3:
PictureBox1.SizeMode =
PictureBoxSizeMode.AutoSize;
break;
}

private void btnGoster_Click( System.Object sender,


System.EventArgs e ) {
PictureBox1.Image = Image.FromFile(
txtResimYeri.Text );
}
54 Modl 9: Windows Programlama

ImageList

ImageList
Resimleri liste halinde tutar.
Kontrollerin elerine resim atanmasn
salar.

ImageList kontrol, form kontrolleri ve iinde bulunan eleri iin arka plan
resmi salayan bir listesi grevini grr.

ImageList zellikleri
zellik Deer Tipi Aklama
Images ImageCollection Kontroln iinde bulunan
resimlerin listelendii dinamik
bir koleksiyondur. Bu zellik
bir koleksiyon olduu iin,
dier liste kontrollerinin
elerinin resmini belirleme
ilemi byk lde
kolaylar.
ImageSize Size Kontroln tuttuu resimlerin
bykln belirler
TransparentColor Color Listedeki resimlerin bu
zellikte belirtilen renkteki
blgeleri saydam olur.

Windows uygulamalarnda ImageList kontrolnn kullanm, dier kontrollerin


ImageList zellii olarak belirlendikten sonra gerekleir. Bu kontrollerin
listeledii elerin arka plan resimleri ImageList kontrol ile belirlenir.
Konu: 1 55

rnek: ImageList kontrolnde tutulan resimler bir say oyununda rasgele


resim gstermek iin kullanlabilir.

private void btnYerlestir_Click( System.Object


sender, System.EventArgs e ) {
int max = ImageList1.Images.Count - 1;

Random r = new Random();


PictureBox1.Image = ImageList1.Images( r.Next(
max ));
PictureBox2.Image = ImageList1.Images( r.Next(
max ));
PictureBox3.Image = ImageList1.Images( r.Next(
max ));
PictureBox4.Image = ImageList1.Images( r.Next(
max ));
}

LinkLabel

LinkLabel
Nesnelere balant kurulmasn salar.
Metin iinde birden fazla balant tutabilir.
56 Modl 9: Windows Programlama

Bu kontrol, nesnelere balant kurmak iin kullanlr. Text zelliinde birden


fazla nesneye balant kurulabilir. Bu durumda, kontrole tkland zaman hangi
balantnn ilenecei Click olaynda belirlenir.

LinkLabel zellikleri
zellik Deer Tipi Aklama
LinkArea LinkArea Balantnn hangi
karakterler arasnda
aktif olacan belirler
LinkBehavior LinkBehavior Balantnn yazsnda
bulunan izginin ne
zaman gsterileceini
belirler.
HoverUnderline
deeri fare zerinde
durduu zaman,
AlwaysUnderline
deeri her zaman alt
izili olduunu belirler.
NeverUnderline
deeri ise balant
yazsnn altnn
izilmeyeceini belirler.
LinkColor Color Balantnn
LinkVisited zellii
False olduu zaman
gsterilecek rengini
belirler
LinkVisited Boolean Balantnn en az bir
kere tklandn
belirler
VisitedLinkColor Color Balantnn
LinkVisited zellii
True olduu zaman
gsterilecek rengini
belirler
Links LinkLabel.LinkCollection Kontroln Text
zelliinde bulunan
balantlar tutar

LinkLabel Olaylar
Olay Aklama
Click Kontroln zerine
Konu: 1 57

tkland zaman
gerekleir. Dier
kontrollerin tklama
olayndan farkl olarak,
LinkLabel zerinde
hangi balantya
basld anlalr.
rnek: letiim bilgi formunda e-posta ve internet adresleri gibi balantlar
gstermek iin LinkLabel kullanlr.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
string bilgi;

bilgi = "BilgeAdam web sitesi:


http://www.bilgeadam.com" + Constants.vbCrLf;
bilgi += Constants.vbCrLf + "Mail ile ulamak iin
tklayn" + Constants.vbCrLf;
LinkLabel1.Text = bilgi;

// nternet adresinin balad karakterden


// itibaren link eklenir
LinkLabel1.Links.Add( 22, 24,
"http://www.bilgeadam.com" );

// Mail adresinin balad karakterden


// itibaren link eklenir
LinkLabel1.Links.Add( 72, 8,
"mailto:postakutusu@bilgeadam.com" );
}

private void LinkLabel1_LinkClicked( System.Object


sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e
) {
int tiklanan;
tiklanan = LinkLabel1.Links.IndexOf( e.Link );
//Tklanan linkin ziyaret edildii belirtilir
LinkLabel1.Links( tiklanan ).Visited = true;

// Linki altrmak iin ilgili ilem gerekletirilir


58 Modl 9: Windows Programlama

System.Diagnostics.Process.Start( e.Link.LinkData );

TreeView

TreeView
elerin hiyerarik yapda
grntlenmesini salar.
TreeNode nesnelerinden oluur.

Bu kontrol, iinde bulunan eleri hiyerarik bir yapda grntler. Her eklenen
e bir dm temsil eder. Dmler birleerek aa yapsn olutururlar.
Dmler kk ve alt dm olarak ikiye ayrlr. Kk dmler, kontroln ilk
srasnda yer alr ve ayn seviyededir. Alt dmler, kk dmlerin ve dier alt
dmlerin altna eklenebilir.

TreeNode nesnesi
TreeView kontrolnde gsterilen eler, zelliklerini TreeNode snfndan alr.
Kk ve alt dmlerin tm TreeNode tipindedir. Her dmn bir Nodes
zellii vardr. Bu zellik, dmn, alt dmlerinin tutulduu koleksiyondur.
Alt dmler oluturulup bu zellie eklenebilir.
TreeNode dmleri oluturulup, zellikleri atandktan sonra TreeView
kontrolnde gsterilmesi iin, TreeView nesnesinin Nodes koleksiyonuna
eklenmesi gerekir.

TreeNode zellikleri
zellik Deer Tipi Aklama
Text String Dmn stnde gsterilen
yazy belirler
Konu: 1 59

Nodes TreeNodeCollection Dmn alt dmlerini


tutan koleksiyondur
Checked Boolean TreeView kontrolnde seim
kutular gsteriliyorsa,
dmn iaretli olup
olmadn belirler
NextNode TreeNode Ayn seviyedeki bir sonraki
dm gsterir
PrevNode TreeNode Ayn seviyedeki bir nceki
dm gsterir
LastNode TreeNode Alt dmlerinin en
sonuncusunu gsterir
FirstNode TreeNode Alt dmlerinin ilkini gsterir
NodeFont Font Dmn yaz tipini belirler
FullPath String Dmn, kkten kendisine
kadar olan tm dmlerin
Text zelliklerini sralar
Parent TreeNode Dmn ait olduu
TreeNode nesnesini belirtir

TreeNode Metotlar
Metot Aklama
Collapse Dmn ilk seviyedeki alt
dmlerini gizler. Eksi
iaretine baslmas ile ayn
grevi grr.
Expand Dmn ilk seviyedeki alt
dmlerini gsterir. Art
iaretine baslmas ile ayn
grevi grr.
ExpandAll Dmn alt dmlerini son
seviyeye kadar gsterir.
Toggle Dmn durumu aksa
kapal, kapalysa ak duruma
getirir
GetNodeCount Verilen parametre True ise
tm alt dmlerin, False ise
sadece ilk seviyedeki
dmlerin saysn verir.
60 Modl 9: Windows Programlama

TreeView zellikleri
zellik Deer Tipi Aklama
CheckBoxes Boolean Dmlerin yannda iaret
kutularnn gsterilmesini
belirler
ImageIndex Integer Kontroln tm eleri iin
varsaylan resmin,
ImageList iindeki indisini
belirler. Bu zelliin
kullanlmas iin, kontroln
ImageList zelliinin
belirlenmesi gerekir.
SelectedImageIndex Integer enin zerine gelip
seildiinde gsterilecek
resmin, ImageList iindeki
indisini belirler
SelectedNode TreeNode Seilen dm belirler
TopNode TreeNode Kontroln ilk kk dmn
gsterir
ShowLines Boolean Dmler arasnda izgilerin
gzkmesini belirler
ShowPlusMinus Boolean Alt dmleri gsterip
gizlemek iin kullanlan art
eksi iaretlerinin gzkmesini
belirler
ShowRootLines Boolean Kk dmlerinin izgilerinin
ve art eksi iaretlerinin
gzkmesini belirler
PathSeparator String Bir dmn FullPath
zelliinde gsterilen
dmleri ayran karakterleri
belirler
TreeView kontrolne kod ile dm eklenebildii gibi, tasarm annda Visual
Studio TreeNode Editor penceresini kullanarak da dm eklenebilir.
Konu: 1 61

TreeView Metotlar
Metot Aklama
CollapseAll Kontroln tm dmlerini
gizler
ExpandAll Kontroln tm dmlerini
gsterir

TreeView Olaylar
Olay Aklama
BeforeSelect Dm seilmeden
nce gerekleir
AfterSelect Dm seildikten
sonra gerekleir
BeforeCollapse Dm kapanmadan
nce gerekleir
AfterCollapse Dm kapandktan
sonra gerekleir
BeforeExpand Dm almadan nce
gerekleir
AfterExpand Dm aldktan sonra
gerekleir
62 Modl 9: Windows Programlama

rnek: rn kategorileri, genelde tek kategori olarak ele alnsa da, aslnda
hiyerarik bir yapda incelenmeleri gerekir. Her kategorinin sonsuz sayda alt
kategorisi olabilir. Bu tip kategoriler, en iyi ekilde TreeView kontrol ile
grntlenebilir.

Yeni kategori ekleme ilemi kk dm ve alt dm olarak yaplabilir.


Eer RadioButton kontrollerinde kk dm seilmise ana kategori;
alt dm seilmise, seilen kategorinin altna bir alt kategori eklenir.

private void btnYeniKategoriEkle_Click(


System.Object sender, System.EventArgs e ) {
TreeNode secilen;
secilen = TreeView1.SelectedNode;

if ( RadioButton1.Checked ) {
// Kk dm eklenir
TreeView1.Nodes.Add( txtYeniKategori.Text );

}
else if ( RadioButton2.Checked ) {
// Seilen kategoriye alt kategori eklenir
secilen.Nodes.Add( txtYeniKategori.Text );
}
}
Seilen bir kategorinin silinme ilemi iin, o dmn hangi ana
dme ait olduu bulunmaldr.
private void btnSil_Click( System.Object sender,
System.EventArgs e ) {
TreeNode secilen = TreeView1.SelectedNode;

if ( !( secilen.Parent == null ) ) { //
Seilen dm, Parent dmnn Nodes
// koleksiyonundan kartlr.
secilen.Parent.Nodes.Remove( secilen );
}
else {
// Eer Parent yok ise Kk dmdr.
TreeView1.Nodes.Remove( secilen );
Konu: 1 63

}
}
Tm dmlerin gsterilmesi ve seilen dmn hiyerarik yapsnn
gsterilmesi

private void btnGoster_Click( System.Object sender,


System.EventArgs e ) {
TreeView1.ExpandAll();
}

private void btnKategoriGoster_Click( System.Object


sender, System.EventArgs e ) {
TreeNode secilen = TreeView1.SelectedNode;

MessageBox.Show ( secilen.FullPath,
MsgBoxStyle.OKOnly, "Kategori Yolu" );
}

ListView

ListView
elerin deiik ekillerde listelenmesini
salar.
ListViewItem nesnelerinden oluur.
Her e, ListViewSubItem alt elerinden
oluur.

Kullancya deiik listeleme seenekleri sunan bir kontroldr. inde bulunan


eler, tek bir nesne olarak veya detaylar ile gsterilebilir. Dolaysyla eler
ListViewItem nesnesi, detaylar ise ListViewSubItem nesnesi olarak
tanmlanr.
64 Modl 9: Windows Programlama

ListView zellikleri
zellik Deer Tipi Aklama
View View Listenin grnmn
belirler. LargeIcons
deeri listedeki elerin
byk resimle,
SmallIcons kk
resimle grnmesini
salar. List deeri,
eleri kk resimle
fakat alt alta
grnmesini salar.
Details deeri, alt
elerin kolonlar altnda
grntlendii detay
grnm salar.
AllowColumnReorder Boolean Detay grnmnde,
kolonlarn kullanc
tarafndan
dzenlenebilmesini
belirler
Activation ItemActivation elerin ne zaman
etkinletirileceini
belirler. OneClick
deeri, enin tek
tklamayla, Standard
deeri, enin ift
tklamayla aktif hale
geleceini belirler.
TwoClick deeri seili
iken, ilk tklandnda
e seilir, daha sonra
ikinci defa tklandnda
ise e aktif hale gelir.
CheckBoxes Boolean elerin yannda
seme kutularnn
bulunmasn belirler
Columns ColumnHeaderCollection Detay grnmnde
iken, elerin alt
elerinin gsterilecei
kolonlar tutan
koleksiyondur
FullRowSelect Boolean Detay grnmde,
Konu: 1 65

enin tm detay
satrnn seilmesini
belirler
GridLines Boolean Kolonlar ve satrlar
arasnda ayrc
izgilerin gzkmesini
belirler
LabelEdit Boolead alma annda,
kullancn, liste
elerinin yazsn
deitirmesini belirler.
Bu zelliin kullanlmas
iin, Activation
zellii Standard
olmas gerekir.

ListView Olaylar
Olay Aklama
AfterLabelEdit enin yazs
deitikten sonra
gerekleir
BeforeLabelEdit enin yazs
deimeden nce
gerekleir

rnek: Windows Explorer ile dosya grnmleri ListView ile gerekletirilir.

Form yklenirken ListView kontrolne kolon ve eler eklenir. Ayrca


ComboBox kontrolne grnm seenekleri eklenir.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
66 Modl 9: Windows Programlama

ComboBox1.Items.Add( "Detay" );
ComboBox1.Items.Add( "Byk Simgeler" );
ComboBox1.Items.Add( "Kk Simgeler" );
ComboBox1.Items.Add( "Liste" );
ComboBox1.DropDownStyle =
ComboBoxStyle.DropDownList;

ListView1.Columns.Add( "Ad", 100,


HorizontalAlignment.Left );
ListView1.Columns.Add( "Boyut", 50,
HorizontalAlignment.Left );
ListView1.Columns.Add( "Tr", 170,
HorizontalAlignment.Left );

ListView1.View = View.Details;

ListViewItem oge = new ListViewItem( "bin" );


oge.SubItems.Add( "" );
oge.SubItems.Add( "Dosya Klasr" );
oge.ImageIndex = 0;
ListView1.Items.Add( oge );

oge = new ListViewItem( "Form1.vb" );


oge.SubItems.Add( "11 KB" );
oge.SubItems.Add( "Visual C# Source" );
oge.ImageIndex = 2;
ListView1.Items.Add( oge );

oge = new ListViewItem(


"WindowsApplication1.sln" );
oge.SubItems.Add( "1 KB" );
oge.SubItems.Add( "Microsoft Visual Studio
Solution Object" );
oge.ImageIndex = 1;
ListView1.Items.Add( oge );
}
ComboBox kontrolnde seilen deer deitii zaman, ListView grnm
deiir.

private void ComboBox1_SelectedIndexChanged(


System.Object sender, System.EventArgs e ) {
switch ( ComboBox1.SelectedIndex ) {
case 0:
ListView1.View = View.Details;
break;
case 1:
ListView1.View = View.LargeIcon;
break;
case 2:
ListView1.View = View.SmallIcon;
break;
case 3:
ListView1.View = View.List;
break;
}
Konu: 1 67

Dinamik Kontroller
s

Dinamik Kontroller
alma annda oluturulup forma eklenir.
AddHandler ile kontroln olaylarna eriilir.
Void Yordam1()
{
Button b = new Button();
b.Click += new EventHandler(ButonaBasildi);
}

Private Void ButonaBasildi(Object sender ,EventArgs e)


{
}

Kontroller tasarm annda eklenip ayarlanabildii gibi, alma annda da


oluturulup forma eklenebilir. Kontrollerin, Properties panelinde gzken tm
zelliklere kod tarafnda ulalabildii iin alma annda nceden
oluturulmu bir kontroln zellii deitirilebilir. Bununla birlikte, yeni bir form
oluturup gsterme ilemi gibi, alma annda yeni bir kontrol oluturup,
zellikleri atanp form zerinde gsterilebilir.
Yeni eklenen kontrollerin olaylarna erimek iin EventHandler nesnesi
kullanlr. Olay gerekletii zaman altrlacak kodlarn bulunduu yordam
ise EventHandler nesnesi oluturulurken, parametre olarak geilmelidir.

button1.Click+=new EventHandler(button1_Click);

Bu ekilde tanmlanan yordamlarn, kontroln olay tanmlaycs ile ayn


parametrelere sahip olmaldr.

private void button1_Click(object sender, EventArgs e)


{

}
68 Modl 9: Windows Programlama

rnek: Form zerinde srekli dme eklenen ve dmelerin, basld zaman


yok edildii bir oyun yazlmas iin, bu dmelerin dinamik bir ekilde
oluturulmas gerekir.

Form zerindeki bir Timer kontrol, iki saniyede bir dme oluturup
forma ekler.

private void Timer1_Tick( System.Object sender,


System.EventArgs e ) {
// Yeni bir dme oluturulur.
Button b = new Button();
b.Height = 30;
b.Width = 30;
b.Text = "X";

int maxLocation_Y, maxLocation_X;

// Yeni dmenin yeri form dnda bir yerde olamaz


maxLocation_X = this.Width - b.Width;
maxLocation_Y = this.Height - b.Height;

Random r = new Random();

// Dmenin bulunaca yer rasgele ayarlanr.


b.Location = new Point( r.Next( maxLocation_X
), r.Next( maxLocation_Y ) );

b.Click +=new EventHandler(ButonaBasildi );

// Oluturulan kontrol, Formun kontroller


// listesine eklenmelidir.
this.Controls.Add( b );
}

Oluturulan kontrollere tkland zaman altrlacak yordam yazlr.


Konu: 1 69

private void ButonaBasildi( System.Object sender,


System.EventArgs e ) {
// Kontroln, zerine basld zaman yok edilmesi
sender.Dispose();
}

Form yklendii zaman Timer nesnesi almaya balar

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
Timer1.Interval = 500;
Timer1.Start();
}

Lab 1: Internet Taraycs


Bu labda, Windows altnda bulunan Microsoft Web Taraycs kontroln
projeye ekleyerek Internet taraycs gerekletirilir.

Bu labda kullanlan kontroller ve teknikler:


LinkLabel Ana sayfaya balant salar.
RadioButton Balantlarn yeni ya da ayn pencerede almas
seeneini sunar.
GroupBox RadioButton kontrollerini gruplamak iin kullanlr.
TabControl Tarayclarn farkl pencerelerde gzkmesini salar.
Microsoft Web Taraycs Internet sitelerini grntlenmesini salar.

Dispose Metodu TabPage sayfalarnn silinmesi iin kullanlr.


foreach Sayfalarn tmnn kapanmas iin kullanlr.
Dinamik Kontroller Balantlar yeni bir sayfada ald zaman, yeni
bir TabPage oluturulur. Bu sayfann iine yeni bir tarayc kontrol
oluturulup eklenir. Daha sonra bu sayfa TabControl nesnesine
eklenir.

Kontrollerin eklenmesi
Yeni bir Windows projesi an ve ToolBox paneline Microsoft Web Taraycn
ekleyin.
Not: ToolBox paneline kontrol ekleme ilemleri iin Modl 3 e bakn
70 Modl 9: Windows Programlama

Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.


Kontrol Kontrol smi zellik Deer
TextBox txtAdres Text http://
RadioButton - rbAyniSayfa Checked True
RadioButton - rbYeniSayfa
GroupBox GroupBox1 Text
LinkLabel LinkLabel1 Text Ana Sayfa
Button btnSayfaKapat Text Sayfay Kapat
Button btnTumunuKapat Text Tm Sayfalar Kapat
TabControl TabControl1 TabPages Yeni bir sayfa ekleyin
Dock Bottom
TabPage TabPage1 Text Sayfa 1
Tarayc AxWebBrowser1 Dock Fill
Konu: 1 71

Kodlarn yazlmas
1. Form yklenirken LinkLabel kontrolnn gsterecei balanty ve
formun AcceptButton zelliini ayarlayn.

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
LinkLabel1.Links.Add( 0, 9,
"http://www.bilgeadam.com" );
this.AcceptButton = btnGit;
}

2. Yazlan Internet adresine gitmek iin kullanc, ayn sayfay veya yeni
alacak bir sayfay kullanabilir. Seilen duruma gre ayn sayfada ya da
farkl sayfada Internet sitesini grntleyen kodlar yazn.

private void btnGit_Click( System.Object sender,


System.EventArgs e ) {
// Girilen balantnn banda http ifadesi
// bulunmuyorsa bu ifade eklenir
if ( !( txtAdres.Text.StartsWith( "http://" ) )
) {
txtAdres.Text = txtAdres.Text.Insert( 0,
"http://" );
}

// TabControl nesnesinde sayfa yoksa ya da Yeni Sayfa


// seenei seilmise, adres yeni sayfada gsterilir.
if ( rbYeniSayfa.Checked ||
TabControl1.TabPages.Count == 0 ) {
72 Modl 9: Windows Programlama

YeniSayfa( txtAdres.Text );
}
else {
AyniSayfa( txtAdres.Text );
}

public void YeniSayfa( string link ) {


// Dinamik kontroller oluturulur.
TabPage sayfa = new TabPage( link );
AxSHDocVw.AxWebBrowser tarayici = new
AxSHDocVw.AxWebBrowser();
tarayici.Dock = DockStyle.Fill;

// Tarayc TabPage kontrolne eklenir


sayfa.Controls.Add( tarayici );

// Oluturulan sayfa TabControl nesnesine eklenir.


TabControl1.TabPages.Add(sayfa);

// Yeni alan sayfa seili olarak gsterilir


TabControl1.SelectedTab = sayfa;

// Tarayc, verilen balanty grntler


tarayici.Navigate(link);
}

public void AyniSayfa( string link ) {


// Internet sitesi, seilen sayfada gsterilir.
TabPage sayfa = null;
sayfa = TabControl1.SelectedTab;

AxSHDocVw.AxWebBrowser tarayici = null;


// Tarayc, sayfann kontrolleri iinde bulunur.
// Sayfada baka kontrol bulunmad iin, ilk
// kontrol taraycdr.
tarayici = ( ( AxSHDocVw.AxWebBrowser )(
sayfa.Controls[ 0 ] ) );

sayfa.Text = link;
tarayici.Navigate( link );
}

3. Ana sayfa balantsna tkland zaman, BilgeAdam internet sitesinin yeni


bir sayfada almasn salayan kodlar yazn.

private void LinkLabel1_LinkClicked( System.Object


sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e
) {
YeniSayfa( System.Convert.ToString(
e.Link.LinkData ) );
}
4. Seilen sayfay ve tm sayfalar kapatan kodlar yazn.
private void btnSayfaKapat_Click( System.Object
sender, System.EventArgs e ) {
TabPage sayfa = null;
sayfa = TabControl1.SelectedTab;

if ( !( sayfa == null ) ) {
Konu: 1 73

sayfa.Dispose();
}
}

private void btnTumunuKapat_Click( System.Object


sender, System.EventArgs e ) {
foreach ( System.Windows.Forms.TabPage sayfa in
TabControl1.TabPages ) {
sayfa.Dispose();
}
}

Lab 2: 4 Haneli Say Bulma Oyunu


Bu labda, MasterMind oyunundan uyarlanm 4 haneli say bulma oyunu
programlanr. Oyunun ileyii rakamlar farkl ya da ayn olarak tutulan 4 haneli
saynn tahmin edilmesidir. Tahmin edilen sayyla ilgili ipucular verilir. Yerini
tutan rakamlar iin + ile, rakamlar tutmayan ancak say iinde geen rakamlar
ile belirtilir.

rnek:
Tutulan say: 1980
Tahmin 1: 4952
pucu: +1 (Sadece 9 rakam yerini tuttu)

Tahmin 2: 9820
pucu: +1 -2 (0 yerini tuttu, 9 ve 8 bulundu ancak yeri tutturulamad)

Bu labda kullanlan kontroller ve teknikler:


ListBox Yaplan tahminleri tutmay salar
DomainUpDown Oyunun zorluk derecesinin seilmesini salar
ErrorProvider Kullancnn, tahminleri dzgn formatta girip
girmediini kontrol eder.
e Dngler Farkl rakamlar olan saylar retmek ve
tahminleri kontrol etmek iin kullanlr.

Kontrollerin eklenmesi

Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.


Kontrol Kontrol smi zellik Deer
TextBox txtTahmin
ListBox ListBox1
DomainUpDown DomainUpDown1 Items Farkl Saylar
Tekrarl Saylar
74 Modl 9: Windows Programlama

Text Zorluk Sein


Button btnTahminEt Text Tahmin Et
Button btnYeniOyun Text Yeni Oyun
Label lblMesaj

Kodlarn Yazlmas
Sistem tarafndan tutulacak saylar, DomainUpDown kontrolnde yaplan seime
gre farkl ya da ayn rakamlara sahip olacaktr.

private int BulunacakSayi;

public int SayiUret() {


int sayi = DortHaneliSayi();

// Saydaki rakamlar tekrar edilebilirse


if ( DomainUpDown1.SelectedIndex == 1 ) {
return sayi;
}

// Saynn rakamlar birbirinden farkl


// olana kadar say retilir
while ( !( SayiKontrol( sayi ) ) ) {
sayi = DortHaneliSayi();
}

return sayi;
}

Rakamlar birbirinden farkl drt haneli say retir.

public int DortHaneliSayi() {

Random r = new Random();


int sayi = r.Next(10000);

// Say 4 haneli olana kadar tekrar retilir


while ( sayi < 1000 ) {
Konu: 1 75

sayi = r.Next(10000);
}

return sayi;
}

Saynn rakamlarnn birbirinden farkl olmasn kontrol eder.

public bool SayiKontrol( int sayi ) {


char[] rakamlar =
sayi.ToString().ToCharArray();

// Rakamlar tek tek bir birleriyle kontrol


edilir
// Tekrarlanan rakam varsa False dner
for (int i=0; i<=rakamlar.Length - 2; i++ ) {
for (int j=i + 1; j<=rakamlar.Length - 1;
j++ ) {
if ( rakamlar[ i ] == rakamlar[ j ] ) {
return false;
}
}
}
return true;
}

Yeni oyun dmesine tkland zaman say retilir ve oyun balar

private void btnYeniOyun_Click( System.Object


sender, System.EventArgs e ) {
BulunacakSayi = SayiUret();
lblMesaj.Text = "Yeni Oyun! Say retildi...";
}
Metin kutusunun Validating olaynda, girilen deerler kontrol edilir.

private void txtTahmin_Validating( object sender,


System.ComponentModel.CancelEventArgs e ) {
if ( txtTahmin.Text.Length == 4 ) {
ErrorProvider1.SetError( txtTahmin, "" );
}
else {
ErrorProvider1.SetError( txtTahmin, "Say
yanl girildi" );
e.Cancel = true;
}
}
Tahmin edilen saynn hangi rakamlarnn tutuu kontrol edilir
public string TahminKontrol( int sayi ) {
string sonuc ="";

// Sonu kmesindeki art ve eksi says


byte arti = 0;
byte eksi = 0;
byte i, j;

char[] sdizi;
sdizi = sayi.ToString().ToCharArray();
76 Modl 9: Windows Programlama

char[] sBulunacak;
sBulunacak =
BulunacakSayi.ToString().ToCharArray();

// Yerleri tutan saylar bulunur


for ( i=0; i<=3; i++ ) {
if ( sdizi[ i ] == sBulunacak[ i ] ) {
arti += 1;
}
}

// Yerleri tutmayan saylarn kontrol


for ( i=0; i<=3; i++ ) {
for ( j=0; j<=3; j++ ) {
if ( i != j ) {
if ( sdizi[ i ] == sBulunacak[ j ] )
{
eksi += 1;
break;
}
}
}
}

if ( arti == 0 & eksi == 0 ) {


sonuc = "0";
}
else if ( arti == 4 ) {
sonuc = "Tebrikler!";
}
else if ( arti != 0 && eksi != 0 ) {
sonuc = "+" + arti + " -" + eksi;
}
else if ( arti == 0 ) {
sonuc = "-" + eksi;
}

return sonuc;
}

private void btnTahmin_Click( System.Object sender,


System.EventArgs e ) {
ListBox1.Items.Add( TahminKontrol(
int.Parse(txtTahmin.Text ) ) );
}

Lab 3: Hafza Oyunu


Hafza oyunu, belli sayda kart iinden ayn resme sahip olanlarn bulunmas
ile gerekletirilir. Bu labda, form zerine, seilen seviye kadar kart ekleme
ilemi yaplr. Kontroller alma annda eklenecei iin dinamik olarak
oluturulmaldr.

Bu labda kullanlan kontroller ve teknikler:


ComboBox Seviyenin seilmesi iin kullanlr
ImageList Eklenen kartlarn resimlerini tutar
Konu: 1 77

Dinamik kontroller Kullancnn setii seviye kadar kart ekleme


ilemi iin kullanlr.
Tag Kontrollerin Tag zellii, o kontrole ait bilgi tutmak iin kullanlr.
Bu labda, yeni eklenen kartlarn hangi resmi tayaca kontrol Tag
zelliinde tutulur.

Kontrollerin eklenmesi

Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.


Kontrol Kontrol smi zellik Deer
ComboBox ComboBox1 Items 4 Kart
8 Kart
16 Kart
ImageList ImageList1 Images 8 tane resim ekleyin

Kodlarn Yazlmas
1. ComboBox kontrolnden seviye seildii zaman, form zerinde var olan
tm dmelerin silinip, seilen seviye kadar dme eklenmesi gerekir. Bu
ilem oyunu batan balatr.
public void KartYerlestir( int kartSayisi ) {
DugmeleriSil();
int x = 10;
int y = 50;
78 Modl 9: Windows Programlama

for (int i=1; i<=kartSayisi; i++ ) {


// Dinamik bir dme oluturulur ve
zellikleri
// ayarlanr
Button kart = new Button();
kart.Height = 30;
kart.Width = 30;
kart.Location = new Point( x, y );

kart.Click += new System.EventHandler(


ButonaTiklandi );

this.Controls.Add( kart );

// Bir sonraki eklenecek olan dme


// ilk kontroln 70 piksel sanda
olacaktr
x += 70;

// Dme Form snrlar iinde olmas


gerekir.
if ( x > this.Width ) {
x = 10;
y += 50;
}
}
KartResimYukle();
}

2. Dmeleri silme ilemi, form zerindeki tm dmelerin bir listeye atlp


daha sonra formun kontrollerinden kaldrlarak yaplr.
public void DugmeleriSil() {
ArrayList silinecek = new ArrayList();

// Form iindeki Button kontrolleri bir listede


tutulur
foreach ( System.Windows.Forms.Control c in
this.Controls ) {
if ( c is Button ) {
silinecek.Add( c );
}
}

for (int i=0; i<=silinecek.Count - 1; i++ ) {


this.Controls.Remove( (Control)silinecek[ i
] );
}
}

3. Kartlara resim yklerken, her resim iki karta yklenmesi gerekir.

public void KartResimYukle() {


// Dmeler bir listeye alnr.
ArrayList dugmeler = new ArrayList();
foreach ( System.Windows.Forms.Control c in
this.Controls ) {
if ( c is Button ) {
dugmeler.Add( c );
}
Konu: 1 79

Random r = new Random();


int i = 0;

// Kartlar ikier ikier ele alnr. ki karta


da
// ayn resim atanr. Ve bu iki kart dmeler
// listesinden kartlr.
while ( dugmeler.Count > 0 ) {
Button kart1 = null, kart2 = null;

kart1 = (Button)dugmeler[ r.Next(


dugmeler.Count - 1 ) ];
kart1.Tag = i;
dugmeler.Remove( kart1 );

kart2 = (Button)dugmeler[ r.Next(


dugmeler.Count - 1 ) ];
kart2.Tag = i;
dugmeler.Remove( kart2 );

i += 1;
}
}

4. Eklenen kartlara tkland zaman, ilk seferde bir kart alr ve resmi
gsterilir. kinci kart ald zaman bu iki kartn resmi aynysa kart formdan
kaldrlr.
private Button AcikKart;
private bool acik = false;

private void ButonaTiklandi( object sender,


EventArgs e ) {
Button kart = (Button)sender;

// Eer ilk kart alyorsa


if ( !( acik ) ) {
// Kart grntle
kart.BackgroundImage = ImageList1.Images[
int.Parse(kart.Tag.ToString()) ];
AcikKart = kart;
acik = true;

// Eer ikinci kart alyorsa


}
else {
// Alm kartn resmi, yeni alan kartn
// resmi ile aynysa, bu kartlar silinir
if ( kart.Tag == AcikKart.Tag ) {
this.Controls.Remove( kart );
this.Controls.Remove( AcikKart );
}
else {
AcikKart.BackgroundImage = null;
}
acik = false;
}
}
80 Modl 9: Windows Programlama

Lab 4: Hesap Makinesi


Bu labda, bir hesap makinesinde kullanlan genel fonksiyonlar gerekletirilir.

Bu labda kullanlan kontroller ve teknikler:


Button Hesap makinesindeki her ilem ve say iin bir dme
kullanlr
Try Catch Finally Hesaplamalar yaplrken, kullancn yanl bir
deer girmesi durumunda kacak hatalar yakalamak iin kullanlr.

Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.
Kontrol Kontrol smi zellik Deer
Button 0 9 aras her say iin Text Temsil ettikleri saylar
Button(Sayi) isminde bir dme
ekleyin. rnek: 5 says iin
Button5
Button Her ilem iin bir dme Text Temsil ettikleri ilemler. *
ekleyin: arpma, blme, toplama +/-=C
karma, eitlik, temizleme
Konu: 1 81

Kodlarn Yazlmas
1. lemin trn ve seildiini belirleyen, girilen bir nceki sayy tutan global
deikenleri yazn.
private bool IslemSecildi = false;
private double Sayi;
private string Islem;

2. Say dmelerinden herhangi birine basld zaman, metin kutusunun


grnmn deitiren ilemi yazn.

private void Button1_Click( System.Object sender,


System.EventArgs e ) {
if ( !( IslemSecildi ) ) {
txtSayi.Text += ((Button)sender).Text;
}
else {
txtSayi.Text = ((Button)sender).Text;
IslemSecildi = false;
}
}

3. lem seildii zaman, bir nceki girilen sayy tutan kodlar yazn.

private void btnCarp_Click( System.Object sender,


System.EventArgs e ) {
Islem = ((Button)sender).Text;
try {
Sayi = double.Parse(txtSayi.Text);
IslemSecildi = true;
}
catch ( Exception ex ) {
MessageBox.Show( "Say dzgn formatta
girilmedi);
}
finally {
txtSayi.Text = "";
txtSayi.Focus();
}
}

4. Eittir dmesine basld zaman aritmetik operasyonu yapan kodlar


yazn.
private void btnEsit_Click( System.Object sender,
System.EventArgs e ) {
switch ( Islem ) {
case "*":
Sayi *= double.Parse(txtSayi.Text);
break;
case "/":
Sayi /= double.Parse(txtSayi.Text);
break;
case "-":
Sayi -= double.Parse(txtSayi.Text);
break;
82 Modl 9: Windows Programlama

case "+":
Sayi += double.Parse(txtSayi.Text);
break;
}

txtSayi.Text = Sayi.ToString();
}

5. C (temizle) tuuna basld zaman, metin kutusunu temizleyen ve global


deikenleri balang deerlerine getiren kodlar yazn.
private void btnTemizle_Click( System.Object sender,
System.EventArgs e ) {
Sayi = 0;
IslemSecildi = false;
txtSayi.Text = "";
txtSayi.Focus();
}

Modl Sonu Sorular & Altrmalar

zet

Listeleme Kontrolleri
ListBox, TreeView, ComboBox
Resim Kontrolleri
PictureBox, ImageList
Dzenleme Kontrolleri
TabControl, Panel, HScrollBar, VScrollBar
Zaman ve Tarih Kontrolleri
DateTimePicker, MonthCalendar
Dinamik Kontroller
alma annda eklenen kontroller

1. Formun kapanmasn effafln yavaa azaltarak salamak iin, formun


hangi olay, zellik ve metotlarndan faydalanr? Uygulamasn yazn.
2. Fiziksel olarak bulunduklar yerlerin bir dizide tutulduu resimlerin, slayt
gsterisi eklinde gsterilmesi hangi kontroller ile salanr? Uygulamasn
yazn.
Konu: 1 83

3. Kurumsal bir irketin elemanlarnn bal olduklar departmanlar ve


mdrleri hiyerarik olarak hangi kontrol ile gsterilebilir? Her mdr ve
departman baka bir mdr ve departmana baldr. Uygulamasn
structure yapsn kullanarak ve ilgili kontroller ile birlikte yazn.
4. Microsoft Excel ile oluturulan sayfalar, ayn pencerede tutulur. Bir
Windows uygulamasnda snrsz sayda sayfann ayn form zerinde
tutmay hangi kontrol salar? Bu sayfalar alma annda oluturulmak
istenirse, kontroln hangi zelliklerinden faydalanlr.
Modl 10: Men Tasarm ve MDI Formlar

Hedefler

Menler
MainMenu, ContextMenu
ToolBar
ToolTip
StatusBar
NotifyIcon
RichTextBox

Konu 1: Men Tasarm


Windows uygulamalarnda en ok kullanlan tasarm aralar menlerdir.
Dosya, dzen, grnm gibi menler neredeyse tm Windows
uygulamalarnda, belli bal ilerin yaplmasnda kullancya kolay eriim salar.
Uygulamalarda, menlerde tanmlanan ilemlere grsel ksa yollar sunulur. Bu
ilem ara kutular ile salanr.

Bu blm tamamlandktan sonra:


MainMenu, ContextMenu kontrolleri ile men tanm yapabilecek,
ToolBar kontrol ile tasarmda ara ubuklarn kullanabilecek,
ToolTip kontrol ile men aralarnn kullanm hakknda bilgi
salayacak,
StatusBar, NotifyIcon kontrolleri ile uygulamalarn tasarmn
zenginletireceksiniz.

Menler
Windows uygulamalarnda kullanlan iki tip men vardr. MainMenu, formlarn
banda duran sabit mendr. ContextMenu, fare ile sa tklandnda kan
mendr.
2 Modl 1: Programlamaya Giri

MainMenu

MainMenu
Formlarn banda duran mendr.
MenuItem nesnelerinden oluur.
Men elerine ksa yollar atanabilir.

Windows uygulamasna bir men eklemek iin, Toolbox panelinden bir


MainMenu kontroln forma srkleyin. Eklenen men bir bileen olarak
formun alt blmnde gzkecektir. Ancak stne gelindiinde formun
balnn hemen altnda belirir. Men esi eklemek veya ismini deitirmek
iin stne gelinir ve balk yazs yazlr. Properties panelinde bu mennn
MenuItem olarak eklendii grlr.

Menye MenuItem eklendiinde hemen altnda ve yannda, men eklemek iin


bir yer alr. Bu alan yere de men ismi girip, alt men eleri oluturulabilir.

Men elerine basld zaman bir ilemin gereklemesi iin, kontrole ift
tklanarak bu enin Click olayna geilir. altrlmak istenen kodlar buraya
yazlr.
Konu: 1 3

private void menuYeni_Click(System.Object sender,


System.EventArgs e) {

Men elerine isim verirken & iareti kullanlarak, kullancn klavyenin ALT
tuuyla bu eyi altrmasn salanabilir. & iareti hangi karakter ile
kullanlrsa, ksa yol olarak o karakter kullanlr.

MenuItem zellikleri
zellik Deer Tipi Aklama
Checked Booleand Men esinin yannda
seili olduuna dair bir
iaretin gzkmesini
salar
Enabled Boolean Men esinin aktif
durumda olup
olmadn belirler
RadioCheck Boolean enin seilme stilinin
RadioButton dmesi
olarak gzkmesini
salar.
ShortCut ShortCut Menye ulam iin bir
ksa yol tanmlar.
ShowShortCut Boolean Mennn ksa yolunun,
isminin yannda
gzkmesini belirler
MenuItems MenuItemCollection Alt menlerin tutulduu
koleksiyondur.

rnek:
private void Form1_Load( System.Object sender,
System.EventArgs e ) {
MenuItem dosya = new MenuItem( "D&osya" );
4 Modl 1: Programlamaya Giri

// Yeni ileminin yaplmas iin bir men eklenir.


MenuItem yeni = new MenuItem( "&Yeni" );
yeni.Shortcut = Shortcut.CtrlN;
yeni.ShowShortcut = true;
yeni.Select += new System.EventHandler(
YeniClick );
dosya.MenuItems.Add( yeni );

// Ama ileminin yaplmas iin bir men eklenir.


MenuItem ac = new MenuItem( "&A" );
ac.Shortcut = Shortcut.CtrlO;
ac.ShowShortcut = false;
ac.Select += new System.EventHandler( AcClick );
dosya.MenuItems.Add( ac );

MainMenu1.MenuItems.Add( dosya );
}

private void AcClick( System.Object sender,


System.EventArgs e ) {

private void YeniClick( System.Object sender,


System.EventArgs e ) {

}
Konu: 1 5

ContextMenu

ContextMenu
Kontrollerin ContextMenu zelliine
atanr.
Kontrollere sa tkland zaman kan
mendr.

ContextMenu, bir kontroln stne sa tkland zaman kan mendr. Bu


men uygulamaya eklendii zaman Properties panelinde, kontrollerin
ContextMenu zellii olarak bu men atanabilir.
6 Modl 1: Programlamaya Giri

ToolBar

ToolBar
Menlerin ilevlerine grsel ksa yollar
sunar.
ToolBarButton nesnelerinden oluur.
ImageList kontrol ile kullanlr.
Hangi dmeye basld ButtonClick olay
ile anlalr.

ToolBar kontrol menlerin altnda kullancya ksa yollar, kullanm kolayl


sunan bir kontroldr. Kontroldeki eler ou zaman ImageList kontrolnn
salad resimler ile gsterilir. Resim yerine yaz da gsterilebilir ancak yaz ile
ilem listelemek menler ile salanr.
ToolBar kontrolnde yaplacak ilemler bir ToolBarButton olarak gsterilir.

ToolBar zellikleri
zellik Deer Tipi Aklama
Konu: 1 7

Buttons ToolBarButtonCollection Kontroln


dmelerinin
tutulduu koleksiyon
ButtonSize Size Kontroldeki
dmelerin boyutunu
belirler. Dmelerin
boyutlar ayr ayr
belirlenemez.
DropDownArrows Boolean Stili DropDownButton
olarak seilmi
ToolBarButton
dmelerinin alt
mensnn
grnmesini belirler

ToolBar kontrolne ToolBarButton dmeleri eklemek iin kontroln


Buttons zelliinde faydalanlr. Tasarm annda Properties panelinden
Buttons zelliine basld zaman kan pencerede, kontrole dme eklenir.

ToolBarButton zellikleri
zellik Deer Tipi Aklama
Style ToolBarButtonStyle Dmenin grnm stilini
belirler. PushButton deeri
standart bir dmeyi,
ToggleButton basld
zaman basl kalan bir
dmeyi, Separator
deeri dmeler arasnda
8 Modl 1: Programlamaya Giri

bir ayrac temsil


eder.
DropDownButton deeri
dmenin yannda bir
mennn alacan
belirler.
DropDownMenu Menu Kontroln stili
DropDownButton olarak
seilmise, yannda
kacak meny belirler. Bu
men sadece
ContextMenu cinsinden
olabilir.
Pushed Boolean Dmenin basl olup
olmadn belirler
Text String Dmenin zerinde yazan
yazy belirler
ImageIndex Integer ToolBar kontrolne bir
ImageList balanmsa,
bu zellik dmenin hangi
resmi gstereceini belirler.
ToolTipText String Dmenin zerinde
durulduu zaman
gsterilecek ipucunu
belirler.

Dmelere tkland zaman almas istenen kodlar, ToolBar kontrolnn


ButtonClick olayna yazlr. Ancak burada hangi dmeye basld kod
yazarak bulunmas gerekir.

private void ToolBar1_ButtonClick( System.Object


sender, System.Windows.Forms.ToolBarButtonClickEventArgs e )
{
switch ( ToolBar1.Buttons.IndexOf( e.Button ) )
{
// Ayralar da bir ToolBarButton olduu iin
// indisler kontrol edilirken buna dikkat
edilmelidir
case 0:
// Kopyala
Konu: 1 9

case 1:
// Kes
case 2:
// Yaptr
case 4:
// Geri Al
case 6:
// Yardm
break;
}
}

ToolTip

ToolTip
Kontrollerin zerine gelindiinde bilgi
mesaj verir.
Mesaj, kontrollerin ToolTip on ToolTip1
zelliine yazlr.

Bu kontrol, form zerindeki kontrollerin zerine gelindii zaman ipucu


gstermek iin kullanlr. ToolTip forma eklendii zaman, kontrollerin
zelliklerinde ToolTip on [ToolTip kontrolnn ismi] eklinde bir zellik
belirir. Bu zellie verilen yazlar, alma annda kontrollerin ipucunu belirler.

ToolTip zellikleri
zellik Deer Tipi Aklama
Active Boolean Kontroln aktif olup
olmadn belirler.
False deerini alrsa,
form zerinde ipucular
grntlenmez.
AutomaticDelay Integer AutoPopDelay,
10 Modl 1: Programlamaya Giri

InitialDelay,
ReshowDelay deerleri
iin otomatik sreleri
ayarlar.
AutoPopDelay Integer pucunun
grntlenme sresini
belirler.
InitialDelay Integer pucunun gzkmesi
iin, fare imlecinin
kontrol zerinde
durmas gereken sreyi
belirler
ReshowDelay Integer Yeni bir kontroln
zerine gelindii
zaman, bu kontrole ait
ipucunun gsterilmesi
iin gereken sreyi
belirler.
ShowAlways Boolean Seilen kontrol aktif
olmad zamanlarda
dahi ipucunun
gsterilmesini salar.
Konu: 1 11

StatusBar

StatusBar
Windows formlarnn durum ubuudur.
ShowPanels birden fazla panelin
gzkmesini salar.
Paneller birden fazla durum mesaj
gsterilmek iin kullanlr.

Windows uygulamalarnda formlarn altnda bulunan durum ubuunu temsil


eder. Durum ubuklarnda sadece bir yaznn grntlenebildii gibi, iindeki
paneller ile birden fazla durum yazs grntlenebilir.

StatusBar zellikleri
zellik Deer Tipi Aklama
Panels StatusBarPanelCollection Kontroln iinde birden
fazla yaz grntlemek
iin kullanlan panelleri
tutar.
ShowPanels Boolean Birden fazla panelin
gzkmesini belirler.
SizingGrip Boolean StatusBar kontrolnn
yannda, formun
boyutunu deitirmek
iin kullanlan simgenin
gzkmesini belirler
Text String StatusBar zerinde
yazan yazy belirler.
Eer ShowPanels
zellii True ise, bu
zellikte yazlan yaz
12 Modl 1: Programlamaya Giri

gzkmez.

StatusBar kontrolne panel eklemek iin kontroln Panels zelliinden


yararlanlr.

Panel zellikleri
zellik Deer Tipi Aklama
AutoSize StatusBarPanelAutoSize Panelin baz durumlara
gre otomatik
boyutlandrmasn
salar. None deeri
panelin boyutunun
deimeyeceini,
Contents deeri,
panelin ierdii yazya
gre deieceini
belirler. Spring deeri,
durum ubuundaki
bo alanlarn
paylalmasn salar.
BorderStyle StatusBarPanelBorderStyle Panelin kenarlk stilidir.
Raised deeri, panelin
bir dme gibi
gzkmesini, Sunken
deeri, panelin bask
gzkmesini salar.
None deeri, kenarlarn
gzkmesini engeller.
Alignment HorizontalAlignment Panelin yazsnn
hizalanmasnn belirler.
Konu: 1 13

Text String Panel zerinde yazan


yazy belirler
Width Integer Panelin geniliini
belirler
MinWidth Integer Panel boyutunun
minimum deerini
belirler.
Style StatusBarPanelStyle Panelin zerindeki
yazlarn stilini belirler.
Text deeri, normal
yaz gzkmesini
salar. OwnerDraw,
deiik font ve
renklerde yazlarn
grntlenmesini
salar
Icon Icon Panel zerinde
grntlenen simgeyi
belirler

private void Form1_Load( System.Object sender,


System.EventArgs e ) {
StatusBarPanel p = new StatusBarPanel();
p.MinWidth = 100;
p.AutoSize = StatusBarPanelAutoSize.Contents;
p.Alignment = HorizontalAlignment.Left;
p.BorderStyle =
StatusBarPanelBorderStyle.Raised;
p.Style = StatusBarPanelStyle.Text;

StatusBar1.Panels.Add( p );

Timer1.Interval = 1000;
Timer1.Start();
}

private void Timer1_Tick( System.Object sender,


System.EventArgs e ) {
StatusBarPanel panel = new StatusBarPanel();
panel = StatusBar1.Panels[ 0 ];
panel.Text = System.Convert.ToString(
DateAndTime.Now );
}
14 Modl 1: Programlamaya Giri

NotifyIcon

NotifyIcon
Windows grev ubuunda grntlenen
simgedir.

Windows uygulamalarnn, Windows grev ubuunda grntlendii simgeyi


belirler.

NotifyIcon zellikleri
zellik Deer Tipi Aklama
Icon Icon Grev ubuunda
gzkecek simgeyi
belirler
ContextMenu Menu Simgeye sa tkland
zaman alacak men
Text String Simge zerine
gelindiinde
grntlenecek yazy
belirler.
Konu: 1 15

RichTextBox

RichTextBox
TextBox kontrolnden daha gelimi
zelliklere sahiptir.
Seilen yaznn rengi, yaz tipi deitirilebilir
Madde iaretleri kullanlabilir.
Satr balarndaki boluklar ayarlanabilir.

Normal bir metin kutusundan daha gelimi zelliklere sahip bir kontroldr.
TextBox kontrolnde yaznn yaz tipi, bykl gibi ayarlar yaplabilir. Ancak
sadece seilen yaznn rengi, yaz tipi, satr ba genilii, madde iaretleri
kullanm gibi ayarlar yapmak mmkn deildir. RichTextBox kontrol, bu tip
zengin zelliklerin kullanlmasn salar.

RichTextBox zellikleri
RichTextBox kontrol kullancya birok seenek sunar, dolaysyla tasarm ve
alma annda eriilebilen birok zellii bulunur.

Tasarm annda ulalabilecek zellikler:


zellik Deer Tipi Aklama
ZoomFactor Single Metnin bykln
belirler. 1 64 aras bir
16 Modl 1: Programlamaya Giri

deer alr.
WordWrap Boolean Uzun yazlarn bir
sonraki satra geerek
grntlenmesini
salar
DetectUrls Boolean Balant olarak girilen
yazlarn LinkLabel
eklinde alglanmasn
belirler
Lines String() Satrlar String dizisi
olarak tutar
BulletIntend Integer Satrlarn madde
iaretinden ka piksel
akta duracan
belirler
AcceptsTab Boolean Tab tuunu bir karakter
olarak alglanmasn,
dolaysyla bu tua
basldnda
kontrolden
klmasnn
engellenmesini belirler
ShowSelectionMargin Boolean Satr bandaki
boluun
gsterilmesini belirler
RightMargin Integer Satrlarn maksimum
uzunluunu piksel
cinsinden belirler.

alma annda ulalabilecek zellikler:


zellik Deer Tipi Aklama
Capture Boolean Kontrol iine yaz
yazarken farenin
gizlenmesini belirler
UndoActionName String En son yaplabilecek
Undo ileminin tipini
tutar
RedoActionName String Undo ilemi yapldktan
sonra, en son
yaplabilecek Redo
ileminin ismini tutar.
SelectedText String Seilen metni belirler
SelectionBullet Boolean Seilen satrn madde
Konu: 1 17

iaretli olarak
grntlenmesini
belirler
SelectionAlignment Boolean Seilen satrn
hizalanmasn belirler
SelectionColor Color Seilen metnin rengini
belirler
SelectionFont Font Seilen metnin yaz
tipini belirler
SelectionIntend Integer Seilen satrn, sol
kenara olan uzakln
belirler
SelectionLength Integer Seilen metnin
uzunluunu belirler

RichTextBox Metotlar
Metot Aklama
Find Metin kutusu iinde,
parametre olarak verilen
bir yazy arar. Yazy ilk
grd yerin indisini
dndrr.
LoadFile Bir dosyadan alnan
metni ykler
SaveFile Parametre olarak
verilen konumdaki
dosyaya, metni yazar.
Dosyann rtf veya doc
uzantlarnda
kaydedilmesi, zengin
ieriin grntlenmesi
asndan nemlidir.
Undo Yaplan ilem geriye
alnr
Redo Geri alnan ilem tekrar
yaplr
18 Modl 1: Programlamaya Giri

RichTextBox olaylar
Olay Aklama
TextChanged Metin kutusundaki yaz
deitii zaman
gerekleir
LinkClicked Metin iindeki bir
balantya tkland
zaman gerekleir

Lab 1: Notepad uygulamas


Bu labda, RichTextBox kontrolnn salad kolaylklarla bir metin editr
uygulamas gelitirilir. Bu uygulamann kullanmn kolaylatrmak iin menler,
ara ubuu ve durum ubuundan faydalanlr.

Bu labda kullanlan kontroller ve teknikler:


MainMenu Dosya, dzen, grnm ve yardm ilemleri iin kullanlr
ContextMenu Ara ubuunu gizlemek ve kopyala, yaptr, kes gibi
metin ilemleri iin kullanlr
RichTextBox Yazlan metnin tutulmas iin kullanlr
NotifyIcon Uygulamann simgesinin grev ubuunda
gzkmesini salar
ToolBar Kaydetme, dosya ama, hizalama gibi ilemlere ksa yollar
salamak iin kullanlr.
ImageList Ara ubuundaki dmeleri resimlerini belirlemek iin
kullanlr
SaveFileDialog Dosyalarn kaydedilmesi srasnda kullanlr.
OpenFileDialog Dosyalar amak iin kullanlr.
FontDialog Yaz tipini deitirmek iin kullanlr.
StatusBar Dosyalar ald zaman isimlerini ve kayt durumlarn
grntlemek iin kullanlr.
Konu: 1 19

Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.
Kontrol Kontrol smi zellik Deer
ContextMenu ContextMenu1 Geri Al, Kes, Kopyala,
Yaptr, Sil, Tmn
Se deerlerini ieren
men eleri ekleyin
ContextMenu ContextMenu2 Gizle deerini ieren bir
men esi ekleyin
ToolBar ToolBar1 Buttons Kaydet, A, Kopyala,
Kes, Yaptr, Undo,
Redo, Madde aretle,
Sola Hizala, Saa
Hizala, Ortala komutlar
iin dmeler ekleyin.
Her dmenin
ImageIndex zelliine,
ImageList iinde
bulunan resimlerden
uygun olann indisini
atayn.
ImageList ImageList1 Images Ara ubuundaki
eleri temsil eden
resimler ekleyin
OpenFileDialog -
OpenFileDialog1
SaveFileDialog -
SaveFileDialog1
FontDialog - FontDialog1
StatusBar - StatusBar1 ShowPanels True
Panels ki tane panel ekleyin. lk
panelin AutoSize
zelliini Contents
olarak belirleyin.
NotifyIcon - NotifyIcon1 Icon Uygulamanz iin bir
simge sein
Text Notepad Uygulamas
RichTextBox RichTextBox1 Dock True

Uygulamaya son olarak bir MainMenu ve ilgili alanlara MenuItem elerini


ekleyin. Parantez iinde belirtilen tular, men elerine erimek iin
kullanlacak ksa yollardr. Bu deerleri, men elerinin ShortCut zelliine
ekleyin.
20 Modl 1: Programlamaya Giri

Dosya
o Yeni (Ctrl N)
o A (Ctrl O)
o Kaydet (Ctrl S)
o Farkl Kaydet
o k
Dzen
o Geri Al (Ctrl Z)
o Kes (Ctrl X)
o Kopyala (Ctrl C)
o Yaptr (Ctrl V)
o Sil
o Bul
o Yaz Tipi
o Tmn Se
Grnm
o Sola Hizala
o Saa Hizala
o Ortala
o Madde aretle
o Ara ubuunu gizle
Yardm
o Hakknda

Uygulamaya frmBul isminde yeni bir form ekleyin. Bu form, metin kutusunda
aranan deeri bulmak iin kullanlacaktr.
Forma, arama ilemleri iin gereken kontrolleri ekleyin.
Kontrol Kontrol smi zellik Deer
Button Button1 DialogResult DialogResult.OK
Text Bul
Button Button2 Text ptal
CheckBox cbTumKelimeyiSec Text Bulduktan sonra tm
kelimeyi se
Checked True
TextBox txtAranan
Konu: 1 21

Kontrolleri ekledikten sonra Button1 ve Button2 dmelerinin Click olayna,


formu kapatan kodlar yazn:
private void Button1_Click( System.Object sender,
System.EventArgs e ) {
this.Close();
}
Uygulamaya frmHakkinda isminde yeni bir form ekleyin. Bu form, uygulama
bilgilerini ierir.

Kodlarn yazlmas
Dosya ismini ve dosyann kaydedilip edilmediini tutan deikenleri
tanmlayn

private bool Kaydedildi = true;


private string DosyaIsmi;

Men elerine kod eklemeden nce, yaplacak ilemler yordamlar iine


yazlr. Bylece kodun karmakl azalr ve deiiklik yapmak kolaylar.
Durum ubuunda deiiklik yapma ilemlerini yazn. Durum ubuu,
dosya ama kaydetme gibi ilemler sonunda deiecektir

public void DurumDegistir() {


StatusBar1.Panels[ 0 ].Text = DosyaIsmi;
if ( Kaydedildi ) {
StatusBar1.Panels[ 1 ].Text = "Kaydedildi";
}
else {
StatusBar1.Panels[ 1 ].Text =
"Kaydedilmedi";
}
}
22 Modl 1: Programlamaya Giri

Dosyaya kaydetme ve farkl kaydetme ilemlerini yazn.


// Kaydetme ilemi
public void Kaydet() {
if ( DosyaIsmi == "" ) {
FarkliKaydet();
}
else {
RichTextBox1.SaveFile( DosyaIsmi );
Kaydedildi = true;
}
DurumDegistir();
}

// Farkl kaydetme ilemi


public void FarkliKaydet() {
string dosya;
// Kaydedilecek yeri semek iin
// SaveFileDialog kutusu gsterilir

// Dosya yoksa otomatik olarak oluturulmas


salanr
SaveFileDialog1.CreatePrompt = true;

if ( SaveFileDialog1.ShowDialog() ==
DialogResult.OK ) {
dosya = SaveFileDialog1.FileName;
RichTextBox1.SaveFile( dosya );
DosyaIsmi = dosya;
Kaydedildi = true;
}
DurumDegistir();
}
Yeni bir dosya veya var olan bir dosyay ama ilemlerini tanmlayn.

public void DosyaAc( bool yeniDosya ) {


if ( !( Kaydedildi ) ) {
switch ( MessageBox.Show( "Dosya kaydedilsin
mi?","", MessageBoxButtons.YesNoCancel) ) {
case DialogResult.OK:
// Kaydetme ilemi yaplr
Kaydet();
break;
case DialogResult.Cancel:
// lem iptal edildi
return;
}
}

if ( !( yeniDosya ) ) {
// Varolan bir dosya alr.
string dosya = null;
if ( OpenFileDialog1.ShowDialog() ==
DialogResult.OK ) {
dosya = OpenFileDialog1.FileName;
RichTextBox1.LoadFile( dosya );
DosyaIsmi = dosya;
}

}
else {
Konu: 1 23

// Yeni bir dosya alr


RichTextBox1.Clear();
DosyaIsmi = "";
}

Kaydedildi = true;
DurumDegistir();
}

Bulma ilemlerini gerekletiren kodlar yazn. Burada yeni bir form


alp, orda girilen deerlere gre arama ilemi yaplr.
public void Bul() {
// Bulma formu grntlenir, iptal tuuna basldysa
klr
frmBul bul = new frmBul();
if ( !( bul.ShowDialog() == DialogResult.OK ) )
{ return; }

string aranan = bul.txtAranan.Text;


if ( aranan == "" ) { return; }

// Bulduktan sonra kelimenin tmn iaretlenmesi


bilgisi alnr
bool TumKelimeyiSec =
bul.cbTumKelimeyiSec.Checked;

// Bulunan ilk indis alnr.


int start = RichTextBox1.Find( aranan );

if ( !( TumKelimeyiSec ) ) {
// Sadece aranan kelime seilir.
RichTextBox1.Select( start, aranan.Length );
}
else {
int son = start;
int bas = start;

while ( son < RichTextBox1.Text.Length - 1


&& RichTextBox1.Text.Substring( son, 1 ) != " " ) {
son += 1;
}

while ( bas > -1 &&


RichTextBox1.Text.Substring( bas, 1 ) != " " ) {
bas -= 1;
}

RichTextBox1.Select( bas + 1, son - bas - 1


);
}
}

ToolBar dmelerine basld zaman gerekleecek kodlar yazn.


Dikkat: Bu kodda belirtilen indis numaralar, uygulamanzda ToolBar kontrolne
eklediiniz dmelerin indis numaral ile farkllk gsterebilir. Yaplan ilemler yorum satr
olarak geilmitir. Bu ilemleri, dmelerin indislerine gre tekrar dzenleyin. Dmelerin
indislerini renmek iin ToolBar kontrolnn Buttons zelliine bakn.
24 Modl 1: Programlamaya Giri

private void ToolBar1_ButtonClick( System.Object


sender, System.Windows.Forms.ToolBarButtonClickEventArgs e )
{
// Baslan dmenin indisine gre ilem yaplr.
switch ( ToolBar1.Buttons.IndexOf( e.Button ) )
{
case 0:
//Kaydet
Kaydet();
break;
case 1:
// Ac
DosyaAc(False);
break;
case 3:
// Kopyala
RichTextBox1.Copy();
break;
case 4:
// Kes
RichTextBox1.Cut();
break;
case 5:
// Yaptr
RichTextBox1.Paste();
break;
case 7:
// Geri Al
RichTextBox1.Undo();
break;
case 8:
// Tekrarla
RichTextBox1.Redo();
break;
case 10:
// Madde iaretle
RichTextBox1.SelectionBullet = Not
RichTextBox1.SelectionBullet;
break;
case 11:
// Sola Hizala
RichTextBox1.SelectionAlignment =
HorizontalAlignment.Left;
break;
case 12:
// Ortala
RichTextBox1.SelectionAlignment =
HorizontalAlignment.Center;
break;
case 13:
// Saa Hizala
RichTextBox1.SelectionAlignment =
HorizontalAlignment.Right;
break;
}
}

Dosya iinde bulunan bir balantya tkland zaman, bu balanty


ilgili taraycda aan kodlar yazn.

// Linke git
Konu: 1 25

private void RichTextBox1_LinkClicked( object


sender, System.Windows.Forms.LinkClickedEventArgs e ) {
System.Diagnostics.Process.Start( e.LinkText
);
}
Dosya iine yazlan yaz deitii zaman gereken kodlar yazn

private void RichTextBox1_TextChanged( System.Object


sender, System.EventArgs e ) {
Kaydedildi = false;
DurumDegistir();
}
Uygulama kapanrken dosyann kaydedilmesini soran kodlar yazn.
// Kapanrken dosyann kaydedilmesi kontrol edilir.
private void Form3_Closing( object sender,
System.ComponentModel.CancelEventArgs e ) {
if ( !( Kaydedildi ) ) {
switch ( MessageBox.Show ("Dosya
kaydedilsin mi?", "", MessageBoxButtons.YesNoCancel) ) {
case DialogResult.OK:
// Kaydetme ilemi yaplr
Kaydet();

break;
case DialogResult.Cancel:
// ilem iptal edildi
e.Cancel = true;
break;
}

}
}
Her men esinin altna, ilgili ilemleri yazn. Burada dikkat edilmesi
gereken nokta, baz ContextMenu elerinin ve MainMenu elerinin
ayn ilemi yaptdr. rnein Geri Al komutu, her iki mende de
vardr. Bu kodlar farkl yordamlar yerine, ayn yordamn iine yazarak
Handles ifadesine iki men esinin Click olay yazlr.

rnek:
private void MenuItem19_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.Undo();
}

Dikkat: Bu kodda belirtilen men isimleri, uygulamanzda MainMenu veya


ContextMenu kontrolne eklediiniz menlerin isimleri ile farkllk gsterebilir. Yaplan
ilemler yorum satr olarak geilmitir. lgili men esine ift tklayarak Click olaynda,
burada belirtilen ilemleri yazn.

// Yeni Dosya a
private void MenuItem13_Click( System.Object sender,
System.EventArgs e ) {
26 Modl 1: Programlamaya Giri

DosyaAc(True);
}

// Dosya A
private void MenuItem14_Click( System.Object sender,
System.EventArgs e ) {
DosyaAc(False);
}

// Kaydet
private void MenuItem15_Click( System.Object sender,
System.EventArgs e ) {
Kaydet();
}

// Farkl Kaydet
private void MenuItem16_Click( System.Object sender,
System.EventArgs e ) {
FarkliKaydet();
}

// k
private void MenuItem18_Click( System.Object sender,
System.EventArgs e ) {
Application.Exit();
}

// Geri al
private void MenuItem19_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.Undo();
}

// Kes
private void MenuItem21_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.Cut();
}

// Kopyala
private void MenuItem22_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.Copy();
}

// Yaptr
private void MenuItem23_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.Paste();
}

// Yaz sil
private void MenuItem24_Click( System.Object sender,
System.EventArgs e ) {
// silinecek kelime RichTextBox kontrolnde seilen
kelimedir
string silinecek = RichTextBox1.SelectedText;

// secilen kelimenin indisi bulunur


int i = RichTextBox1.SelectionStart;

RichTextBox1.Text = RichTextBox1.Text.Remove(i,
silinecek.Length);
Konu: 1 27

// Tm yazy se
private void MenuItem28_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.SelectAll();
}

// Yaz tipini se
private void MenuItem36_Click( System.Object sender,
System.EventArgs e ) {
// Font seerken, renklerin de grnmesi salanr.
FontDialog1.ShowColor = True;

if (FontDialog1.ShowDialog == DialogResult.OK)
{
RichTextBox1.SelectionFont = FontDialog1.Font;
}
}

// Sola Hizala
private void MenuItem29_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.SelectionAlignment =
HorizontalAlignment.Left;
}

// Saa Hizala
private void MenuItem30_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.SelectionAlignment =
HorizontalAlignment.Right;
}

// Ortala
private void MenuItem32_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.SelectionAlignment =
HorizontalAlignment.Center;
}

// Madde iaretle
private void MenuItem33_Click( System.Object sender,
System.EventArgs e ) {
RichTextBox1.SelectionBullet = Not
RichTextBox1.SelectionBullet;
}

// Hakknda formunun gsterilmesi


private void MenuItem34_Click( System.Object sender,
System.EventArgs e ) {
frmHakkinda hakkinda = New frmHakkinda();
hakkinda.ShowDialog();
}

// Ara ubuunun gizlenmesi, MainMenu ve Toolbar


kontrolne
// atanan ContextMenu yaplr.
private void MenuItem37_Click( System.Object sender,
System.EventArgs e ) {
ToolBar1.Visible = MenuItem37.Checked;
MenuItem37.Checked = Not MenuItem37.Checked;
28 Modl 1: Programlamaya Giri

// Dosya bulunmas
private void MenuItem26_Click( System.Object sender,
System.EventArgs e ) {
Bul();
}
}

MDI Formlar

MDI Formlar
Multiple Document Interface Bir ok alt
formu barndran formlardr.
Bu formlarn IsMdiContainer zellii True
yaplr.
Alt formun MdiParent zellii, ait olduu
ana formu belirler
MdiChildren zellii alt form dizisini verir.

Multiple Document Interface formlar, iinde birden fazla form barndran


formlardr. MDIChild olarak eklenen bu formlar birbirinden tamamen
bamszdr. rnein bir Excel dosyas iinde birden fazla sayfa olabilir. Bu
sayfalar ana forma baldr. Ana form kapand zaman bu sayfalar da kapanr.
MDIParent olarak nitelendirilen bu ana formlarn, MDIChild formlarn amak
ve ynetmek iin menlere ihtiyalar vardr.

Formlar MDI olarak tanmlamak iin IsMdiContainer zelliinin True olarak


ayarlanmas gerekir.
Konu: 1 29

MDI formlara alt formlar eklemek iin, form oluturma ilemleri bilinen ekilde
yaplr. Ancak formun MDIParent zellii belirlenmelidir.

AltForm f = New AltForm();

// Oluturulan form, ana forma balanr.


f.MdiParent = this;
f.Show();

Bir formun sahip olduu alt formlara ulamak iin, MDIChildren zelliinden
yararlanlr. Bu zellik tek boyutlu bir Form dizisidir.

// Tm formlar kapatr.
// Alt formlar kapand zaman, dizi otomatik olarak
// yeniden boyutlandrlr.
while (this.MdiChildren.Length > 0)
{
this.MdiChildren[0].Close();
}

// Tm formlar Minimize eder


for (int i = 0; i < Me.MdiChildren.Length; i++)
{
this.MdiChildren[i].WindowState =
FormWindowState.Minimized;
}

Alt formlar geniletildiklerinde, form zerinde yazan bal ana forma tanr.
Alt formda tanml bir men, ana formun mens ile birleir. Bu men birleim
ilemine Merge denir. Men eleri varsaylan olarak, ana formdaki menlerin
yanna eklenir. Ancak men elerinin MergeType zellii ile varsaylan deer
deitirilebilir.

MergeType.Add
Varsaylan deerdir. Bu deeri alan men eleri, birleme sonucunda
menye eklenir.
MergeType.MergeItem
Bu deeri alan menler, sonu mensnde ayn MergeOrder deerindeki
menlerle birleir.
MergeType.Replace
Birleme sonucunda bu men, ayn MergeOrder deerinde olan e ile
deitirilir.
MergeType.Remove
30 Modl 1: Programlamaya Giri

Birleme sonucunda bu men kartlr.

Alt formlar, ana forma basamak eklinde eklenir. Birok alt form ile allyorsa
bu formlarn dzenlenmesine ihtiya duyulur. Alt formlar dzenlemek iin
formun LayoutMdi metodu kullanlr.

this.LayoutMdi(MdiLayout.TileHorizontal)
this.LayoutMdi(MdiLayout.TileVertical)
this.LayoutMdi(MdiLayout.Cascade)
this.LayoutMdi(MdiLayout.ArrangeIcons)

MDI Form iindeki alt formlardan seili olana ulamak iin, formun
ActiveMdiChild zellii kullanlr.

if (! this.ActiveMdiChild == null)
{
this.Text = this.ActiveMdiChild.Text;
}
Konu: 1 31

Fare Olaylar

Fare olaylar
MouseEventArgs, olayla ilgili parametreleri
tutar.
MouseDown
Dmeye basld zaman gerekleir.
MouseUp
Baslan dme kaldrlnca gerekleir.
MouseMove
Kontroln zerinde hareket edince gerekleir.

Fare olaylar, formlar zerinde farenin bir tuunun tklanmas, zerine gelmesi
gibi olaylardr. Bu olayla ilgili parametreler, olay gerekletii zaman
MouseEventArgs nesnesi ile kullancya bildirilir.

MouseEventArgs zellikleri:
Button
Hangi fare dmesine basldn gsterir.
Click
Olay gerekleene kadar, dmeye ka defa basldn belirler. rnein
fareye ift tklanmsa 2 deerini alacaktr.
Delta
Farenin ortadaki dmesinin dnme orann gsterir.
X
Kontrole gre, farenin tkland pozisyonun x koordinatn gsterir.
Y
Kontrole gre, farenin tkland pozisyonun y koordinatn gsterir.

NOT: Fare olaylar MDI formlar zerinde gereklemez.

MouseDown olay
Farenin herhangi bir dmesi basld zaman gerekleir. Kontroln Click
olaynda nce alr.
32 Modl 1: Programlamaya Giri

MouseUp olay
Farenin baslan dmesi kaldrld zaman gerekleir.

MouseMove olay
Farenin, kontrol zerinde hareket etmesi ile gerekleir.

Lab 2: File Browser


Bu labda, verilen bir konumdaki klasrlerin listelenmesi, seilen klasrn
bilgilerinin alt formlarda grnmesi uygulamas gerekletirilir.

Bu labda kullanlan kontroller ve teknikler:


MainMenu Klasrlerin grntlenecei konumu belirlemek, yeni
klasr eklemek, klasr silmek gibi ilemler iin kullanlr.
ContextMenu Seilen klasrn alt klasrlerini listelemek, klasr
listeden kaldrmak iin kullanlr.
TreeView Belirtilen konumdaki klasrleri ve alt klasrleri listelemeyi
salar.
StatusBar Seilen dosyalarn konumlarn grntlemeyi salar.
ListBox Alt klasrlerin listelenmesi iin kullanlr.

Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.
Kontrol Kontrol smi zellik Deer
Form isMDIContainer True
ContextMenu ContextMenu1 Alt Klasrler, Kaldr
deerlerini ieren
men eleri ekleyin
MainMenu MainMenu1 Yeni Konum, Dosya
Konu: 1 33

Bilgileri deerlerini
ieren men elerini
ekleyin
StatusBar StatusBar1
TreeView TreeView1

Uygulamaya DosyaBilgileri isminde yeni bir form ekleyin. Form iine tablodaki
kontrolleri ekleyin ve zelliklerini ayarlayn.
Kontrol Kontrol smi zellik Deer
MainMenu MainMenu1 Yeni, Sil, Kapat
deerlerini ieren
men elerini ekleyin
ListBox ListBox1 Dock Fill

Kodlarn yazlmas

Ana Form
Belirtilen konumdaki klasrleri listeleyen kodlar yazn.
public string[] KlasorleriAl( string konum ) {
string[] klasorler =
System.IO.Directory.GetDirectories( konum + @"\" );

for (int i=0; i<=klasorler.Length - 1; i++ )


{
klasorler[ i ] = klasorler[ i ].Remove(
0, konum.Length + 1 );
}

return klasorler;
}
Form zerinde grntlenecek klasrlerin bulunduu yeri tutan
deikeni ve yeni formun almasn yazn.
private string YeniKonum;

public void FormBilgileri() {


DosyaBilgileri f = new DosyaBilgileri();
f.MdiParent = this;
f.Text = YeniKonum +
TreeView1.SelectedNode.FullPath;
f.KlasorleriListele();
f.Show();
}

Yeni konumu seen men altna, TreeView kontrolnde alt klasrleri


listeleyen kodlar yazn
// Yeni konum seilmesi
private void MenuItem2_Click( System.Object sender,
System.EventArgs e ) {
34 Modl 1: Programlamaya Giri

YeniKonum =
Microsoft.VisualBasic.Interaction.InputBox( "Konum girin:",
"Yeni Konum", @"C:\", -1, -1 );

string[] klasorler = KlasorleriAl( YeniKonum );

for (int i=0; i<=klasorler.Length - 1; i++ ) {


TreeView1.Nodes.Add( klasorler[ i ] );
}
TreeView1.SelectedNode = TreeView1.Nodes[ 0 ];
}

TreeView kontrolnde bir klasr seildii zaman durum ubuunda


klasrn ismini grntleyen kodlar yazn.

private void TreeView1_AfterSelect( System.Object


sender, System.Windows.Forms.TreeViewEventArgs e ) {
StatusBar1.Text = YeniKonum +
TreeView1.SelectedNode.FullPath;
}

ContextMenu iinde tanmlanan ilemleri yazn.


Alt klasrlerin listelenmesi
// Alt klasrler
private void MenuItem3_Click( System.Object sender,
System.EventArgs e ) {
TreeNode secilen = TreeView1.SelectedNode;
secilen.Nodes.Clear();

string konum = YeniKonum + secilen.FullPath;

string[] altKlasorler = KlasorleriAl( konum );

for (int i=0; i<=altKlasorler.Length - 1; i++ )


{
secilen.Nodes.Add( altKlasorler[ i ] );
}
}
Klasrn kaldrlma ilemi

// Seilen klasrn listeden kaldrlma ilemi


private void MenuItem4_Click( System.Object sender,
System.EventArgs e ) {
TreeNode secilen = TreeView1.SelectedNode;
if ( secilen == null ) { return; }

if ( secilen.Parent == null ) {
TreeView1.Nodes.Remove( secilen );
}
else {
secilen.Parent.Nodes.Remove( secilen );
}
}

Dosya bilgilerini grntleyen kodlar yazn


// Dosya bilgileri MainMenu esine tklandnda
private void MenuItem5_Click( System.Object sender,
System.EventArgs e ) {
FormBilgileri();
}
Konu: 1 35

// Dosya bilgileri TreeView esine ift tklandnda


private void TreeView1_MouseDown( object sender,
System.Windows.Forms.MouseEventArgs e ) {
if ( e.Clicks == 2 ) {
FormBilgileri();
}
}

Farenin ortadaki tekerleinin dndrlmesi ileminde, TreeView


iinde seilen eden bir nceki veya bir sonraki eye gidilmesi iin
gereken kodlar yazn.
private void TreeView1_MouseWheel( object sender,
System.Windows.Forms.MouseEventArgs e ) {
if ( TreeView1.SelectedNode == null ) { return;
}

if ( e.Delta < 0 ) {
TreeNode sonraki =
TreeView1.SelectedNode.NextNode;
if ( !( sonraki == null ) ) {
TreeView1.SelectedNode = sonraki;
}
}
else {
TreeNode onceki =
TreeView1.SelectedNode.PrevNode;
if ( !( onceki == null ) ) {
TreeView1.SelectedNode = onceki;
}
}
}

DosyaBilgileri formunda yazlacak kodlar:


Alt klasrlerin listelendii kodlar yazn
public void KlasorleriListele() {
ListBox1.Items.Clear();
string[] klasorler =
System.IO.Directory.GetDirectories( this.Text + @"\" );

for (int i=0; i<=klasorler.Length -1; i++ ) {


ListBox1.Items.Add( klasorler[ i ] );
}
}
Yeni klasrn eklenmesi iin gereken kodlar yazn.
private void MenuItem3_Click( System.Object sender,
System.EventArgs e ) {
string yeniKlasor = Interaction.InputBox( "Yeni
klasr ismi girin:", "", "", -1, -1 );
yeniKlasor = yeniKlasor.Insert( 0, this.Text +
@"\" );
System.IO.Directory.CreateDirectory( yeniKlasor
);

KlasorleriListele();
}
Seilen klasrn silinmesini salayan kodlar yazn.
private void MenuItem2_Click( System.Object sender,
System.EventArgs e ) {
string silinecek;
36 Modl 1: Programlamaya Giri

silinecek = ListBox1.SelectedItem.ToString();

System.IO.Directory.Delete( silinecek, true );


KlasorleriListele();
}

Modl Sonu Sorular & Altrmalar

zet

Menler
MainMenu, ContextMenu
ToolBar
ToolTip
StatusBar
NotifyIcon
RichTextBox

1. MainMenu ve ContextMenu nesnelerini ve kullanm alanlarn aklaynz.


Kontrolleri ieren bir uygulama gelitirin.
2. ImageList kontrolnn kullanm amacn ve kullanmn aklaynz.
Kontol ieren bir uygulama gelitirin.
3. SDI ve MDI form yaplarn aklaynz ve her iki tr iin birer rnek
uygulama gelitirin.
Modl 11: Veri Yaplar

Hedefler

Access ortam
Veri tipleri
Veri modelleme teknikleri

Birok irket, kurum ve kaytlarn tutan yaplar iin verinin nemi ok byktr.
Verilerin kt zerinde tutulmas hem aramalarn yaplmas hem de kayt
dzeni asndan ok zor bir yntemdi. Bilgisayarlarn i yaamnda
kullanlmaya balanmas ile verilen ynetimi daha da kolaylat. Ancak bu
teknoloji ilerledike kullanlmas zorlamaya balad. Verilerin tutulmas metin
dosyalarndan tablolara aktarld. Gnmzde veri ve tablo yaplarnn ynetimi
artk veritaban yneticilerin eline braklm durumdadr.

Windows ve Web uygulamalarn ou veri zerine younlar. Uygulamalarda


veriye hzl bir ekilde ulamak ve veriyi ynetmek iin tablo yaplarnn iyi bir
ekilde modellenmesi gerekmektedir. Bu modlde Microsoft Access veritaban
zerinde veri yaplarnn kullanlmas ilenir.

Bu modl tamamladktan sonra:


Microsoft Access ortamn tanyacak,
Veritabanlarnda kullanlan deiik veri tiplerini tanyacak,
Veri modelleme tekniklerini reneceksiniz.
2 Modl 1: Programlamaya Giri

Konu 1: Access e Giri


Access Microsoftun ilikisel veritabandr. indeki birok sihirbaz yardm ile
kullanm kolayl ve hzl bir ekilde tablo tasarmnn yaplmasn salar.
Access tasarm grnmlerinde, tablolarn yapsn analiz etmek iin sorgular
kolay bir ekilde oluturma ilemini kolaylatrr. Karmak bir dosya yaps
olmamas tanabilirliini kolaylatrr ve her platformda almasn salar.

Access Ortam

Access ortam
Grev Blmesi
Balang
Yardm
Arama Sonular
Dosya Arama
Yeni Dosya
Tablo oluturmak
Tasarm grnmnde tablo
Sihirbaz ile tablo
Veri girerek tablo

Access ortam, veritaban gelitirirken kullancya birok kolaylk sunar. Access


ald zaman sa panelde Grev Blmesi kar. Bu panel birok ileme ksa
yol salar.
Balang
Access Office Online balang sayfasdr. Microsoft haber sitelerine
balantlar ve en son alan veritabanlarn listeler.
Yardm
Online yardm seeneklerini sunar
Arama sonular
Online yardmda bulunan sonular listeler
Dosya Arama
Belirtilen yerde, belli tipte dosyalar aramay salar.
Yeni Dosya
Konu: 1 3

Yeni bir veri taban dosyas veya veri eriim dosyas amak iin kullanlr.

Bo veritaban komutu verildii zaman Yeni Veritaban Dosyas diyalog


kutusunda, dosya ismi girilip yeni veritaban oluturulur. Oluturulan veritaban
dosyalarnn uzants mdb olur.
Daha nceden oluturulmu bir veritabann amak iin Dosya mensnden
A komutu verilir. Ctrl O ksa yolu da dosyalar amak iin kullanlabilir.

Veritaban ald zaman, veritaban zerinde yaplabilecek tm ilemleri


sunan bir pencere kar. Veritaban nesnelerini ynetilmesi bu pencere ile
yaplr. Sol panelde bulunan nesneler sekmesinde, veritabannda
bulunabilecek tm nesneler listelenmitir. Bir nesne tipi seildiinde,
veritabannda bulunan bu tipteki tm eler grntlenir. rnein Tablolar
sekmesine gelindiinde veritaban zerindeki tablolar grntlenir, yeni tablo
oluturmak iin seenekler sunulur.
4 Modl 1: Programlamaya Giri

Veritaban Nesnesi oluturmak


Veritaban penceresinde nesneleri oluturmak iin farkl yollar
sunulmutur. Tablolar oluturmak iin bu ksa yollardan yararlanlabilir.
Tasarm grnmnde tablo olutur
Bu seenek ile tablodaki verilerin tasarm tamamen kullancya
braklmtr. Kullanc alan adlarn kendisi girip, ilgili veri tipini ve gerekli
ayarlar seebilir.

Sihirbaz kullanarak tablo olutur


Access iinde ok sk karlalan, kullancya byk hz salayan sihirbaz
yardm ile tablo oluturulur. Sihirbaz, hangi tipte tablo oluturulacan,
nceden hazrlanm zengin ablonlar kullancya sunarak belirler.

Veriler girerek tablo olutur


Konu: 1 5

Bu seenek ile tablolar veri girii ile oluturulur. Access kullancnn girdii
verilere gre alan says ve tipi belirler. Ancak alan adlarn daha sonradan
deitirilmelidir.

Oluturulan tablolar tasarm ve veri sayfas grnmlerinde incelenebilir. Veri


sayfas grnm kullancya veri girmesi iin byk kolaylklar salar.
rnein Evet/Hayr veri tipindeki bir alan veri girilmesi iin bir CheckBox
grntlenir. Ayrca tablonun ilikide olduu tablolar bulunur ve alt tablo olarak
kullancya sunulur.

Tablolar oluturulduktan sonra aralarndaki ilikilerin kurulmas ve


grntlenmesi iin ara ubuunda likiler dmesi kullanlr.
6 Modl 1: Programlamaya Giri

Konu 2: Veri Yaplarna Giri

Veri Yaplar
Metin Veri Tipleri
Text, Memo
Saysal Veri Tipleri
Byte, Integer, Long Integer
Single, Double, Decimal
Tarih Veri Tipi
Genel Tarih, Uzun Tarih, Ksa Tarih
Orta Uzunlukta Tarih, Uzun Saat, Ksa Saat
Yes/No Veri Tipi
OLE Veri Tipi

Veritabanlarnda veriler ayn tipinde tutulmaz. Bu durum kk veriler iin fazla


yer alanlar amay engelledii gibi deiik formatlardaki verilerin
ynetilebilirliini artrr. rnein kategori tablosunda tutulan verilerin says
genellikle azdr ve ok fazla artmaz. Dolaysyla bu verilerin tekil alannda
tutulan saynn ok byk veri tipinde olmas gerekmez. Ancak makalelerin
tutulduu bir alann kapasitesinin ok byk olmas gerekir.

Metin Veri Tipleri


Metin (Text)
Metin bilgilerini tutmak iin tanmlanan veri tipidir. Bu deere girilebilecek
maksimum karakter says 255 tir. Bir alana belirtilen uzunluktan kk bir
deer girildiinde, kalan bo yerler iin kaynak ayrlmaz. Metin veri tipi
saysal deerler de ierebilir.
Konu: 1 7

Not (Memo)
Maksimum 65535 karakter tutar. Byk metinsel veriler iin tercih
edilmelidir.

Saysal Veri Tipleri


Say veri tipinin birden fazla alan boyutu vardr.
Bayt (Byte)
0 255 arasnda bir say
Tamsay (Integer)
- 32,768 ile 32,767 arasnda bir say
Uzun Tamsay (Long Integer)
- 2,147,483,648 ile 2,147,483,647 arasnda bir say
Tek (Single)
Negatif say aral: 3.402823E+38 ile 1.401298E45
Pozitif say aral: 1.401298E45 ile 3.402823E38
ift (Double)
Negatif say aral: 1.79769313486231E+ 308
4.94065645841247E324
Pozitif say aral: 1.94065645841247E324
1.79769313486231E+308
Ondalk (Decimal)
10^381 ile 10^381 arasnda say

Otomatik Say (AutoNumber) veri tipi, alana veri girildii zaman otomatik olarak
belirlenen saylar ifade eder. Saylar rasgele ya da birden balayarak girilir.

Tarih Veri Tipi


Tarih alanlar iin deiik boyutlarda depolama seenekleri sunar.
Genel Tarih
Ksa Tarih ve Uzun Saat birleimi bir grnmdr.
Uzun Tarih
12 Aralk 2004 Pazar formatnda grnr
Orta Uzunlukta Tarih
12 Ara 2004 formatnda grnr
Ksa Tarih
12.12.2004 formatnda grnr
Uzun Saat
15:11:19 formatnda grnr
Ksa Saat
15:11 formatnda grnr
8 Modl 1: Programlamaya Giri

Evet/Hayr Veri Tipi


Bir bit deerinde, evet ve hayr deerlerini alan veri tipidir. Veri sayfalarnda
veya sorgu sonucunda bir CheckBox ile ifade edilir. Eer seili ise bu alann
deeri -1, deilse 0 olur. Bu alan sorgulanrken -1 ve 0 deerleri kontrol
edilmelidir.

OLE Veri Tipi


Alana bir nesne eklemek veya balamak iin kullanlan veri tipidir. Resimler,
Excel dosyalarn veya bir dosyadan seebileceiniz herhangi bir nesne
balanabilir.

Konu 3: Veri Modelleme Gereksinimleri

Veri Modelleme Gereksinimleri


Normalizasyon
Birinci Normal Form
kinci Normal Form
nc Normal Form
Primary Key
Foreign Key
likiler
Bire Bir
Bire Sonsuz
Sonsuza Sonsuz

Verileri tablolarda tutarken baz modellemelere gereksinim duyulur. rnein


yazlan bir verinin tekrarlamamas nemlidir. rnler tablosunda kategori isim
olarak tutulursa, ayn kategorideki rnleri iin bu isim tekrardan yazlmas
gerekecektir. Bu durum, tabloya hem veri girii zorlatrr, hem de deiiklik
yaplmak istenirse her rnn kategorisini deitirmek gerekir. Bu tip sorunlar
normalizasyon kurallarn ortaya karmtr.
Konu: 1 9

Normalizasyon, yer alanndan kazanma, veri tutarll ve leklenebilirlik


amacyla tablolardan gereksiz verilerin kartlmas ilemleridir. Bu ilemler,
tablolarn etapta normal formlara getirilmesi ile gerekleir.

Birinci Normal Form

Birinci Normal Form


Yatay dzeyde gereksiz veri tekrar
yaplmaz.
Bir kolonda sadece bir veri tutulur.
Tekrarlanan veriler iin ayr bir tablo
oluturulur.

Bu ilem, yatay dzeyde gereksiz veya tekrarlanan verilerin kartlmasdr.


Satrlarda en az dzeyde veri tutulmas ve bir bilginin sadece bir kolonda
bulunmas salanr.
rnek:
Bu rnekte bir eitmen grubunun yapt projeler bir veritabannda tutulur.
Verilerin tek bir tabloda tutulmas baz problemlere yol aacaktr.

Eitmen1 Eitmen2 Proje Konu Saat Kurum


Ali Veli Uzmanlk Windows 300 BilgeAdam
Kitab
Ali Veli Mhendislik Windows, 350 BilgeAdam
Kitab Web

Bu rnekte, projelerin eitmenleri iki ayr alanda tutulmutur. Bu durum 1NF


(birinci normal form) kuraln ihlal etmitir. Yani bir satrda, bir verinin tekrar
etmesi sz konusudur. Bu tabloda projeleri iki eitmen ile snrlanm oluyor.
Ancak bir kitab birok eitmenin yazd durumlar da olabilir.
10 Modl 1: Programlamaya Giri

Ayrca proje konularnda birden fazla bilgi tutulur. Mhendislik Kitab projesinin
Windows ve Web olmak zere iki tane konusu bulunur. Belli bir konuya gre
arama yapmak zorlar.
Eitmenler tek bir alanda toplanp, konular kitaplara gre tekrar dzenlenebilir.

Eitmen Proje Konu Saat Kurum


Ali Uzmanlk Windows 300 BilgeAdam
Kitab
Veli Uzmanlk Windows 300 BilgeAdam
Kitab
Ali Mhendislik Web 350 BilgeAdam
Kitab
Veli Mhendislik Web 350 BilgeAdam
Kitab

Yeniden dzenlenen bu tabloda ise bir kitap projesi iin iki tane satr oluuyor.
Ayrca Mhendislik kitabnn sadece Web konusunda olduu grlyor. Dier
konu iin de ayrca iki satr eklenmesi gerekir.

Eitmen Proje Konu Saat Kurum


Ali Uzmanlk Windows 300 BilgeAdam
Kitab
Veli Uzmanlk Windows 300 BilgeAdam
Kitab
Ali Mhendislik Web 350 BilgeAdam
Kitab
Veli Mhendislik Web 350 BilgeAdam
Kitab
Ali Mhendislik Windows 350 BilgeAdam
Kitab
Veli Mhendislik Windows 350 BilgeAdam
Kitab

Ancak bu ekilde verilerin gereksiz yere tekrarland grlr. Veriler bu ekilde


tekrar yazldklar zaman hata yaplma olasl artar. Dolaysyla veri btnl
bozulur. rnein Mhendislik Kitab yerine Muhendis Kitapi gibi bir veri girildii
zaman, alnacak raporlarda elikiler meydana gelir.
Dolaysyla bu tekrarlanan verilerin ayr bir tabloda tutulmas gerekir.

Eitmen No Eitmen
1 Ali
2 Veli
Konu: 1 11

Konu No Konu
500 Windows
501 Web

Proje No Proje Saat Kurum


100 Uzmanlk 300 BilgeAdam
Kitab
101 Mhendislik 350 BilgeAdam
Kitab

Eitmenler ve konular tablosundaki verilerin birer numaras vardr. Bu verilere


erimek iin konu veya eitmenin ismiyle deil, numara ile ulalacaktr.
Dolaysyla tablolarda onlarca karakterin tekrarlanmas yerine, verileri temsil
eden numaralar tekrarlanacaktr. Bu durum hem veritabannn bymesini
engeller hem de tablo zerinde kayt aramalarn hzlandrr.

Tablolar birbirinden ayrldktan sonra projelerin hangi eitmenler tarafndan


yapld ve hangi konularda olduu bilgileri kaybedilmitir. Bu bilgilerin elde
edilmesi iin tablolar arasnda ilikiler kurmak gereklidir.

likilerin kurulmas iin tablolarn, birbirlerine referans vermesi gerekir. Yani bir
tablodan dierine ulamak iin bir bilgi gerekir. rnein bir projenin hangi
konuda olduunu belirlemek iin, konu numarasna ihtiya vardr. Bu numara,
projenin hangi konuda olduunu belirleyecektir.

Tablolar arasnda ilikileri kurmak iin bu numaralarn doru biimde


kullanlmas gerekir. Bu numaralar davranlarna gre ikiye ayrlr.
12 Modl 1: Programlamaya Giri

Birincil Anahtar (Primary Key)

Primary Key
Bir ya da birden fazla alan Primary Key
yaplabilir.
Alanlardaki veriler tekrarlanamaz.

Tablonun bir ya da birden fazla alan, tek bir veriyi temsil etmesi iin Birincil
Anahtar yaplr. Bu anahtar verinin bir daha tekrarlanmamasn salar ve
ilikiler kurulurken ana tabloyu belirler.
rnekteki Birincil Anahtar olan alanlar Eitmen No, Proje No ve Konu No
alanlardr.
Birden fazla alann Birincil Anahtar olarak tanmlanmas, alanlarn tuttuu
verinin birleik olarak tekliini salar. rnein sipari detaylar tablosunda,
sipari numaras ile rn numarasnn beraber tekrarlanmamas gerekir. Aksi
halde bir sipariteki rnn iki farkl adet, indirim vs. bilgileri olacaktr.

Sipari No rn No Adet ndirim


100 680 1 0
100 679 2 10
102 680 1 15
100 680 2 5

Bu tabloda sipari ve rn numaras beraber Birincil Anahtar yaplmtr.


Dolaysyla bu alanlarn herhangi birisinde bir veri tekrar olabilir. nemli olan
bu iki alann beraber ayn veri tutmamasdr. rnekte 100 numaral siparite
680 numaral rn kayd iki defa gemitir. Yaplacak sorgularda, bu rnn
siparite 1 adet olduu ve 0 YTL indirim yapldn, ayn zamanda 2 adet
olduunu ve indirimin 5 YTL olduu grlr. Bu da verinin tutarlln bozar.
Konu: 1 13

Access ile tablolarda Birincil Anahtar oluturmak iin, istenen alanlar


seilerek ara ubuundaki Birincil Anahtar dmesine baslr.

Yabanc Anahtar (Foreign Key)

Foreign Key
Baka bir tablonun Primary Key alanna
referans gsterir
likideki Primary Key zerinde gncelleme
ve silme ilemleri, bu alanda da yaplabilir.
Cascade Update
Cascade Delete
likilerde, Foreign Key alanndaki deer
kontrol edilebilir
Enforce Referential Integrity

Bir tablo iinde baka bir tabloya referans vermek iin, o tablonun numaras
kullanlr. Yani o tablonun Birincil Anahtar alanna gnderme yaplr. Bu
ilemin yaplmas iin, referans gnderen tabloda bu verinin tutulmas gerekir.
Farkl bir tablonun birincil anahtarn tutan alana Yabanc Anahtar denir.
rnein, ark listesinin tutulduu bir tabloda albm numaras, albmler
tablosundaki Birincil Anahtar olan alana referans verir.
14 Modl 1: Programlamaya Giri

Bu anahtarlarn kullanm ilikilerin tanmlanmasnda byk neme sahiptir.


Tablolarn normalizasyonunun salanmas iin birbirleriyle ilikilendirilmeleri
gerekir. eit iliki vardr.
1. Bire bir iliki (One to One)
2. Bire sonsuz iliki (One to Many)
3. Sonsuza sonsuz iliki (Many to Many)

Access ile tablolar arasndaki ilikiler, bir alannn srklenip dier tablodaki bir
alann zerine braklmas ile kurulur. Access bu alanlarn Birincil Anahtar
olup olmadna bakarak ilikinin cinsini belirler.

liki tanmlanrken kan likileri Dzenle penceresinde, tablolardaki hangi


alanlar zerinde iliki kurulaca gsterilir. Buradan ilikinin tr davran
hakknda zel ayarlamalar yaplr.
Bilgi Tutarllna Zorla (Enforce Referential Integrity)
Bir tablodaki verinin dier tabloda var olup olmadn kontrol eder.
likili Alanlar Ardarda Gncelle (Cascade Update)
Birincil Anahtar zerinde bir deiiklik yaplmsa, ilikide olduu
tablolardaki Yabanc Anahtar alanlar da deitirir.
likili Kaytlar Ardarda Sil (Cascade Delete)
Tabloda bir kayt silindii zaman, ilikide olduu tablolardaki veriler de
silinir.
Konu: 1 15

Tekil Kst (Unique Constraint)

Unique Constraint
Primary Key dndaki alanlarn tekil
olmas
Unique tanmlanrken alan indekslenir.

Baz durumlarda, Birincil Anahtar olmayan alanlarn bazlarnn da tabloda


birden fazla gemesi istenmez. rnein renci tablosundaki bir numara
baka bir renci iin geerli deildir. Ya da sicil tablosundaki bir TC kimlik
numaras da tekrarlanmaz. Bu alanlarn Tekil olarak tanmlanmas gerekir.
Access ile tablo tasarlarken, alanlarn Tekil olarak tanmlanmas indekslemeyi
gerektirir. Bir alann indekslenmesi, tabloda aramalarn o alan zerinden daha
hzl yaplmasn salar. Ancak her alan zerinde indeks kullanlmamaldr. Bu
durum sorgularn performansn artrmak yerine drr. zerinde ska sorgu
altrlan alanlar indekslenebilir.
16 Modl 1: Programlamaya Giri

Bire bir iliki


Bir tablodaki bir kayt, dier tablodaki bir veri iin ancak bir kez kullanlabilir.
rnein sicil tablosu, bir kiinin ismini, soyadn ve kimlik numarasn tutuyor.
renci tablosu ise rencinin okul numaras, snf gibi kayt bilgilerini tutuyor.
renci ile sicil arasnda bire bir iliki vardr. renci tablosundaki bir veri, sicil
tablosunda sadece bir veriyi referans gsterebilir. Sicil tablosundaki bir veri de,
renci tablosundaki bir veri iin kullanlabilir. Dolaysyla bir rencinin bir sicili
olabilir, bir sicil ise sadece bir renciye ait olabilir.
Tablolar arasndaki bu ilikiler iki Birincil Anahtar zerinden yaplr.

Bire sonsuz iliki


Tablodaki bir verinin, ilikide olduu tabloda birden fazla kullanlabilir. rnein
bir araba ve model tablolar arasnda bire sonsuz bir iliki vardr. Araba
tablosundaki bir veri, model tablosundaki bir veriyi bir kez kullanabilir. Ancak
model tablosundaki bir veri, araba tablosunda birden fazla veri tarafndan
kullanlabilir. Yani bir arabann sadece bir modeli olur ve bir model birden fazla
arabann modeli olabilir.
Tablolar arasnda bire sonsuz bir iliki oluturmak iin, birden fazla veride
geecek olan tabloda Birincil Anahtar, bu deerin bir kere tutulaca
tabloda Yabanc Anahtar olmak zorundadr.
Konu: 1 17

Sonsuza sonsuz iliki


ki tablo arasnda sonsuza sonsuz bir ilikiyi temsil eder. Tablolardaki her veri
dieri iin birden fazla kullanlyorsa, iki tarafl sonsuz bir iliki vardr. rnein
bir film ve oyuncu tablolar arasndaki iliki sonsuza sonsuzdur. Film
tablosundaki bir veri, oyuncular tablosunda birden fazla veri iin kullanlabilir.
Ayn ekilde oyuncu tablosundaki bir veri, filmler tablosunda birden fazla veri
iin kullanlabilir. liki u ekilde tanmlanabilir:
Bir oyuncu birden fazla filmde oynayabilir. Bir filmde birden fazla oyuncu
bulunabilir.

Tablolar arasnda sonsuza sonsuz bir iliki kurmak iin, ara tabloya ihtiya
duyulur. Bunun nedeni, her iki tablodaki verilerin birden fazla ei bulunabilir
olmasdr. Yaplan ara tabloda, iki tablodan alnan Birincil Anahtar alanlar
konur. Bu alanlar ikili Birincil Anahtar yaplarak veri btnl salanm
olur.

Tablolarn birinci normal forma getirilmesi iin ilikilerin kurulmas gerekir. Bu


durumda, ayrlan tablolarn birbirleri ile ilikiler saptanmas ve bunun
sonucunda Yabanc Anahtar alanlarnn eklenmesi veya ara tablolarn
oluturulmas gerekir.

rnein, Proje ile konular arasnda bir sonsuza sonsuz bir iliki vardr. Bir
projenin birden fazla konusu olabilir ve bir konuda birden fazla proje yaplabilir.
Bunun iin ara tablonun kurulmas gerekir.

Konu No Konu
500 Windows
501 Web
18 Modl 1: Programlamaya Giri

Proje No Proje Saat Kurum


100 Uzmanlk 300 BilgeAdam
Kitab
101 Mhendislik 350 BilgeAdam
Kitab

Proje No Konu No
100 500
101 500
101 501

Bu tablo ile 100 numaral Uzmanlk Kitab projesinin 500 numaral Windows
konusunda olduu grlr. Bu tablo biimi, belli konulardaki projelerin
sorgulanmasn da destekler.
Eitmenler ile projeler arasnda da sonsuza sonsuz bir iliki vardr. Bir eitmen
birden fazla projede bulunabilir. Bir projeyi birden fazla eitmen yrtebilir.
Dolaysyla bu iliki iin de bir ara tablo yaplmas gerekir.

Eitmen No Proje No
1 101
2 101
1 100
2 100
Konu: 1 19

kinci Normal Form

kinci Normal Form


Kolon dzeyinde veri tekrar yaplmaz.
Kolonlarda tekrar edilen veriler ayr bir
tabloda tutulur.

Birinci normal form satr baznda gereksiz verilerin kartlmasyd. kinci normal
form ise kolon baznda veri tekrarn kontrol eder. Eer bir kolonda bir veri,
birden fazla kullanlyorsa bu verilerin ayr bir tabloda tutulmas gerekir.
rnekte kurum ismi BilgeAdam, tm satrlar iin yazlmtr. Dolaysyla bu
kolonda veri tekrar yaplmtr. Bu kurum ismi ayr bir tabloda tutulup, ana
tabloda numaras ile referans gsterilmelidir.

Kurum No Kurum smi ehir Adres


221214 BilgeAdam stanbul Barbaros
Bulvar
Beikta

Bu durumda, projeler ve kurum tablosu arasnda bire sonsuz bir iliki olduu
iin, projeler tablosuna hangi kuruma ait olduunu belirtmek iin bir Yabanc
Anahtar eklenir.

Proje No Proje Saat Kurum No


100 Uzmanlk 300 221214
Kitab
101 Mhendislik 350 221214
Kitab
20 Modl 1: Programlamaya Giri

nc Normal Form

nc Normal Form
Primary Key ile direk ilikisi bulunmayan
alanlar ayr bir tabloya alnr.

nc normal formda tablonun, Birincil Anahtar ile direk ilikisi


bulunmayan, ancak dier alanlara bal alanlar bulunur. rnein kurumlar
tablosunda ehir ismi alan, kurum ile dorudan balants yoktur. Adres alan
ile daha ok balantldr. Bu alanlarn ayr bir tabloya alnmas nc derece
normalizasyondur.
Tablolar ayrldktan sonra aralarndaki ilikiler belirlenmelidir. Bu rnekte bir
kurumun birden fazla adresi olabilir. Ancak bir adres, sadece bir kuruma aittir.

Kurum No Kurum smi


221214 BilgeAdam

Adres No ehir Adres Kurum No


17982 stanbul Barbaros Bulvar 221214
Beikta

nc normal forma getirilen tablolarn dier formlarn da kstlarn salamas


gerekir. Adres tablosundaki ehirler alan, her adres iin tekrarlanacaktr. Bu da
ikinci normal form kuralnn ihlali demek olur. Dolaysyla ehir alann ayr bir
tablo olarak ayrmak gerekir.
Konu: 1 21

ehir No ehir smi


34 stanbul

Adres No ehir No Adres Kurum No


17982 34 Barbaros Bulvar 221214
Beikta

(Sehirler Ornek_likiler)

Uygulama: Alveri Modeli


Bir e-ticaret internet sitesinin hedefi, rnlerin byk kitlelere satn
gerekletirmektir. nternet kullanclar bu hedef kitleyi oluturur. Satlan
rnler, bu kullanclara eitli hizmetler sunularak pazarlanmaldr.
Veritabannda rnlerin tutulmas, stok durumlarnn ve siparilerin gzlenmesi
kadar kullanc kaytlarnn tutulmas, yeni kampanyalarn almas, rnler
hakkndaki yorumlarn tutulmas gibi kavramlar da nemlidir. Veritabannn
tasarlanmasnda bu kavramlar tek tek ele alnp incelenmelidir.

Kaynak ynetimi modl


E-ticaret firmasnn rnlerinin ynetimi, stok, sipari ve firma bilgilerinden
oluur. rnlerin stoklardaki durumlar takip edilmeli ve gerektii zaman
firmalardan tedarik edilmeleri gerekir. Dolaysyla rnler, firmalar, sipariler,
stoklar bu modlde ilenmelidir.

rnler:
Bu tablo, rnlerin detayl bilgilerini tutar. rnn ismi, birim fiyat, eklenme
tarihi, zellikleri, retimde olup olmad, incelenme says gibi bilgilerin tutulur.
rnlerin hangi kategoride olduklar ve salayc firma bilgileri de tutulmaldr.
Ancak kategori ismi kolon baznda birok defa tekrarlanaca iin ikinci
normalizasyon kuralna gre ayr bir tabloya alnmaldr. Salayc firma bilgileri
de ayn ekilde ayr bir tabloda tutulmaldr. Bu durumda bire sonsuz bir iliki
oluur. Yani bir firma birden fazla rn salar, ancak bir rn sadece bir firma
tarafndan salanr. Dolaysyla bu iki alan Yabanc Anahtar olarak
tanmlanmaldr.
22 Modl 1: Programlamaya Giri

Firmalar:
Firma bilgileri ayr bir tablo olarak tutulur. Bilgi olarak adres, mteri temsilcisi
ismi, e-posta ve web sayfas tutulur.

Sipariler:
rnler satn alndktan sonra, sipari bilgisi olarak kayda geer. Siparilerin
nakliye creti, sipari verilme ve gnderilme tarihi, havale ile deme
durumlarnda son deme tarihi, gnderilecek adres, denip denmedii ve
Konu: 1 23

sipariin iptal edilip edilmedii gibi bilgileri tutulur. Ayrca sipariin hangi kaytl
kullancnn verdiini de tutmak gerekir. Bir siparii sadece bir kullanc verebilir
ve bir kullanc birden fazla sipari verebilir. Dolaysyla bir sonsuz bir iliki
oluturmak iin kullanc numaras Yabanc Anahtar olarak tanmlanmaldr.

Sipariler ile rnler arasnda sonsuza sonsuz bir iliki vardr. Yani bir siparite
birden fazla rn bulunabilir. Bir kullanc ayn anda birden fazla rn almak
isteyebilir. Ayn ekilde bir rn birden fazla siparite bulunabilir. Yani bir rn
birden fazla kullancya satlabilir. Bu durumda sipariler ile rnler arasnda
ayr bir tablo yaplmas gerekir.

Bu ara tablo, bir sipariteki bir rn bilgisini tutacaktr. Dolaysyla bu tabloyu


daha etkin bir ekilde kullanlabilir. rnein belli bir siparite bir rnden ka
tane alnd ancak bu tabloda tutulabilir. Ve bu rn, yaplan bir kampanyadan
alnyor olabilir. Bylece bu kaytta kampanya bilgilerinin de tutulmas gerekir.
24 Modl 1: Programlamaya Giri

Stok Merkezleri:
rnlerin belirli ehirlerde veya belirli merkezlerdeki stoklar tutulmas gerekir.
Sipariin verildii yere en yakn stoktan rn gndermek iin bu stok
blgelerinin tutulmas gerekir. Bu stokun adres, e-posta, merkez olup olmad
bilgileri tutulmaldr.
Konu: 1 25

Stok ile rnler arasnda sonsuza sonsuz bir iliki vardr. Yani bir stok
merkezinde birden fazla rn bulunabilir ve bir rn birden fazla stok
merkezinde bulunabilir. Bu iliki iin ara bir tablo yaplmaldr.

Mteri ynetim modl


Kaynak planlamalar yapldktan sonra, bu kaynaklarn mteriye ne ekilde
sunulacana karar verilmelidir. Kullanclar internet sitesini kullanrken
kendilerine bir hesap aabilirler. Ve siparilerini bu hesap ile yaptklarnda,
kendilerine ait istatistikleri kolayca elde edebilirler. rnein bir kullanc, en ok
hangi kategoride rnleri satn aldn sorgulayabilir. Kullanclar, siparilerini
vermeden nce rnlerle ilgili bilgi almak isteyebilir. Bu rnleri daha nce alan
kullanclarn yazdklar yorumlardan faydalanmalar iin, rn yorumlarnn da
tutulmas gerekir. Ayrca kullancya deiik tarihlerde alan, belli sreli
kampanyalarn sunulmas e-ticaret sitesinin kullanmn artracaktr. Kullanclar
rnleri incelerken, satn almadan nce sepetlere ekleyebilirler. Bylece siteyi
tekrar ziyaret edince, daha nceden inceledikleri ve sepete ekledikleri rnleri
grebilirler.

Kullanclar:
Bu tabloda kullanc hakknda bilgiler tutulur. sim, soyad, e-posta, kayt tarihi
gibi bilgilerin yan sra siteye giri yapmak iin kullanc ad ve parolann da
tutulmas gerekir. Bu parolann deiiklii durumda gvenlik sorusu ve cevab
da ayrca tutulmaldr.
26 Modl 1: Programlamaya Giri

Yorumlar:
Kullanclarn yaptklar yorumlarn bir tabloda tutulmas gerekir. Ancak burada
dikkat edilmesi gereken nokta, bir kullancnn yorum yazmas iin sisteme giri
yapmas gerekmez. Dolaysyla burada kullanclar tablosuna bir referans
gstermeye gerek yoktur. Yorumlar yazan kiileri takma adlar, yazd
yorumlar, tarih ve verdii puan tutulmaldr.
Ayrca yorumun hangi rn hakknda yapldn belirten ve rnler tablosuna
referans gsteren bir Yabanc Anahtaralannn tutulmas gerekir.
Konu: 1 27

Sepetim:
Kullanclarn rnleri inceledikten sonra sepetlerinde saklamas iin
oluturulan bir tablodur. Bu tabloda rn numaras ve kullanc numarasna
referans gsterilmelidir. Bu rnlerin eklenme tarihi ve adeti de tabloda
tutulmaldr.
Kullanclar rnleri, srekli sepete ekleyip kartabilir. karma ileminde,
verinin tablodan silinmesi gerekir. Ancak bir kaydn srekli eklenip silinmesi
performans drr. Dolaysyla rnn sepetten kartldn belirleyen bir
yes/no veri tipinde alan belirlenebilir. Bu alann deeri evet ise rn sepettedir
ve kullancya gsterilir. rnn tekrar ekleme ileminde ise sadece bu alan
gncellenir.

Kampanyalar:
Kullancya sunulan kampanyalar e-ticaret kavramnda nemli bir yer alr. Bu
kampanyalar bir ya da birden fazla rnn belli tarihler arasnda toplam fiyatta
belli bir indirim yaplmasyla gerekleir. Kampanya tablosunda kampanyann
balang biti tarihleri, devam edip etmedii, ve yaplan indirim birer alan
olarak tutulmaldr.
28 Modl 1: Programlamaya Giri

Bu durumda bir kampanyada birden fazla rn olabilir. Bir rn ise birden fazla
kampanya dhilinde olabilir. Dolaysyla ara tablo eklenerek sonsuza sonsuz
bir iliki kurulmaldr.
Konu: 1 29

Modl Sonu Sorular & Altrmalar

zet

Menler
MainMenu, ContextMenu
ToolBar
ToolTip
StatusBar
NotifyIcon
RichTextBox

1. Veritaban ynetim sistemi kavramn ve bu sistemlere neden ihtiya


duyulduunu aklayn.
2. Microsoft Access platformunun avantajlarn aklayn.
30 Modl 1: Programlamaya Giri

3. Microsoft Access'te yer alan veri trlerini ve kullanm alanlarn aklayn.


4. Birincil Anahtar ve Yabanc Anahtar yaplarn ve kullanm alanlarn
aklayn. rnek bir veri taban gelitirin.
Modl 12: SQL Giri

Hedefler

Select cmlesi: Sorgulama


Update cmlesi: Gncelleme
Insert cmlesi: Veri Ekleme
Delete cmlesi: Silme
Join: Tablolar birletirme

SQL dili (Structured Query Language), veritabanlar zerinde sorgu yapmak


iin kullanlan bir dildir. Sorgular, analiz aamalarnda, veri eklerken
gncellerken ve silerken kullanlr. Sorgular tek bir tablo zerinde yaplabilecei
gibi birok tablodan veri okunmay salar. Sorgular zerinde konan kriterler,
detayl veri analizi yapmak iin kullanlr.

Bu modl tamamladktan sonra


Select cmleleri ile tablo sorgulayabilecek,
Kriterler, hesaplama fonksiyonlar kullanarak sorgular
ekillendirebilecek,
Update sorgusu ile tablolar gncelleyebilecek,
Insert sorgusu ile tablolara veri ekleyebilecek,
Delete sorgusu ile tablolardan veri silebilecek,
Join ile birden fazla tabloyu birletirip sorgu altrabileceksiniz.
2 Modl 1: Programlamaya Giri

Access ile Sorgu Oluturmak

Access ile sorgu oluturmak


Tasarm grnmnde sorgu
Sihirbaz ile sorgu

Access ile sorgular grntlemek, oluturmak iin veritaban penceresinden


sorgular sekmesi seilir. Sorgular iki ekilde oluturulabilir.
Tasarm grnmnde sorgu
Sorgular, istenen tablolar ve gerekli alanlar eklenerek oluturulur. Burada
sorgunun farkl grnm ekli vardr. Tasarm grnm, SQL
grnm ve Veri sayfas grnm.

Tasarm grnmnde sorgular, tablolarn grsel olarak eklenip,


alanlarnn seilmesi ile oluturulur. Tablolar balama ilemleri, kriterler ve
alan isimlerinin SQL diline evrilmesi Access tarafndan yaplr.
Konu: 1 3

SQL grnmnde sorgular, SQL cmlesinin kullanc tarafndan yazlarak


oluturulur. Bu modlde sorgular, bu grnmde oluturulacaktr.

Veri sayfas grnmnde, SQL sorgusunu altrldktan sonra verilerin


grnmdr. SQL sorgular altrldktan sonra da bu grnme geilir.

Sihirbaz ile sorgu


Access sihirbaz, tablolar zerinde yaplacak sorgularn kolay ve hzl bir
ekilde oluturulmasn salar.
4 Modl 1: Programlamaya Giri

Select From Where

Select Sorgusu
Tablolardan veri ekmek iin kullanlr.
From ile tablolar belirtilir.
Where ifadesinden sonra kriterler yazlr.

SELECT Alanlar
FROM Tablo smi
WHERE Kriterler

SELECT Urunler.Isim, Urunler.BirimFiyat


FROM Urunler
WHERE Urunler.Isim LIKE '*Studio*'

Select sorgusu tablolardan veri kmesi ekmek iin kullanlan sorgudur.


Sorgunun yaps Select Alanlar From Tablo smi Where Kriterler eklindedir.
Bu cmlede Select kelimesinden sonra gelen alanlar, tablolar oluturulan
kolonlardr. Sonu kmesinde, tablonun hangi alanlar olacan gsterir.
Burada yaplan kolon baznda filtrelemedir.
Konu: 1 5

From ifadesi, sorgunun hangi tablo veya tablolar zerinde yaplacan gsterir.
Where ifadesinden sonra, sorgu kmesinde, verilen kritere uyan satrlar
grntlenir. Bu yaplan satr baznda filtrelemedir.

SELECT * FROM Urunler

Buradaki yldz ifadesi, tm alanlarn listelenecei anlamna gelir.

SELECT
Urunler.Isim,
Urunler.BirimFiyat,
Urunler.EklenmeTarihi
FROM Urunler

Select ifadesinde alanlarn ismi verilirken, hangi tabloya ait olduu da yazlr.
Ancak bu durum tek tablo zerinden yaplan ilemler iin gerekli deildir. Birka
tablo zerinde sorgu yapld zaman, alanlar tablo ismiyle belirtmek gerekir.

SELECT
Isim,
BirimFiyat,
EklenmeTarihi
FROM Urunler

Where ifadesinden sonra yazlan kriterler mantksal karlatrmalardr. Bu


karlatrmalar alanlardaki deerler zerinde yaplr. Karlatrmalar aritmetik
olabildii gibi metinsel de olabilir.
Byk
Alandaki deerin verilen bir deerden veya baka bir alandan byk
olduunu kontrol eder.
SELECT Urunler.*
FROM Urunler
WHERE Urunler.IncelenmeSayisi > 100

Byk Eit
Verilen bir alann veya deerin, kontrol edilen alandan byk veya alana
eit olduunu kontrol eder.
SELECT Urunler.*
6 Modl 1: Programlamaya Giri

FROM Urunler
WHERE Urunler.IncelenmeSayisi >= 100

Kk
Alandaki deerin verilen bir deerden veya baka bir alandan byk
olduunu kontrol eder.
SELECT Urunler.*
FROM Urunler
WHERE Urunler.IncelenmeSayisi < 100

Kk Eit
Verilen bir alann veya deerin, kontrol edilen alandan kk veya alana
eit olduunu kontrol eder.
SELECT Urunler.*
FROM Urunler
WHERE Urunler.IncelenmeSayisi <= 100

Between - And
Alandaki deerin iki deer arasnda olduunu kontrol eder. Deerlere eit
olduklar durumlar da sonu kmesine dhil edilir.
SELECT Urunler.*
FROM Urunler
WHERE Urunler.IncelenmeSayisi BETWEEN 100 AND 200

Not
Verilen kritere uymayan kaytlar dndrr.

SELECT Urunler.*
FROM Urunler
WHERE NOT Urunler.IncelenmeSayisi = 0

Like
Alandaki deerin belirli bir metin biimde olduunu kontrol eder.

SELECT Alanlar FROM Tablo WHERE AlanIsmi LIKE Pattern

Pattern ifadesinde yazlan karakterler, alanlarn iinde kesin olarak


geecek karakterlerdir. rnein Isim LIKE Enis. Ancak baz zel
karakterler farkl anlam ifade ederler. rnein * karakteri sfr veya daha
fazla karakteri temsil eder. Isim LIKE *ni* ifadesi sfr veya daha
fazla karakter ile balayan, ni ile devam eden ve yine sfr veya daha
fazla karakter ile biten kelimeleri kontrol eder. rnein Deniz, Nil, Seni, Ni
deerleri bu biime uyacaktr.

Pattern rnek True deeri False deeri


dndren dndren
rnek rnek
Konu: 1 7

Sfr veya birden Nu* Nuray, Nuri Banu


fazla karakter *
zel Be [*] Be * Beikta
karakterlerin
kullanm
Tek karakter ? ?n an, in ban, anak
Tek Say # Versiyon # Versiyon 5, Versiyon 10,
Versiyon 1 Versiyon
Karakter Aral [a-z] a, b, c 43, 2
Aralk D [!0-9] a, b, c 1, 2, 3

rnek: Microsoft Studio rnlerin listelenmesi


SELECT Urunler.Isim
FROM Urunler
WHERE Urunler.Isim Like '*Studio*'

Is Null
Baz alanlarn deerleri bo braklm olabilir. Bo braklan alanlarn
deerleri Null olarak geer. Sorgularda bo alanlarn kontrol Is Null
ifadesi ile yaplr.
SELECT Urunler.*
FROM Urunler
WHERE Urunler.Ozellikler Is NULL

Bir sorguda birden fazla kriter kullanlabilir. Ancak bu kriterlerin AND veya OR
ifadeleri ile ayrlmalar gerekir. AND ifadesi ile ayrlan kriterlerin hepsinin
saland satrlar sonuca dhil edilir. OR ifadesi ile ayrlan kriterlerin herhangi
biri saland satrlar sonuca dhil edilir.
rnek: 12.12.2002 den sonra kaydolmu, ismi E ile balayan kullanclar.

SELECT *
FROM Kullanicilar
WHERE Kullanicilar.KayitTarihi > #12/12/2002# AND
Kullanicilar.Isim Like 'E*';

E-posta adresi veya web adresi olan firmalar.


SELECT Firmalar.Isim, Firmalar.Email, Firmalar.WebSayfasi
FROM Firmalar
8 Modl 1: Programlamaya Giri

WHERE ((Not (Firmalar.Email) Is Null)) OR ((Not


(Firmalar.WebSayfasi) Is Null));

Hesaplama Fonksiyonlar

Hesaplama Fonksiyonlar
Sum Toplam
Avg Ortalama
Max Maksimum
Min Minimum
Count Sayma

AS anahtar kelimesi ile sonu alanna


mantksal isim verilir.
SELECT Count(KullaniciId) AS [Toplam Kullanc Says]
FROM Kullanicilar;

Alanlar zerinde sayma, toplama, ortalama alma gibi aritmetik ilemlerin yan
sra minimum maksimum deerlerin alnmas gibi ilemler de yaplabilir. Bu
ilemlerin sonucunda saysal bir sonu ortaya kar. Bu say, sonu tablosunda
gsterilirken herhangi bir alan ismi ifade etmez. Dolaysyla sonu tablosunda
saysal deerleri gsterilirken mantksal bir isim verilmesi gerekir. Bu ifade ise
AS anahtar kelimesi ile belirtilir.

Sum
Kriterlerin saland alanlar zerinde toplama ilemi yapar.

SELECT Sum(IncelenmeSayisi) AS [Toplam Incelenme Sayisi]


FROM Urunler WHERE Uretiliyormu = -1;
Konu: 1 9

Avg
Kriterlerin saland alanlarn ortalama deerini alr.

SELECT Avg(Urunler.BirimFiyat) AS [Ortalama Fiyat]


FROM Urunler WHERE Uretiliyormu = -1;

Max
Kriterlerin saland alanlarn maksimum deerini alr. Metinsel deerlerde
alfabetik olarak sralama yapar.

SELECT Max(Isim) AS [En son geen kullanc]


FROM Kullanicilar;

SELECT Max(KayitTarihi) AS [En son kaydolan kullanc]


FROM Kullanicilar;
10 Modl 1: Programlamaya Giri

Min
Kriterlerin saland alanlarn minimum deerini alr.

SELECT Min(Isim) AS [En bata geen kullanc]


FROM Kullanicilar;

SELECT Min(KayitTarihi) AS [lk kaydolan kullanc]


FROM Kullanicilar;

Count
Deeri Null olmayan satrlarn ka tane olduunu verir. Genellikle tablolardaki
satr says istendiinde bu fonksiyon kullanlr. Ancak bu tip bir sorguda,
saylan alann bo bir deer almamas gerekir. Primary Key alannn
zerinden bir saym yaplabilir.

SELECT Count(KullaniciId) AS [Toplam Kullanc Says]


FROM Kullanicilar;
Konu: 1 11

Insert

Insert Sorgusu
Tablolara veri eklemek iin kullanlr.
INSERT INTO Tablo (Alan1, Alan2,)
VALUES (Deer1, Deer2)

INSERT INTO Siparisler (KullaniciId, NakliyeUcreti,


SiparisTarihi, SonOdemeTarihi, Adres )
VALUES (1, 3, '20.05.2005', '25.05.2005', 'Beikta
Istanbul')

Insert Select cmlesi ile birden fazla


satr tabloya eklenir.

Insert sorgular tablolara kayt eklemek iin kullanlr. Bu kaytlar eklenirken


tablo isimi, alan ad ve hangi deerlerin eklenecei belirtilmelidir. Insert
sorgularnda dikkat edilmesi gereken nokta, gerekli olan (Null kabul etmeyen)
alanlara deer eklenmesi unutulmamaldr.
Szdizimi:
INSERT INTO Tablo (Alan1, Alan2,) VALUES (Deer1, Deer2)

Values ifadesinde verilen deerler, tablonun yazlan alanlaryla ayn srada


olmas gerekir.

INSERT INTO Siparisler ( KullaniciId, NakliyeUcreti,


SiparisTarihi, SonOdemeTarihi, Adres )
VALUES (1, 3, '20.05.2005', '25.05.2005', 'Beikta
Istanbul')

Bu tip Insert sorgularnda sadece tek bir deer girilebilir. Ancak baz
durumlarda birden fazla verinin girilmesi istenebilir. Bu durumda, girilecek
deerler Select cmlesiyle baka bir tablodan alnr.
rnek: denen siparilerin tutulduu ayr bir tablo oluturulur. Sipari
tablosundan bu tabloya tm denen kaytlarn aktarlmas ilemi Insert
Select cmlesi ile yaplr.

INSERT INTO OdenenSiparisler ( SiparisId, KullaniciId,


NakliyeUcreti, SiparisTarihi, GonderilmeTarihi, Adres)
12 Modl 1: Programlamaya Giri

SELECT SiparisId, KullaniciId, NakliyeUcreti, SiparisTarihi,


GonderilmeTarihi, Adres
FROM Siparisler
WHERE Odendi = -1;

Update

Update Sorgusu
Tablolarda veri gncellemek iin
kullanlr.

UPDATE Tablo
SET Alan1 = Deer1, Alan2 = Deer2,

UPDATE Kullanicilar
SET ParolaSorusu = 'Yeni Soru', ParolaCevabi = 'Yeni Cevap'
WHERE KullaniciId = 23

Sorgu yazlrken Where kriterinin


unutulmamas gerekir.

Update sorgular tablolarda var olan kaytlarn belirli alanlarnn gncellenmesi


ilemini yapar. Bu sorguda da tablo, alan ve yeni deerlerin belirtilmesi gerekir.
Szdizimi:
UPDATE Tablo SET Alan1 = Deer1, Alan2 = Deer2,

Bu sorguda dikkat edilmesi gereken en nemli nokta, belli kaytlarda


gncelleme ilemi yaplyorsa WHERE kriterinin unutulmamas gerekir. Aksi
halde tablodaki tm kaytlar, sorguda belirlenen deerleri alacaktr.

rnek:
UPDATE Kullanicilar
SET ParolaSorusu = 'Yeni Soru', ParolaCevabi = 'Yeni Cevap'
WHERE KullaniciId = 23
Konu: 1 13

Delete

Delete Sorgusu
Tablolardan veri silmek iin kullanlr

DELETE FROM Tablo

DELETE FROM Sepetim WHERE KullaniciId = 12

Tablodan veri silmek iin kullanlr. Bu sorguda alan isimleri belirtilmez, ancak
WHERE kriterinin unutulmamas gerekir.

Szdizimi:
DELETE FROM Tablo smi

rnek:
DELETE FROM Sepetim Where KullaniciId = 12
14 Modl 1: Programlamaya Giri

INNER JOIN

Inner Join
Tablolar birletirmek iin kullanlr.
Primary Key ve Foreign Key alanlar
zerinden birletirme yaplr.

SELECT Alanlar
FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2
ON isim1.Alan = isim2.Alan

SELECT StokDurumu.Adet, Urunler.Isim

FROM
Urunler INNER JOIN
StokDurumu ON Urunler.UrunId = StokDurumu.UrunId;

Birden fazla tablodan kayt ekilmek istendiinde, bu tablolarn Primary Key


ve Foreign Key alanlar zerinden birletirilmeleri gerekir. Tablolar
birletirmek, birok bilgiyi sonu kmesinde tek bir tablo olarak gstermeyi
salar. rnein bir rnn hangi kategoride olduu bilgisi rnler tablosunda
vardr. Ancak bu deer o kategori numarasn belirttii iin, son kullancya bir
ey ifade etmez. Kategori ismi ise, kategoriler tablosunda durur. Sonu
kmesinden kategori ismini grntlemek iin bu tablolarn birletirilmesi
gerekir.

Szdizimi:
SELECT Alanlar
FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2
ON isim1.Alan = isim2.Alan

Burada tablo isimlerine birer takma isim verilmitir. Bu isimler alanlarn


seiminde yazm kolayl salar. Baz alanlar birbirleriyle ayn isimde olduklar
iin bu alann hangi tabloya ait olduu belirtilmelidir. Alan isimleri

SELECT isim1Alan1, isim1.Alan2, , isim2.Alan1, isim2.Alan2


FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2
ON isim1.Alan = isim2.Alan
ki tablonun birletirme ilemi, ON ifadesinden sonra belirtilen alanlar zerinden
yaplr. Burada, iki tablo arasnda iliki kurulan alanlar belirtilmelidir.
Konu: 1 15

rnek: rnlerin stoklardaki miktarn renmek iin stok ve rnler tablolarn


birletirmek gerekir.

SELECT
StokDurumu.Adet,
Urunler.Isim

FROM
Urunler INNER JOIN
StokDurumu ON Urunler.UrunId = StokDurumu.UrunId;

kiden fazla tablodan bilgi ekmek iin, nce iki tablo birletirilir. Sonu olarak
kan tablo ile de dier tablolar tek tek birletirilir. Birletirme ilemi ((Tablo1 +
Tablo2) + Tablo3) + Tablo4 eklindedir. Inner Join kullanlrken
parantezlerin unutulmamas gerekir.

rnek: Bir kullancnn sepetindeki rnlerin birim fiyatlar sorgulanmak


istendii zaman kullanclar, sepetim, rnler tablolar ilikide olduklar alanlar
zerinden birletirilmelidir.

SELECT
k.Isim,
k.Soyad,
s.Adet,
u.BirimFiyat

FROM
(Urunler u INNER JOIN
Sepetim AS s ON u.UrunId = s.UrunId) INNER JOIN
Kullanicilar AS k ON k.KullaniciId = s.KullaniciId

WHERE k.KullaniciId = 1
16 Modl 1: Programlamaya Giri

Group By

Group By
Ayn verilerin gruplanmasdr.
Hesaplama fonksiyonlar ile kullanlr.
Hesaplama fonksiyonunda
kullanlmayan alanlar gruplanmaldr.
SELECT k.Isim, k.KategoriId,
SUM(u.BirimFiyat) AS [Toplam Fiyat],
COUNT(UrunId) AS [rn Says]

FROM
Urunler u INNER JOIN
Kategoriler k ON u.KategoriId = k.KategoriId

GROUP BY k.KategoriId, k.Isim

Hesaplama fonksiyonlarnn kullanld sorgularda Select ifadesinden sonra


sadece hesaplanan alan sonu kmesine eklenmiti. Ancak ou zaman,
hesaplanan bir alanlar ile birlikte dier alanlarn da sonu kmesinde olmas
istenir.
rnein belli bir kategoride ka tane rnn bulunduu, kategori numaras
sonu kmesinde olacak ekilde isteniyor. Bu durumda, rnler tablosundaki
kaytlarn sayma ileminin gerekletirilmesi iin nce kategori numarasna
gre gruplanmas gerekir.

SELECT
k.KategoriId,
COUNT(UrunId) AS [rn Says]
FROM
Urunler u INNER JOIN
Kategoriler k ON u.KategoriId = k.KategoriId
GROUP BY k.KategoriId

Tablodan kategori numaras dnda baka herhangi bir alan daha isteniyorsa,
bu alan Group By ifadesine ya da bir hesaplama fonksiyonunun iine
alnmaldr.

SELECT
k.Isim,
k.KategoriId,
Sum(u.BirimFiyat) AS [Toplam Fiyat],
Konu: 1 17

COUNT(UrunId) AS [rn Says]


FROM
Urunler u INNER JOIN
Kategoriler k ON u.KategoriId = k.KategoriId
GROUP BY k.KategoriId, k.Isim

Aritmetiksel lemler

Aritmetiksel lemler
Toplama, karma, Blme, arpma

SELECT Urunler.Isim, BirimFiyat * 1.18 AS [KDV Dahil Fiyat]

FROM Urunler

Sorgular srasnda, alanlar zerinde toplama, karma, arpma, blme gibi


aritmetiksel ilemler yaplabilir. Bu ilemler sabit deerler ile yaplabildii gibi
baka alanlardaki deerler ile de yaplabilir.

rnek: Birim fiyatlarnn KDV eklenmi halini gsteren sorgu.

SELECT
Urunler.Isim,
BirimFiyat * 1.18 AS [KDV Dahil Fiyat]
FROM Urunler
18 Modl 1: Programlamaya Giri

SELECT
Sum(BirimFiyat) * 1.18 AS [Toplam rnler Fiyat KDV Dahil]
FROM Urunler

rnek: Stoklarda, rezerve edilmemi toplam rn says

SELECT Urunler.Isim, Sum(StokDurumu.Adet -


StokDurumu.Rezerve) AS [Ak rn Says - Tm Stoklar]
FROM Urunler INNER JOIN StokDurumu ON Urunler.UrunId =
StokDurumu.UrunId
GROUP BY Urunler.Isim;

Toplama ilemi, saylar zerinde yaplabildii gibi metinsel deerler zerinde de


birletirme grevi grr.

rnek: Kullanclarn isim ve soyadlarnn beraber grntlenmesi

SELECT
Kullanicilar.Isim + ' ' + Kullanicilar.Soyad AS [sim Soyad]

FROM Kullanicilar

Modl Sonu Sorular & Altrmalar

zet

Menler
MainMenu, ContextMenu
ToolBar
ToolTip
StatusBar
NotifyIcon
RichTextBox

1. Select ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi


gelitirin.
Konu: 1 19

2. Insert ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi


gelitirin.
3. Update ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi
gelitirin.
4. Delete ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi
gelitirin.
5. Delete ve Update ifadelerini kullanrken dikkat etmemiz gereken noktalar
aklayn.
6. Cascade Delete ve Cascade Update ifadelerini ieren bir veri taban
uygulamas gelitirin ve silme durumunu gzlemleyin.
Modul 1:

ADO.NET
2

Modl 1: Gelitirme Ortamn Tanmak

Bu modlde, Visual Studio .NET ortamn ile tanacak ve ierisinde kullanlan


temel proje bileenleri hakknda genel bilgiler verilecektir. Ayrca alma
zaman hatalarn yakalamay ve uygulamay derlemeyi reneceksiniz.

Bu modl tamamlandktan sonra:


Proje oluturabilecek,
Projeye referans ekleyebilecek,
Projeye isim alan ekleyebilecek,
Proje zelliklerini deitirebilecek,
Dinamik yardm alabilecek,
Proje ierisine grevler ekleyebilecek
alma zaman hatalarn yakalayabilecek,
Uygulamalar derleyebileceksiniz.

ADO.NET
Modl 1: 3

Konu 1: C# .NET ile Proje Oluturmak

C# ortam, C#.NET projelerini kolay bir ekilde oluturma imkan salar.


Projenin almas iin gereken dosyalar otomatik olarak ekler. Projenin
gelitirilme aamasnda yeni bileenlerin eklenmesi, men ve ara ubuklar ile
kolay bir ekilde gerekletirilir.

ADO.NET
4

Proje ablonu Semek

C#.NET ile Windows tabanl, Web tabanl gibi eitli projeler gelitirilebilir. Bu
projeler farkl platformlarda alaca veya farkl amalara ynelik
oluturulaca iin, balang bileenleri farkllk gsterecektir. rnein
Windows tabanl projeler iin Windows formlarnn kullanlmas ve baz
referanslarn eklenmesi gerekir. Visual Studio ortamnn salad ablonlar,
proje dosyalarnn balang kodlarn otomatik olarak yazp gerekli referanslar
ekleyerek gelitiriciye hzl bir balang saar.

Windows Application
Windows tabanl uygulamalar gelitirmek iin kullanlr.
Class Library
Dier projeler iin class ktphaneleri salayan DLL (Dynamic Link Library)
oluturmak iin kullanlr. Bu bileenler projelere Reference olarak eklenerek
tekrar kullanlr.
Windows Control Library
Kullanc tanml Windows kontrolleri oluturmak iin kullanlr. Bu kontroller
Windows uygulamalarnda, birok formda tekrar kullanlmak zere tasarlanr.
Smart Device Application
Mobil cihazlar zerinde uygulama gelitirmek iin kullanlr.
ASP.NET Web Application
IIS (Internet Information Services) zerinde alacak Web uygulamalar
gelitirmek iin kullanlr.
ASP.NET Web Service

ADO.NET
Modl 1: 5

Web uygulamalarna XML Web Service salayan projeler gelitirmek iin


kullanlr. Oluturulan bu projeler, dier uygulamalara Web Reference olarak
eklenir.
Web Control Library
Web uygulamalarnda, kullanc tanml kontroller oluturmak iin kullanlr.
Console Application
Komut penceresinde alacak konsol uygulamalar gelitirmek iin kullanlr.
Windows Service
Windows altnda srekli alan uygulamalar iin kullanlr. Bu uygulamalar,
kullanclarn sisteme giri yapmad durumlarda da almaya devam eder.
Other Projects
Enterprise Applications (irket uygulamalar), Deployment Projects (Ykleme
projeleri), Database Projects (Veritaban projeleri) gibi deiik ablonlardr.
Empty Project
Herhangi bir ablon uygulanmadan alan Windows projelerdir. Balang
nesnesi ve referanslar eklenmez.
Empty Web Project
Herhangi bir ablon uygulanmadan alan Web projelerdir. Bu proje IIS
zerinde tanmlanr ancak form ve referans nesneleri eklenmez.
Blank Solution
Balang olarak bir proje almaz. Bo bir solution dosyas alr. stenen
projeler, Add New Project komutu ile bu solution iine dhil edilir.

Visual Studio ile yeni bir proje birka admda oluturulabilir.


1. File mensnden New alt mensne iaret edin ve Project
komutunu sein.
2. New Project penceresinden Visual C# Projects tipini ve
almak istediiniz ablonunu sein.
3. Name zelliine projeye vereceiniz ismi yazn.
4. Location zellii projenin dosyalarnn bulunaca yeri belirler.
Browse dmesine basarak Windows dizinine ulan ve projenin
yerini sein.
5. More dmesine basld zaman, solution dosyas iin yeni bir isim
kullanlmas ve ayr bir klasr almasn salayan panel grntlenir.
Solution iin farkl bir isim vermek iin Create directory for
Solution seeneini iaretleyin ve metin kutusuna solution iin
yeni bir isim yazn.
6. OK tuuna basld zaman proje alr. Solution iin ayr bir klasr
seilmemise, proje dosyalar proje ismi ile oluturulan klasr altnda
oluturulur.

ADO.NET
6

Proje Dosyalarna Genel Bak

Visual C# .NET ile oluturulan bir projenin almas iin gereken baz dosyalar
vardr. Bu dosyalarn birou, projenin tipine gre farkllk gsterir. Yeni bir proje
aldnda, projeye verilen isim ile bir klasr alr ve proje dosyalar bu klasr
altna yerletirilir.
Solution Dosyalar (.sln, .suo)
Visual C# .NET projeleri bir solution dosyas (.sln) altnda oluturulur.
Solution dosyas farkl projeleri bir arada tutar ve birden fazla projeyi
ierisinde barndrr. Visual Studio ile proje oluturulurken solution dosyas
otomatik olarak eklenir.
Solution User Option (.suo) dosyalar, kullancnn solution ile alrken
yapt ayarlar tutar ve proje tekrar ald zaman bu ayarlar getirir.
Project Dosyalar (.csproj, .csproj.user)
Bir projenin iinde bulunan bileenlerin, eklenen referanslarn tutulduu proje
dosyasdr. Visual C# projeleri .csproj uzantl dosya ile oluturulur. Bu dosya
ayn zamanda, bir solution iinde farkl dilde ve tipteki projeleri ayrt etmek
iin kullanlr. Projeye zg ayarlar ise .csproj.user dosyasnda tutulur.
Yerel Proje Dosyalar (.cs)
Form, class gibi bileenlerin tutulduu dosyalardr. Bir .cs uzantl dosya
iinde birden class tutulabilir. Ancak projedeki her form iin ayr bir .cs dosyas
oluturulur.
Web Projeleri Dosyalar (.aspx, .asmx, .asax)
Web uygulamalarnda oluturulan dosyalar Web sunucusunda (ISS) tutulur. Bu
dosyalar web formlar iin .aspx, Web Service iin .asmx, global snf iin .asax
uzantsna sahiptir.

ADO.NET
Modl 1: 7

Proje oluturulduktan sonra yeni nesnelerin eklenmesi Project mens ile ya


da Solution Explorer paneli kullanm ile gerekleir. Project mensnden
yeni bir form, module, class, component, user control eklemek iin
ilgili men komutu seilebilir. Add New Item komutu ile farkl tipte birok dosya
projeye dhil edilebilir.

Assembly Nedir?

Visual Studio .NET ortamnda gelitirilen uygulamalar derlendiinde, .exe veya


.dll uzantl dosyalar oluur. .NETin otomatik olarak oluturduu bu dosyalara
assembly denir. Assembly ierisinde dosyaya ait balk, aklama ve telif hakk
gibi kritik bilgiler tutulur.

Visual Studio .Net ierisinde gelitirilen bir projeye, farkl kiiler tarafndan
gelitirilmi assemblyler eklenebilir. zellikle gelimi projelerde assemblyler
ayr programclar tarafndan yazlarak ortak bir proje altnda toplanabilir.

ADO.NET
8

Projeye Referans Eklemek

Herhangi bir projenin ierisine, bileen ktphanelerinin eklenmesi iin


kullanlr. Bu bileen ktphaneleri, .NET ve COM bileenlerden oluur.

Projeye referans eklemek iin belirtilen admlar takip edin.


1. Solution Explorer penceresinden References mens sein. References
mensne sa tklayn.
2. Alan menden Add Reference komutunu verin.
3. Alan pencere zerinden .NET, COM, Projects sekmelerinden herhangi birini
sein.
.NET, projeye NET bileen ktphanelerini eklemek iin kullanlr.
COM, projeye COM bileen ktphanelerini eklemek iin kullanlr.
Projects, proje ile ayn solution ierisinde yer alan bileen ktphanelerini
eklemek iin kullanlr.
4. Eklenecek assembly nesnesini sein ve Select dmesini tklayn. Birden fazla
assembly semek iin ayn ilemi tekrar edin.
5. Referans ekleme ilemini tamamlamak iin OK dmesine tklayn.

Proje ablonlar ierisinde en ok kullanlan referanslar unlardr:

ADO.NET
Modl 1: 9

System: Programn almas iin gerekli en temel referanstr. System.dll


ktphanesi ierisinde tutulur.
System.Data: Veritaban balantlarnn yaplmas iin gerekli referanstr.
System.Data.dll ktphanesi ierisinde tutulur.
System.Drawing, System.Windows.Forms: Windows form ve kontrollerini
ieren referanstr. System.Drawing.dll ve System.Windows.Forms.dll
ktphaneleri ierisinde tutulur.
System.XML: XML teknolojisinin kullanlmasn salayan referanstr.
System.XML.dll ktphanesi ierisinde tutulur.

ADO.NET
10

sim Alan (Namespace) Nedir?

.NET ierisindeki tm ktphaneler, .NET Framework ismi verilen ortak at


altnda toplanr. Bu at altndaki tm ktphaneler amalarna gre
namespace denilen isim alan altnda gruplandrlr. Bu isim alan ierisinde
snflar, ara yzler ve modller bulunur.

.NET ierisinde veritaban uygulamalar gelitirmek iin System.Data.dll


ktphanesine ihtiya duyulur. Bu ktphane Visual Studio .NET ierisindeki
tm proje ablonlarnda otomatik olarak yer alr. System.Data.dll
ktphanesi ierisinde;
System.Data
System.Data.Common
System.Data.SqlClient
System.Data.OleDb
System.Data.SqlTypes
System.Xml

isim alanlar yer alr.

ADO.NET
Modl 1: 11

Yeni sim Alan Eklemek

Yeni isim alan oluturmak iin namespace anahtar kelimesi kullanlr.

namespace Isimalani_ismi
{
...
}

rnekte NSBilgeAdam isminde bir isim alan tanmlanmtr. Bu isim alan


ierisine Egitim ve Ogrenci isminde snflar eklenmitir.

namespace NSBilgeAdam
{

// BilgeAdam isim alannda kullanlacak


//Snf, Modul ve Arayzler tanmlanr

class Egitim
{
//...
}
class Ogrenci
{
//
}

// vs...
}

BilgeAdam isim alan iindeki Ogrenci snfn kullanmak iin, snf ismini, isim
alan ile birlikte belirtilmelidir.

ADO.NET
12

bilgeadam.NSbilgeadam.Ogrenci yeniogrenci;
yeniogrenci = new bilgeadam.NSbilgeadam.Ogrenci() ;

UYARI: Proje ile ayn isimdeki bir isim alan .NET derleyicisi tarafndan yeni oluturulan
tm projelere eklenir. Bu genel isim alanna kk isim alan (root namespace) denir.
Dolaysyla kendi oluturulan isim alanlarn, kk isim alann ile birlikte belirtilmelidir.

Herhangi bir isim alan ierisinde birden fazla isim alan tanmlanabilir. rnekte
NSBilgeAdam isim alan ierisinde Idari, Egitim ve Ogrenci adnda ayr
isim alan eklenmitir.

namespace NSBilgeAdam
{
// BilgeAdam isim alannda kullanlacak
// Class, Module ve Interfaceler tanmlanr
namespace Idari
{
class Personel
{
}
}
namespace Egitim
{
class Grup
{

}
}
namespace Ogrenci
{
class Bilgi
{

}
}
// vs...
}

ADO.NET
Modl 1: 13

Projeye sim Alan Dhil Etmek

Bir isim alan ierisinde yer alan snflar tanmlamak iin, snfn bulunduu
ktphanenin yolunu eksiksiz olarak belirtmek gerekir. Ancak bu ekilde
kullanmlar, kodun okunmasn olduka zorlatrr. rnekte snflar bu yntemle
tanmlanmtr.

bilgeadam.NSbilgeadam.Idari.Personel kisi1;
kisi1 = new bilgeadam.NSbilgeadam.Idari.Personel();
bilgeadam.NSbilgeadam.Ogrenci.Bilgi Ogrencibilgi;
ogrencibilgi = new bilgeadam.NSbilgeadam.Ogrenci.Bilgi();

Her snf iin ktphane yolunun tekrarn ortadan kaldrmak iin, using
anahtar szc kullanlr. using szc ile eklenen isim alanlarnn
nesnelerine, proje ierisinden dorudan eriilebilir.

rnekte NSBilgeAdam isim alannn projeye dhil edilmesi gsterilmektedir.

using bilgeadam.Nsbilgeadam;

NSBilgeAdam isim alannda bulunan bir snf kullanmak iin sadece ismini
yazmak yeterli olacaktr.

Ogrenci.Bilgi ogrenciBilgi = new ogrenci.Bilgi();

ie isim alannn kullanmnda, iteki isim alanna kolayca erimek iin


ksaltmalar kullanlabilir. rnekte, NSBilgeAdam isim alan ierisindeki Ogrenci
isim alanna eriim gsterilmektedir

ADO.NET
14

using ogr = bilgeadam.NSBilgeadam.Ogrenci;

Public Class Form1:System.Windows.Forms.Form


{
// ...
ogr.Bilgi OgrBilgi = new ogr.Bilgi();
}

Proje zelliklerini Ayarlamak

Projenin genel davranlarn ve konfigrasyon zelliklerini deitirmek iin


Property Page penceresi kullanlr.

Proje zelliklerini deitirmek iin belirtilen admlar takip edin.

1. Proje isminin zerinde farenin sa butonunu tklayn.


2. Alan menden Properties komutunu verin.
3. Alan Property Page penceresi zerinde Common Properties (Genel
zellikler) ve Configuration Properties (Konfigrasyon zellikleri)
sekmelerinden herhangi birini sein.
4. Genel zellikler, projenin genel davranlarn deitirmek iin kullanlr.
5. Konfigrasyon zellikleri, Hata ayklama ve Derleme seeneklerinin deitirilmesi
iin kullanlr.
6. Proje zelliini deitirdikten sonra OK butonunu tklayn.

En ok kullanlan proje zellikleri unlardr:

ADO.NET
Modl 1: 15

Assembly Name: Derlenen uygulamann exe veya .dll uzantl kt dosyasnn


adn belirler.
Root Namespace: Kk isim alann belirler. Varsaylan olarak projenin ismi gelir.
Project Output Type: Derlenen uygulamann hangi tipte assembly
oluturacan belirler. Bu tipler Windows, konsol uygulamalar ya da snf
ktphaneleri (.dll) olabilir.
Startup Object: Uygulamann hangi formdan veya modlden almaya
balayacan belirtilir.

ADO.NET
16

Konu 2 : Proje Bileenlerini Tanmak

Solution Explorer Kullanmak

Solution Explorer paneli, bir solution iindeki tm dosyalar grntler.


Solution iinde birden fazla proje bulunabildii iin, bu projeler sral bir

ADO.NET
Modl 1: 17

ekilde listelenir. Koyu renkle gsterilen proje, solution iinde ilk altrlacak
projedir.
Bu panel ile solution iine proje ekleme silme, projelere yeni nesne ekleme
silme ilemleri gerekletirilir.

Panelin st tarafnda buluna ara ubuu, dosyalar zerinde baz ilemlerin


gerekletirilmesi iin ksa yollar sunar. rnein ara ubuundan Show All
Files komutu seildii zaman, projelerin bulunduu klasrdeki tm dosyalar
gsterilir. Solution Explorer panelinde beyaz ile gsterilen nesneler projeye
dhil edilmemitir. rnein, proje klasrnde bulunan bir resim dosyasn
projeye dhil etmek iin, resme sa tklayp Include In Project komutu
verilmelidir.

Solution Explorer panelini grntlemek iin View mensnden Solution


Explorer komutunu verin.

Object Browser Kullanmak

Object Browser, Visual Studio .NET ierisindeki ktphane ve isim


alanlarn tm alt eleriyle ile beraber hiyerarik ekilde listeler.

Object Browser grntlemek iin, View Penceresinden Object Browser


komutunu verin.

Object Browser pencerenin sol st kesinde Browse alan Selected


Components seenei ile birlikte varsaylan olarak grnr. Bu seenek ile

ADO.NET
18

projeye dhil edilen referanslar ve bu referanslarla ilikili isim alanlar hiyerarik


bir ekilde listelenir.

Objects paneli ierisinden seilen herhangi bir isim alan geniletilirse, iindeki
tm eler hiyerarik ekilde listelenir. Bu elerin herhangi biri seildiinde, o
eye ait tm alt eler Members penceresinde listelenir.

Objects penceresinin sa alt kesinde ise, seilen enin tanmn ve hangi


isim alannn altnda olduu gsterilir.

Server Explorer Kullanmak

Server Explorer, Visual Studio .NET ortam ierisinde veri salayclarla


almay kolaylatrmak iin tasarlanm bir aratr. Ayrca Server Explorer
sunucu makine bileenlerinin ynetimi ve kullanmn salar.

Server Explorer, Data Connections ve Servers olmak zere iki sekmeden


oluur. Veri salayclar ile almak iin Data Connections seenei
kullanlr.

Yeni bir veri salayc oluturmak iin belirtilen admlar takip edin.

1. Server Explorer zerinden Data Connections seeneini sein.


2. Data Connections seenei zerinde farenin sa butonunu tklayn. Alan
menden Add Connection komutunu verin.
3. Alan Data Link Properties penceresinden balant oluturulur.

ADO.NET
Modl 1: 19

Servers sekmesinin altndaki SQL Servers mensn kullanarak, veritaban


ilemleri yerine getirilebilir ve veritaban nesneleri, srekle brak metodu ile form
zerine srklenebilir.

Dinamik Yardm Almak

Visual Studio .NET, ierisinde ok fazla konuyu barndrd iin tmne hakim
olmak neredeyse imknszdr. Bu nedenle yazlm gelitiricilerin iini
kolaylatrmak iin, Visual Studio .NET ierisinde dinamik yardm ktphanesi
oluturulmutur. Dinamik yardm, uygulama gelitirirken yazlan koda gre tm
yardm konularn listeler.

PUCU: Dinamik yardm aktif hale getirmek iin, Help mensnden Dynamic Help
komutunu tklayn.

ADO.NET
20

Grev Listesini Kullanmak

Grev Listesi, aktif proje ierisine grev eklemek iin kullanlr. Bu grevler
uygulama geliiminin takip edilmesini salar. Grev Listesi iersine eklenen
tm grevleri nem srasna gre sralanabilir.

Grev Listesi aracn proje ortamnda aktif hale getirmek iin View mensnn
Other Windows alt mensnden Task List komutunu tklayn.

Grev Listesi arac zerinde Click here to add a new task alan
tklanarak yeni grev eklenebilir. Biten grevin nndeki onay kutusu
tklanarak, grev sonlandrlabilir.

ADO.NET
Modl 1: 21

Konu 3: Uygulamalarda Hata Ayklama

Uygulamalarn gelitirme srasnda birok hata ile karlalr. Bu hatalarn ou


alma zamannda ortaya kt iin, kodun yazlmas srasnda hatann
kaynann anlalmas zordur. Hata reten kod satrlarn, hatalarn nedenini
anlamak iin Visual Studio Debug (Hata ayklama) arac kullanlr.

Visual Studio Debug arac


Kodlar arasna BreakPoint konarak, almann istenen satrda
durmasn,
Kodlar arasnda ilerlerken Debug panelleri ile deikenlerin
deerlerinin gzlenmesini,
Command paneli ile alma annda komut altrlmasn,
deikenlerin deerlerinin deitirilmesini salar.

ADO.NET
22

BreakPoint

BreakPoint kullanm, uygulamann almasnn istenen kod satrnda


durdurulmasn salar. alma, bir artn gerekletii durumda da
durdurulabilir. rnein bir deikenin, belli bir deeri ald kod satrnda
uygulamann durmas istenebilir.

stenen bir kod satrna BreakPoint koymak iin, kod sayfasnn sol tarafnda
bulunan panele tklanr ya da F9 tuuna baslr.

Belirtilen bir art gerekletikten sonra almann durmas isteniyorsa,


Breakpoint zerine sa tklanp BreakPoint Properties komutu verilmelidir.
kan pencerede Condition dmesine baslarak BreakPoint Condition
penceresi alr. Bu pencerede bir deikenin istenen bir deeri aldktan sonra
almann durmas belirtilir.

ADO.NET
Modl 1: 23

almann, artn belli bir say kadar saland zaman durdurulmas iin,
BreakPoint Properties penceresinde Hit Count dmesine baslr.
BreakPoint Hit Count penceresinde, artn gerekleme says girilir.
rnekte, BreakPoint be defa veya daha fazla ulald zaman durulmas
belirtilir.

Debug Panelleri

alma durdurulduktan sonra, deikenlerin o andaki durumlar Debug


panelleri ile gzlemlenir. Bu paneller ancak hata ayklama srasnda
kullanlabilir. Debug panelleri, Debug mens altnda Windows mensnden
seilebilir.
Autos

ADO.NET
24

almakta olan satrla, bir nceki ve bir sonraki arasnda kalan deikenleri
listeler.
Locals
allan kapsam iindeki tm deikenleri listeler. Bu kapsam bir modl,
yordam veya dng olabilir.
Watch
Deeri incelenmek istenen deiken veya zellikler, bu panele yazlarak
eklenir.

alma durdurulduktan sonra kodlar arasnda ilerlemek gerekir. Kodlar


arasnda ilerlemenin, yordamlarn iine girilmesi, zerinden atlanmas gibi
birok yol vardr.

1. Step Into
altrlan kod eer bir yordam veya fonksiyon ise bu yordam veya
fonksiyonun iine girilir ve hata ayklamaya devam edilir.
2. Step Over
Bir yordam veya fonksiyon iine girilmeden ilerlenir.
3. Step Out
Bir yordam veya fonksiyon iinde ilerleniyorsa, buradan klarak yordam veya
fonksiyonun arld yere dnlr.
4. Continue
Bir sonraki BreakPoint satrna gidilir. Eer baka bir BreakPoint
konmamsa, uygulama normal almasna devam eder.

ADO.NET
Modl 1: 25

Command Panelini Kullanmak

Command paneli iki farkl modda kullanlr.


Immediate
Bu modda, deiken deerleri deitirebilir, .NET Framework snflarndaki
metotlar veya kullanc tanml metotlar altrlabilir. Immediate moduna
gemek iin immed komutu kullanlr.
Immediate modunda bir deikenin deeri ? ile renebilir ve yeni deer
atanabilir.

?sayi
40
sayi = 50
?sayi
50

Command
Bu modda, Visual Studio ortamnda tanml veya kullanc tanml
makrolar, men eleri kullanlabilir. Command moduna gemek iin >cmd
komutu kullanlmaldr.

>cmd
>Debug.StepOver
>Help.About

ADO.NET
26

Konu 4: Uygulamann Derlenmesi

Derleme Seeneklerine Bak

C# .NET ile gelitirilen uygulamalar altrlmadan nce derleme ileminden


geer. Derleme ilemi ile kodun C# sz dizimine uygun yazlp yazlmad
kontrol edilir ve kod altrlmak zere makine diline evrilir.

ADO.NET
Modl 1: 27

Uygulamalar derlenmesi Build mensnden yaplr.


Build Solution
Solution iindeki, son derleme ileminden sonra deien projelerin
derlenmesini salar.
Rebuild Solution
Solution iindeki tm projelerin tekrar derlenmesini salar.
Build Proje smi
Belirtilen projenin, son derleme ileminden sonra deien bileenlerinin
derlenmesini salar.
Rebuild Proje smi
Belirtilen projenin tm bileenlerinin tekrar derlenmesini salar.

Uygulama derlendikten sonra bulunan hatalar Task List panelinde


grntlenir. Task List panelinde grntlenen hatalara ift tklanarak,
hatann yapld satra ulalr.

NOT: C# .NET ile uygulama gelitirirken yaplan sz dizimi hatalar hemenTask List
paneline yansr. Buna Background Compiling denir.

ADO.NET
28

Modl zeti

1.
Assembly nedir?
2. sim Alan nedir?
3. Object Browser niin kullanlr?
4. Server Explorer ne ie yarar?
5. alma zaman hatalarn yakalamak iin neler yaplr?
6. Proje nasl derlenir?

ADO.NET
Modl 1: 29

LAB1 : Gelitirme Ortamn Tanmak

Uygulama1

Windows Uygulamas Oluturmak


Bu uygulamada Windows Application kullanarak ar Merkezi (Call Center)
isminde bir uygulamas oluturacaz.

ar Merkezi uygulasn oluturmak


1. Visual Studio .Neti kullanarak ar Merkezi isminde uygulama oluturmak.
File mens altndan New alt mensn iaret edin ve Project komutunu
tklayn.
New Project ileti kutusundan Windows Application ablonunu sein.
Name metin kutusuna CagriMerkezi yazn.
Location metin kutusuna C:\Proje yazn ve OK butonunu tklayn
2. Uygulamann Assembly Name Cagri ad ile deitirmek.
Proje isminin zerinde farenin sa butonunu tklayn.
Alan menden Properties komutunu verin.
Alan pencere zerinden Common Properties (Genel zellikler) klasrn
sein
Common Properties klasr altndaki General sekmesi ierisinden Assembly
Name metin kutusuna Cagri yazn ve OK butonunu tklayn.

ADO.NET
30

Uygulama 2

Object Browser Kullanmak


Bu uygulamada Object Browser kullanarak System.Data ktphanesini
inceleyeceiz.

System.Data ktphanesini amak


1. View mens ierisinden Object Browser alt mensn sein.
2. Object paneli ierisindeki System.Data ktphanesini geniletin.
3. System.Data Ktphanesi ierisindeki System.Data.OleDb isim alann
geniletin.
4. System.Data.OleDb isim
alann ierisindeki OleDbConnection,
OleDbCommand, OleDbDataReader, OleDbDataAdapter snflarn inceleyin.

Uygulama 3

Debug Aracn Kullanmak


Bu uygulamada ar merkezi veritabanna balant alan kodlar Debug
kullanarak incelenir.

Kodlarn yazlmas
1. Form1 nesnesinin kod sayfasna gein ve OleDbConnection
oluturan bir fonksiyon yazn.

ADO.NET
Modl 1: 31

private System.Data.OleDb.OleDbConnection ConnectionOlustur


(string connectionString)
{
return new
System.Data.OleDb.OleDbConnection(connectionString);
}

2. Formun zerine ift tklayarak Load olayna gelin. Load olaynda, veri
tabanna balant aan kodlar yazn. Bu veri taban
C:\Proje\CagriMerkezi klasr altnda bulunacaktr.

System.Data.OleDb.OleDbConnection con = new


System.Data.OleDb.OleDbConnection();

// Connection oluturan fonksiyon arlr

con =
ConnectionOlustur(@"data
source=C:\Proje\CagriMerkezi\CagriMerkezi.mdb;Provider=Micro
soft.Jet.OleDB.4.0");

con.Open();

// Veritaban ilemleri ilerleyen modllerde


// anlatlacaktr. Bu ksm bo brakn.

con.Close();

Hata ayklama
1. Formun Load metoduna bir BreakPoint yerletirin.
2. Projeyi F5 ile altrn. Balang formu yklendii zaman Load olay
alaca iin, alma belirtilen noktada durur.
3. Debug mensnden Step Into komutunu seerek ya da F11 tuuna
basarak kod iersinde ilerleyin. ConnectionOlustur isimli metodun
iine girildii grlr.
4. ConnectionOlustur metodundan kldktan sonra, Locals panelini
an ve con isimli deikeni inceleyin.
5. Command panelini an ve immed komutunu yazarak, Immediate
moduna gein.
6. Command paneline con.State yazarak Connection nesnesinin State
zelliini renin.
7. Debug mensnden Continue komutunu vererek ya da F5 tuuna
basarak almann ilerlemesini salayn.
8. Formu kapatarak uygulamay sonlandrn.
9. con.Open() kodunun bulunduu satra BreakPoint koyun ve sa
tklayarak BreakPoint Properties komutunu verin.
10. Condition dmesine tkayn ve metin kutusuna con.State = 1
yazn. con nesnesinin State zellii 1 (balant ak) olduu zaman
almann durmas ayarlanr.

ADO.NET
32

11. OK tuuna basn ve projeyi altrn. almann belirtilen noktada


durmad gzkr. Bunun nedeni, BreakPoint iinde verilen artn
salanmamasdr.
12. Formu kapatarak uygulamay sonlandrn ve Visual Studio ortamndan
kn.

ADO.NET
Modul 1:

ADO.NET
34

Modl 2: Veri Merkezli Uygulamalar ve


ADO.NETe Giri

Bu modlde verilerin hangi ortamlarda depolandn reneceksiniz. Ayrca


depolanan veriye erimek iin kullanlan yntemleri renecek ve ADO.NET
teknolojisi hakknda bilgi sahibi olacaksnz.
Bu modln sonunda:

ADO.NET
Modul 2: 35

Veri depolama yntemlerini renecek,


Balantl ve Balantsz veri ortamlarn renecek,
Veri eriim yntemlerini renecek,
ADO.NET nesne modelini renecek,
ADO.NET nesne modelinde veri salayclarn seebileceksiniz.

ADO.NET
36

Konu 1: Veri Merkezli Uygulamalar

Veri Depolama

Gnmzde verileri saklamak iin eitli teknikler kullanlr. rnein bir emlak
emlak alm, satm bilgilerini dosya ktlar zerinde depolayabilir. Bu yntem
veri arama ve listeleme ilemlerinin karmak hale gelmesine ve arama

ADO.NET
Modul 2: 37

sresinin uzamasna sebep olur. Hatta daha byk organizasyonlarda


ilemlerin yavalamasna ve durmasna sebep olabilir.

Artan ihtiyalar dorultusunda veri depolamak ve depolanan veriye erimek


iin eitli veri depolama yntemleri gelitirilmitir. Bu yntemler:

Yapsal Olmayan: Bu yntem ile depolanan veriler iin belirli bir


snflandrma ve sralama yoktur. Veriler dz bir ekilde kaydedilir.
rnein basit not dosyalar.
Yapsal: Bu yntem ile depolanan veriler eitli gruplara ayrlarak
saklanr fakat bu gruplar arasnda bir alt-st ayrm yaplmaz. rnein
virglle ayrlm dosyalar (csv), Excel belgeleri.
Hiyerarik: Hiyerarik depolama yntemini aa yapsna
benzetebiliriz. Bu yntemde veriler eitli kategorilere blnerek
depolanr. Her bir kategorinin ierisinde alt kategorilerde olabilir.
rnein XML (eXtensible Markup Language) dosyalar.
likisel Veritaban: likisel veritabanlarnda veriler tablolar zerinde
depolanr. Tablo ierisindeki her bir satr kayd, her bir stun ise veriyi
ifade eder. rnein SQL Server, Oracle, Access.
Nesne Ynelimli Veritaban: En gelimi veri depolama yntemidir.
Bu yntemde veriler; ihtiyaca gre gruplandrlarak, nesneler
ierisinde saklanr. rnein Versant, AOL

ADO.NET bu depolama tekniklerinin tmn destekler.

ADO.NET
38

Balantl (Connected) Veri Ortamlar

Balantl veri ortamlar, uygulamalarn veri kaynana srekli bal kald


ortamlardr. Bu ortamlarda veri alma ve deitirme ilemleri uygulama ile veri
kayna arasnda balant kurulduktan sonra gerekletirilir. Balantl veri
ortamlarnda, veri ilemleri gerekletii srece balant ak kalr.

lk bilgisayar retiminden bugne en ok tercih edilen yntem balantl veri


ortamlar olmutur. Balantl ortamlar veriye erimek iin birok avantaj salar.

Avantajlar:
En gvenli veri ortamdr.
Veri kaynana yaplan e zamanl eriimlerde, veri kaynann
kontroln kolaylatrr.

Dezavantajlar:
Uygulama ile veri kayna arasnda gerekleen balanty
koruyabilmek iin sabit bir a balantsnn olmas gerekir.
Uygulama ile veri kayna arasndaki balant a zerinden
gerekletii iin, a trafiinin younluunu artrr.

rnein araba reten bir fabrikada yaplan retim bilgilerinin dier birimlere
ulatrlmas ve bu kaytlarn depolanmas iin ezamanl bir balant kurulmas
gereklidir. Ya da bir emlak firmasnda emlaknn, mlk ve menkul bilgilerini
gncel tutabilmesi iin sabit bir balant kurmas gereklidir.

ADO.NET
Modul 2: 39

Balantsz (Disconnected) Veri Ortamlar

Balantsz veri ortam, uygulamann veri kaynana srekli bal kalmad


veri ortamdr. Uygulama ile veri kayna arasnda balant, veri al verii
yaplrken alr ve ilem bittikten sonra kapatlr. Bu veri ortamlar evrimd
almak iin kullanlr.

Teknolojinin ilerlemesi ve veri depolayan aralarn tanabilirliinin salanmas


ile tm dnyada evrimd ortamlara duyulan ihtiya artmtr. Laptop,
Notebook ve Pocket PC gibi aralarn yaygnlamas ile gnmzde
uygulamann veri kaynana bal olmad durumlarda bile veri girii
yaplabilir.

Uygulamada sadece evrimii veya evrimd ortamlardan birini semek


yeterli olmayabilir. Gelimi uygulamalarda her iki ortamn avantajlarn
birletiren bir zm tercih edilebilir.

Avantajlar:
Laptop, Notebook ve Pocket PC gibi aralarla girilen veriler, istenilen
zamanda veri ortamlarna aktarlabilir.
evrimd ortamlar sayesinde, verilerin depoland uygulama
zerindeki yk hafifletilir. Bu durum performans artn salar.

Dezavantajlar:
Balantsz veri ortamlarnda, verilerin gncel kalmasna dikkat
edilmelidir. Bu ortamlarda veri gncelleme ilemleri farkl zamanlarda

ADO.NET
40

gerekletirilebilir. Veri zerinde yaplan bu deiimlerin, dier


kullanclara gsterilebilmesi iin eitli zmler gelitirilmelidir.
Balantsz veri ortamlar ierisinde farkl kullanclar ezamanl
gncelleme ilemleri gerekletirebilir. Bu durumda oluacak veri
akmalarnn engellenmesi gerekir.

rnein bir toptanc firmasnda, firma alanlar farkl konumdaki bayilerinin


tm siparilerini bir el bilgisayarna kaydedebilir. Bu veriler el bilgisayarnda
geici bir sre iin depolanr. Bu sre alanlarn sahada kald sredir. Sre
sonunda veriler sunucu bilgisayara aktarlr.

ADO.NET
Modul 2: 41

Veri Eriim Yntemleri

lk bilgisayardan bugne veriye erimek iin pek ok yntem gelitirilmitir. Bu


yntemlerin bazlarnda ama yerleim, bazlarnda ise paylam olmutur.
Amacn veriyi saklamak olduu durumlarda paylam konusunda zm
aranm, amacn veriyi birok kullanc arasnda paylamak olduu durumda
ise ana verinin nerede saklanaca konusunda zm yollar aranmtr.

ADO.NET
42

Kullanc saysnn ve verinin boyutunun artmasyla, veri eriimi iin bilinen


modeller de olduka gelimitir. Birebir veri paylam yerine, internet zerinden
oklu kullanc desteine ak veri eriim modelleri gelitirilmitir. Gnmzde
gelinen son nokta ise, her an her yerden veriye kolayca erimemizi salayan
XML Web Servis modelidir.

Veri merkezli uygulamalar gelitirmek iin veri eriim modelleri kullanlr. Bir veri
eriim modelinde ki mantksal her birime katman (tier) denir. Veri merkezli bir
uygulamada katman says makine saysna bal deildir. Katman saysn
veri eriim modelindeki dzeyler belirler.


stemci Katman (Client tier): Sunum ya da kullanc servis katman
olarak da bilinir. . Bu katman kullanc ara yzn iermektedir.
Katman (Business tier): Bu katman, uygulamann veri kayna ile
etkileen blmdr.
Veri Katman (Data tier): Veriyi ieren katmandr.
Birlikte alabilirlik Katman (Interoperability tier): Platform ve
dilden bamsz, her tr veriye etkileim salayan katmandr. Bu
katmana herhangi bir iletim sistemi zerinde bulundurulabilen XML
Web Servislerini rnek verebiliriz.

ADO.NET
Modul 2: 43

Uygulamalar, katmanlara blnerek leklenebilirlii artrlr.

NOT: Katman says arttka, veri eriim modelinin leklendirebilirlii ve karmakl da


artar.

ADO.NET
44

Konu 2: ADO.NETe GR

ADO.NET Nedir?

ADO (ActiveX Data Objects), farkl veri kaynaklarna hzl ve gvenli eriim
iin Microsoft tarafndan gelitirilen nesne modelidir. ADO.NET ise ADO
teknolojisinin en yeni versiyonudur. ADO ile ayn programlama modelini

ADO.NET
Modul 2: 45

kullanmamakla birlikte, ADO modelinden gelen pek ok zm yolunu da


beraberinde getirir.

Uygulama geliim ihtiyac arttka, yeni uygulamalarda Web uygulama


modeline olan ballk gittike azalmaktadr. imdilerde ise a balantlar
zerinden veriyi rahata aktarabilmek iin XML kullanmna olan ynelim
artmaktadr. te ADO.NET, XML ve ADO.NETin .NET Framework iinde en
uygun ekilde programlama ortam oluturmamz salar.

ADO.NET modelinin dier veri eriim modellerine gre stnlklerini yle


sralayabiliriz:

ADO.NET, veritabanndan ekilen verilerin kopyasn XML formatn


kullanarak bellee aktarr.
Uygulamann kullanc says arttka kaynak kullanm da artmaktadr.
N-Katmanl (N-tier) uygulama yaps kullanlarak, uygulamalarn
katmanlar zerinden datlmas salanr. Bylece uygulamalarn
leklenirlii artar.
ADO.NET ile balantsz veri ortamlar iin uygulama gelitirilebilir.
ADO.NET gelimi XML destei verir.

ADO.NET Nesne Modeli:

ADO.NET nesne modeli iki ana blmden olumaktadr.


DataSet Snflar
.NET Veri Salayc Snflar
ADO.NET
46

DataSet snflar, evrimd ortamlar iin veri depolama ve ynetme ilemlerini


salar. DataSet snflar veri kaynandan bamsz her tr uygulama ve
veritaban iin kullanlabilir. zellikle likisel Veritaban, XML ve XML Web
Servisleri zerinden veri ekmek iin kullanlr.

.NET veri salayc snflar, farkl trdeki veritabanlarna balanmak iin


kullanlr. Bu snflar sayesinde istenilen trdeki veri kaynana kolayca balant
kurulabilir, veri ekilebilir ve gerekli gncelleme ilemleri yaplabilir. ADO.NET
nesne modeli, aadaki veri salayc snflarn ierir:

SQL Server .NET Veri Salaycs


OLE DB .NET Veri Salaycs
Dier .NET Veri Salayclar

DKKAT: Hangi veri kayna kullanlacaksa, sadece ona uygun veri salayc snf
kullanlmaldr.

ADO.NET Veri Salayclar:

NET veri salayclar, ADO.NET mimarisinin veritaban ile uygulama


(Windows, Web) veya XML Web Servis arasnda balant kurmak iin her tr
alt yapy barndran ekirdek bileendir. Tm veri salayclar, System.Data
isim alan iinde tanmlanmtr.

ADO.NET
Modul 2: 47

NET Framework 1.0 srm ile birlikte SQL Server .NET ve OLE DB .NET veri
salayc snflar gelmitir.

SQL Server .NET: SQL Server 7.0 ve SQL Server 2000 veritabanlarna hzl
balant salar. SQL Server balant nesneleri System.Data.SqlClient isim
alannda bulunur.

OLE DB .NET: SQL Server 6.5 ve daha ncesi srmlerine, Oracle, Sybase,
DB2/400 ve Microsoft Access veri tabanlarna balant kurmay salar. OLE
DB balant nesneleri System.Data.OleDb isim alannda bulunur.

NET Framework 1.1 srm ile birlikte SQL Server .NET ve OLE DB .NET veri
salayclarna Oracle .NET ve ODBC .NET veri salayclar da eklenmitir.

ORACLE .NET: Oracle veritabanlarna balant iin tasarlanm veri


salaycsdr. Oracle balant nesneleri System.Data.OracleClient isim
alannda bulunur.

NOT: System.Data.OracleClient isim alann kullanmak iin, projeye


System.Data.OracleClient.dll referans eklenmelidir.

ODBC .NET: Dier veritabanlarn destekleyen genel bir veri salaycdr.


ODBC balant nesneleri System.Data.ODBC isim alannda bulunur.

renim ve kullanm kolayl olmas amacyla ADO.NET veri salayclarn


isimlendirilmesinde genelletirmeye gidilmitir. SQL Server .NET veri
salayclarnn snf isimleri Sql n eki ile, OLE DB .NET veri salayclarnn
snf isimleri ise OleDb n eki ile balar. Bu genellemeye SqlConnection ve
OleDbConnection rnekleri verilebilir.

ADO.NET
48

Her bir veri salaycs ierisinde, birok balant nesnesi bulunur.


Connection
Command
DataReader
DataAdapter

XxxConnection: : Veri kaynana balant iin kullanlan snftr.


ADO.NET
Modul 2: 49

XxxCommand: Veri kayna zerinde sorgu altrmak iin kullanlr. Veri


kaynandan dnen kaytlar XxxDataReader veya DataSet kullanlarak veri
balantl kontrollere aktarlr.
XxxDataReader: evrimii balantlarda sadece veri okumak iin kullanlan
snftr.
XxxDataAdapter: evrimd balantlarda kullanlan veri ileme nesnesidir.

NOT: Xxx yerine seilen veri salaycsna gre SQL, OLEDB, Oracle ve ODBC
eklerinden biri kullanlr.

Modl zeti

1. Veri depolama yntemleri nelerdir?


2. Balantl ve Balantsz Veri ortamlar nelerdir?
3. Veri eriim yntemleri nelerdir?
4. ADO.NET veri salayclar nelerdir?

ADO.NET
50

Lab 2: Veri Merkezli Uygulamalar ve


ADO.NETe Giri

Uygulama 1

Yeni balant oluturmak.


Bu uygulamada Server Explorer kullanarak ar Merkezi uygulamas iin
yeni bir balant oluturulur.

ar Merkezi Uygulamas iin yeni balant oluturmak.

ADO.NET
Modul 2: 51

3. Visual Studio .Neti kullanarak ar Merkezi uygulamasn amak.


File mens altndan Open alt mens ierisinden Project komutunu tklayn.
Look in alan kutusundan C:\Proje\ CagriMerkezi klasrn sein.
Alan Open Project penceresinden CagriMerkezi.sln dosyasn seerek
Open butonunu tklayn.
4. Uygulamaya CagriMerkezi veritabann eklemek.
Proje isminin zerinde farenin sa butonunu tklayn.
Alan menden Add mensnden Add Existing Item komutunu verin.
Alan pencere zerindeki Look in alan kutusundan CD Srcs\Veritaban
klasrn sein.
Alan Add Existing Item penceresinden CagriMerkezi.mdb veritabann
seerek Open butonunu tklayn.
5. CagriMerkezi uygulamas iin yeni balant oluturmak.
Server Explorer penceresi zerinde farenin sa butonunu tklayn. Alan
menden Add Connection komutunu tklayn.
Alan Data Link Properties penceresinin Provider sekmesini tklayn.
Provider sekmesinden Microsoft.Jet.OLEDB.4.0 Provider i seerek Next
butonunu tklayn.

Alan Connection sekmesinin grntsn resimdeki gibi dzenleyerek OK


butonunu tklayn.

ADO.NET
Modul 4:

ADO.NET
Modul 3 53

Modl 3: Veri Kaynaklarna Balanmak

Veriyi yneten uygulamalar, bu verilerin bulunduu kaynaa balanma ihtiyac


duyar. Visual Basic .NET ile veri kaynana balanmak iin, kaynan tipine,
yapsna gre farkl nesneler ve farkl veri salayclar kullanlr.

Bu modln sonunda:

ADO.NET
54

Farkl veritabanlarna gre veri salayclar seebilecek,


Balant cmlesi oluturabilecek,
Farkl veritabanlar iin Connection nesnelerini ynetebileceksiniz.

ADO.NET
Modul 3 55

Konu 1: Veri Salayc Semek

Veri Salayc Nedir?

ADO.NET mimarisi, uygulama ile veritaban arasnda balant kurmak ve


kurulan balant zerinden kaytlar almak, deitirmek ve silmek iin veri
salayclarn kullanr. Farkl veritabanlar iin farkl veri salayclar kullanlr.

ADO.NET
56

Uygun veri salayc seiminde en nemli kriter Hangi salayc en iyi


performans verir? sorusunun cevabdr. nk Sql Server, Oracle, Access
gibi veritabanlarna farkl veri salayclar ile eriilebilir.

Microsoft .NET Framework, veritabanlar ile balant kurmak iin farkl veri
salayclarn destekler.
SQL Server .NET
OLEDB .NET
ODBC .NET

Veri Salayc Snflar

.NET Framework iindeki veri salayclar, System.Data.dll ierisinde ki


System.Data isim alannda yer alr. Tablo 1.1 de hangi salayc isim alan ile
hangi veritabanna balanlabilecei gsterilmektedir.

ADO.NET
Modul 3 57

Veri Taban Veri Salaycs sim Alan

Sql Server 7.0 ve sonraki srmler System.Data.SqlClient


Sql Server 6.5 ve nceki srmler System.Data.OleDb
Microsoft Access veri taban System.Data.OleDb
Oracle Server System.Data.OracleClient
Dier veri tabanlar(Oracle, Sybase, System.Data.OleDb
DB2/400)
Tablo 1.1: Veri Tabanlar ve Veri Salayc sim Alanlar

ODBC .NET veri salayclar, dier veri salayclarndan farkl olarak, veri
kaynana balanrken hibir ara katman kullanmaz. Bunun yerine, balant
iin ODBC APIleri kullanr.

.NET Framework veri salayclar Tablo 1.2 de belirtilen snflar


kullanmaktadr. Snf isimlerinin nndeki XXX n eki kullanlan veri salayc
ismini simgeler. Eer veritabanna OLEDB veri salaycs ile balanlrsa
OLEDB n ekini, eer SQL Server veri salaycs ile balanyorsa SQL n
ekini alr.

ADO.NET
58

Snf Aklama

XXXConnection Balant amak ve kapatmak iin kullanlan snftr.

XXXCommand Veritaban zerinde Stored Procedure (Sakl


Yordamlar) veya SQL Cmleleri altrmak iin
kullanlan snftr.
XXXDataReader Veritabanndan sadece okunur ve ileri hareketli
kaytlar ekmek iin kullanlan snftr.
XXXDataAdapter Veritabanndan ekilen verileri DataSet ierisine veya
DataSet e evrimd eklenmi verileri veritabanna
aktarmak iin kullanlan snftr

Tablo 1.2: Veri Salayc Snf simleri

System.Data.SqlClient isim alan ierisinden evrimii balantlar


gelitirmek iin SqlConnection, SqlCommand, SqlDataReader snflar
kullanlr.

ADO.NET
Modul 3 59

SqlConnection; MS SQL Server zerinde balant amak ve kapatmak iin


kullanlan snfdr.
SqlCommand; MS SQL Server zerinde Stored Procedure (Sakl Yordamlar)
veya SQL Cmleleri altrmak iin kullanlan snftr.
SqlDataReader; MS SQL Server zerinde SqlCommand ile altrlan SELECT
sorgularn sonularn geri dndrmek iin kullanlan snftr.

System.Data.SqlClient isim alan ierisinden evrimd balantlar


gelitirmek iin SqlConnection, SqlDataAdapter, DataSet snflar
kullanlr.

SqlConnection; MS SQL Server zerinde balant amak ve kapatmak iin


kullanlan snftr.
SqlDataAdapter; MS SQL Serverdan ekilen verileri DataSet ierisine ve
DataSete evrimd eklenmi verileri MS SQL Servera aktarmak iin
kullanlan snftr.
DataSet; SQLDataAdapter nesnesinden gelen kaytlar evrimd depolamak
ve ynetmek iin kullanlan snftr. DataSet tm veri salayc snflar iin
ortaktr.

NOT: DataSet, System.Data isim alan ierisinde yer alr.

System.Data.OleDb isim alan ierisinden evrimii balantlar gelitirmek iin


OleDbConnection, OleDbCommand, OleDbDataReader snflar kullanlr.

OleDbConnection; Access veya dier veritabanlar zerinde balant amak


ve kapatmak iin kullanlan snftr.
OleDbCommand; Access veya dier veritabanlar zerinde Stored Procedure
(Sakl Yordamlar) veya SQL Cmleleri altrmak iin kullanlan snftr.
OleDbDataReader; Access veya dier veritabanlar zerinde OleDbCommand
ile altrlan SELECT sorgularn sonularn geri dndrmek iin kullanlan
snftr.

System.Data.OleDb isim alan ierisinden evrimd balantlar gelitirmek


iin OleDbConnection, OleDbDataAdapter snflar kullanlr.

OleDbConnection; Access veya dier veritabanlar zerinde balant amak


ve kapatmak iin kullanlan snftr.
OleDbDataAdapter; Access veya dier veritabanlarndan ekilen verileri
DataSet ierisine ve DataSete evrimd eklenmi verileri ilgili veritabanna
aktarmak iin kullanlan snftr.

ADO.NET
60

Konu 2: Balant Oluturmak

Balant Cmlesi (Connection String)


Oluturmak

ADO.NET
Modul 3 61

Balant cmlesi, veri kaynana balanmak iin gerekli bilgileri tutar.. Bu


cmle, veri kaynana balant kurmak iin gerekli balant parametrelerin
birleiminden oluur. Bu parametrelerin listesi Tablo 2.1de gsterilmitir.

Parametre Tanm

Provider Sadece OleDbConnection nesnelerinde


kullanlr. Balant salaycsnn ismini tutar.
Salayc isimleri Tablo 2.2 de belirtilmitir.
ConnectionTimeout veya Connect Veritaban balant iin beklenmesi gereken
Timeout maksimum saniye saysdr. Varsaylan
deger 15 saniye dir.
Initial Catalog Veri taban ad
Data Source SQL Server ad, veya MS Access veri taban
iin dosya ad
Password (pwd) SQL Server login(giri) parolas
User Id (uid) SQL Server login(giri) ad
Integrated Security veya Trusted SQL sunucusuna Windows hesab ile
Connection balant yaplacan belirtir. True, False
veya SSPI girilebilir. SSPI, True ile e
anlamldr ve bu durumda Windows hesab
kullanlr.
Persist Security Info Varsaylan deeri False olur. Bu durumda
gvenlik iin hassas bilgileri geri
dndrmez. True olduunda ise gvenlik
risk tamaya balar.
WorkstationID (wid) Workstation veya client(istemci) adn
belirtir.
Packet Size Client(istemci)-server(sunucu) aras veri
transferinde kullanlan paketlerin boyutunu
belirtir.
Mode Veritabann Read-only(Sadece okunur) ya
da Write(Yazlabilir) modunu belirtir. SQL
Server balantlarnda kullanlmaz.

Tablo 2.1: Balant cmlesinin parametreleri

Provider parametresinin Access, SQL Server ve Oracle veri tabanlarna gre


alaca deerler Tablo 2.2 de gsterilmitir

Tr Aklama

SQLOLEDB SQL Server iin Microsoft OLE DB Provider


MSDAORA ORACLE iin Microsoft OLE DB Provider
Microsoft.Jet.OLEDB.4.0 Microsoft Jet iin OLE DB Provider

Tablo 2.2: Balant cmlesinin parametreleri

ADO.NET
62

Balant Cmlesini (Connection String)


Kullanmak

Yeni balant oluturmak ve ynetmek iin OleDbConnection, SqlConnection


gibi XXXConnection snflar kullanlr. Veri kaynana balanmak iin
oluturulan Balant Cmlesi, XXXConnection snfnn ConnectionString
zelliine atanr.

rnekte SQL Server veritaban iin balant cmlesi oluturulmutur. London


isimli sunucuda bulunan Northwind veritabanna, sa kullanc ismi ve 2389
parolas ile balanlyor. Eer veritaban sunucusundan 60 saniye iinde cevap
alnamazsa balant iptal ediliyor.

System.Data.SqlClient.SqlConnection cnNorthwind;
cnNorthwind = new System.Data.SqlClient.SqlConnection();

cnNorthwind.ConnectionString ="Data Source=London;Initial


Catalog=Northwind;User ID=sa;Password=2389;Connection
TimeOut=60";

rnekte Microsoft Access veritaban iin balant cmlesi oluturulmutur.


OleDb balants yapld iin Provider zelliinin Microsoft.Jet.OleDB.4.0
olarak belirtilmesi gerekir. Balantnn yaplaca Northwind veritabannn local
makinede C:\Samples dizini altnda bulunduu belirtiliyor.

System.Data.OleDb.OleDbConnection cnNorthwind;
cnNorthwind = new System.Data.OleDb.OleDbConnection();

ADO.NET
Modul 3 63

cnNorthwind.ConnectionString=@"Provider=Microsoft.Jet.OLEDB.
4.0;Data Source=C:\Samples\Northwind.mdb";

rnekte Sql Server 6.5 veri taban iin balant cmlesi oluturulmutur. SQL
Server 7.0 srmnden eski bir veritaban sunucuna balant yapld iin
Provider zellii SQLOLEDB olarak belirtiliyor. ProdServ isimli sunucudaki
Pubs veritabanna, Windows hesab (SSPI) ile balanlyor.

System.Data.OleDb.OleDbConnection cnNorthwind;
cnNorthwind = new System.Data.OleDb.OleDbConnection();

cnNorthwind.ConnectionString = Provider=SQLOLEDB;Data
Source=ProdServ;Initial Catalog=Pubs;Integrated
security=SSPI;

DKKAT: Microsoft Access veri kayna, tek veri tabanndan oluur. SQL Server veri
kayna ise birden fazla veri tabanndan oluur. Bu yzden SQL Server veritaban balant
cmlesinde Initial Catalog parametresi kullanlr.

Balant Cmlesi(Connection String) rnekleri

ADO.NET
64

Ms Access ile OLEDB Balant Cmleleri

Tablo 2.3 de OLEDB ile Accesse balanmak iin gerekli, rnek Balant
Cmleleri gsterilmektedir.

Accesse Balant "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=DB_Name.mdb;


"
Accesse alma "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Db
Grubu dosyas _Name.mdb; Jet OLEDB:System Database=Db _Name.mdw"
zerinden Balant
Accesse Parola "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Db
Korumal Balant _Name.mdb; Jet OLEDB:Database Password=sifreniz"
Networkteki Accesse "Provider=Microsoft.Jet.OLEDB.4.0; Data
Balant Source=\\Server_Name\Share_Name\Share_Path\Db
_Name.mdb"
Remote Server(Uzak "Provider=MS Remote; Remote Server=http://Your-Remote-
Server) zerindeki bir Server-IP; Remote Provider=Microsoft.Jet.OLEDB.4.0; Data
Accesse Balant Source=Db_Name.mdb"

Tablo 2.3: Ms Access ile OLEDB Balant Cmleleri

ADO.NET
Modul 3 65

SQL Server ile ODBC Balant Cmleleri

Tablo 2.4 de ODBC ile SQL Servera balanmak iin gerekli, rnek Balant
Cmleleri gsterilmektedir.

SQL Server sunucusuna "Driver={SQL Server};Server=


SQL Authentication ile Server_Name;Database=Db_Name;Uid=Username;Pwd=
balanmak sifreniz;"
SQL Server sunucusuna "Driver={SQL Server}; Server= Server_Name; Database=DB
Windows Authentication ile _Name;Trusted_Connection=yes;"
balanmak

Tablo 2.4: SQL Server ile ODBC Balant Cmleleri

ADO.NET
66

SQL Server ile OLEDB Balant Cmleleri

Tablo 2.5 de OLEDB ile SQL Servera balanmak iin gerekli, rnek Balant
Cmleleri gsterilmektedir.

SQL Server sunucusuna "Provider=SQLOLEDB;Data Source= Server_Name;Initial


SQL Authentication ile Catalog=Db_Name;User Id= Username;Password=sifreniz;"
balanmak
SQL Server sunucusuna "Provider=SQLOLEDB;Data Source= Server_Name;Initial
Windows Authentication ile Catalog=DB_Name;Integrated Security=SSPI;"
balanmak

Tablo 2.5: SQL Server ile OLEDB Balat Cmleleri

ADO.NET
Modul 3 67

SQL Server ile Sql Server Balant Cmleleri

Tablo 2.6 de SQLClient ile SQL Servera balanmak iin gerekli, rnek
Balant Cmleleri gsterilmektedir.

SQL Server sunucusuna "Data Source=_Server_Name;Initial Catalog=Db _Name;User


SQL Authentication ile Id= Username;Password=sifreniz;"
balanmak
SQL Server sunucusuna "Server= Server_Name;Database=Db_Name;User ID=
SQL Authentication ile Username;Password=sifreniz;Trusted_Connection=False
balanmak
SQL Server sunucusuna "Data Source= Server_Name;Initial
Windows Authentication Catalog=Db_Name;Integrated Security=SSPI;
ile balanmak
SQL Server sunucusuna "Server=Server_Name;Database=Db_Name;Trusted_Connecti
SQL Authentication ile on=True;"
balanmak

Tablo 2.6: SQL Server ile SQL Server Balant Cmleleri

UYARI : Balant cmle paramerelerinin benzer edeerleri vardr. Bu edeerler hem


OLEDB hemde SQLClient veri salaycalarda kullanlabilir. Tablo 2.7. de bu edeerler
gsterilmektedir.

ADO.NET
68

OLEDB ve SqlServer Parametreleri Edeerleri

Data Source Server


User ID UID
Password PWD
Initial Catalog Database

Tablo 2.7: OleDb ve Sql Server Parametre Edeerleri

ADO.NET
Modul 3 69

Konu 3: Balant Ynetimi

Balanty Amak ve Kapatmak

Balant cmlesini oluturduktan sonra, balanty amak ve kapamak iin


Connection snfnn iki nemli metodu kullanlr.
Open
ADO.NET
70

Close
Open metodu, balant cmlesinde belirtilen veri kaynan amak iin kullanlr.
Close metodu, alan balanty kapatmak iin kullanlr. Close metodu ile
kullanlmayan balantlar kapatmak, kaynak tketimini azaltr.

Open metodu; uygulama ile veri kayna arasndaki balanty, balant


cmlesinin Timeout parametresinde belirtilen sre ierisinde kurmaya alr.
Eer belirtilen sre ierisinde balant gereklemiyorsa, uygulama hata retir.
Bu sre iin herhangi bir deer belirtilmemise, varsaylan deer 15 saniyedir.

Daha nceden alm bir balant; kapatlmadan tekrar almaya allrsa,


uygulama yine hata retecektir. Kapatlan balantnn yeniden kapatlmas
hataya yol amaz.

Open metodu ile alan balantnn kapatlmamas durumunda, Garbage


Collector ad verilen p toplayc devreye girerek balantnn kapatlmasn
salar. Bu durum balant deikeninin geici bir sre bellekte yer tutmasna
neden olur.

NOT: Balant nesnesinin Dispose metodu da balanty kapatmak iin kullanlabilir.

rnekte Northwind.mdb isimli Access veritaban zerinde, Open ve Close


metotlarnn kullanm gsterilmektedir.

cnNorthwind.ConnectionString = @"Provider=Microsoft.Jet.
OLEDB.4.0;Data Source=C:\Samples\Northwind.mdb";

//Balanty amak
cnNorthwind.Open();

//Veritaban ilemleri bu arada gerekletirillir.


//Balanty kapatmak
cnNorthwind.Close();

Open metodu ile veri kayna alrken, eitli alma zaman hatalarndan
dolay balant almayabilir ve uygulama hata retebilir. Bu alma zaman
hatalar
Sunucunun bulunamamasndan,
Veritabannn bulunamamasndan,
Hatal kullanc ad veya parola girilmesinden,
Donanm veya yazlmdan kaynaklanabilir.

Try, Catch, Finally deyimlerini kullanarak bir blou oluabilecek potansiyel


hatalardan korunur.
Try blou iinde, hata retebilecek kodlar yazlr. rnein tm veritaban
ilemleri bu blok iersine yazlmaldr.

ADO.NET
Modul 3 71

Catch bloklar, uygulamann rettii hatalar, tiplerine gre sral bir ekilde
iler. Bu blok iersine, yakalanan hataya gre yaplacak ilemler yazlmaldr.
rnein balantnn almad bir durumda veritaban ilemleri
gerekletirilmeye alld zaman, kullancya balantnn almasn bildiren
mesaj kutusu karlabilir.
Finally blounda, Try ve Catch bloklarndan herhangi biri ilendikten sonra
alr. Bu blokta, hatann retildii veya retilmedii iki durumda da yaplmas
gereken ilemler yazlr. rnein, balantnn kapatlmas her iki durumda da
yaplmas gereken bir ilemdir.

System.Data.OleDb.OleDbConnection cnNorthwind;
try
{
cnNorthwind = new System.Data.OleDb.OleDbConnection();
cnNorthwind.ConnectionString = @"Provider=Microsoft.Jet.
OLEDB.4.0;Data Source=C:\Samples\Northwind.mdb";
cnNorthwind.Open();
// Veritaban ilemleri gerekletirilir.
}
catch (InvalidOperationException XcpInvOp)
{
// lk nce bu tipte hata yakalanr.
MessageBox.Show("nce veri taban balantsn kapatn");
//Hata Mesajnn ieriini grmek iin kullanlr.
MessageBox.Show(XcpInvOp.ToString());

}
catch (Exception Xcp)
{
//Dier hatadan farkl bir tipte hata burda yakalanr.
MessageBox.Show(Xcp.ToString());
}
finally
{
cnNorthwind.Close();
//ya da
cnNorthwind.Dispose();
}

ADO.NET
72

Balant Durumlarn Kontrol Etmek

Balant snfnn durumu hakknda bilgi almak iin, balant snfnn State
zellii kullanlr.

State zelliinin alabilecei deerler tablo 3.1.1de belirtilmitir.

sim Aklama Deeri

Broken Yalnzca, ak bir balantnn kopup tekrar balanld 16


durum
Closed Balant kapal 0
Connecting Veri kaynana balanma aamasnda 2
Executing Balant zerinden bir komutu altrlyor 4
Fetching Balant zerinden veri ekiliyor 8
Open Balant ak 1

Tablo 3.1.1: Connection nesnesinin State Property deerleri

private void ConnectionAc(OleDb.OleDbConnection con)


{
//Connection, sadece kapal ise alacak
If (con.State == ConnectionState.Closed)
{
con.Open();
}
}
Balant nesnelerinin durumu deitii zaman StateChange olay tetiklenir. Bu
olay ile balantnn hangi durumlarda alp kapand renilebilir.

ADO.NET
Modul 3 73

Balantnn eski ve yeni durumlar StateChangeEventArgs parametresi ile


renilir. Tablo 3.1.2de bu parametrenin CurrentState ve OriginalState
zellikleri grlr.

Property Aklama

CurrentState Balantnn yeni durumu hakknda bilgi


verir.
OriginalState Balantnn deimeden nceki durumu
hakknda bilgi verir.
Tablo 3.1.2: StateChangeEventArgs parametresinin zellikleri

public void ConnectionOlustur()


{
System.Data.OleDb.OleDbConnection conn;
conn = new System.Data.OleDb.OleDbConnection();
// Balant ayarlar yaplr.
// ...
// Balantnn StateChange olay gerekletii zaman
// DurumRapor yordamnn arlmas ayarlanr
conn.StateChange += new
StateChangeEventHandler(DurumRapor);
}

public void DurumRapor(Object sender,StateChangeEventArgs e)


{
MessageBox.Show("Balant " +e.OriginalState.ToString() +
" durumundan " + e.CurrentState.ToString() + " durumu olarak
deiti.");
}

ADO.NET
74

Modl zeti:

1. Veri salayclar ne ie yarar? SQL Server 6.5 veri tabanna


balanmak iin hangi veri salaycnn kullanlmas gerekir.
2. Connection nesnelerinin kullanlmas iin gereken temel zellik
hangisidir?
3. Balant akken tekrar almaya alldnda ne olur? Bu durum
nasl engellenir?
4. Try Catch blou ne iin kullanlr? Finally blounda hangi kodlar
yazlr?
5. Balant durumu Connection nesnesinin hangi zellii ile anlalr?
Durum deitii zaman hangi olay tetiklenir?

ADO.NET
Modul 3 75

Lab 1: Balant Oluturmak

Bu labda, kullancn girdii deerlere gre Connection String oluturulur. Bu


balant cmlesi ile yeni bir Connection nesnesi oluturarak, balantnn
durumu incelenir.

Bu lab tamamlandktan sonra:


Farkl veritabanlarna gre balant cmlesi oluturabilecek,
Veritabanna balant ap kapayabilecek,
Balantlarn State zellii ile durumunu gzlemleyebileceksiniz.

Kontrollerin eklenmesi
VeriTabaniBaglantisi isminde yeni bir Windows projesi an.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

TextBox txtVeriTabani Text


TextBox txtSunucu Text
TextBox txtKullaniciAdi Text
TextBox txtParola Text
TextBox txtTimeOut Text
Label lblConnectionString Text
Label lblConnectionState Text Closed
ADO.NET
76

GroupBox Text Balant lemleri:


ComboBox ComboBox1 DropDownStyle DropDownList
Button Button1 Text Connection String
Olutur
Button Button2 Text Connection Olutur
Button Button3 Text Connection A
Button Button4 Text Connection Kapat

Kodlarn yazlmas
Veritaban balants oluturmak iin ncelikle balant cmlesi oluturulmas
gerekir. Bu balant cmlesi, kullancnn girecei bilgilere gre oluturulur.

1. Balant cmlesi iin gerekli bilgileri tutan deikenleri tanmlayn.


private string ConnectionString;
private string Provider;
private string Database;
private string Server;
private string KullaniciAdi;
private string Parola;
private String TimeOut;

// Sql veritabanna balanmak iin


private System.Data.SqlClient.SqlConnection sqlCon;
// Access veritabanna balanmak iin
private System.Data.OleDb.OleDbConnection oleDbCon;

2. Formun Load annda, ComboBox kontrolne veritaban seeneklerini


ekleyin.
private void Form1_Load(System.Object sender,
System.EventArgs e)
{
comboBox1.Items.Add("Microsoft Access");

ADO.NET
Modul 3 77

comboBox1.Items.Add("Microsoft SQL Server 2000");


comboBox1.Items.Add("Microsoft SQL Server 6.5");

// Varsayilan olarak Sql Server 2000 seili olur


comboBox1.SelectedIndex = 1;
}

3. ComboBox kontrolnden veritaban seildii zaman, Provider ismini


deitirin. Seilen veritaban Access ise, kullanc ad, parola, sunucu
ve timeout TextBox kontrollerini pasif duruma getirin.

private void comboBox1_SelectedIndexChanged(System.Object


sender, System.EventArgs e)
{
// Farkli Veritabani seildigi zaman tetiklenir.
switch (comboBox1.SelectedIndex)
{
case 0:
Provider = "Microsoft.Jet.OleDB.4.0";
EnableTextBoxes(false);
break;

case 1:
Provider = "";
EnableTextBoxes(true);
break;

case 2:
Provider = "SQLOLEDB";
EnableTextBoxes(true);
break;
}
}

private void EnableTextBoxes(bool SQLVeriTabaniSecili)


{
txtKullaniciAdi.Enabled = SQLVeriTabaniSecili;
txtParola.Enabled = SQLVeriTabaniSecili;
txtTimeOut.Enabled = SQLVeriTabaniSecili;
txtSunucu.Enabled = SQLVeriTabaniSecili;

// Access veritabani seili ise


if (! SQLVeriTabaniSecili)
{
txtKullaniciAdi.Text = "";
txtParola.Text = "";
txtTimeOut.Text = "";
txtSunucu.Text = "";
}
}
4. Connection String oluturma dmesine basld zaman, girilen
deerleri aln ve balant cmlesi oluturun.
private void Button1_Click(System.Object
sender,System.EventArgs e)
{
ConnectionString = "";

// Access Veritabani seili ise


if (comboBox1.SelectedIndex == 0)
{
Database = txtVeritabani.Text;
ADO.NET
78

ConnectionString = "Provider= " + Provider +


";Data Source= " + Database ;
}
else
{
KullaniciAdi = txtKullaniciAdi.Text;
Parola = txtParola.Text;
TimeOut = txtTimeOut.Text;
Server = txtSunucu.Text;
Database = txtVeritabani.Text;

if (Provider != "")
{
ConnectionString = "Provider=" + Provider + ";";
}

ConnectionString += "Data Source=" + Server;


ConnectionString += ";Initial Catalog=" + Database;
ConnectionString += ";User ID=" + KullaniciAdi;
ConnectionString += ";Password=" + Parola;
ConnectionString += ";Connection TimeOut=" + TimeOut;
}

lblConnectionString.Text = ConnectionString;
}

5. Balant cmlesi oluturulduktan sonra, bu cmleyi kullanarak


Connection nesnesi oluturun. Burada dikkat edilmesi gereken
nokta, kullancnn setii veritaban tipine gre farkl balant nesnesi
oluturulmasdr.

private void Button2_Click(System.Object sender,


System.EventArgs e)
{
// Access veritabani seili ise
if (comboBox1.SelectedIndex == 0)
{
oleDbCon = new
System.Data.OleDb.OleDbConnection(ConnectionString);
oleDbCon.StateChange+= new
StateChangeEventHandler(DurumDegisti);
}
else
{
sqlCon = new
System.Data.SqlClient.SqlConnection(ConnectionString);
sqlCon.StateChange += new
StateChangeEventHandler(DurumDegisti);
}
}

// Balant durumu deitii zaman, DurumDegisti


// yordamndaki kodlar alr.

private void DurumDegisti(Object sender,


System.Data.StateChangeEventArgs e)
{
// Balantnn durumu kullancya bildirilir.
lblConnectionState.Text = e.CurrentState.ToString();
}

ADO.NET
Modul 3 79

6. Balant nesnesi oluturulduktan sonra, Connection A dmesine


baslnca balant Open metodu ile an. Ancak kullancnn baz
deerleri yanl girmesi durumu gz nne alnarak Try Catch
bloklar kullanlmaldr.

private void Button3_Click(System.Object sender,


System.EventArgs e)
{
if (oleDbCon != null)
{
// OleDB baglantisi olusturulduysa
try
{
oleDbCon.Open();
}

catch (InvalidOperationException ex)


{
MessageBox.Show(ex.Message.ToString());
}
catch (System.Data.OleDb.OleDbException ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
else
{
// Sql baglantisi olusturulduysa
try
{
sqlCon.Open();
}
catch (InvalidOperationException ex)
{
MessageBox.Show(ex.Message.ToString());
}
catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
}
7. Connection Kapat dmesine baslnca oluturulan balanty bularak
kapatn.

private void Button4_Click(System.Object sender,


System.EventArgs e)
{
if (oleDbCon != null)
{
// OleDB baglantisi olusturulduysa
oleDbCon.Close();
}
else
{
// Sql baglantisi olusturulduysa
sqlCon.Close();
}
}

ADO.NET
Modul 5:

Modl 4: Balantl (Connected) Veritaban


lemleri

Bu modlde ADO.NET ile balantl veritaban ilemlerin nasl yapldn


reneceksiniz.
Konu: 4 81

Bu modln sonunda:
Balantl veri ortamlaryla almay renecek,
Command oluturabilecek,
Command ile geriye tek deer veya kayt kmesi dndrebilecek,
Command ile INSERT, UPDATE ve DELETE sorgularn
altrabilecek,
82 Modl 4: Connected Veritaban lemleri

Konu 1: Balantl Veri Ortamlaryla


almak

Balantl Uygulamalar in Veritaban Mimarisi


Konu: 4 83

Balantl veri ortamlar, uygulamalarn veri kaynana srekli bal kald


ortamlardr. Bu ortamlarda veri alma ve deitirme ilemleri uygulama ile veri
kayna arasnda balant kurulduktan sonra gerekletirilir.

Balantl veri ortamlar ile veritaban zerinde, gerekli tm veritaban ilemleri


yaplabilir.
Veritabanndan tek deer ekme
Sadece okunabilir kayt kmeleri dndrme
Kayt ekleme
Kayt silme
Kayt gncelleme

Balantl veri ortamlar ierisinde kullanlan snflar Tablo 4.1 de belirtilmitir.

Snf Aklama

XXXConnection Balant amak ve kapatmak iin kullanlan nesnedir.

XXXCommand Veritaban zerinde Stored Procedure (Sakl Yordam)


veya SQL Cmleleri altrmak iin kullanlan
nesnedir.
XXXDataReader Veritabanndan sadece okunur ve ileri hareketli
kaytlar ekmek iin kullanlan nesnedir. Kaytlar
XXXCommand nesnesinin ExecuteReader metodu
ile XXXDataReader ierisine aktarlr.

Tablo 4.1. Balantl Veri Ortam Snflar


84 Modl 4: Connected Veritaban lemleri

Konu 2: Command ile almak

Commmand Nedir?

Command, veritaban zerinde Stored Procedure (Sakl Yordam) ve Sorgu


Konu: 4 85

altrmak iin kullanlr. Command Nesneleri ile veritaban tablolarnda; sorgu,


ekleme, silme ve gncelleme ilemleri yaplabilir.

Tablo 4.2 de hangi veri salayc iin hangi Command Nesnesinin kullanld
gsterilmektedir.

Tablo 4.2.
Nesne Veri Salayclar
Command
Nesneler System.Data.SqlClient.SqlCommand SQL Server .NET Veri Salaycs

System.Data.OleDb.OleDbCommand OLE DB .NET Veri Salaycs

Veritaban System.Data.OleDb.ODBCCommand ODBC .NET Veri Salaycs


zerinde
Stored Procedure ve Sorgu altrmak iin Command Nesnelerinin belirli
zelliklerini kullanmak gerekir. Command Nesnelerinin bu zellikleri aada
belirtilmitir.


Name: Command nesnesinin kod ierisindeki ismidir. Bu isim
Command nesnesine bavurmak iin kullanlr.
Connection: Command nesnesinin hangi Connection zerinde
alacan belirler.
CommandType: altrlacak komutun trn belirtir. Text, Stored
Procedure ve TableDirect olmak zere deeri vardr.
TableDirect SQL Server tarafndan desteklenmez.
CommandText: Stored Procedure adn veya Sorgu cmlesini tutar.
86 Modl 4: Connected Veritaban lemleri

Parameters: Command ierisinde altrlacak Stored Procedure


veya Sorgu cmlesine, dardan deer almak ve darya deer
gndermek iin kullanlr. Her bir Command Nesnesi iin bir veya
birden ok parametre tanmlanabilir.

Command zelliklerine deer girildikten sonra, Command altrmak iin


Tablo 4.3 deki metotlardan uygun olan seilir.

Command Metodu Aklama

ExecuteScalar altrlan Command nesnesinden geriye tek


deer dndrmek iin kullanlr.
ExecuteReader altrlan Command nesnesinden geriye
kayt kmesi dndrmek iin kullanlr.
ExecuteNonQuery Command Nesnesi zerinde veri gncelleme,
deitirme ve silme ilemleri yapmak iin
kullanlr. Bu ilemin sonucunda etkilenen
kayt says geriye dndrr.
ExecuteXmlReader altrlan Command Nesnesinden geriye
XML dndrmek iin kullanlr. Sadece SQL
Server 7.0 ve sonraki versiyonlar iin
kullanlr.

Tablo 4.3: Command Metotlar


Konu: 4 87

Command Oluturmak

Command, kod ierisinden veya ToolBox zerinden oluturulabilir. Bu


yntemler ile kullanlan veritabanna gre, OleDbCommand veya SqlCommand
nesneleri oluturulur.

rnekte Access veritabanna balanmak iin, OleDbCommand snf


tanmlanm ve bu Command snfnn gerekli zelliklerine deer atanmtr.

//Access Veritabanna balanmak iin Command tanmlanr.


System.Data.OleDb.OleDbCommand cmd = new
System.Data.OleDb.OleDbCommand();
//Command Snfnn CommandText zelliine universiteler
cmd.CommandText="select * from universiteler";

//Command Snfnn Connection zelliine aktif connection


//aktarlr
cmd.Connection=conn;
//Command Snfna, sorgu cmlesi yazlacan belirler.
cmd.CommandType=CommandType.Text;

ToolBox zerinden Command nesnesi oluturmak iin belirtilen admlar takip


edin.

1- Veri kaynana balant kurmak iin Connection tanmlanr.


2- ToolBox iinden Data paneli seilir.
3- Data panelindeki OleDbCommand veya SqlCommand nesnesi form zerine
srklenir.
88 Modl 4: Connected Veritaban lemleri

4- Eklenen Command nesnesinin zellikleri Tablo 4.4e gre ayarlanr.

zellik Aklama

Name Command nesnesinin kod ierisinde


kullanlan ismidir.
Connection Command nesnesinin hangi Connection
zerinde alacan belirler. Bu zellik ile
yeni Connection oluturabilir veya var olan
Connection nesnesine balanlabilir.
CommandType Command nesnesinin tipini belirler.
altrlacak Commanda gre Text,
StoredProcedure ve TableDirect
seilir.
Text: SQL Cmlesi
StoredProcedure: Kaytl Yordam
TableDirect: Tablo kaytlar
TableDirect sadece OleDbCommand
nesnesi tarafndan kullanlr.
CommandText Command nesnesinin altrlacak
komutudur. Seilen CommandTypea gre
CommandText belirlenir.
Text: altrlacak SQL Cmlesi.
StoredProcedure: altrlacak Stored
Procedure ad.
TableDirect: Veritabanndaki Tablo ad
Parameters Command nesnesinin CommandText
komutuna dardan deer almak veya
komuttan geriye deer dndrmek iin
kullanlr. Parameters zellii Collection
olduu iin bir veya birden ok deer alabilir
veya gnderebilir.

Tablo 4.4: Command zellikleri


Konu: 4 89

Parametre Kullanmak

Stored Procedure ve SQL Cmleleri parametre alabilir veya gnderebilir.


Ayrca Stored Procedure geriye tek deer bile dndrebilir.

Stored Procedure ve SQL Cmlelerinin parametre deerlerini saklamak iin,


XXXCommand nesnesinin Parameters zellii kullanlr. Ayn zamanda bu
zellik XXXParameters nesnesinin koleksiyonudur.

Command nesnesi altrlmadan nce, komuttaki her giri parametresi iin bir
deer girilmelidir. Ayrca Command nesnesi altrldktan sonra, sonu
parametrelerinin deerleri geriye dndrlebilir.

Command nesnesine parametre eklemek iin aadaki yntemler kullanlr.


XxxParameter nesneleri oluturulur ve Command nesnesinin
Parameters koleksiyonuna bu nesneler eklenir.
Properties penceresi kullanlarak Command nesnesinin
Parameters zelliine tasarm aamasnda parametreler eklenir.

XXXParameter nesnesini kullanarak, parametre eklemek iin aadaki


admlar takip edilir.

1- Yeni bir OleDbParameter veya SqlParameter nesnesi oluturulur.


2- Eklenen Parameter nesnesinin zellikleri Tablo 4.5 gre ayarlanr.
90 Modl 4: Connected Veritaban lemleri

Property Aklama

ParameterName Parametrenin ismi, @Ad gibi


DbType ,SqlDbType, OleDbType Parametrenin veri tr. Kullanlan veri tabanna
gre SqlDbType veya OleDbType
enumeratorlerinden seilir.
Size Parametredeki verinin byte olarak maksimum
boyutu.
Direction Parametrenin tr. ParameterDirection
deerlerinden biri ile belirtilir. Bu zelliin
alabilecei deerler:
ParameterDirection.Input (varsaylan
deer)
ParameterDirection.InputOutput
ParameterDirection.Output
ParameterDirection.ReturnValue

Tablo 4.5: XxxParameter zellikleri


3- XxxParameter nesnelerini Command nesnesine eklemek iin,
Command nesnesinin Parameters koleksiyonunu ierisindeki Add
metodu kullanlr. Eer bu komut sonu dndrecek bir stored procedure
aryorsa, herhangi bir parametre eklemeden nce
ParameterDirection.ReturnValue parametresini eklenmelidir.
Parametrelerin eklenme sras nemli deildir.

Tablo 4.6 da Direction zelliinin deerleri listelenmitir.


Konu: 4 91

Enumeratr zellik

Input Girdi parametresidir. Varsaylan


deerdir.
Output kt parametresidir.
InputOutput Girdi ve kt parametresi olarak
kullanlr.
ReturnValue Bir fonksiyon sonucunu geri
dndrmek iin kullanlr.

Tablo 4.6 Direction zelliinin Enumeratrleri

rnekte EmployeeLogin isminde bir stored procedure iin, paramUser, ve


paramPass isminde iki OleDbParameter tanmlanm ve bu parametreler
Command nesnesinin Parameters koleksiyonuna eklenmitir.
System.Data.OleDb.OleDbParameter paramUser = new
System.Data.OleDb.OleDbParameter("@userName",
System.Data.OleDb.OleDbType.Char, 50);
paramUser.Direction = ParameterDirection.Input;

System.Data.OleDb.OleDbParameter paramPass = new


System.Data.OleDb.OleDbParameter("@userPass",
System.Data.OleDb.OleDbType.Char, 20);
paramPass= ParameterDirection.Input;
cmd.Parameters.Add(paramUser);
cmd.Parameters.Add(paramPass);

ToolBox kontrollerini kullanarak parametre eklemek iin, aadaki admlar


takip edilir.

1- Toolbox zerinden OleDbCommand veya SqlCommand nesnesi seilir ve


forma eklenir.
2- Properties penceresinden, bu Command nesnesinin Connection,
CommandType ve CommandText zelliklerine deerler atanr.
3- CommandText zelliine deer girildikten sonra, ekrana kan Bu komut
nesnesi iin parametre eklemek ister misiniz? ileti kutusuna Evet denir.
4- Visual Studio .NET ortam Command nesnesi iin parametre oluturacak
kodlar otomatik olarak ekler.
92 Modl 4: Connected Veritaban lemleri

Konu 3: Command ile Geriye Deer


Dndrmek

altrlan stored procedure ya da SQL cmlesinden geriye tek deer


dndrlebilir. Bu tr durumlar iin DataSet yerine Command nesnesi
kullanlmaldr.
Command ile geriye tek deer dndren senaryolara, aadaki rnekler
verilebilir.
Stok tablosundaki toplam stok miktarn geriye dndrmek iin
rn tablosundaki toplam kayt saysn geriye dndrmek iin
rn kategorisine gre toplam rn saysn geriye dndrmek iin

OleDbCommand veya SqlCommand nesnesi ile geriye deer dndrmek iin,


ExecuteScalar metodu kullanlr.
rnekte OleDbCommand nesnesinin ExecuteScalar metodu ile Universiteler
tablosundaki toplam kayt says geri dndrlmektedir.
System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection(@"provider =
Microsoft.JET.OLEDB.4.0; Data source=..\universiteler.mdb");
System.Data.OleDb.OleDbCommand cmd = new
System.Data.OleDb.OleDbCommand("select count(*) from"+
"universiteler", conn);
conn.Open();
MessageBox.Show(cmd.ExecuteScalar.ToString());

ExecuteScalar metodu ile geriye deer dndrmek iin, sadece Sum veya
Count gibi fonksiyonlar kullanlmaz. Ayn zamanda Select cmlesi veya Stored
Konu: 4 93

Procedure ile geriye tek deer dndrlebilir. rnekte rn Tablosundaki Stok


Miktar SqlCommand nesnesi ile geriye dndrlmektedir.

string sql ="SELECT StokMiktari FROM Urun WHERE UrunID=" +


"@UrunID";
System.Data.SqlClient.SqlCommand cmUrun = new
System.Data.SqlClient.SqlCommand(sql,cnAlisveris);

System.Data.SqlClient.SqlParameter prmID = new


System.Data.SqlClient.SqlParameter("@UrunID",System.Data.Sql
DbType.Int, 4);
cmUrun.Parameters["@UrunID"].Value = 42;

cnAlisveris.Open();
int adet = Convert.ToInt32(cmUrun.ExecuteScalar());
cnAlisveris.Close();

MessageBox.Show("Quantity in stock: " + adet.ToString());

Konu 4: Command ile Geriye Kayt


Dndrmek

altrlan stored procedure ya da SQL cmlesi, geriye birden ok deer veya


kayt kmesi dndrlebilir. Bu tr durumlar iin DataAdapter veya
DataReader nesneleri kullanlr. Bu nesnelerin genel fark, DataReader
balantl, DataAdapter Balantsz veri ortamlar iin kullanlr.

DataReader nesnesinin kullanld senaryolara, aadaki rnekler verilebilir.


94 Modl 4: Connected Veritaban lemleri

Tablodan tek kayt dndrmek.(Msteri tablosundan MsteriID ye


gre kayt dndrmek)
Sadece okunur sonular dndrmek. (Web Form zerinde aranan
rnlerin, sonularn dndrmek )

OleDbCommand veya SqlCommand nesnesi ile geriye kayt dndrmek iin,


ExecuteReader metodu kullanlr. ExecuteReader ile dnen kaytlar
DataReader nesnesine aktarlr.

DataReader zellik ve Metotlar


DataReader dnen kaytlar zerinde ilem yapmay salayan metot ve
zelliklere sahiptir. DataReader nesnesinin bu zellik ve metotlar aada
ilemleri yapar.

Kayt kmesi iindeki kaytlar tek tek okur.


Kaydn belirli bir kolonunu veya tm kolonlarn okur.
Kolonlarn ierisinde deer olup olmadn kontrol eder.
Kolonlarn ema bilgilerini okur. (ColumnName, ColumnOrdinal,
ColumnSize, NumericPrecision, NumericScale,
Datatype,ProviderType, Islong,AllowDBNull)

NOT: DataReader, verilere tek ynl(forward-only) ve okunabilir (read-only) eridii iin


olduka hzldr.

DataReader nesnesinin metotlar Tablo 4.7 de gsterilmitir.


Konu: 4 95

Metot Aklama

Close DataReader nesnesini kapatlr ve hafzadan


kaldrr.
GetBoolean Belirli bir kolonun deerini boolean olarak geri
dndrr.
GetByte Belirli bir kolonun deerini byte olarak geri
dndrr.
GetBytes Belirli bir kolonun deerini byte dizisi olarak geri
dndrr.
GetChar Belirli bir kolonun deerini char olarak geri
dndrr.
GetChars Belirli bir kolonun deerini karakter dizisi olarak
geri dndrr.
GetDataTypeName Belirli bir kolonun veri trn verir.
GetDateTime Belirli bir kolonun deerini DateTime olarak geri
dndrr.
GetDecimal Belirli bir kolonun deerini Decimal olarak geri
dndrr.
GetDouble Belirli bir kolonun deerini Double olarak geri
dndrr.
GetFieldType Belirli bir kolonun veri trn geri dndrr.
GetFloat Belirli bir kolonun deerini Float olarak geri
dndrr.
GetGuid Belirli bir kolonun deerini Globally-unique
identifier(GUID) olarak geri dndrr.
GetInt16 Belirli bir kolonun deerini 16-bit tamsay(Short)
olarak geri dndrr.
GetInt32 Belirli bir kolonun deerini 32-bit
tamsay(Integer) olarak geri dndrr.
GetInt64 Belirli bir kolonun deerini 64-bit tamsay(Long)
olarak geri dndrr.
GetName Belirli bir kolonun ismini geri dndrr.
GetOrdinal Belirli bir kolonun sra numarasn geri dndrr.
GetSchemaTable DataReader nesnesinin ema bilgilerini gsterir.
Tablo hakkndaki detay bilgilerini gsterir.
GetString Belirli bir kolonun deerini string olarak geri
dndrr.
GetTimeSpan Belirli bir kolonun deerini TimeSpan nesnesi
olarak geri dndrr.
GetValue Belirli bir kolonun deerini geri dndrr.
GetValues Belirli bir kaydn tm kolon deerlerini geri
dndrr.
NextResult Komut metninde birden fazla SELECT ifade varsa,
sonular bu metot kullanlarak farkl veri kmeleri
96 Modl 4: Connected Veritaban lemleri

gibi alnabilir.
Read DataReader nesnesinde okunacak kayt olduu
srece okuma yapar. Kayt varsa True, yoksa
False deeri geri dndrr.
Tablo 4.7 DataReader Metodlar

DataReader, Balantl veri ortamlarnda kullanld iin veri kaynana srekli


baldr. Bundan dolay veri al ilemi bittikten sonra Connection ya da
DataReader nesnesi kapatlarak, bellein daha etkin kullanlmas salanr.

DataReader nesnesinin zellikleri Tablo 4.8 de gsterilmitir.

zellik Aklama

FieldCount DataReader iinde tutulan stun saysn belirtir.


IsClosed DataReader balantsnn durumunu belirtir.
Balant ak ise FALSE , kapal ise TRUE dndrr.
Item DataReader ile gelen verilere eriim salar.
RecordAffected DataReader ile gelen kayt saysn verir.

Tablo 4.8 DataReader zellikleri


Konu: 4 97

DataReader kullanarak kayt ekmek iin aadaki admlar takip edin.

1- Balanlacak veritabanna gre Connection nesnesi eklenir


2- Balanlacak veritabanna gre OleDbCommand veya SqlCommand
nesnesi eklenir ve gerekli zellikleri ayarlanr.
3- Veritaban balants alr.
4- DataReader tanmlanr. Command nesnesinin ExecuteReader metodu
ile arlan kaytlar DataReader nesnesine atanr.
5- DataReader nesnesinin Read metodu False oluncaya kadar, kaytlar
dng ile okunur ve Form kontrollerine aktarlr.
6- DataReader kapatlr.

rnekte rn Tablosundaki tm rnler, OleDbDataReader ile form zerindeki


ListBox kontrolne eklenir.

System.Data.OleDb.OleDbCommand cmUrun = new


System.Data.OleDb.OleDbCommand("SELECT UrunAdi, StokMiktari"
+"FROM Urun", cnAlisveris);
cnAlisveris.Open();
System.Data.OleDb.OleDbDataReader rdrUrun;

rdrUrun =
cmUrun.ExecuteReader(CommandBehavior.CloseConnection);

while (rdrUrun.Read())
{
listBox1.Items.Add(rdrUrun.GetString(0)+" - "+
rdrUrun.GetInt16(1));
}
rdrUrun.Close();
98 Modl 4: Connected Veritaban lemleri

Konu 5: Command ile Kayt Dndrmeyen


Sorgular altrmak

Command ile veritaban yapsnda deiiklik yaplabilir (Tablo, View ve Stored


Procedure oluturmak, deitirmek ve silmek), gvenlik seenekleri
ayarlanabilir (Tablo ve View izinleri) ve veritaban ierisindeki veri deitirilebilir
(Kayt ekleme, silme ve gncelleme). OleDbCommand veya SqlCommand
nesnesi ile bu tr ilemlerin yaplabilmesi iin, ExecuteNonQuery metodu
kullanlr.

ExecuteNonQuery Metodu ile Select hari SQL (Structured Query Language)


ve T-SQL (Transact- Structured Query Language) komutlar kullanlr.

SQL "Structured Query Language" (Yaplandrlm Sorgulama Dili) veritaban


sorgu dilidir. SQL ile veritabanna kayt ekleme, silme, var olan kayd
dzenleme ve kayt sorgulama ilemleri yaplabilir. SQL standart bir veritaban
sorgu dilidir ve Oracle, db2, Sybase, Informix, Microsoft SQL Server, MS
Access gibi veritaban ynetim sistemlerinin temelini oluturur. En sk kullanlan
SQL komutlar SELECT, INSERT, UPDATE ve DELETE komutlardr.

SQL Servern sorgulama ve programlama diline T-SQL denir. Transact-SQL


ile ilikisel veritaban sistemi ynetilebilir. TransactSQL komutlar kullanm
amalarna gre genel kategoriye ayrlr.
Bunlar:
SQL Veri leme Dili (Data Manipulation Language-DML)
Konu: 4 99

SQL Veri leme Dili; veri girmek, deitirmek, silmek ve verileri almak iin
kullanlr. En sk kullanlan DML komutlar ve kullanm amalar Tablo 4.9
gsterilmitir.
DML Komutu Aklama

SELECT Veri semek


DELETE Veri silmek
UPDATE Veri gncellemek
INSERT Veri girmek

Tablo 4.9 DML Komutlar


SQL Veri Tanmlama Dili (Data Definition Language-DDL)
SQL Veri Tanmlama Dili; Veritaban nesnelerini yaratmak, silmek ve baz
temel zelliklerinin dzenlemek iin kullanlr. En sk kullanlan DDL komutlar
ve kullanm amalar Tablo 4.10da gsterilmitir.
DDL Komutu Aklama

CREATE Yeni bir veritaban nesnesi yaratmak. rnek


CREATE TABLE, CREATE TRIGGER
ALTER Veritaban nesnelerinde deiiklik yapmak.
rnek ALTER TABLE, ALTER TRIGGER
DROP Veritaban nesnelerini silmek. rnek DELETE
TABLE, DELETE TRIGGER

Tablo 4.10 DDL Komutlar


SQL Veri Kontrol Dili (Data Control Language-DCL)
SQL Veri Kontrol Dili; bir veritaban kullancs veya rol ile ilgili izinlerin
dzenlenmesini salar. Aadaki tablo DCL komutlarn ve fonksiyonlarn
gstermektedir.
DCL Komutu Aklama

GRANT Kullancya yetki vermek


DENY Kullanc, grup veya rol herhangi bir eylem
iin engeller.
REVOKE Daha atanm olan yetki veya engeli kaldrr.

Tablo 4.11 DCL Komutlar

ExecuteNonQuery metodu ile DDL ve DCL komutlar altrmak iin aadaki


admlar takip edin
1- Balanlacak veritabanna gre Connection nesnesi eklenir
2- Balanlacak veritabanna gre OleDbCommand veya SqlCommand
nesnesi eklenir ve gerekli zellikleri ayarlanr.
3- Veritaban balants alr.
4- Command nesnesinin ExecuteNonQuery metodu kullanlr.
5- Veritaban balants kapatlr.
100 Modl 4: Connected Veritaban lemleri

rnekte SqlCommand nesnesinin ExecuteNonQuery metodu altrlarak, rn


isminde tablo oluturulmaktadr.
System.Data.SqlClient.SqlCommand cmUrunTabloOlustur = new
System.Data.SqlClient.SqlCommand("CREATE TABLE Urun (UrunID"
+ "int, UrunAdi varchar(50), StokMiktari int) ",
connAlisveris);

cmUrunTabloOlustur.CommandType = CommandType.Text;
try
{
connAlisveris.Open();
int kayitSayisi;
kayitSayisi=cmUrunTabloOlustur.ExecuteNonQuery();
connAlisveris.Close();
MessageBox.Show(kayitSayisi+" "+"kayt eklendi.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
ExecuteNonQuery metodu ile INSERT, UPDATE ve DELETE sorgular
altrlabilir.

rnekte ExecuteNonQuery metodu altrlarak, rn tablosuna yeni kayt


eklenmitir.
System.Data.SqlClient.SqlCommand cmd = new
System.Data.SqlClient.SqlCommand("INSERT INTO Urun"+
"(UrunID,UrunAdi,StokMiktari) VALUES" +
"(@UrunID,@UrunAdi,@StokMiktari)", connAlisveris);
cmd.Parameters.Add("@UrunID", 1);
cmd.Parameters.Add("@UrunAdi", "DVD");
cmd.Parameters.Add("@StokMiktari", 15);
try
{
connAlisveris.Open();
int kayitSayisi = cmd.ExecuteNonQuery();
connAlisveris.Close();
MessageBox.Show(kayitSayisi+" "+"kayt eklendi.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
rnekte ExecuteNonQuery metodu altrlarak, rn tablosunda kayt
gncellenmitir.

System.Data.SqlClient.SqlCommand cmd = new


System.Data.SqlClient.SqlCommand("Update Urun Set" +
"StokMiktari = @StokMiktari Where UrunID = @UrunID",
connAlisveris);
cmd.Parameters.Add("@UrunID", 1);
cmd.Parameters.Add("@StokMiktari", 30);
try
{
connAlisveris.Open();
int kayitSayisi = cmd.ExecuteNonQuery();
connAlisveris.Close();
MessageBox.Show(kayitSayisi+" kayt deitirildi.");
Konu: 4 101

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
rnekte ExecuteNonQuery metodu altrlarak, rn tablosundan kayt
silinmitir.
System.Data.SqlClient.SqlCommand cmd = new
System.Data.SqlClient.SqlCommand("Delete Urun Where"+
"UrunID= @UrunID", connAlisveris);
cmd.Parameters.Add("@UrunID", 1);

try
{
connAlisveris.Open();
int kayitSayisi=cmd.ExecuteNonQuery();
connAlisveris.Close();
MessageBox.Show(kayitSayisi+" kayt silindi.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

Modl zeti

1. Balantl veri ortam hangi .NET nesneleri ile gerekletirilir?


2. Command nesnesinin ka farkl altrlma biimi vardr? Aklayn.
3. Command nesnesinin Parameters zellii ne iin kullanlr?
4. DataReader nesnesinin alma modelini bir rnekle aklayn.
5. Ka farkl SQL sorgu tr vardr?
102 Modl 4: Connected Veritaban lemleri

Lab 1: Veritaban lemleri

Bu uygulamada, veritabanndaki Personel tablosu zerinde kayt ilemleri


gerekletirilir. Personel kaytlarnn okunup TextBox kontrollerine
doldurulmas, yeni personel kaydnn eklenmesi, bir personelin bilgilerinin
gncellenmesi veya silinmesi ilemleri yaplr.

Bu lab tamamlandktan sonra:


Access veritabanna balant oluturabilecek,
Command nesnesinin ExecuteNonQuery metodu ile INSERT,
DELETE sorgusu altrabilecek,
Sorgulara parametre ekleyebilecek,
Command nesnesinin ExecuteReader metodu ile DataReader
oluturabilecek,
DataReader nesnesi ile kayt okuyabileceksiniz.

Veritabannn oluturulmas
Bu uygulamada kullanlacak Personel tablosu iin bir veritaban oluturulmas
gerekir.
1. Microsoft Access ile kisi isminde bir veritaban oluturun.
2. Veritabanna Personel isminde bir tablo ekleyin ve tabloda belirtilen
kolonlar ekleyin.
Konu: 4 103

Alan Ad Veri Tr

Numara AutoNumber
Ad Text
Soyad Text
DogumTarihi Date/Time
Adres Text
Sehir Text

Kontrollerin eklenmesi
Personel isminde yeni bir Windows projesi an.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

TextBox txtAd BorderStyle FixedSingle


TextBox txtSoyad BorderStyle FixedSingle
TextBox txtDTarihi BorderStyle FixedSingle
TextBox txtSehir BorderStyle FixedSingle
TextBox txtAdres BorderStyle FixedSingle
Multiline True
ScrollBars Vertical
ComboBox cbNo DropDownStyle DropDownList
Button btnYeni Text Yeni
Button btnIptal Text ptal
Button btnKaydet Text Kaydet
Button btnSil Text Sil
104 Modl 4: Connected Veritaban lemleri

Kodlarn yazlmas
Personel tablosu zerinde ilem yaplmas iin veritabanna balant almas
gerekir. Bu balant iin gereken Connection String ifadesinin merkezi bir
yerden alnmas, deiiklik durumunda kolaylk salayacaktr.

1. Projeye bir modl ekleyin ve balant dizisini tanmlayn.


public string connStr=@"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Samples\kisi.mdb";
DKKAT: Bu aamadan sonra kodlar, Formun kod tarafna yazlacaktr.

ExecuteNonQuery metodu
2. Veritabanna yeni bir Personel kayd eklemek iin gereken kodlar bir
yordam altnda yazn.
public void Kaydet()
{

System.Data.OleDb.OleDbConnection conn = new


System.Data.OleDb.OleDbConnection();
conn.ConnectionString = Module1.connStr;

System.Data.OleDb.OleDbCommand comm = new


System.Data.OleDb.OleDbCommand();
comm.Connection = conn
comm.CommandType = CommandType.Text;
comm.CommandText = "INSERT INTO"+
"Personel(Ad,Soyad,DogumTarihi,Adres,Sehir)"+
"values(@ad,@soyad,@tarih,@adres,@sehir)";
comm.Parameters.Add("@ad", txtAd.Text);
comm.Parameters.Add("@soyad", txtSoyad.Text);
comm.Parameters.Add("@tarih", txtDTarihi.Text);
comm.Parameters.Add("@adres", txtAdres.Text);
comm.Parameters.Add("@sehir", txtSehir.Text);
try
{
conn.Open();
comm.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
Konu: 4 105

finally
{
conn.Close();
}
}

3. Verilen bir Personel numarasna gre tablodan kayt silme ilemini


gerekletiren kodlar yazn.

public void Sil(int ID)


{
System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection();
conn.ConnectionString = Module1.connStr;

System.Data.OleDb.OleDbCommand comm = new


System.Data.OleDb.OleDbCommand();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = "Delete from Personel Where"+
"Numara=@No";
comm.Parameters.Add("@No", ID);
try
{
conn.Open();
comm.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}

ExecuteReader ve DataReader
4. ComboBox kontrolne personel numaralarn dolduran kodlar yazn. Bu
ComboBox, personel kaytlarn numaraya gre semek iin kullanlacaktr.

public void IDDoldur()


{
cbNo.Items.Clear();

System.Data.OleDb.OleDbConnection conn = new


System.Data.OleDb.OleDbConnection();
conn.ConnectionString = Module1.connStr;
System.Data.OleDb.OleDbCommand comm = new
System.Data.OleDb.OleDbCommand();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = "Select Numara from Personel";
System.Data.OleDb.OleDbDataReader dr;

try
{
conn.Open();
dr = comm.ExecuteReader();
106 Modl 4: Connected Veritaban lemleri

while(dr.Read())
{
cbNo.Items.Add(dr.GetInt32(0));
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
dr.Close();
conn.Close();

}
}
5. ComboBox kontrolnden seilen personel numarasna gre formdaki
kontrollerin doldurulmasn salayan kodlar yazn.
public void IDyeGoreFormDoldur(int ID)
{
System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection();
conn.ConnectionString = Module1.connStr;
System.Data.OleDb.OleDbCommand comm = new
System.Data.OleDb.OleDbCommand();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = "Select Ad,Soyad,Adres, Sehir, "+
"DogumTarihi from Personel Where Numara=@No";
comm.Parameters.Add("@No", ID);
System.Data.OleDb.OleDbDataReader dr;
try
{
conn.Open();
dr = comm.ExecuteReader();
if(dr.Read())
{
txtAd.Text = dr.GetString(0);
txtSoyad.Text = dr.GetString(1);
txtAdres.Text = dr.GetString(2);
txtSehir.Text = dr.GetString(3);
txtDTarihi.Text = dr.GetString(4);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
dr.Close();
conn.Close();
}

Form Kontrolleri ilemleri


6. Formdaki TextBox kontrollerinin deerlerini sfrlayan kodlar yazn.
public void Temizle()
{
Konu: 4 107

Control kontrol = new Control();


foreach(TextBox kontrol in this.Controls)
{
kontrol.Text="";
}

txtAd.Focus();
}
7. Kayt eklenmeden nce, tm deerlerin doru girilmesini kontrol eden
kodlar yazn.
public bool Kontrol()
{
if(txtAd.Text == "")
{
MessageBox.Show("Ad Giriniz");
txtAd.Focus();
return false;
}
else if(txtSoyad.Text == "")
{
MessageBox.Show("Soyad Giriniz");
txtSoyad.Focus();
return false;
}
else if(txtDTarihi.Text = "")
{

MessageBox.Show("Doum Tarihini Giriniz");


txtDTarihi.Focus();
return false;
}

else if(txtAdres.Text = "")


{
MessageBox.Show("Adresi Giriniz");
txtAdres.Focus();
return false;
}
else if(txtSehir.Text = "")
{
MessageBox.Show("ehiri Giriniz");
txtSehir.Focus();
return false;
}
else
{
return true;
}
}

Yordamlarn Formda kullanlmas


8. btnKaydet dmesinin Click olayna Kaydet ve Kontrol yordamlarn
kullanarak kaydetme ilemlerini yazn.
private void btnKaydet_Click(System.Object sender,
System.EventArgs e)
{
if(Kontrol == true)
108 Modl 4: Connected Veritaban lemleri

{
Kaydet();
btnYeni.Enabled = true;
btnKaydet.Enabled = false;
btnIptal.Enabled = false;
IDDoldur();
cbNo.SelectedIndex = cbNo.Items.Count - 1;
}

}
9. btnYeni dmesinin Click olaynda formu, yeni kayt eklemek iin
hazrlayan Temizle yordamn kullann.
private void btnYeni_Click(System.Object sender,
System.EventArgs e)
{
Temizle();
btnYeni.Enabled = false;
btnKaydet.Enabled = true;
btnIptal.Enabled = true;
cbNo.SelectedIndex = - 1;
}

10. btnIptal dmesine basld zaman kontrolleri temizleyen ve ilk kayta


dnen kodlar yazn.
private void btnIptal_Click(System.Object sender,
System.EventArgs e)
{
Temizle();
btnYeni.Enabled = true;
btnKaydet.Enabled = false;
btnIptal.Enabled = false;
cbNo.SelectedIndex = 0;
}
11. btnSil dmesine basld zaman kayt silme ilemleri gerekletiren
yordam kullann.
private void btnSil_Click(System.Object sender,
System.EventArgs e)
{
if(MessageBox.Show[cbNo.SelectedItem + " nolu kayd
silmek istiyor musunuz?", this.Text,
MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2] == DialogResult.Yes)
{
Sil(cbNo.SelectedItem);
IDDoldur();
cbNo.SelectedIndex = cbNo.Items.Count - 1;
}
}

12. Formun Load olaynda ComboBox kontroln personel numaralar ile


dolduran yordam kullann.
private void frmPersonel_Load(System.Object sender,
System.EventArgs e)
{
IDDoldur();
cbNo.SelectedIndex = 0;
}
13. ComboBox kontrolnde bir personel numaras seildiinde, bu
personele ait bilgileri forma ykleyen kodlar yazn.
Konu: 4 109

private void cbNo_SelectedIndexChanged(System.Object sender,


System.EventArgs e)
{
IDyeGoreFormDoldur(cbNo.SelectedItem);
}
Modul 6:

Modl 5: Balantsz (Disconnected) Veritaban


lemleri

Balantsz veri ortamlar, uygulamalarn veritabanndan bamsz alt


ortamlardr. Veritaban sunucusunun uzak olmas, veri ilemlerinin uzun
Konu: 5 111

srmesi ve mobil alma ihtiyac, balantsz veri ortamlarna olan ihtiyac


artrmtr.

Bu modl tamamlandktan sonra:


Balantsz veritaban mimarisini renecek,
DataAdapter nesnesinin yapsn tanyacak
DataSet nesne modelini renecek
DataTable nesne modelini renecek
Veri arama ve sralama ilemlerini reneceksiniz.

Konu 1: Disconnected Uygulamalar in


Veritaban Mimarisi

Balantsz veri ortam, uygulamann veri kaynana srekli bal kalmad


veri ortamdr. Bu modelde, veri kaynann istenen blm ekilerek bellee
alnr. Veri zerinde gerekli ilemler gerekletirildikten sonra, veri kaynana
aktarlarak gncelleme yaplr.
112 Modl 5: Disconnected Veritaban lemleri

Balantsz veri ortamlar ierisinde kullanlan snflar Tablo 5.1 de belirtilmitir.

Snf Aklama

XXXDataAdapter Connection, Command ve DataReader snflarn


kullanarak, verilerin DataSete doldurulmasn ve
DataSet de yaplan deiikliklerin veri tabanna
kaydedilmesini salar. rnein SqlDataAdapter snf
SQL Server ile DataSet arasndaki etkileimi salar.
XXXConnection Balant amak ve kapatmak iin kullanlan nesnedir.
rnein SqlConnection SQL Server a balant salar.
XXXCommand Veritaban zerinde Stored Procedure (Sakl Yordam)
veya SQL Cmleleri altrmak iin kullanlan
nesnedir. rnein SqlCommand SQL Server zerinde
Stored Procedure veya SQL Cmleleri altrmay
salar.
XXXDataReader Veritabanndan sadece okunur ve ileri hareketli
kaytlar ekmek iin kullanlr. rnein SqlDataReader
ile SQL Server zerinden kaytlar okunur. Kaytlar
SqlCommand nesnesinin ExecuteReader metodu ile
DataReadera aktarlr.

Tablo 5.1. Balantsz Veri Ortam Snflar


Konu: 5 113

Konu 2: DataSet ve DataTable


Oluturmak

Veri kaynandan DataAdapter ile ekilen verilerin, ekirdek bellee atlan


kopyas DataSet ierisinde saklanr. DataSet ile bu veriler zerinde gerekli
dzenlemeler yapldktan sonra, veriler ayn DataAdapter ile veritabanna
aktarlr.

DataSetin temel zellikleri aada listelenmitir:


Veri salayc trnden bamsz alr: DataSet tm verisalayclar
ile kullanlabilir. Tamamen trden bamsz alr.
Srekli evrimddr: DataAdapter nesnesi ile veriler DataSet ierisine
aktarlr ve balant kapatlr. Balant kesildikten sonra yaplan tm
deiiklikler DataSet ierisine kaydedilir. Bu durum uygulamann
evrimd almasn salar.
Deiikliklerin kaydn tutar: DataSet ierisinde yaplan tm
deiiklikler, DataAdapter nesnesi ile veri kaynana aktarlr.
Birden fazla tablo bulundurabilir: likisel veri tabanlarnda olduu gibi,
birden fazla tablo ve ilikileri hafzada tutmann tek yolu DataSet
kullanmaktr.
114 Modl 5: Disconnected Veritaban lemleri

DataSet Nesne Modeli

DataSet, Sanal bir veritaban yapsn temsil eder. DataTable nesnelerinden


oluur. Bu tablolar arasnda ilikiler tanmlanabilir. DataSeti oluturan nesneler:
DataTable, DataColumn, DataRow, DataRelation nesneleridir.


DataTable
Konu: 5 115

Veritaban tablolarn temsil eder. DataColumn, DataRow nesnelerinden


oluur. Primary Key alan tanmlanabilir.
DataColumn
DataTable nesnelerini oluturmak iin gereken kolonlar temsil eder.


DataRow
DataTable nesneleri iin veri satrlarn temsil eder.
DataRelationship
Tablolar arasndaki ilikileri temsil eder.
DataView
DataTable nesneleri zerinde filtreleme, veri gncellemeleri ilemleri
yapmak iin kullanlr.

rnekte ds isminde yeni bir DataSet, New anahtar szc tanmlanmaktadr.


Tanmlamada DataSete parametre olarak girilen YeniDataSet deeri,
DataSet nesnesinin DataSetName argmandr. Eer hibir isim verilmezse
varsaylan olarak NewDataSet ismi verilir.

DataSet ds = new DataSet(Yeni DataSet);

DataSet, dier bir DataSet nesnesinden kopyalanarak oluturulabilir. DataSet


kopyalamak iin iki yntem kullanlr. Birinci yntem Copy metodu ile dier bir
DataSet nesnesinin, veri ve ilikileri (eme bilgileri) kopyalanarak yeni bir
DataSet oluturmak. kinci yntem Clone metodu ile dier bir DataSet
nesnesinin ema bilgilerini kopyalanarak, yeni bir DataSet oluturmak. Bu
yntem ablon kopyalamak iin kullanlr.
116 Modl 5: Disconnected Veritaban lemleri

rnekte ds ismindeki DataSet nesnesinin tm tablo, iliki ve verileri dsCopy


ismindeki DatasSet nesnesinin ierisine aktarlmtr

DataSet dsCopy;
dsCopy = ds.Copy();

rnekte ds ismindeki DataSet nesnesinin tm tablo ve ilikileri, dsClone


ismindeki DataSet nesnesinin ierisine aktarlmtr.

DataSet dsClone;
dsClone = cd.Clone();

rnekte Stok veritabann ierisindeki tm kitaplar, DataAdapter nesnesi ile


DataSete aktarlmtr.

OleDbConnection conn = new OleDbConnection ("provider= +


microsoft.jet.oledb.4.0; data source=../stok.mdb");

OleDBDataAdapter da = new OleDbDataAdapter("select * from


+ kitaplar", conn);

DataSet ds = new DataSet(Set);

Da.Fill(ds,Kitaplar)
DataGrig1.DataSource = ds.Tables[Kitaplar];

DataSet snfnn Tables koleksiyonu ile DataSet ierisine bir veya birden ok
DataTable eklenebilir. DataSet snfnn Relations koleksiyonu ile DataSet
ierisine bir veya birden ok DataRelation eklenebilir.

rnekte dtKitaplar isminde yeni bir DataTable oluturulmaktadr.

DataTable dtKitaplar = new DataTable(Kitaplar);

Oluturulan tabloyu DataSet ierisine eklemek iin DataSet nesnesinin Tables


koleksiyonu kullanlr.

Ds.Tables.Add(dtKitaplar);

DataTable nesnesinin ierisine kolon eklenebilir. rnekte dtKitaplar ismindeki


DataTable nesnesinin ierisine, yeniId isminde yeni bir kolon eklenmektedir.
Yeni kolon eklemek iin, DataTable nesnesinin Columns koleksiyonu kullanlr.

DataColumn colKitapId = dtKitaplar.Columns.Add("yeniId");


Konu: 5 117

rnekte DataTable nesnesi iin Ucret, KDV ve Tutar isminde 3 adet kolon
oluturulmutur. rnekteki KDV kolonu, Ucret kolonun %17 deeri zerinden
hesaplanr. Tutar kolonu ise Ucret ve KDV deerinin toplam ile hesaplanr.

DataColumn colUcret = new DataColumn("Ucret");


DataColumn colKdv = new DataColumn("KDV");
colKdv.Expression = "Ucret * 0.17";
DataColumn colTutar = new DataColumn("Tutar");
colTutar.Expression = "Ucret + KDV";

Konu 3 : DataAdapter ile kaytlar


Datasete doldurmak

DataAdapter snf, DataSet ile veri kayna arasnda kpr oluturur. Veri
kaynana yaplan balant ile verilerin DataSet nesnesine aktarlmasn salar.
DataAdapter ayrca DataSet zerinde yaplan deiikliklerin veri kaynana
aktarlmasn salar.

rnekte OleDbDataAdapter ile ekilen veriler, ds ismindeki DataSet nesnesine


aktarlr. DataSet ierisindeki veriler, DataGrid ile ekranda gsterilir.

OleDbConnection conn = new OleDbConnection ("provider = "


+ "microsoft.jet.oledb.4.0; data source=C:\Stok.mdb");

OleDbDataAdapter da = new OleDbDataAdapter("select * from


kitaplar", conn);

DataSet ds = new DataSet();

da.Fill(ds,Kitaplar);
118 Modl 5: Disconnected Veritaban lemleri

DataGrid1.DataSource= ds.Tables[Kitaplar];

DataAdapter ile veri ekmek iin DataAdapter nesnesinin balang


fonksiyonuna, SELECT sorgu ve balant nesnesi parametre olarak gnderilir.

OleDbDataAdapter da = new OleDbDataAdapter("select * from


" + "kitaplar", conn);

DataAdapter ile veri ekmenin dier bir yntemi SELECT sorgu ile Command
nesnesi oluturmaktr. Oluturulan Command, DataAdapter nesnesinin
SelectCommand zelliine atanr. rnekte Command ile DataAdapter
nesnesinin beraber kullanm gsterilmektedir.

OleDbConnection conn As = new OleDbConnection ("provider = "


+ "microsoft.jet.oledb.4.0; data source=C:\Stok.mdb");

OleDbCommand cmd = new OleDbCommand("select * from


kitaplar");
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;

OleDbDataAdapter da = new OleDbDataAdapter(cmd);


DataSet ds = new DataSet();

da.Fill(ds, "kitaplar");
DataGrid1.DataSource = ds.Tables["kitaplar"];

DataAdapter nesnesinin Fill metodu veri kaynandaki veriyi DataSet veya


DataTable nesnesini doldurmak iin kullanlr. rnekte da isimli DataAdapter ile
ekilen veriler, Kitaplar tablosuna doldurulmaktadr.

da.Fill(ds, "kitaplar");

Bir DataSet iinde birden fazla tablo bulunabilir. Bu durumda DataAdapter


nesnesinin Fill metodunu birden ok kez arlr.

Fill metodu ile belirli kayt aral DataSet ierisine aktarlabilir. rnekte da isimli
DataAdapter ile ekilen ilk alt kayt, Kitaplar tablosuna aktarlr.

da.Fill(ds, 0, 5, "kitaplar");

DataSet zerinde yaplan deiiklikleri veri kaynana aktarmak iin,


DataAdapter snfnn Update metodu kullanlr. DataAdapter nesnesinin
DeleteCommand, UpdateCommand ve InsertCommand nesneleri iinde
tutulan sorgular ile gncelleme ilemi gerekletirilir. rnekte Sipari
tablosundaki tm deiiklikler veri kaynana aktarlmaktadr.

da.Update(ds, "siparisler");
Konu: 5 119

Konu4: DataSet nesnesini Kontrollere


balamak

DataSet nesnesi ile veritabannn bir kopyas ekirdek bellee atldktan sonra,
bu veriler eitli Windows Kontroller ile gsterilebilir veya deitirilebilir. Bu
kontrollerin en nemlisi DataGrid bileenidir.
120 Modl 5: Disconnected Veritaban lemleri

DataSet erisideki Veriyi Windows


Kontrollerine Balamak

DataSet nesnesin ierdii veri, Windows Form ierisindeki herhangi bir


kontrolun herhangi bir zelliine balanabilir. rnein DataSet ierisindeki bir
tablonun ilk satr ve stunundaki veri, TextBox kontrolunun Text zelliine
balanabilir.

DataSet ierisindeki veriyi Windows kontrollere balamann iki yntemi vardr.


Bu yntemler basit (simple data binding) ve karmak (complex data binding)
veri balama olarak adlandrlr.

Basit veri balama; DataSet ierisindeki bir veri elemann (DataTable


kolonunu) Windows kontrolere balama ilemidir. TextBox, Label, RadioButton
gibi kontroller bu gruba girer. rnein DataSet tablosundaki herhangi bir
kolonu TextBox, Label gibi Windows kontrollere balamak.

Karmak veri balama; DataSet iersindeki birden fazla veri elamann


Windows kontrollere balama ilemidir. DataGrid, ListBox, ErrorProvider gibi
kontroller bu gruba girer.

rnekte Dataset ierisindeki kitap_baslik kolonun deeri, TextBox ve Label


kontrollerin Text zelliine aktarlr.
Konu: 5 121

TextBox1.Text =

ds.Tables["kitaplar"].Rows[2].Item["kitap_baslik"];

Label1.Text =

ds.Tables["kitaplar"].Rows[2].Item["kitap_baslik"];

ComboBox ve ListBox gibi kontrollere veri balamak iin DataSource ve


DataMember zellii kullanlr. DataSouce zellii DataSet ierisindeki tablo
ismini DisplayMember ise Tablo kolonunu belirtir.

rnekte ComboBox ve ListBox kontrolunun DataSource ve DisplayMember


zellikleri kullanlmaktadr.

ComboBox1.DataSource = ds.Tables["kitaplar"];
ComboBox1.DisplayMember =

ds.Tables["kitaplar"].Columns["kitap_baslik"].ToString();

ListBox1.DataSource = ds.Tables["kitaplar"];
ListBox1.DisplayMember =
ds.Tables["kitaplar"].Columns["kitap_baslik"].ToString();

TreeView kontrolne veri balamak iin, TreeNode nesnesinin Text zellii


kullanlr.

TreeView1.Nodes[0].Text =
ds.Tables["kitaplar"].Rows[1].Item["kitap_baslik"];

rnekte DataSet nesnesinden gelen veriler ListView ve CheckedListBox


kontrollerine aktarlmtr.

int count ;
Count = ds.Tables["kitaplar"].Columns.Count();

for (int i=0;i< count;i++)


{
ListView1.Items.Add(ds.Tables["kitaplar"].Rows[i][0].
ToString());
}

for (int i=0;i<count;i++)


{
CheckedListBox1.Items.Add(ds.Tables["kitaplar"].Rows[i][0].
ToString());

}
122 Modl 5: Disconnected Veritaban lemleri

DataSet erisindeki Veriyi DataGride


Balamak

DataGrid, veriyi satrlar ve stunlar halinde grntler. DataGrid ile ilikisiz


DataSet Tablolar kolay bir ekilde grntlenebilir. Bu grnt excel
tablolarna benzemektedir.

DataGrid ilikili DataSet tablolarda gsterebilir. Bu durumda istenilen tabloya


DataGrid zerindeki gezinti kprlerinden eriilebilir.

DataSet tablolarn DataGrid kontrolune balamak iin iki yntem kullanlr. Bu


yntemler grafiksel ve programlama yntemleridir.

Grafiksel yntem ile balant salamak iin aadaki admlar takip edin.
Ara kutusu zerindeki DataGrid kontrolu form zerine srkleyin.
DataGrid kontrolnn DataSource zelliini, nceden oluturulmu
DataSet nesnesine balayn.
DataGrid kontrolnn DataMember zelliini , DataSet tablolarnn
herhangi biri ile balayn.

Programlama yntemi ile balant salamak iin DataGrid nesnesinin


DataSource zellii kullanlr. rnekte, DataSet ierisindeki Kitaplar tablosu
DataGrid kontrolune balanr.

DataGrid1.DataSource = ds.Tables["Kitaplar"];
Konu: 5 123

Konu : 5 DataTable zerindeki Veriyi


Dzenlemek

DataTable, veritaban tablolarn temsil eder. DataColumn, DataRow


nesnelerinden oluur. DataSet ierisinde yeni bir DataTable oluturduktan
sonra, veritaban zerinde ilem yapyormu gibi veri zerinde dzenlemeler
yaplabilir. DataTable, bu evrimd dzenlemeleri kabul veya iptal etme
olana sunar.

DataTable nesnesine, yeni bir satr eklemek iin DataRow nesnesi kullanlr.
DataTable nesnesinin NewRow metodu ile oluturulan yeni satr, DataRow
nesnesinin deikenine atanr. rnekte dtKitaplar tablosuna drNew isminde
yeni bir kolon eklenmitir.

DataRow drNew = dtKitaplar.NewRow();

DataRow nesnesi tanmlandktan sonra, index veya kolon isimleri zerinden


kolonlara deer girilir. rnekte birinci kolona kitabn ISBN numaras, ikinci
kolona ise yazar adi bilgileri girilmitir.

drNew[0] = 975-8725-14-9;
drNew[1] = Tamer ahiner;

veya

drNew[kitap_ISBN] = 975-8725-14-9;
124 Modl 5: Disconnected Veritaban lemleri

drNew[kitap_yazar] = Tamer ahiner;

Kolanlara bilgi girildikten sonra, tanmlanan DataRow nesnesi DataTable


nesnesinin Rows koleksiyonuna eklenir. rnekte drNew nesnesi, dtKitaplar
nesnesinin Rows koleksiyonuna eklenir.

dtKitaplar.Rows.Add(drNew);

DataTable nesnesine DataRow kullanmadan kayt eklenebilir. rnekte


dtKitaplar ismindeki DataTable nesnesine bu yntem ile kayt eklenmitir.

dtKitaplar.Rows.Add(New Object[] {975-8725-14-9, Tamer


ahiner});

DataRow ile DataTable ierisindeki kaytlar deitirilebilir. DataRow nesnesi ile


satr dzenleme ilemleri iin aadaki metodlar kullanlr.
BeginEdit
EndEdit
CancelEdit

BeginEdit, veriyi dzenlerken oluabilecek olaylar askya alr. Veriyi


dzenlemek iin Items koleksiyonu kullanlr. EndEdit metodu ile, askya
alnan olaylar yeniden aktif edilir. CancelEdit metodu ile deiikliklerden ve
askya alnan olaylardan vazgeilir. rnekte DataTable ierisindeki drdnc
kayt iin gncelleme ilemi yaplmtr.
Konu: 5 125

DataRow drNew = dtKitaplar.Rows[3];


drNew.BeginEdit();
drNew["kitap_baslik"] = "yeni hayat";
drNew["kitap_yazar"] = "can dndar";
drNew.EndEdit();

DataRow ile DataTable ierisindeki belirli bir satr silinebilir. rnekte DataTable
ierisindeki drdnc kayt silinmitir.

DataRow drSil = dtKitaplar.Rows[3];


dtKitaplar.Rows.Remove(drSil);

DataRow nesnesinin Delete metodu kullanlarak aktif kayt silinebilir.

DrSil.Delete();

Windows Form ile Kayt zerinde Hareket


Salamak

Verileri dzenlemeden nce, hangi veri zerinde dzenleme yaplacann


tespit edilmesi gerekir. Windows Form uygulamalar, veri iinde hareket
salanan nesneler ile verilerin bal olduu katman ynetebilir. DataSet,
DataTable veya DataView ile kaytlar zerinde hareket salayan nesneye
CurrencyManager denir.

DataSet iinde oklu veri kayna tutulabildii iin, birden fazla


CurrencyManager nesnesi ierebilir.
126 Modl 5: Disconnected Veritaban lemleri

Belirli bir satra gidebilmek iin, CurrencyManager nesnesinin Position zellii


kullanlr.

rnekte dtKitaplar tablosunun kaytlar arasnad ilk, son, nceki ve sonraki


satra hareket salanmtr.

CurrencyManager cmKitaplar = new CurrencyManager();

private void Form1_Load()


{
txtKitapAdi.DataBindings.Add("Text", dtKitaplar, _
"kitap_baslik");
cmKitaplar = (CurrencyManager)BindingContext[dtKitaplar];

cmKitaplar.Position = 0;
}

private void btnMoveNext()


{
If (cmKitaplar.Position != cmKitaplar.Count)
{
cmKitaplar.Position += 1;
}
}
private void btnMoveFirst()
{
cmKitaplar.Position = 0;
}

private void btnMovePrevious()


{
If (cmKitaplar.Position != 0)
{
cmKitaplar.Position -= 1;
}
}

private void btnMoveLast()


{
cmKitaplar.Position = cmKitaplar.Count-1;
}
Konu: 5 127

Lab 1: Balantsz Veritaban lemleri

Bu uygulamada, veritabanndaki Personel tablosu zerinde kayt ilemleri


gerekletirilir. Personel kaytlarnn okunup DataGrid kontrolune
doldurulmas, kaytlar arasnda gezinti, yeni personel kaydnn eklenmesi, bir
personelin bilgilerinin gncellenmesi veya silinmesi ilemleri yaplr.

Bu lab tamamlandktan sonra:


Access veritabanna balant oluturabilecek,
DataGrid kontrolne kayt doldurabilecek,
DataGrid kontroln biimlendirebilecek,
Kaytlar arasnda dolaabilecek,
Kayt ekleme, gncelleme ve silme ilemlerini DataSet ierisinde
gerekletirebilecek.
DataSet ierisindeki deiiklikleri veritabanna kaydedebileceksiniz.

Veritabannn oluturulmas
Bu uygulamada kullanlacak Personel tablosu iin bir veritaban oluturulmas
gerekir.
3. Microsoft Access ile kisi isminde bir veritaban oluturun.
4. Veritabanna Personel isminde bir tablo ekleyin ve tabloda belirtilen
kolonlar ekleyin.
128 Modl 5: Disconnected Veritaban lemleri

Alan Ad Veri Tr

Numara AutoNumber
Ad Text
Soyad Text
DogumTarihi Date/Time
Adres Text
Sehir Text

Kontrollerin eklenmesi
Baglantsz_Personel isminde yeni bir Windows projesi an.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

DataGrid dgPersonel ReadOnly True


TextBox txtAd BorderStyle FixedSingle
TextBox txtSoyad BorderStyle FixedSingle
TextBox txtDogumTarihi BorderStyle FixedSingle
TextBox txtSehir BorderStyle FixedSingle
TextBox txtAdres BorderStyle FixedSingle
Multiline True
ScrollBars Vertical
Button btnYeni Text Yeni
Button btnIptal Text ptal
Button btnKaydet Text Kaydet
Button btnSil Text Sil
Button btnVDoldur Text Veritabanindan Getir
Button btnVKaydet Text Veritabanina Kaydet
Button btnCikis Text ks
Konu: 5 129

Balant Cmlesinin oluturulmas


Personel tablosu zerinde ilem yaplmas iin veritaban balantsnn kurulmas
gerekir. Bu balant iin gereken Connection String cmlesini Server Explorer
kullanarak oluturun.

Baglantsz_Personel uygulamas iin yeni balant oluturmak.


1. Server Explorer penceresi zerinde farenin sa butonunu tklayn. Alan
menden Add Connection komutunu tklayn.
2. Alan Data Link Properties penceresinin Provider sekmesini tklayn.
3. Provider sekmesinden Microsoft.Jet.OLEDB.4.0 Provider i seerek
Next butonunu tklayn.
130 Modl 5: Disconnected Veritaban lemleri

4. Alan Connection sekmesinin grntsn resimdeki gibi dzenleyerek OK


butonunu tklayn.

Balantnn Oluturulmas
Kisi veritabanna balant salamak iin OleDbConnection oluturun.
1. Ara kutusu zerindeki OleDbConnection kontrolu form zerine srkleyin.
2. OleDbConnection kontrolunun ConnectionString zellii iin
oluturduunuz balant cmlesini sein.

DataAdapter nesnesinin Oluturulmas


Personel tablosunu DataSet ierisine aktarmak iin OleDbDataAdapter oluturun.
1. Ara kutusu zerindeki OleDbDataAdapter kontrolu form zerine srkleyin.
2. Karnza kan Data Adapter Configuration Wizard penceresi
zerinde Next butonunu tklayarak, bir sonraki adma gein.
3. Choose Your Data Connection penceresi zerinde, oluturduunuz
balant cmlesini sein ve Next butonunu tklayarak, bir sonraki adma
gein.
4. Choose a Query Type penceresinden Use Sql statements seeneini
sein ve Next butonunu tklayarak, bir sonraki adma gein.
5. Generate the Sql statements penceresindeki metin kutusuna SELECT
Numara, Ad, Soyad, DogumTarihi, Adres, Sehir FROM Personel
yazn ve Next butonunu tklayarak, bir sonraki adma gein.
6. Finish butonunu tklayarak Data Adapter Configuration Wizard
sihirbazn sonlandrn.
Konu: 5 131

DataSet nesnesinin Oluturulmas


Personel kaytlar ile evrimd almak iin DataSet oluturun.
1. da zerinde farenin sa butonunu tklayn.
2. Alan ksayol mensnden Generate DataSet mensn tklayn.
3. Choose a Dataset mensnden New seeneini sein ve metin kutusuna
ds yazn.
4. Ok butonunu tklayn

Dataset ierisindeki verinin DataGrid


kontrolune balanmas
Personel tablosunu DataGrid kontrolune balayn.
1. DgPersonel isimli DataGrid nesnesinin DataSource zelliine ds1 isimli
DataSet nesnesini sein
2. DgPersonel isimli DataGrid nesnesinin DataMember zelliine Personel
tablosunu sein.

Dataset ierisindeki verinin TextBox


kontrollerine balanmas
Personel tablo ierisindeki Ad, Soyad, DTarihi, Adres ve Sehir kolonlar srayla txtAd,
txtSoyad, txtDogumTarihi, txtAdres ve txtSehir metin kutularn balayn.
1. txtAd metin kutusunun DataBindings koleksiyonun Text zelliine Ad
kolonunu sein.
2. txtSoyad, txtDogumTarihi, txtAdres ve txtSehir metin kutularn srayla Soyad,
DTarihi, Adres ve Sehir kolonlarna balayn.

Kodlarn Yazlmas

14. btnDDoldur kontrolunun Click olayna kaytlar DataGrid kontrolne


dolduran kodlar yazn.
try
{
conn.Open();
da.Fill(Ds1, "Personel");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
conn.Close();
}

15. btnDKaydet kontrolunun Click olayna. DataSet kontrolundeki tm


deiiklikleri veritabanna kaydeden kodu yazn
132 Modl 5: Disconnected Veritaban lemleri

try
{
conn.Open();
da.Update(Ds1, "Personel");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
conn.Close();
}

16. btnYeni kontrolunun Click olayna. DataSet tablosu iin yeni satr
oluturan kodu yazn.
BindingContext(Ds1, "Personel").EndCurrentEdit();
BindingContext(Ds1, "Personel").AddNew();

17. btnIptal kontrolunun Click olayna. DataSet tablosu iinde eklenen yeni
satr iptal eden kodu yazn.
BindingContext(Ds1, "Personel").CancelCurrentEdit();

18. btnKaydet kontrolunun Click olayna. DataSet tablosuna yeni kayt


ekleyen kodu yazn.
BindingContext(Ds1, "Personel").EndCurrentEdit();

19. btnSil kontrolunun Click olayna. DataSet tablosundan aktif kayd silen
kodu yazn.
BindingContext(Ds1, "Personel").RemoveAt(BindingContext(Ds1,
"Personel").Position);

20. btnIlk kontrolunun Click olayna. ilk kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position = 0;

21. btnOnceki kontrolunun Click olayna. nceki kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position -= 1;

22. btnSonraki kontrolunun Click olayna. sonraki kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position += 1;

23. btnSon kontrolunun Click olayna. son kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position =
BindingContext(Ds1, "Personel").Count-1;
Konu: 5 133

Konu 6: Veri Arama ve Sralama

DataSet ierisinde veri arama ve sralama ilemleri yapmak iin, DataTable ve


DataView snfnn arama ve sralama metotlar kullanlr.

DataTable snfnn Find metodu, birincil anahtar deerine gre arama


yaplmasn salar. Select metodu ise, belirli bir arama kriterine gre arama
yaplmasn salar. Select metodu ile geriye satr koleksiyonlar dndrlr.

rnekte DataTable snfnn Find metodu ile kitap barkod numarasna gre
arama yaplmaktadr. Bu aramann sonucunda yazar ad geriye dndrlr.

OleDbConnection conn = new OleDbConnection("provider =" +


microsoft.jet.oledb.4.0;data source=c:\Proje\stok.mdb");
OleDbDataAdapter da = new OleDbDataAdapter("select * from" +
"kitaplar", conn);

DataTable tbl = new DataTable;


da.Fill(tbl);
tbl.PrimaryKey = new DataColumn()
{
tbl.Columns("kitap_ISBN");
}

DataRow row = tbl.Rows.Find("975-12-53-3");

if (row==null)
{
MessageBox.Show("Kayt Bulunamad!");
}
else
134 Modl 5: Disconnected Veritaban lemleri

{
MessageBox.Show(row["kitap_yazar"].ToString());
}

rnekte Tbl ismindeki DataTable nesnesine, DataAdapter nesnesinden gelen


kaytlar doldurulur. Tbl tablosunun Kitap_ISBN kolonu birincil anahtar olarak
atanr. Row isminde yeni bir DataRow tanmlanr. DataTable nesnesinin Find
metoduna kitabn barkod numaras girilir ve sonu Row deikenine aktarlr.
Son olarak Row deikeni ierisindeki sonu ekrana yazlr.

Arama ilemlerinde zel karakter kullanlabilir. rnein yazar ismi E harfi ile
balayan kaytlar sorgulamak iin aadaki komut kullanlr.

Select * from kitaplar Where kitap_yazar Like 'E%'

DataTable snfnn Select metodu ile DataRow nesnelerinden oluan bir


koleksiyon geri dndrr. Select metodu aslnda orjinal DataSet iindeki
satrlar iaret eden iaretiler kmesi olarak da alglanabilir. Veri kopyalama
yapmaz ancak deiimleri grntler.

rnekte DataTable snfnn Select metodu kullanlarak, kitap fiyat sekizden


farkl kaytlar gsterilmektedir. Bu kaytlar Kitap isimlerine gre sralanmtr.

DataRow selRows = tbl.Select("kitap_fiyat != 8",


"kitap_baslik ASC", DataViewRowState.CurrentRows);

foreach (DataRow row In selRows)


{
MessageBox.Show("kitap: " + row["kitap_baslik",
DataRowVersion.Original].ToString());
}

Select metodunun drt farkl kullanm vardr. Bu kullanmlar aada


listelenmitir.

public DataRow() Select()

public DataRow() Select(string filterExpression)

public DataRow() Select(string filterExpression,


string sort)

public DataRow() Select(string filterExpression,


string sort,recordStates as DataViewRowState)

Select metodunun filterExpression, Sort ve recordStates isminde


parametresi bulunur.

filterExpression, filtreleme yaplacak ifadeyi ierir.


Konu: 5 135

"Country = Turkey' AND City <> 'Ankara'"

Sort, sonularn hangi srada grntleneceini belirtir.

City DESC

Veriler artan ve azalan olmak zere iki ekilde sralanabilir. Sralanacak


kolonun sonuna; azalan sralama iin DESC, artan sralama iin ASC anahtar
szc yazlr.

recordStates ise, kaytlarn durumuna gre, (Deleted, Modified gibi) seim


yapar.

DataView zellik ve Metodlar

ADO.NET ile veri kaynandan alnan bilgileri, sralamak ve filtrelemek iin


DataView nesnesi kullanlr. DataView nesnesi ile DataTable nesneleri
zerinde arama veya sralama ilemleri yaplabilir. DataView, dier kontrollere
balanabilen bir nesnedir.

DataView nesnesi oluturmak iin iki yntem kullanlr. Bu yntemler grafiksel


ve programlama yntemleridir.

Grafiksel yntem ile balant salamak iin aadaki admlar takip edin.
Ara kutusu zerindeki DataView kontrolu form zerine srkleyin.
136 Modl 5: Disconnected Veritaban lemleri

DataView kontrolunun Table zellii ile kullanlacak DataTable sein.


DataView kontrolnn Sort zelliine, sralanacak kolon bilgilerini girin.
DataView kontrolnn RowFilter zelliine arama sorgusunu girin.

Programlama yntemi ile DataView kullanm aada gsterilmektedir.


rnekte fiyat 8 YTL den byk kaytlar gsterilmektedir. Bu kaytlar yazar
adna gre sralanarak gsterilir.

DataView dvProducts = new DataView(ds.Tables["kitaplar"]);


dvProducts.Sort = "kitap_yazar";
dvProducts.RowFilter = "kitap_fiyat > 8";
DataGrid1.DataSource = dvProducts;

DataView snfnn Sort zelliine, sralanacak kolonun ad girilir. RowFilter


zelliine ise arama veya filtreleme sorgusu girilir.

rnekte Sipari Numaras 10300 den byk kaytlar sorgulanmaktadr

dv.RowFilter = ("SiparisID >10300") ;

rnekte Sipari Tarihi 08/25/1996 tarihinden byk olan kaytlar


sorgulanmaktadr.

dv.RowFilter = ("SiparisTarihi >#08/25/1996#");

rnekte mteri ad V ile balayan kaytlar sorgulanmaktadr.


Konu: 5 137

dv.RowFilter = ("MusteriAdi like 'V*'");

rnekte mteri ad V ile balayan veya Sipari Numaras 10300 den byk
kaytlar sorgulanmaktadr.

dv.RowFilter = ("MusteriADi like 'V*' Or SiparisID >10300");

Modl zeti

6. Balantsz veri ortam hangi .NET nesneleri ile gerekletirilir?


7. DataSet nedir? DataSet hangi nesnelerden oluur?
8. DataTable nedir? Hangi durumlarda kullanlr ?
9. DataColumn nedir? Hangi durumlarda kullanlr ?
10. DataView Nedir ? Hangi durumlarda kullanlr ?
138 Modl 5: Disconnected Veritaban lemleri

Lab 2: oklu Tablolarla almak

Bu uygulamada ayn form zerinde farkl DataTable ile allacaktr. Bu


uygulama ile Bolum tablosundaki kaytlarn alan kutuya doldurulmas, seilen
blme gre rencilerin DataGrid doldurulmas ve seilen renciye gre
ders bilgilerinin DataGrid kontrolune doldurulmas gerekletirilir. Form
zerindeki filtreleme ilemleri DataView kontrolu ile salanr.

Personel kaytlarnn okunup DataGrid kontrolune doldurulmas, kaytlar


arasnda gezinti, yeni personel kaydnn eklenmesi, bir personelin bilgilerinin
gncellenmesi veya silinmesi ilemleri yaplr

Bu lab tamamlandktan sonra:


Access veritabanna balant oluturabilecek,
DataSet zerinde birden fazla DataTable ile alabilecek,
DataView ile filtreleme ilemleri yapabilecek,
DataGrid kontrolne kayt doldurabileceksiniz.

Veritabannn projeye eklenmesi


Bu uygulamada kullanlacak Course veritaban oluturun.
1. Microsoft Access ile Dershane isminde bir veritaban oluturun.
2. Veritabann tablolarn aadaki diyagrama gre oluturun.
Konu: 5 139

Kontrollerin eklenmesi
Dershane isminde yeni bir Windows projesi an.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

DataGrid dgOgrenci ReadOnly True


DataGrid dgKurs ReadOnly True
ComboBox cbBolum DropDownStyle DropDownList
Button btnListele Text Listele
Label Label1 Text Bolm

Balant Cmlesinin oluturulmas


Dershane veritaban zerinde ilem yaplmas iin balant kurulmas gerekir. Bu
balant iin gerekli Connection String ifadesini Server Explorer kullanarak oluturun.
140 Modl 5: Disconnected Veritaban lemleri

Dershane uygulamas iin yeni balant oluturmak.


1. Server Explorer penceresi zerinde farenin sa butonunu tklayn. Alan
menden Add Connection komutunu tklayn.
2. Alan Data Link Properties penceresinin Provider sekmesini tklayn.
3. Provider sekmesinden Microsoft.Jet.OLEDB.4.0 Provider i seerek
Next butonunu tklayn.

4. Alan Connection sekmesinin grntsn resimdeki gibi dzenleyerek OK


butonunu tklayn.

Balantnn Oluturulmas
Dershane veritabanna balant salamak iin OleDbConnection oluturun.
3. Ara kutusu zerindeki OleDbConnection kontrolu form zerine srkleyin.
4. OleDbConnection kontrolunun ConnectionString zellii iin
oluturduunuz balant cmlesini sein.

DataAdapter nesnesinin Oluturulmas


Bolum tablosunu DataSet ierisine aktarmak iin OleDbDataAdapter oluturun.
1. Ara kutusu zerindeki OleDbDataAdapter kontrolu form zerine srkleyin.
2. Karnza kan Data Adapter Configuration Wizard penceresi
zerinde Next butonunu tklayarak, bir sonraki adma gein.
3. Choose Your Data Connection penceresi zerinde, oluturduunuz
balant cmlesini sein ve Next butonunu tklayarak, bir sonraki adma
gein.
4. Choose a Query Type penceresinden Use Sql statements seeneini
sein ve Next butonunu tklayarak, bir sonraki adma gein.
5. Generate the Sql statements penceresindeki metin kutusuna SELECT
Bolum, BolumID FROM Bolum yazn ve Next butonunu tklayarak, bir
sonraki adma gein.
Konu: 5 141

6. Finish butonunu tklayarak Data Adapter Configuration Wizard


sihirbazn sonlandrn.
7. Eklediiniz OleDbDataAdapter kontrolunun ismini daBolum olarak deitirin.

Ogrenci tablosunu DataSet ierisine aktarmak iin OleDbDataAdapter oluturun.


1. Ara kutusu zerindeki OleDbDataAdapter kontrolu form zerine srkleyin.
2. Karnza kan Data Adapter Configuration Wizard penceresi
zerinde Next butonunu tklayarak, bir sonraki adma gein.
3. Choose Your Data Connection penceresi zerinde, oluturduunuz
balant cmlesini sein ve Next butonunu tklayarak, bir sonraki adma
gein.
4. Choose a Query Type penceresinden Use Sql statements seeneini
sein ve Next butonunu tklayarak, bir sonraki adma gein.
5. Generate the Sql statements penceresindeki metin kutusuna
SELECT OgrenciID, Ad, Soyad, Adres, BolumID, Sehir FROM
Ogrenci yazn ve Next butonunu tklayarak, bir sonraki adma gein.
6. Finish butonunu tklayarak Data Adapter Configuration Wizard
sihirbazn sonlandrn.
7. Eklediiniz OleDbDataAdapter kontrolunun ismini daOgrenci olarak
deitirin.

Kurs ve OgrenciDersKayit tablolarn DataSet ierisine aktarmak iin


OleDbDataAdapter oluturun.
1. Ara kutusu zerindeki OleDbDataAdapter kontrolu form zerine srkleyin.
2. Karnza kan Data Adapter Configuration Wizard penceresi
zerinde Next butonunu tklayarak, bir sonraki adma gein.
3. Choose Your Data Connection penceresi zerinde, oluturduunuz
balant cmlesini sein ve Next butonunu tklayarak, bir sonraki adma
gein.
4. Choose a Query Type penceresinden Use Sql statements seeneini
sein ve Next butonunu tklayarak, bir sonraki adma gein.
5. Generate the Sql statements penceresindeki metin kutusuna
SELECT OgrenciDersKayit.OgrenciID, Kurs.KursAdi,
OgrenciDersKayit.KursBasTarihi, Kurs.Kredi, Kurs.KursNo
FROM (Kurs INNER JOIN OgrenciDersKayit ON Kurs.KursNo =
OgrenciDersKayit.KursNo)yazn ve Next butonunu tklayarak, bir
sonraki adma gein.
6. Finish butonunu tklayarak Data Adapter Configuration Wizard
sihirbazn sonlandrn.
7. Eklediiniz OleDbDataAdapter kontrolunun ismini daKurs olarak deitirin.

DataSet nesnesinin Oluturulmas


Bolum, renci ve Kurs tablolar ile evrimd almak iin DataSet oluturun.
1. daBolum zerinde farenin sa butonunu tklayn.
2. Alan ksayol mensnden Generate DataSet mensn tklayn.
3. Choose a Dataset mensnden New seeneini sein ve metin kutusuna
ds yazn.
4. Ok butonunu tklayn
5. daOgrenci zerinde farenin sa butonunu tklayn.
6. Alan ksayol mensnden Generate DataSet mensn tklayn
7. Choose a Dataset mensnden Existing seeneini sein ve alan
kutudan Dershane.ds seeneini sein.
142 Modl 5: Disconnected Veritaban lemleri

8. Ok butonunu tklayn.
9. daKurs zerinde farenin sa butonunu tklayn.
10. Alan ksayol mensnden Generate DataSet mensn tklayn
11. Choose a Dataset mensnden Existing seeneini sein ve alan
kutudan Dershane.ds seeneini sein.
12. Ok butonunu tklayn.

DataView nesnesinin Oluturulmas


DataTable nesneleri zerinde filtreleme ilemleri yapmak iin DataView
oluturun.
Ogrenci tablosunu filtrelemek iin aadaki admlar takip edin.
1. Ara kutusu zerindeki DataView kontrolu form zerine srkleyin.
2. Eklediiniz DataView kontrolunun ismini dvOgrenci olarak deitirin.
3. DataView kontrolunun Table zellii iin Ogrenci tablosunu sein.

Kurs tablosunu filtrelemek iin aadaki admlar takip edin.


1. Ara kutusu zerindeki DataView kontrolu form zerine srkleyin.
2. Eklediiniz DataView kontrolunun ismini dvKurs olarak deitirin.
3. DataView kontrolunun Table zellii iin Kurs tablosunu sein

Dataset ierisindeki verinin ComboBox


kontrolne balanmas
Bolum tablosunu cbBolum isimli alan kutuya balayn.
4. CbBolum isimli alan kutunun DataSource zelliine Bolum tablosunu sein.
5. CbBolum isimli alan kutunun DisplayMember zelliine Bolum kolonunu
sein.
6. CbBolum isimli alan kutunun ValueMember zelliine BolumID kolonunu
sein.

Kodlarn Yazlmas

1. Form kontrolunun Load olayna kaytlar DataSet tablolarna dolduran


kodlar yazn.
try
{
Conn.Open();
daBolum.Fill(Ds1, "Bolum");
daOgrenci.Fill(Ds1, "Ogrenci");
daKurs.Fill(Ds1, "Kurs");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
Conn.Close();
}
Konu: 5 143

2. btnListele kontrolunun Click olayna dvOgrenci kontrolunu DataGrid


kontrolune balayan kodu yazn.
dvOgrenci.RowFilter = "BolumID='" +
cbBolum.SelectedValue + "'";
dgOgrenci.DataSource = dvOgrenci;

3. dgOgrenci kontrolunun CurrentCellChanged olayna dvKurs kontrolunu


DataGrid kontrolune balayan kodu yazn.

dvKurs.RowFilter = "OgrenciID='" +
dgOgrenci.Item(dgOgrenci.CurrentRowIndex, 0) + "' ";
dgKurs.DataSource = dvKurs;
Modul 6:

Modl 6: ASP.NET GR

ASP.NET, .Web sunucusu zerinde alan ve .NET altyapsn kullanan


gelitirme platformudur. ASP.NET Web Form nesneleri, dinamik Web
uygulamalar gelitirmeyi kolaylatrr.

Bu modl tamamladktan sonra:


Konu: 1 145

ASP.NET alma modelini renecek,


ASP.NET teknolojisinin .NET Framework atsndaki yerini renecek,
IIS Web sunucusunun yapsn renecek ve ynetebileceksiniz.

Konu 1: ASP.NET Nedir?

ASP.NET teknolojisinden nce, web zerinde dinamik sayfalarla alabilmek


iin ASP teknolojisi kullanlrd. ASP teknolojisi, .NET ats ile yeni zelliklere
eklendi.

ASP.NET ile web uygulamas gelitirmek, Windows Form tabanl uygulama


gelitirmeye olduka benzemektedir. Web Server tarafnda alan, HTML
kodlarn ve ASP kontrollerini ieren, temel ASP .NET bileenine Web Form
denir. Bir web uygulamasnda birden fazla Web Form bulunabilir.

ASP.NET sayfalar ile yazlan kodlar sunucu tarafnda alr, istemci tarafnda
eitli ilemleri gerekletirebilmek iinse Script ad verilen kodlar kullanlr.
Web uygulamasnn gvenlii ise yine sunucu tarafnda alan .NET
bileenleri ile salanr.

ASP.NET Web Formlar sunucu tarafl kodlar altrd iin, kullanc


tarafndaki taraycya ve iletim sistemine bal deildir. Dolaysyla ASP.NET
ile yazlan uygulamalar, internet eriimi olan herhangi bir aygtta alabilir.
146 Modl 6: ASP.NET Giri

Konu 2: Asp Tarihesi

HTML(Hyper Text Markup Language) web sayfas hazrlamak iin kullanlan


temel web programlama dilidir.

HTML, kullanc ile sunucu arasnda dinamik veri alverii salamaz. HTMLin
bu an kapatmak iin ilk olarak CGI arabirimi (Common Gateway Interface)
gelitirilmitir. CGI arabirimi C dilinde hazrlanan kodlar ile altrlr. CGI
arabiriminin dezavantaj, en ufak bir deiiklikte tm kaynak kodun yeniden
derlenmesidir. Bu durum zaman ve kaynak kullanmn olumsuz ynde artrr.

CGI arabirimininden sonra, sununu ile haberleen ilk dil olan PERL(Practical
Extraction and Reporting Language) gelitirilmitir. Bu dil C ve C++ ile yazlan
scriptler ierir. PERL, CGIn yeniden derlenme dezavantajn ortadan
kaldrmtr. PERL halen aktif olarak kullanlmaktadr.

Microsoft NT teknolojisini ile birlikte Internet Information Server (IIS)


sunucusunu gelitirmitir. IIS, Windows NT 3.51 ile gelen web sunucusudur. IIS
sunucusunun Windows NT 3.51 ile gelen ilk srm CGI arabirimini
desteklemektedir. Microsoft IIS sunucusunu gelitirdikten sonra, Internet
Server Application Programming Interface (ISAPI) arabirimini gelitirmitir.
Microsoft ilk defa ISAPI ile birlikte ASP teknolojisini duyurmutur. ASP
teknolojisi, IIS ve ISAPI alt yapsn birletirir. ASP, statik HTML sayfalar
ierisinde, dinamik veri alverii iin Microsoft tarafndan gelitirilmitir
Konu: 1 147

Konu 3: ASP.NET Uygulama Mimarisi

ASP.NET, multi-tier (ok katmanl) veri eriim modelini kullanr. Bu veri eriim
modeli stemci, ve Veri katmanlarndan oluur.

stemci Katman (Presentation Tier):


Bu katman, kullanc ile dier katmanlarn iletiimini salar. Bu katmanda,
kullanc arayzn oluturan bileenler bulunur. Html ve Sunucu kontroller,
Web Formlar ve kullanc tanml kontroller (User Controls) bu katman
ierisinde yer alr.

katman (Business Logic Tier) :


Bu katman uygulama ile veritaban arasnda iletiimi salar. Bu katmanda i
servisleri ve kurallarn ieren bileenler bulunur. XML Web servisleri, COM ve
COM+ nesneleri bu katman ierisinde yer alr

Veri Katman (Data Tier) :


Veri katmandr. Bu katmanda veriyi saklamak iin gerekli aralar bulunur.
likisel veritabanlar, e-mail alanlar, mesaj kuyruklar ve dizin servisleri bu
katman ierisinde yer alr. Web uygulamalarda, ASP.NET ile veri kaynana
eriim iin ADO.NET kullanlr.
148 Modl 6: ASP.NET Giri

Konu 4: Asp.Net alma Modeli

ASP.NET, ASP ve dier web platformlarna gre daha yksek performans ile
alr. ASP.NET bu performans artn Visual Studio .NET ile gelen, .NET
Framework ve CLR (Common Language Runtime) ile salar.

ASP.NET platformunu en verimli ekilde kullanmay salayan CLR bileenleri


aadaki gibidir.
Type Management
Memory Management
JIT Compilation
Exception Manager
Konu: 1 149

Tr Ynetimi (Type Management)

Gvenli olmayan bilgilere ve balatlmam deikenlere izin vermez Bu


ynetim, ASP.NETi ASPden tamamen ayran bir zelliktir.
150 Modl 6: ASP.NET Giri

JIT Derleme (JIT Compilation)

ASP.NET Web sayfalar, kullanlan dilin editrnde derlenerek, MSIL (Microsoft


Intermediate Language) diline evrilir. MSIL kodu alma zamannda, JIT ile
native code ad verilen dile evrilir.
Konu: 1 151

Hafza Ynetimi (Memory Management)

CLR ile hafza ynetimi otomatik olarak ilenir. New anahtar szc ile
oluturulan nesneler iin, CLR hafzada yer ayrr. Nesneler referanslarn
kaybettikten sonra Garbage Collection mekanizmas ile bellekten silinir.
152 Modl 6: ASP.NET Giri

Exception Yneticisi (Exception Manager)

CLR, ASP.NET uygulamalar iin yapsal hata yakalama altyaps sunar.


ASP.NET uygulamalarnda Try...Catch...Finally bloklar kullanlarak
,hata yakalama altyaps kolayca devreye sokulur.

ASP.NET uygulamalarn konfigrasyon ayarlar, XML dosyalar ierisinde


saklanr. Bu dosyalar kolayca okunur ve yazlabilir. Her web uygulamann
kendisine ait bir konfigrasyon dosyas vardr. ASP.NET uygulamalarn
konfigrasyon dosyalar web.config dir.

Sunucuya ait konfigrasyon ayarlar ise machine.config ierisinde saklanr. Her


web sunucusunda tek machine.config dosyas bulunur.

Visual Studio .NET, web uygulamalarnn performansn arttrmak ve


gvenliini salamak iin pek ok servis sunar.
Konu: 1 153

Bir ASP.NET uygulamasn oluturan bileenler aadaki gibidir.


Web Formlar: Web uygulama iin kullanc arayz salar.
Code-behind sayfalar: Web Formlarn sunucu tarafnda alan kodlarn
ierir.
Konfigrasyon dosyalar: Web uygulama ve sunucu ayarlarnn tutulduu
XML dosyalardr.
Global.asax dosyalar: Web uygulamann genel olaylarn ierir. rnein
Web uygulamann balatlmas veya durdurulmas. Global.asax dosyas
ASP deki global.asa dosyasnn gelimi versiyonudur.
154 Modl 6: ASP.NET Giri

XML Web Servis balantlar: Web uygulamann, XML web servisi


zerinden veri alveriini salar.
Veritaban balantlar, Web uygulama ile veri kayna arasnda veri
alveriini salar.
Caching (n Bellee Alma): Uygulamann ilk alt anda n bellee
atlmasn salar. Bu durum uygulamann bellekten almasn
salayarak, performans artrr.
Konu: 1 155

Konu 5: ASP.NETin .NET atsndaki Yeri

Microsoft .NET platformu, geni apl web uygulamalar gelitirebilmek iin,


gerekli her trl ara ve teknolojiye sahiptir. Dilden bamsz alabilme, eski
teknolojiden yeni teknolojilere kolayca gei imkan salar. Tamamen nesne
ynelimli programlamay destekleyen bir platform olan Visual Studio .NET, web
uygulamalarnda da nesne ynelimli programlama modelini destekler.

ekil 5.1de belirtildii gibi en st katman, kullanc ve program arayzlerini


gsterir. Bu arayzler Windows Form, Web Form, Web Service ve uygulama
servislerinden oluabilir. Orta katmanda .NET Framework snflar, alt
katmanda ise CLR bulunur.
156 Modl 6: ASP.NET Giri

Konu 6: .Net Frameworkun Asp.Netteki


Avantajlar

.Net Framework, ASP.NET ile uygulama gelitirmek iin birok avantaj salar.
Bu avantajlar aada listelenmitir.

Visual Studio .NET ortamnn en byk avantaj, birden fazla dili


destekliyor olmasdr. ASP.NET ile gelitirilen uygulamalarda, farkl
.NET dilleri bir arada kullanlabilir. rnein VB.NET ile gelitirilen bir
uygulama ierisine C# ile yazlan kod bloklar eklenebilir.
Visual Studio .NET, web uygulamalarn gvenliini salayan eitli
snflar ierir Bu snflar System.Web.Security isim alan ierisinde
bulunur.
ASP .NET sayfalar ierisinde, HTML ve Kaynak kod birlikte altrlr.
Bu durum tasarm ve programlama kolayl salar.
ASP.NET ierisinde kodlar satr satr derlenmez. Bunun yerine Web
formlar derlenir. Bu durum performansn artn salar
Gl hata yakalama aralar sunar.
Web servisleri ile birlikte alabilir.
ASP.NET, ADO.NET kullanmn kolaylatran web nesneleri ierir.
Konu: 1 157

Konu 7: ASP.NET ile Uygulama


Gelitirmek

ASP.NET ile gelitirilen uygulamalarn; Internet, Extranet veya Intranet


zerinde alabilmesi iin Web Sunucularna ihtiya duyulur. IIS (Internet
Information Services) Windows iletim sistemleri iin gelitirilmi web
sunucusudur.
158 Modl 6: ASP.NET Giri

IIS Nedir?

IIS(Internet Information Services), Windows sistemler iin web tabanl


uygulama gelitirme ve yaynlama amacyla kullanlan web sunucusudur.
Konu: 1 159

IIS Kurulumu ve Ynetimi

IIS Kurulumu

Web uygulamalar gelitirmek iin IIS 5.0 veya daha st versiyonu kurulmaldr.
IIS, Windows 2000 Server iletim sistemi ile varsaylan bileen olarak gelir.
160 Modl 6: ASP.NET Giri

Windows 2000 Professional, Windows XP Professional ve sonraki sistemlerde


ise, bu aracn kullanc tarafndan kurulmas gerekir.

IIS kurulumu iin aadaki admlar takip edilir.


1- Denetim Masas (Control Panel) penceresinde Program Ekle/Kaldr (Add
or Remove Programs) simgesini sein.
2- Alan pencerenin sol panelinden Windows Bileeni Ekle/Kaldr
(Add/Remove Windows Components) bileenini sein.
3- Windows Bileeni Ekle/Kaldr penceresinden Internet Information
Services (IIS) seerek ykleme ilemini balatn.

DKKAT: Windows NT 4.0 ve Windows XP Home Edition iletim sistemleri ile ASP.NET
uygulamas gelitirilemez.

.NET Framework kurulmadan nce IIS sunucusunun kurulmu olmasna dikkat


edilmelidir. Aksi halde ASP.NET dosyalar, ilgili ktphane dosyalar ile dzgn bir
ekilde kullanlamaz. Eer IIS kurulmadan .NET Framework kurulmaya allra,
uyar mesaj ile karlalr. Bu uyar mesaj nemsenmeden kuruluma devam
edilebilir. Framework kurulumu tamamlandktan sonra IIS kurulmaldr. Ancak IIS
yklendikten sonra, sistemin ASP.NET sayfalar ile uyum iinde alabilmesi iin
Visual Studio .NET komut satrnda aspnet_regiis.exe -I komutu altrlmaldr.

ekil 6.2: IIS Kurulumu


Konu: 1 161

IIS Ynetimi

IIS ynetimi, Internet Information Services (IIS) Manager ile


gerekletirilir.

IIS Manager amak iin aadaki admlar takip edilir.


Bilgisayarm(My Computer) ikonuna sa tklanr. Alan ksayol
mensnden Ynet (Manage) komutu seilir. Alan Computer Manager
penceresinin Services and Applications mensnden Internet
Information Services (IIS) seilir.
Denetim Masas (Control Panel) ierisinden Administrative Tools
simgesi seilir. Alan pencereden Internet Information Services
Manager seilir.

IIS ierisinde aadaki altkklasrler bulunur.


Application Pools
Web Sites
Web Service Extensions
162 Modl 6: ASP.NET Giri

Web Sites alan web uygulamalarn lisleler. Web Sites klasr altndaki
Default Web Site sekmesi zerinden web sunucu seenekleri ayarlanabilir.
Web sunucu zelliklerini deitirmek iin aadaki admlar takip edilir.

1. Internet Information Services zerinden Web Sites seilir.


2. Web Sites zerinde farenin sa tuu tklanr. Alan menden
Properties mens seilir.

Home Directory kategorisinde Local Path alannda c:\inetpub\wwwroot


ifadesi, sistemde IIS sunucusunun altraca uygulamalarn yer bilgisini
tutar.
Konu: 1 163

Resim 6.3: IIS Ynetimi

ASP.NET web uygulamalar wwwroot klasr altnda tutulur. Bu klasr altnda


tutulan klasrlerin dierlerinden fark Virtual Directory (sanal klasr)
olmalardr. .NET ile alan her yeni web uygulamas iin, wwwroot altnda yeni
bir Virtual Directory oluturulur.
Visual Studio .NET kullanmadan yeni bir Virtual Directory oluturmak iin
Default Web Site zerinde sa tklanr. kan menden New alt mensne
iaret edilir ve Virtual Directory seilir. Virtual Directory Creation
Wizard ile yeni bir Virtual Directory oluturulur.
164 Modl 6: ASP.NET Giri

.Net Framework Kurulumu

ASP.NET ile uygulama gelitirmek iin .NET Frameworkn kurulu olmas


gerekir. Frameworkn,. SDK olarak isimlendirilen 130MBlk full versiyonu ve
yalnzca temel bileenleri kapsayan 20MBlk iki farkl kurulum dosyas
bulunmaktadr.

Framework versiyon ve yamalar (Service Pack) http://


msdn.microsoft.com/netframework/downloads/updates/default.aspx
adresinden cretsiz olarak indirilebilir.

Framework kurmak iin aadaki admlar takip edilir.


1. Framework kurulum dosyas altrlr.
2. Alan penceredeki Would you like to Install Mictosoft .NET
Framework Package? sorusuna Yes cevab verilir.
3. Next butonlar tklanarak kurulum tamamlanr.

PUCU: .Net Framework kurabilmek iin iletim sisteminin Windows NT tabanl olmas
gerekir. Windows 2000 iletim sisteminde minimum SP2 yaplandrmas gereklidir.
Konu: 1 165

Modl zeti

11. ASP nedir?


12. ASP alma modelini aklayn.
13. ASP .Net uygulamasn oluturan bileenler nelerdir?
14. IIS nedir?
166 Modl 6: ASP.NET Giri

Lab 1: Web Tabanl Uygulamalarn


Yaynlanmas

Bu uygulamada IIS(Internet Information Services) kurulumu reneceksiniz.


Aynu zamanda IIS ile web tabanl uygulamalarn yaynlanmasn
reneceksiniz.

IIS(Internet Information Services) Kurulmas


1. Denetim Masas (Control Panel) penceresinde Program Ekle/Kaldr (Add or
Remove Programs) simgesini sein.
2. Alan pencerenin sol panelinden Windows Bileeni Ekle/Kaldr
(Add/Remove Windows Components) bileenini sein.
3. Windows Bileeni Ekle/Kaldr penceresinden Internet Information
Services (IIS) sein.
4. Next butonunu tklayarak kurulumu balatn.

Uygulama Yaynlamak
Default.htm ismindeki HTML sayfay IIS zerinden yaynlayn.

3. C:\Inetpub\wwwroot klasorne gidin.


4. wwwroot penceresi ierisinden Dosya mensn tklayn.
5. Dosya mens ierisinden Yeni alt mensn tklayn.
Konu: 1 167

6. Yeni alt mens ierisinden Metin Belgesi komutunu vererek Yeni


Metin Belgesi oluturun.
7. Oluturduunuz metin belgesi ierisine aadaki HTML(Hyper Text
Markup Language) kodlar ekleyin ve dosyay kaydedin.

<html>
<head>
<title>HTMLPage1</title>
</head>
<body>
<p>Ho Geldiniz.</p>

</body>
</html>

8. Metin belgesinin ismini Default.htm olarak deitirin.


9. Intrernet Explorer an ve aadaki adreslerden herhangi birini adres
ubuuna yazn.
a. http://localhost
b. http://127.0.0.1
c. http://MakinaAd
d. http://IpNumaras

Localhost: Lokal makina ad.


127.0.0.1 : Lokal IP numaras.
Makina Ad: A ierisindeki bilgisayar ad.
Ip Numaras: A ierisindeki Ip Numaras.

pucu : Web uygulamann yayn, wwwroot ierisindeki herhangi bir alt klasrden
yaplabilir. rnein http://localhost/WebUygulama. ASP.NET Web Application
uygulamalarn yayn bu yntem ile yaplr.
Modul 8:
Konu: 1 169

Modl 7: ASP.NET Web Form ve Kontrolleri ile


almak

ASP.NET ile uygulama gelitirirken kullanlan temel bileenler Web Formlar ve


Web kontrolleridir. Web Form, IIS tarafndan altrlan HTML kod ve
170 Modl 7:

kontrollerin birleiminden oluur. Bu formlara eklenen kontroller, sunucu veya


istemci tarafl alabilirler.

Bu modl tamamlandktan sonra:


Web Form yapsn ve bileenlerini renecek,
Sunucu ve istemci tarafl kontrollerin farklarn renecek,
Web kontrollerini tanyacak,
ViewState ve PostBack kavramlarn reneceksiniz.

Konu 1: Web Form Bileenleri

Web Form, ASP.NET uygulamalarnn yap tadr. Visual Studio .NET ortam
aracl ile eklenen kontrollerin ve Visual Basic .NET kodlarnn birleimi Web
Formu oluturur.

Web formlar, .aspx uzantl arayz dosyas ve. aspx.cs uzantl kod
dosyalarndan oluur. rnein default.aspx isimli ASP.NET sayfasnn, sunucu
tarafl Visual Basic .NET kodlar default.aspx.cs isimli dosyada tutulur.

Kullanc arayz sayfas ve kod sayfasnn ayr tutulmasnn yarar, web


programcsna ve web tasarmcsna ayr kaynaklar sunarak bamsz alma
ortam salamaktr.
Konu: 1 171

Web Formlar Visual Studio ile iki farkl ekilde tasarlanabilir. Design sekmesi,
web kontrollerinin grsel olarak dzenlenmesini salar. HTML sekmesi ise,
kontrollerin HTML kodlar ile eklenmesini salar.

Grsel ksmda Web Form kontrolleri ve bu kontrollere ait HTML kodlar, kod
sayfasnda da bu kontrollerin davranlarn belirleyen Visual Basic .NET
kodlar bulunur.

Web Formlarn genel zellikleri aadaki gibidir.

@Page zellii
Body zellii
Form zellii
172 Modl 7:

Page zellii

Tm sayfa iinde tanmlanacak fonksiyonlarn deerlerini ierir. <@Page>


etiketi ile gsterilir ve her .aspx uzantl dosyada bulunmas gerekir.

<@Page> etiketinde, sayfann yaps ile ilgili zellikler bulunur.

Language
Sayfa iinde kullanlacak dil seeneini bildirilir. ASP.NET uygulamalarnda
genellikle VB ve C# dilleri tercih edilir.

<@Page Language=c# >


<@Page Language=vb >

CodeBehind
Web formlarn, Visual Basic .NET veya C# uzantl kod dosyasn belirtir.

<@Page CodeBehind=WebForm1.aspx.vb >


<@Page CodeBehind=WebForm1.aspx.cs >

SmartNavigation
SmartNavigation zelliine True deeri ayarlanrsa, sayfa yeniden yklendii
zaman, kaydrma ubuklarnn sayfa ierisindeki yeri korunur. Bylece sayfa ilk
konumunda kalr. Bu zellik Internet Explorer 5.5 ve st tarayclar tarafndan
desteklenir.
Konu: 1 173

<@Page Language=c# CodeBehind=WebForm1.aspx.cs _


SmartNavigation=True >

ViewState
ASP.NET teknolojisi ile gelen yeniliklerden biridir. EnableViewState zellii ile
objenin ierisine girilen bilgi ne olursa olsun, sunucu bunu bir deikende tutup
tekrar kullancya geri dndrr. Bu durum sunucuya gnderilen veriler
zerinde hata olumas durumunda, billgilerin kaybolmamasn salar. Bu
zelliin tm kontrolleri iermesi iin, Page ynerge satrnda tanmlanmas
gerekir. Bu zellik True veya False deeri alabilir.

<@Page EnableViewState=True >

Ayrca kontrol dzeyinde EnableViewState zellii kullanlabilir. Bu durumda,


Page ynerge satrnda belirtilen deer geersiz olur.

<asp:Button EnableViewState=false >

Body zellii

Web sayfasnn ana blmdr.


<body> etiketi ile web formun gvdesi oluturulur. Kullanlan her kontrol
<body> ... </body> etiketleri arasnda bulunmaldr.

body etiketi ierisinde PageLayout(ms_positioning) zellii tanmlanabilir.


174 Modl 7:

PageLayout(ms_positioning)
Web form iinde kullanlan nesnelerin, grntlenme biimini ayarlar. Bu zellik
iki deer alabilir:

FlowLayout: Sayfaya eklenen kontroller eklenme srasna gre


sralanr. Kontrollerin yerleri srkleme ile deitirilemez.
Nesneler iin style tanmlamaz.

<body ms_positioning=FlowLayout>

</body>

GridLayout: Kontroller form zerindeki herhangi bir yere


eklenebilir. Kontrollerin yerleri srkleme ile deitirilebilir. Bu
grnmde nesneler iin style tanmlanr. Bu grnm
Windows Uygulamalardaki Form grnmne benzemektedir.

<body ms_positioning=GridLayout>

</body>

Form zellii

Web kontrolleri gruplandrmak iin kullanlr. Her web form iin tek Form etiketi
tanmlanr. Tm kontroller <form> </form> etiketleri arasna eklenir.

Form etiketi iinde tanmlanabilecek birok zellik vardr.


Konu: 1 175

Method
Web kontrol zelliklerinin, sunucuya gnderilme eklini belirler. ki deer
alabilir:

Post: sim ve deer bilgilerini, HTML bilgisinin st bilgisine


yazarak gnderir.

<form method=Post >

Get sim ve deer bilgilerini, sayfa adnn sonuna ekleyerek


gnderir.

<form method=Get >

Id
Formun isim bilgisini verir. CodeBehind sayfas ierisinde, forma ilem
yaptrmak iin kullanlr.
<form id=deneme >

Runat
Web formlarda kullanlan kontrollerin sunucu ile haberleerek alabilmesi iin
runat=server bildirimi kullanlr. Bu zellik sadece server deerini alabilir.

<form runat=server >


176 Modl 7:

Konu 2: Server(Sunucu) Kontroller

Web sunucu zerinde alan kontrollerdir. ki tr server .kontrolu vardr.


Bunlar:
HTML Server Kontrolleri
Web Server Kontrolleri (ASP.NET Kontrolleri)

ASP.NET server kontrolleri System.Web.UI.Control snfndan tretilir. Her


ASP.NET server kontrol <asp:KontrolIsmi> etiketi ile bildirilir. HTML kontrolleri
ise System.Web.UI.HtmlControls isim alannda bulunur.

Button, TextBox, DropDownList gibi server kontrollerinin alma modeli,


istemci tarafl HTML kontrollerinin alma modelinden olduka farkldr.
ASP.NET server kontrolleri, tamamen sunucu zerinde alr ve geri plandaki
tm ileyileri ara yzle gizlenerek gerekletirilir.

Bir kontroln sunucu tarafnda alt runat=server zellii ile belirlenir.

<asp:Button id=Buton1 runat=server Text=Tklaynz />

rnekte istemci tarafnda alan HTML Button kontrol gsterilmektedir.

<INPUT type=button value=Bu Bir Html Button >


Konu: 1 177

Bu kontroln sunucu tarafnda almas iin, kontrole runat zellii


eklenmelidir. Bylece kontrol HTML server kontrol haline getirilir.

<INPUT type=button id=button1 runat=server _


value=Bu Bir Html Button >

Konu 3: Kontrollerin Snflandrlmas

ASP.NET Web kontrolleri drt grupta listelenir. Bunlar;


1- Standart Kontroller (ListBox, Button, CheckBox, Table vs.)
2- Dorulama Kontrolleri (RequiredFieldValidator, RangeValida-
tor, CompareValidator, RegularExpressionValidator, Cus-
tomValidator, ValidationSummary)
3- Zengin Kontroller (Calendar, Adrotator)
4- likisel Liste Tabanl Kontroller (DataGrid, DataList, Repeater)

Standart Kontroller
Bu kontroller, HTML kontrollere alternatif olarak tasarlanmtr. Eski tip HTML
kontrolleri ile yeni ASP.NET kontrolleri arasndaki en belirgin fark, her Web
kontrolnden nce asp: n ekinin kullanlyor olmasdr.

<asp:TextBox runat=server id=giris Text=Ho Geldiniz>


</asp:TextBox>

Bu kontrollerin avantajlar aadaki gibidir.


178 Modl 7:

Benzer kontrollere dzenli biimde isimler verilir.


Tm kontroller ayn genel zelliklere sahiptir.
Tarayc iin zel kodlar kendiliinden retilir.

Bu grupta bulunan kontrollerin tm id, text, backcolor, runat zelliklerine


sahiptir. Ancak CheckBox kontrolnn Checked ve ListBox kontrolnn
SelectedItem zellikleri vardr.

Tablo 8.1de Html ve Standart sunucu kontroller gsterilmektedir.

Web kontrol Html Kontrol

<asp:Button> <input type=submit>


<asp:CheckBox> <input type=checkbox>
<asp:HyperLink> <a href=...> </a>
<asp:image> <img src=..>
<asp:imageButton> <input type=image>
<asp:LinkButton> Yok
<asp:Label> <span> </span>
<asp:ListBox> <select size=5>
</select>
<asp:Panel> <div> </div>
<asp:TextBox> <input type=text>
<asp:RadioButton> <input
type=radiobutton>
<asp:DropDownList> <select> </select>
<asp:Table> <table> </table>
Tablo 7.1 Standart Kontroller

Dorulama Kontrolleri
Kullancnn girdii deerleri kontrol etmek iin kullanlr. Kontroln yaplaca
alana ve veriye gre, farkl dorulama kontrolleri kullanlr. ASP.NET, belirli bir
aralkta veri girii salayan, karlatrma yapan ve belirli deerlerin bo
geilmemesini salayan eitli dorulama kontrolleri sunar.
RequiredFieldValidator, RangeValidator, CompareValidator,
RegularExpressionValidator, CustomValidator, ValidationSummary
kontrolleri, bu grupta yer alr.

Zengin Kontroller
AdRotator ve Calendar zengin kontroller grubunda yer alr. AdRotator, Web
sayfalar zerinde reklam yayn yapmak iin kullanlr. Calendar ise Web
saylar zerinde Takvim gstermek iin kullanlr.
Konu: 1 179

likisel Liste Tabanl Kontroller


Bu kontroller, veritabanndan ekilen kaytlarn gsterilmesini salar. DataList,
DataGrid ve Repeater kontrolleri, bu grupta yer alrlar.

Konu 4: Standart Kontroller

Label
Label,kullancya bilgi vermek iin kullanlr.

<asp:Label runat="server" Text="Label Control" Font-


Italic="true" />

Bu kontrol, Internet Explorer taraycsnda u ekilde gsterilir.

<span style="font-style:italic;">Label Control</span>

TextBox
TextBox, kullancnn bilgi giriini salar. En sk kullanlan giri .kontroludr.

<asp:TextBox id="userName" type="text" runat="server">

Bu kontrol, Internet Explorer taraycsnda u ekilde gsterilir.

<input name="userName" id="userName" type="text" />


180 Modl 7:

Web kontroller, WebControl snfndan tremilerdir. Bu yzden Web kontroller


BackColor, BorderColor, Enabled, Font, Height, Width zelliklerine sahiptir.

Button
Button, form zerindeki olaylar sunucuya yollamak iin kullanlr. En sk
kullanlan onay kontroludr.

rnekte Dugme1 isimli button tklandnda, Label kontrolune mesaj yazlr.

<asp:Button id="Dugme1" runat="server" Text="Tklaynz"


OnClick="Dugme1_Click" runat="server"/>
<span id="Message" runat="server" />
private void Dugme1(object sender, System.EventArgs e)
{
Message.InnerHtml="Beni Tkladn." ;
}

CheckBox
CheckBox, kullancya seenekler arasndan seim yapma imkn sunar.
Onay kutusu iaretlenmi ise True, iaretlenmemi ise False deerini alr.
Onay kutusunun durumu CheckedChanged metodu ile takip edilebilir.

rnekte CheckBox kontrolnn onay kutusu tkland anda Seili, seim


ilemi geri alnd anda Seili deil mesaj yazlr. Seim yapld anda
mesajn yazdrlmasn salayan AutoPostBack zelliinin, True deeridir.

void Check_Clicked(Object Sender, EventArgs e)


{
If (checkbox1.Checked )
{
Message.InnerHtml="Seili" ;
}
else
{
Message.InnerHtml="Seili Deil" ;
}
}
<asp:CheckBox id="checkbox1" runat="server"
AutoPostBack="True"
Text="ye Olmak ster misiniz?"
TextAlign="Right"
OnCheckedChanged="Check_Clicked"/>
<br>
<span id="Message" runat="server" />
Konu: 1 181

RadioButton
RadioButton, CheckBox kontrolne benzerlik gsterir. Ancak RadioButton
kontrolunun GroupName zellii ile, birden fazla RadioButton arasnda grup
oluturulur. Ayn grup ierisinden sadece bir RadioButton seilebilir. Birden
fazla seenein iaretlenmesine izin verilmez. Onay kutusunun durumu
Checked metodu ile takip edilebilir.

rnekte, RadioButton kontrolleri arasnda muzik isminde bir grup


oluturulmutur. Bu grup ierisindeki Pop, Jazz ve Classic RadioButton
kontrollerinden sadece bir tanesi seilebilir. BtnOnay isimli button tklandnda,
seilen RadioButton kontrolunun deeri Message isimli Label kontrolune
yazlr.

void BtnOnay_Clicked(Object Sender,EventArgs e)


{
if (Radio1.Checked)
{
Message.InnerHtml = "Seiminiz" + Radio1.Text;
}
else if (Radio2.Checked)
{
Message.InnerHtml = " Seiminiz " + Radio2.Text;
}
else if (Radio3.Checked)
{
Message.InnerHtml = " Seiminiz " + Radio3.Text;
}
}

<h4>Beendiiniz mzik trn seiniz:</h4>


182 Modl 7:

<asp:RadioButton id=Radio1 Text="Pop" Checked="True'


GroupName="muzik" runat="server"/>
<br>
<asp:RadioButton id=Radio2 Text="Jazz"
GroupName="muzik" runat="server"/>
<br>
<asp:RadioButton id=Radio3 Text="Classic"
GroupName="muzik" runat="server"/>
<br>
<asp:button text="Seiniz" id=BtnOnay
OnClick="BtnOnay_Clicked" runat=server/>
<br><br>
<span id="Message" runat="server" />

HyperLink
Hyperlink, sayfalar aras dolam salar. Hyperlink kontrolunun grnm
metin veya resim olabilir. ImageUrl zellii ile grntlenecek resim dosyas
belirlenir. NavigateUrl zellii ile gidilecek sayfa belirlenir.

rnekte Hyperlink kullanm gsterilmektedir.

<asp:HyperLink id="hyperlink1" runat="server"


ImageUrl="image1.gif"
NavigateUrl="http://www.bilgeadam.com"
Text="Bilge Adam BTA"
Target="_blank"/>

Target zellii, alacak sayfann ayn sayfa zerinde veya yeni bir sayfada
gsterilmesini salar. Tablo 8.2de Target zelliinin deerleri gsterilmektedir.

Target zellii Aklama

_blank Yeni sayfa


_self Ayn sayfa iinde
_search Arama sayfas
grnmnde

Tablo 7.2: Target zelliinin Deerleri

Image
Image, sayfa iinde resim grntlemek iin kullanlr. ImageUrl zellii ile
grntlenecek resim dosyas belirlenir. ImageAlign zellii resmin
hizalanmas iin kullanlr. AlternateText resime alternatif metin gstermek
iin kullanlr.

rnekte Image kullanm gsterilmektedir.

<asp:Image id="Image1" runat="server"


AlternateText="Logomuz"
Konu: 1 183

ImageAlign="left"
ImageUrl="logo.gif"/>

ImageButton
ImageButton resimli button kontroludur.

rnekte ImageButton kullanm gsterilmektedir.

void ImageButton_Click(object Source,ImageClickEventArgs e)


{
Message.InnerHtml="Resimli Dme kontroln Tkladnz" +
"Koordinatlar: (" & e.X.ToString() + ", " +
e.Y.ToString() & ")" ;
}
<asp:ImageButton id="imagebutton1" runat="server"
AlternateText="Resimli Dme Kontrol"
ImageAlign="right"
ImageUrl="image1.gif"
OnClick="ImageButton_Click"/>
<br><br>

<span id="Message" runat="server"/>

ImageButton kontrolnn ImageClickEventArgs argman nesnesi


kullanarak, kontroln bulunduu yerin koordinat deerleri alnabilir.

LinkButton
LinkButton, HyperLink grnml Button kontroldr. LinkButton
kontrolnn HyperLink kontrolnden fark ise olaylarnn olmasdr.

rnekte LinkButton kullanm gsterilmektedir.

void LinkButton1_Click(Object sender,EventArgs e)


{
Label1.Text="Link Buttona tkladnz" ;
}

<asp:LinkButton Text="Mesaj Grmek in Tklaynz."


Font-Name="Verdana" Font-Size="14pt"
onclick="LinkButton1_Click" runat="server"/>

<br>
<asp:Label id=Label1 runat=server />
184 Modl 7:

DropDownList
DropDownList, alan kutuda veri grntlemek iin kullanlr. DropDownList
eleri Items koleksiyonunda tutulur. Items koleksiyonunun Count zellii ile
toplam e says bulunur. DropDownList kontrolune tasarm veya alma
zamannda e eklenebilir.

rnekte DropDownList kontrolune tasarm zamannda e eklenmektedir.

void Button_Click(object sender, EventArgs e)


{
Label1.Text = "Konutuunuz Dil " +
dropdownlist1.SelectedItem.Text + "." ;
}

<asp:DropDownList id="dropdownlist1" runat="server">


<asp:ListItem>Trke</asp:ListItem>
<asp:ListItem>ngilizce</asp:ListItem>
<asp:ListItem>Almanca</asp:ListItem>
<asp:ListItem>talyanca</asp:ListItem>
</asp:DropDownList>
<asp:Button id="Button1" Text="Submit"
OnClick="Button_Click" runat="server"/>
<asp:label id="Label1" runat="server"/>

ListItem etiketi iindeki deerler, DropDownList elerini temsil eder.

rnekte DropDownList kontrolune alma zamannda e eklenmektedir.

<asp:DropDownList id="DropDownList1" style="Z-INDEX: 101;


Konu: 1 185

LEFT: 128px; POSITION: absolute; TOP: 160px"


runat="server" Width="152px"/>

void Page_Load(System.Object sender, System.EventArgs e)


{
for (int i=0;i<=5;i++)
{
DropDownList1.Items.Add(i.ToString);
}
}
alma zamannda eleman eklemek iin, Items koleksiyonunun Add metodu
kullanlr.

ListBox
ListBox, DropDownList kontrolne benzer. Elemanlar liste halinde gsterilir
ve SelectionMode zelliine Multiple deeri atanarak, oklu seim yapma
imkn salanr.

rnekte ListBox kontrolunn oklu seim zellii kullanlmaktadr. ListBox


kontrolu ierisinde seilen tm elemanlar Label kontrolune yazdrlr.

public void SubmitBtn_Click(object sender, EventArgs e)


{
ListItem item;
Message.Text = "";
foreach(ListItem item in ListBox1.Items)
{
if(item.Selected == true)
{
Message.Text += item.Text + " ";
}
}
}
<asp:ListBox id=ListBox1 Rows=4
SelectionMode="Multiple" Width="100px" runat="server">
<asp:ListItem>Trke</asp:ListItem>
<asp:ListItem>ngilizce</asp:ListItem>
<asp:ListItem>Almanca</asp:ListItem>
<asp:ListItem>talyanca</asp:ListItem>
</asp:ListBox>
<br>
<asp:button Text="Submit" OnClick="SubmitBtn_Click"
runat="server" />
<br>
<asp:Label id="Message" runat="server"/>

Panel
Panel, dier kontrolleri gruplandrmak iin kullanlr.

rnekte panel kullanm gsterilmektedir.


public void Button1_Click(object sender, EventArgs e)
{
186 Modl 7:

// Label kontrol oluturalm


Label label;
label = new Label();
label.Text = "Etiket";
label.ID = "Label1";
Panel1.Controls.Add(label);
Panel1.Visible = true;
}
<asp:Panel id="Panel1" runat="server"
BackColor="blue"
Height="150px"
Width="200px"
Visible=false>
Panel1
<p>
</asp:Panel>

<asp:Button id="Button1" onClick="Button1_Click"


Text="Paneli Gster" runat="server"/>

Panel1 isimli panel kontrol balangta gsterilmemektedir Button1 dmesi


tklannca, panel kontrolunun ierisine label kontrolu eklenir ve grnr hale.
getirilir. BackImageUrl zellii ile panele arka plan resmi verilir.

Table
Table, satrlarna ve stunlarna programlama yoluyla mdahale edilebilen
tablo kontroldr. Table kontrol iinde TableRow ve TableCell nesneleri
kullanlr. TableCell, tabloda bir hcreyi temsil eder. TableRow ise tabloda bir
satr temsil eder.

rnekte Tabel kullanm gsterilmektedir.

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


{
//Satr ve Stun Oluumu
int nrows = 3;
int ncells = 2;
int i;
int j;
for(j=0;j<=nrows - 1;j++)
{
TableRow r;
r = new TableRow();
for(i=1;i<=ncells;i++)
{
TableCell c;
c = new TableCell();
c.Controls.Add(new LiteralControl("Satr " +
j.ToString() + ", hcre " + i.ToString()));
r.Cells.Add(c);
}
Table1.Rows.Add(r);
}
Konu: 1 187

<asp:Table id="Table1" GridLines="Both"


HorizontalAlign="Center" Font-Name="Verdana"
Font-Size="8pt" CellPadding=15 CellSpacing=0
Runat="server"/>

Konu 5: Dorulama(Validation) Kontroller

Web forma girilecek verinin doruluunu kontrol etmek iin sklkla JavaScript
fonksiyonlar veya uzun ASP kodlar kullanlrd. Bu durum uygulama gelitirme
srecinin artmasna neden olurdu.

ASP.NET ile birlikte verinin doruluunu kontrol etmek iin dorulama


kontrolleri gelitirildi. ASP.NET, belirlsi bir aralkta veri girii salayan,
karlatrma yapan ve belirli deerlerin bo geilmemesini salayan eitli
dorulama kontrolleri sunar. Tablo 7.1 de dorulama kontrolleri listelenmitir.

Validation Kontroller Grevi

RequiredFieldValidator Bir kontrol ierisine deer girilip


girilmediini kontrol eder. Veri
girilmesi zorunlu alanlarda kullanlr.

CompareValidator Kontrol ierisine girilen deeri, sabit


deerle veya baka bir kontrole
girilen deerle karlatrr.

RangeValidator Kontrol ierisine girilen deerin, ki


sabit deer arasnda olmasn salar.
188 Modl 7:

RegularExpressionValidator Bir kontrol ierisine girilen deerin,


istenilen formatta girilmesini salar.

CustomValidator zel dorulama kontrolu yazmay


salar.

ValidationSummary Sayfada kullanlan tm validation


kontrollerin, dorulama hatalarn
zet olarak grntler.
Tablo 7.3: Dorulama Kontrolleri

Dorulama kontrollerinin ortak zellikleri aadaki gibidir.

ControlToValidate: Hangi kontroln dorulanacan belirtir.


ErrorMessage: Geerli giri yaplmamsa grntlenecek hata
mesajn verir.
Text: ErrorMessage ve Text zellii birlikte kullanlabilir. Bu
durumunda Text zelliindeki mesaj grntlenir. Dorulama
kontrollerin ErrorMessage zelliine girilen tm mesajlar
ValidationSummary ierisinde listelenir.
Display: Validation kontroln nasl grntlenecei bilgisini
tutar. Static, Dynamic ve None deerleri alr.

RequiredFieldValidator
RequiredFieldValidator, belirtilen kontroln bo geilmemesini salar.
Dorulama yaplacak web kontrolnn ismi ControlToValidate zelliine
girilir Geerli giri yaplmadnda ortaya kacak hata mesaj ErrorMessage
zellii ile belirtilir.

rnekte RequiredFieldValidator kullanm gsterilmektedir..

<asp:RequiredFieldValidator id="RequiredFieldValidator1"
style="Z-INDEX: 103; LEFT: 224px; POSITION: absolute;
TOP: 48px" runat="server"
ErrorMessage="Adnz Girmelisiniz!!!"
ControlToValidate="txtad">
</asp:RequiredFieldValidator>

CompareValidator
Kontrol ierisine girilen deeri, sabit deerle veya baka bir kontrol ile
karlatrmak iin kullanlr. Dorulama yaplacak web kontrolnn ismi
ControlToValidate zelliine girilir. Karlastrma yaplacak sabit deer
ValueToCompare zelliine girilir. Type zelliine girilen deerin veri tr,
Operator zelliine ise mantksal operatr girilir.

rnekte txtYas kontrolune yirmi veya yirmiden byk tamsay girii salayan
dorulama ilemi yaplmaktadr.
Konu: 1 189

<asp:CompareValidator id="CompareValidator1"
style="Z-INDEX: 109; LEFT: 232px; POSITION: absolute;
TOP: 88px" runat="server"
ErrorMessage="Yanz 20 ye eit veya byk olmaldr."
ValueToCompare="20"
ControlToValidate="txtYas"
Type="Integer"
Operator="GreaterThanEqual"
Width="128px">
</asp:CompareValidator>

Dorulama yaplacak web kontrolu, baka bir web kontrol ile


karlatrlacaksa ControlToCompare zellii kullanlr.

rnekte txtYas kontrolnn deeri txtKontrol deerinden byk olmaldr.

<asp:CompareValidator id="CompareValidator1"
style="Z-INDEX: 109; LEFT: 240px; POSITION: absolute;
TOP: 128px" runat="server"
ErrorMessage="yanz kontrol alannda yazlan
deerden byk olmaldr."
ControlToValidate="txtYas"
Type="Integer"
Operator="GreaterThan"
Width="144px"
ControlToCompare="txtKontrol">
</asp:CompareValidator>

RangeValidator
Kontrol ierisine girilen deerin, belirli bir deer aralnda olmasn salar.
Dorulama kontrollerinin ortak zelliklerine ek olarak MinimumValue,
MaximumValue ve Type zellikleri vardr.

rnekte txtYas kontrolune girilen deerin, otuzbe ile elli arasnda olamasn
salayan dorulama ilemi yaplmaktadr. Bu zel karakterler Tablo 7.4

<asp:RangeValidator id="RangeValidator1"
style="Z-INDEX: 109; LEFT: 240px; POSITION:
absolute; TOP: 128px" runat="server"
ErrorMessage="Yanz 35 ile 50 arasnda olmaldr."
ControlToValidate="txtYas"
Type="Integer"
MaximumValue="50"
MinimumValue="35">
</asp:RangeValidator>
190 Modl 7:

RegularExpressionValidator
Kontrol ierisine girilen deerin, istenilen formatta girilmesini salar.
ValidationExpression zelliine girilen zel karakterler ile veri giri format
salanr. Bu zel karakterler Tablo 7.4 de gsterilmektedir.

rnekte RegularExpressionValidator kontrolu ile txtMail metin kutusu iin


geerli e-mail girii salanmaktadr.

<asp:regularexpressionvalidator
id="RegularExpressionValidator1" style="Z-INDEX: 111;
LEFT: 256px; POSITION: absolute; TOP: 168px"
runat="server"
ErrorMessage="Mail giri hatas"
ControlToValidate="txtMail"
ValidationExpression=
"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:regularexpressionvalidator>

Karakter Tanm

a Bir harf kullanmn zorunlu klar.


1 1 says kullanlmak zorunda.
? 0 veya 1 e olmak zorunda
* 0dan ne kadar bir deer
+ 1den ne kadar bir deer
Konu: 1 191

[0-n] 0dan ne kadar say deer dizisi


{n} N ile belirtilen deer uzunluunda olmal
| Farkl geerli dizinler.
\ Bir komut karakterini devam ettiren karakter
\w Bir karakter olmak zorunda.
\d Bir rakam olmak zorunda.
\. Bir nokta olmak zorunda.

Tablo 7.4: Kontrol Karakterleri

rnekte ValidationExpression zelliine girilen zel karakterler ile e-mail


format oluturulmaktadr.

ValidationExpression=
"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">

\w+ : En az bir karakter ieren metin anlamna gelir.


([-+.]) : -, +, . karakterlerinden herhangi biri anlamna gelir.
* : 0dan ne kadar bir deer girilmesi gerektii anlamna gelir.
@ : @ iaretinin kullanlmas gerektiini belirtir.

rnekte ValidationExpression zelliine girilen zel karakterler ile e-mail


format oluturulmaktadr.

ValidationExpression =\w+@\w+\.\w+

CustomValidator
Ayn anda birden fazla nesnenin deerini kontrol etmek veya kullanc tanml
kontrol yazmak iin CustomValidator kontrol kullanlr.
192 Modl 7:

zellik Aklama

ClientValidationFunction stemci fonksiyon ismini belirtir.


ControlToValidate Dorulama yaplacak kontrol belirler.
Display Text zelliine girilen hata mesajnn nasl
grntlenecei belirtir.
EnableClientScript stemci skriptleri aktif hale getirir.
Varsaylan deer True dur.
Enabled Sunucu ve istemci tarafl skriptleri aktif hale
getirir. Varsaylan deer True dur.
ErrorMessage Kontrol hata mesajn gsterir.
IsValid Kontrol ilemi baar ile sonulanmsa
True, deilse False deerini dndrr.
Text Kontrol hata mesajn gsterir.
ErrorMessage ve Text zellii birlikte
kullanlabilir. Bu durumunda Text
zelliindeki mesaj grntlenir.
Tablo 7.3: CustomValidator Kontrolnn zellikleri

ServerValidate olay ve OnServerValidate metodu ile sunucu tarafl


kontroller tetiklenir.
rnekte sunucu tarafl metod oluturulmaktadr.

public void CustomValidator_SunucuKontrol(object s,


ServerValidateEventArgs e)
{

ServerValidateEventArgs parametresinin iki zellii vardr:


IsValid: Bu zellik True ise kontrol ierisine girilen deerin doruluu
salanmtr.
Value: Dorulama kontrolnn deerini verir.

CustomValidator, kredi kart numaralarnn doruluu kontrol etmek iin


kullanlabilir.

rnekte metin kutusuna girilen deerin ift olmas kontrol edilmektedir.


CustomValidator kontrolunun HTML kodlar aadaki gibidir.

<form id="Form1" method="post" runat="server">

<asp:Button id="Button1" style="Z-INDEX: 101; LEFT:


200px; POSITION: absolute; TOP: 96px" runat="server"
Text="gonder" onClick=gonder_OnClick>
</asp:Button>

<asp:CustomValidator id="CustomValidator1"
Konu: 1 193

style="Z-INDEX: 102; LEFT: 312px; POSITION: absolute;


TOP: 64px" runat="server"
ErrorMessage="ift rakam giriniz."
ControlToValidate="txtcustom" Display="Static"
OnServerValidate="ServerKontrol">
</asp:CustomValidator>

<asp:TextBox id="txtmessage" style="Z-INDEX: 103;


LEFT: 200px; POSITION: absolute; TOP: 152px"
runat="server">
</asp:TextBox>

<asp:TextBox id="txtcustom" style="Z-INDEX: 104;


LEFT: 144px; POSITION: absolute; TOP: 64px"
runat="server">
</asp:TextBox>
</form>

CustomValidator kontrolunun C# kodlar aadaki gibidir.


public void ServerKontrol(object source,
ServerValidateEventArgs args)
{
try
{

int num = int.Parse(args.Value);


args.IsValid = ((num%2) == 0);

}
catch(Exception ex)
{
args.IsValid = false;
}

}
public void gonder_OnClick(object sender, EventArgs e)
{
if(Page.IsValid)
{
txtmessage.Text = "Sayfada Hata Yok.";
}
else
{
txtmessage.Text = "Sayfa Hatal!";
}
}

ValidationSummary
ValidationSummary, dorulama kontrollerin ErrorMessage zelliine girilen
tm mesajlar listeler.

rnekte ValidationSummary kullanm gsterilmektedir.

<asp:ValidationSummary id="ValidationSummary1"
style="Z-INDEX: 114; LEFT: 72px; POSITION: absolute;
TOP: 336px" runat="server"
HeaderText="Hatalar">
</asp:ValidationSummary>
194 Modl 7:

DisplayMode zellii ile ValidationSummary kontrolunun grnts


deitirilebilir. DisplayMode, BulletList, List ve SingleParagraph
deerlerini alr. ShowMessageBox, hata listesinin mesaj kutusu iinde
grntlenmesini salar.

Konu 8: Zengin Kontroller

AdRotator
AdRotator, Web sayfalar zerinde reklam yayn yapmak iin kullanlr.
Reklam iin kullanlan banner nesneleri XML dosya ierisine kaydedilir.

rnekte AdRotator kullanm iin gerekli XML dosya (Ads.Xml)


gsterilmektedir.

<Advertisements>
<Ad>
<ImageUrl>image1.gif</ImageUrl>
<NavigateUrl>http://www.bilgeadam.com</NavigateUrl>
<AlternateText>BilgeAdam BTA</AlternateText>
<Impressions>80</Impressions>
<Keyword>Yazlm</Keyword>
</Ad>
<Ad>
<ImageUrl>image2.gif</ImageUrl>
<NavigateUrl>http://www.microsoft.com</NavigateUrl>
<AlternateText>Microsoft Site</AlternateText>
<Impressions>80</Impressions>
Konu: 1 195

<Keyword>microsoft</Keyword>
</Ad>
</Advertisements>

Ad: Her bir banner nesnesini temsil eder.


ImageUrl: Banner ierisinde grntlenecek resim dosyasn belirtir.
NavigateUrl: Gidilecek sayfann adres bilgisini belirtir.
AlternateText: Resime alternatif metin gstermek iin kullanlr.
Impression: -Banner resimlerinin uygulama sresini belirtir.
Keyword:.Banner nesneleri arasnda filtreleme oluturacak kategori adn
belirler.

AdRotator kontrolnn AdvertisementFile zellii, reklm bilgilerinin


bulunduu XML dosyay ierir. KeywordFilter zellii ise reklmlarn
filtrelenerek grntlenmesini salar.

Calendar
Calendar, web saylar zerinde Takvim gstermek iin kullanlr..

rnekte Calender kullanm gsterilmektedir.

<asp:Calendar id=takvim runat=server/>

Calendar kontrolne ait zellikler tablo 7.4de listelenmitir.

zellik Aklama

CellPadding Hcreler ve kenarlklar arasndaki


boluk deerini tutar.
CellSpacing Hcreler arasndaki boluk deerini
tutar.
DayNameFormat Gn isimlerinin grntlenme
biimini tutar. FirstLetter,
FirstTwoLetters, Full ve
Short deerleri vardr. Varsaylan
Short deeridir.
FirstDayOfWeek Haftann ilk gnn belirtir.
NextPrevFormat Next ve Previous linklerinin
biimini ayarlar. CustomText,
FullMonth, ShortMonth deerleri
alr. Varsaylan CustomText
deeridir.
SelectedDate Seilen gn bilgisini tutar. Varsaylan
deer gnn tarihidir.
SelectionMode Calendar nesnesinin seim modunu
belirler. Day, DayWeek,
DayWeekMonth ve None deerleri
196 Modl 7:

alr. Varsaylan seenek Day


deeridir.
ShowDayHeader Gn isimlerini kolonlarn zerinde
grntler.
ShowGridLines Gnleri hcreler iinde grntler.
ShowNextPrevMonth nceki ve sonraki ay linklerinin
grntlenmesini salar.
ShowTitle Takvim baln grntler.
TitleFormat Balk yazsnn biimini belirtir.

Tablo 7.4: Calendar Kontrolnn zellikleri

rnekte Calender kullanm gsterilmektedir.

<asp:Calendar id="Calendar1" style="Z-INDEX: 105; LEFT:


160px; POSITION: absolute; TOP: 248px"
runat="server" CellSpacing="2" Width="240px"
Height="152px" BorderStyle="Groove" DayNameFormat="Full"
NextPrevFormat="FullMonth">
<DayStyle Font-Bold="True" HorizontalAlign="Center"
BorderStyle="None" BorderColor="Transparent"
VerticalAlign="Top" BackColor="LightCyan">
</DayStyle>
<DayHeaderStyle Font-Underline="True" Font-Italic="True"
HorizontalAlign="Right" BorderWidth="3px"
ForeColor="DarkBlue" BorderStyle="Groove"
BorderColor="#C0FFFF" VerticalAlign="Top"
BackColor="#FFC0FF">
</DayHeaderStyle>
<WeekendDayStyle BackColor="Salmon"></WeekendDayStyle>
</asp:Calendar>
Konu: 1 197

Konu 9: AutoPostBack zellii

AutoPostBack zellii, herhangi bir sunucu kontrolnn web sunucuya


otomatik olarak bilgi gndermesini salar. Web formu doldurduktan sonra
sunucuya gndermek iin genellikle button kontrolu kullanlr.

AutoPostBack zellii, DropDownList, ListBox, CheckBox, CheckBoxList,


RadioButton, RadioButtonList, TextBox ve Button kontrolnde bulunur.

Bu zelliin True olmas, seim yapldnda veya TextBox kontrolne yeni bir
deer girildiinde sayfann yeniden yklenmesi anlamna gelir.

rnekte AutoPostBack kullanm gsterilmektedir.

<%@ Page Language="C#" Debug="true" %>


<html>
<head></head>
<body>
<form runat="server">
Bilgiiniz Yabanc Dili Seiniz:<br/><br/>
<asp:listbox id="lstDiller" runat="server" rows="3"
AutoPostBack="true"
onSelectedIndexChanged="secimGoster"/>
<br><br>
<asp:Label id=lblMesaj runat="server" /> <br/><br/>
</form>
</body>
</html>
<script language=c# runat="server">
198 Modl 7:

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


{
if(!Page.IsPostBack)
{
lstFlowers.Items.Add(new ListItem("ngilizce"));
lstFlowers.Items.Add(new ListItem("Almanca"));
lstFlowers.Items.Add(new ListItem("Franszca"));
lstFlowers.SelectedIndex = 0;
}
}
public void showSelection(object source, EventArgs e)
{
lblMesaj.Text = "Setiiniz Dil " +
lstDiller.SelectedItem.Text;
}

</script>

AutoPostBack zelliininin gereksiz yere kullanlmas performans olumsuz


ynde etkiler.

Konu 10: ViewState

ViewState, kullanc ve sunucu arasnda tanan verilerinn gizli bir alanda


ifrelenerek saklanmasn salar. Forma ait tm kontrollerin deerleri ifrelenir
ve VIEWSTATE deikende saklanr. Form sunucuya gnderildikten sonra bir
hata olumas halinde kullancdan tekrar ayn verilerin girilmesi istenmez.
nk kullancnn girmi olduu deerler bu gizli deikende saklanr ve sayfa
alnca tekrar kullancya sunulur.
Konu: 1 199

rnekte ViewState kullanm gsterilmektedir.

<input type="hidden" name="__VIEWSTATE"


value="dDwtMTY5NzI1NjkxNzs7Po5lYTu9gAdJkhGyy1Rw1gGcc+ia" />

Modl zeti

15.
Web form bileenlerini aklayn?
16. Stardart kontroller nelerdir ? Aklayn.
17. Dorulama kontrolleri nelerdir ? Aklayn.
18. Zengin kontroller nelerdir ? Aklayn.
19. AutoPostBack nedir ?
20. ViewState zelliini aklayn?
200 Modl 7:

Lab 1: E-Ticaret Uygulamas Gelitirmek

Bu uygulamada, e-ticaret uygulamasnn web formlar tasarlanacaktr. E-ticaret


uygulamas ierisinde msterilerinin kendi kaytlarn yapabilmesi iin UyeKayit
formu tasarlanacaktr. Kayt olan mterilerin rn satn alabilmesi iin sisteme
giri yapmalar gerekmektedir. Kaytl mterilerin sisteme girii UyeGiris formu
ile salancaktr. Her iki form ierisinde standart ve dorulama kontrolleri
kullanlacaktr. Ayrca kullancy ynlendirmek iin Giris, Kayt ve Sat isminde
3 ayr web form tasarlanacaktr.

Bu lab tamamlandktan sonra:


Access veritabanna balant oluturabilecek,
Web Formlar tanyacak,
Standart Kontrolleri kullanabilecek,
Dorulama kontrollerini kullanabileceksiniz.

Veritabannn projeye eklenmesi


Bu uygulamada kullanlacak Course veritaban oluturun.
10. Microsoft Access ile KitapDb isminde bir veritaban oluturun.
11. Veritabann tablolarn aadaki diyagrama gre oluturun.
Konu: 1 201

12. Veritaban ierisinde EnCokSatanlar isminde sorgu oluturun.


13. Sorgunun ierisine aadaki Select cmlesini ekleyin.
SELECT Kitap.KitapAdi, Kitap.Ucret, Kitap.KitapID
FROM Kitap INNER JOIN Siparis ON
Kitap.KitapID=Siparis.KitapID
GROUP BY Kitap.KitapAdi, Kitap.Ucret, Kitap.KitapID
ORDER BY Count(Siparis.Adet) DESC;

Web Formlarn eklenmesi


AspEticaret isminde yeni bir ASP.NET Web Application projesi an.

UyeKayit formunun eklenmesi


ASPEticaret projesine UyeKayt isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

TextBox txtAd
TextBox txtSoyad
TextBox txtEmail
TextBox txtSifre TextMode Password
TextBox txtSifreDogrula TextMode Password
RequiredFieldValidator ControlToValidate txtAd
rfvAd
ErrorMessage Ad bo geemezsiniz
Text *
RequiredFieldValidator ControlToValidate txtSoyad
rfvSoyad
ErrorMessage Soyad bo
geemezsiniz
Text *
202 Modl 7:

RequiredFieldValidator ControlToValidate txtEmail


rfvEmail
ErrorMessage E-maili bo
geemezsiniz
Text *
RequiredFieldValidator ControlToValidate txtSifre
rfvSifre
ErrorMessage ifreyi giriniz.
Text *
RequiredFieldValidator ControlToValidate txtSifreDogrula
rfvSifre2
ErrorMessage Dorulama ifresini
giriniz
Text *
RegularExpressionValidator ControlToValidate txtEmail
revEmail
ErrorMessage Hatal Email
Text *
Validation \w+([-
Expression +.]\w+)*@\w+([-
.]\w+)*\.\w+([-
.]\w+)*
CompareValidator ControlToCompare txtSifre
cvSifreDogrula
ControlToValidate txtSifre2
ErrorMessage ifreler uyumsuz
Text *
ValidationSummary vsHata
Button - btnKaydet Text Kaydet

UyeKayit Web formun Html kodlar aadaki gibi olacaktr.


Konu: 1 203

<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx"


%>
<%@ Page Language="C#" AutoEventWireup="false"
Codebehind="UyeKayit.aspx.cs"
Inherits="AspEticaret.UyeKayit" %>
<%@ Register TagPrefix="uc1" TagName="kategori"
Src="kategori.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<title>UyeKayit</title>

<meta content="Microsoft Visual Studio .NET 7.1"


name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript"
name="vs_defaultClientScript">
<meta
content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
</HEAD>
<body bgColor="#f0fff0">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3"><uc1:ust
id="Ust1" runat="server"></uc1:ust></TD>
</TR>
<TR>
<TD vAlign="top" width="150"><uc1:kategori
id="Kategori1" runat="server"></uc1:kategori></TD>
<TD width="400" height="100%">
<P>
<TABLE id="Table2" cellSpacing="0"
cellPadding="0" width="300" align="center" border="0">
<TR>
<TD style="HEIGHT: 48px"
colSpan="2">
<P align="center"><FONT
face="Tahoma" size="2"><STRONG>yelik
Bilgileri</STRONG></FONT></P>
</TD>
</TR>
<TR>
<TD style="WIDTH: 100px"><FONT
face="Tahoma" size="2">Ad*</FONT></TD>
<TD><asp:textbox id="txtAd"
runat="server"
Width="176px"></asp:textbox><asp:requiredfieldvalidator
id="rfvAd" runat="server" ControlToValidate="txtAd"
ErrorMessage="Ad bo
geemezsiniz">*</asp:requiredfieldvalidator><FONT
face="Tahoma" size="2"></FONT></TD>
</TR>
<TR>
<TD style="WIDTH: 100px"><FONT
face="Tahoma" size="2">Soyad*</FONT></TD>
<TD><asp:textbox id="txtSoyad"
runat="server"
204 Modl 7:

Width="176px"></asp:textbox><asp:requiredfieldvalidator
id="rfvSoyad" runat="server" ControlToValidate="txtSoyad"
ErrorMessage="Soyad bo
geemezsiniz.">*</asp:requiredfieldvalidator><FONT
face="Tahoma" size="2"></FONT></TD>
</TR>
<TR>
<TD style="WIDTH: 100px"><FONT
face="Tahoma" size="2">E-Mail*</FONT></TD>
<TD><asp:textbox id="txtEmail"
runat="server"
Width="176px"></asp:textbox><asp:requiredfieldvalidator
id="rfvEmail" runat="server" ControlToValidate="txtEmail"
ErrorMessage="E-maili bo geemezsiniz. "

Display="Dynamic">*</asp:requiredfieldvalidator><asp:regu
larexpressionvalidator id="revEmail" runat="server"
ControlToValidate="txtEmail" ErrorMessage="Hatal Email"
Display="Dynamic"
ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-
.]\w+)*">*</asp:regularexpressionvalidator><FONT
face="Tahoma" size="2"></FONT></TD>
</TR>
<TR>
<TD style="WIDTH: 100px"><FONT
face="Tahoma" size="2">ifre*</FONT></TD>
<TD><asp:textbox id="txtSifre"
runat="server" Width="176px"
TextMode="Password"></asp:textbox><asp:requiredfieldvalidato
r id="rfvSifre" runat="server" ControlToValidate="txtSifre"
ErrorMessage="ifreyi
giriniz.">*</asp:requiredfieldvalidator><FONT face="Tahoma"
size="2"></FONT></TD>
</TR>
<TR>
<TD style="WIDTH: 100px"><FONT
face="Tahoma" size="2">ifre Dorula*</FONT></TD>
<TD><asp:textbox
id="txtSifreDogrula" runat="server" Width="176px"
TextMode="Password"></asp:textbox><asp:requiredfieldvalidato
r id="rfvSifre2" runat="server"
ControlToValidate="txtSifreDogrula" ErrorMessage="Dorulama
ifresini giriniz."

Display="Dynamic">*</asp:requiredfieldvalidator><asp:comp
arevalidator id="cvSifreDogrula" runat="server"
ControlToValidate="txtSifreDogrula" ErrorMessage="ifreler
uyumsuz."
Display="Dynamic"
ControlToCompare="txtSifre">*</asp:comparevalidator></TD>
</TR>
<TR>
<TD style="HEIGHT: 47px"
colSpan="2">
<P align="center"><asp:button
id="btnKaydet" runat="server"
Text="Kaydet"></asp:button></P>
</TD>
</TR>
<TR>
<TD style="WIDTH: 100px"
colSpan="2"><asp:validationsummary id="vsHata"
runat="server" Width="286px"></asp:validationsummary></TD>
</TR>
<TR>
Konu: 1 205

<TD style="WIDTH: 100px; HEIGHT:


15px" colSpan="2"></TD>
</TR>
<TR>
<TD style="WIDTH: 100px"></TD>
<TD></TD>
</TR>
</TABLE>
</P>
</TD>
<TD vAlign="top" width="150"
bgColor="#0099ff"><uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Alt id="Alt1"
runat="server"></uc1:Alt></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>

UyeGiris formunun eklenmesi


ASPEticaret projesine UyeGiris isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

TextBox txtEmail
TextBox txtSifre TextMode Password
Text *
Button btnGiris Text Giri
Label lblMesaj Text
206 Modl 7:

UyeGiri Web formun Html kodlar aadaki gibi olacaktr.

<%@ Register TagPrefix="uc1" TagName="kategori"


Src="kategori.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>
<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %>
<%@ Page Language="C#" AutoEventWireup="false"
Codebehind="UyeGiris.aspx.cs"
Inherits="AspEticaret.UyeGiris" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<title>UyeGiris</title>
<meta name="GENERATOR" content="Microsoft Visual
Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body bgColor="#f0fff0">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Ust id="Ust1"
runat="server"></uc1:Ust></TD>
</TR>
<TR>
<TD width="150" vAlign="top">
<uc1:kategori id="Kategori1"
runat="server"></uc1:kategori></TD>
<TD width="400" vAlign="top">
<P>
<TABLE id="Table2" cellSpacing="0"
cellPadding="0" width="200" align="center" border="0">
<TR>
<TD style="HEIGHT: 63px"
colSpan="2">
<P align="center"><STRONG><FONT
face="Verdana" size="2"><BR>
ye
Giri</FONT></STRONG></P>
</TD>
</TR>
<TR>
<TD style="WIDTH: 66px">E-
Mail&nbsp;</TD>
<TD>
<asp:TextBox id="txtEmail"
runat="server" Width="128px"></asp:TextBox></TD>
</TR>
<TR>
<TD style="WIDTH: 66px; HEIGHT:
11px">Sifre</TD>
<TD style="HEIGHT: 11px">
<asp:TextBox id="txtSifre"
runat="server" Width="127px"
TextMode="Password"></asp:TextBox></TD>
Konu: 1 207

</TR>
<TR>
<TD style="HEIGHT: 54px"
colSpan="2">
<P align="center">
<asp:Button id="btnGiris"
runat="server" Text="Giri"></asp:Button></P>
</TD>
</TR>
<TR>
<TD colSpan="2">
<asp:Label id="lblMesaj"
runat="server"></asp:Label></TD>
</TR>
</TABLE>
</P>
</TD>
<TD width="150" bgColor="#0099ff" vAlign="top">
<uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Alt id="Alt1"
runat="server"></uc1:Alt></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>

Giris formunun eklenmesi


ASPEticaret projesine Giris isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

HyperLink lnk1 NavigateUrl UyeGiris.aspx


Text Tklaynz
HyperLink lnk2 NavigateUrl UyeKayit.aspx
Text Tklaynz
208 Modl 7:

Giris Web formun Html kodlar aadaki gibi olacaktr.

<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>


<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="kategori"
Src="kategori.ascx" %>
<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %>
<%@ Page Language="C#" AutoEventWireup="false"
Codebehind="Giris.aspx.cs" Inherits="AspEticaret.Giris" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<title>Kayit</title>
<meta name="GENERATOR" content="Microsoft Visual
Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body bgColor="#f0fff0">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Ust id="Ust1"
runat="server"></uc1:Ust></TD>
</TR>
<TR>
<TD width="150" vAlign="top">
<uc1:kategori id="Kategori1"
runat="server"></uc1:kategori></TD>
<TD width="400" vAlign="top">
<P><BR>
Sayfaya erimek iin ye girii
yapmalsnz.<BR>
Giri yapmak iin
<asp:HyperLink id="lnk1" runat="server"
NavigateUrl="UyeGiris.aspx">tklaynz</asp:HyperLink></P>
<P>ye olmak iin
Konu: 1 209

<asp:HyperLink id="lnk2" runat="server"


NavigateUrl="UyeKayit.aspx">tklaynz</asp:HyperLink></P>
</TD>
<TD width="150" bgColor="#0099ff" vAlign="top">
<uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Alt id="Alt1"
runat="server"></uc1:Alt></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>

Kayit formunun eklenmesi


ASPEticaret projesine Kayit isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

HyperLink lnk1 NavigateUrl UyeGiris.aspx


Text tklaynz

Kayit web formun Html kodlar aadaki gibi olacaktr.

<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %>


<%@ Page Language="c# " AutoEventWireup="false"
Codebehind="Kayit.aspx.cs" Inherits="AspEticaret.Kayit" %>
<%@ Register TagPrefix="uc1" TagName="kategori"
Src="kategori.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
210 Modl 7:

<HEAD>
<title>Kayit</title>
<meta name="GENERATOR" content="Microsoft Visual
Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body bgColor="#f0fff0">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Ust id="Ust1"
runat="server"></uc1:Ust></TD>
</TR>
<TR>
<TD width="150" vAlign="top">
<uc1:kategori id="Kategori1"
runat="server"></uc1:kategori></TD>
<TD width="400" vAlign="top">
<P><BR>
Kayt ilemi baaryla tamaland.<BR>
Giri yapmak iin
<asp:HyperLink id="lnk1" runat="server"
NavigateUrl="UyeGiris.aspx">tiklayiniz</asp:HyperLink></P>
</TD>
<TD width="150" bgColor="#0099ff" vAlign="top">
<uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Alt id="Alt1"
runat="server"></uc1:Alt></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>

Satis formunun eklenmesi


ASPEticaret projesine Satis isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

HyperLink lnk1 NavigateUrl Default.aspx


Text tklaynz
Konu: 1 211

Satis web formun Html kodlar aadaki gibi olacaktr.

<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>


<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="kategori"
Src="kategori.ascx" %>
<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %>
<%@ Page Language="c#" AutoEventWireup="false"
Codebehind="Satis.aspx.cs" Inherits="AspEticaret.Satis" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<title>Kayit</title>
<meta name="GENERATOR" content="Microsoft Visual
Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body bgColor="#f0fff0">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Ust id="Ust1"
runat="server"></uc1:Ust></TD>
</TR>
<TR>
<TD width="150" vAlign="top">
<uc1:kategori id="Kategori1"
runat="server"></uc1:kategori></TD>
<TD width="400" vAlign="top">
<P><BR>
Sati&nbsp;ilemi baaryla
tamaland.<BR>
Devam etmek&nbsp;iin
<asp:HyperLink id="link1" runat="server"
NavigateUrl="Default.aspx">tklaynz</asp:HyperLink></P>
</TD>
<TD width="150" bgColor="#0099ff" vAlign="top">
212 Modl 7:

<uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
<TD bgColor="#99ccff" colSpan="3">
<uc1:Alt id="Alt1"
runat="server"></uc1:Alt></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>
Modul 9:

Modl 8: ASP.NET ile Kod Gelitirmek

Bu modlde Visual Studio .NET ortam ierisinde ASP.NET uygulamalarnn


kullanm yollarn reneceksiniz.
Bu modl tamamlandktan sonra:
Inline ve Code Behind kod yazmay renecek,
214 Modl 8: Asp.Net ile Kod Gelitirmek

Client Side Server Side olay prosedrlerini renecek,


Page Event yaam dngsn tanyacaksnz.

Konu 1: Kod Yazmak

Web Form ierisinde kullanlan kontrollere ait HTML kodlar ve bu kontrollere


ait Visual Basic .NET kodlar bulunur. Web Formlarn en nemli zellii ise,
tasarm ve kod ara yzlerinin ayr tutulmasdr.

Web Forma kod eklemek iin yol izlenir:

Mixed Code: Bu metotta web ierii ile kod ayn sayfa ierisinde yazlr.
Bu metot pek tercih edilmez nk okunmas ve dzenlenmesi zordur.
Inline Code: Web ierii ile kod ayn sayfa ierisinde yer alr. ASP.NET
kodu Script etiketi ierisine yazlr.
Code-behind: HTML ierii ve Visual Basic .NET kodu tamamen ayr
dosyalarda tutulur. Kod dosyasna code-behind sayfas denir. Bu metot
Visual Studio .NET ortamnn varsaylan alma eklidir.
Konu: 1 215

Inline Kod Yazmak

Ayn .aspx dosyas iinde HTML kodu ve Visual Basic .NET kodu ayr
blmlere yazlr. Blmlerin ayr tutulmas okunabilirlii arttrr. Server tarafl
kodlar Script etiketi iersine yazlmaldr ve runat=server zellii
belirtilmelidir.

Kod 8.1: Inline Kod Yazmak

<%@ Page Language="C#" %>


<html>
<head>
<title>My First Web Form</title>
<script runat="server">
private void Page_Load (Sender As Object , e As EventArgs )
{
Message.Text = "Inline Kod Yazdk";
}
</script>
</head>
<body>
<form runat="server">
<asp:Label id="Message" runat="server" />
</form>
</body>
</html>
216 Modl 8: Asp.Net ile Kod Gelitirmek

Code-Behind Kod Yazmak

Visual Studio .NET ortamnn kulland varsaylan model code-behind tasarm


modelidir. Programlama ve tasarm sayfalar ayr tutularak alma mantna
gre ayrm yaplm olur. Code-behind sayfalar, .aspx uzantl sayfann
sonuna .cs eklenerek isimlendirilir. Webform1.aspx sayfasnn code-behind
sayfas, WebForm1.aspx.cs eklindedir.

Form zerinde bir kontrole ift tklandnda code-behind sayfas alr ve o


kontrole ait olay iin metot tanmlanr.

Code-behind sayfasnn .aspx sayfasyla birlikte alabilmesi iin, .aspx


sayfasnn Page bildiriminde, CodeBehind ve Src zelliklerine ilgili deerlerin
girilmesi gerekir.

Kod 8.2: WebForm.aspx - Code-behind kod yazmak

<%@ Page Language="c#" AutoEventWireup="false"


Codebehind="WebForm1.aspx.cs"
Inherits="ilkAspNet.WebForm1"%>
<HTML>
<HEAD>
<title>BilgeAdam</title>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:TextBox id="txtAd" runat="server"/>
<asp:Button id="btnGonder" runat="server"
Text="Gnder"></asp:Button>
<asp:Label id="lblMesaj" runat="server"></asp:Label>
Konu: 1 217

</form>
</body>
</HTML>

Kod 8.3: WebForm.aspx.cs Code-Behind Sayfas

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox txtAd;
protected System.Web.UI.WebControls.Label lblMesaj;
protected System.Web.UI.WebControls.Button btnGonder;

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


{
Response.Write("Selam");

}
private void Button1_Click(object sender, System.EventArgs e)
{
lblMesaj.Text = "Hogeldin " +
txtAd.Text.ToString();
}

Codebehind
Code-behind sayfasnn ismini temsil eder. Visual Studio .NET platformunun
dosyay birletirebilmesi iin gereklidir.

Src
Code-behind sayfasnn n derleme ileminden gemedii durumlarda bu
zellik kullanlr. Code-behind sayfasnn ismini temsil eder.
218 Modl 8: Asp.Net ile Kod Gelitirmek

Konu 2: Client Side(stemci Tarafl) Olay


Prosedrleri

Client-side olay prosedrleri, web forma istekte bulunan kullanc bilgisayar


zerinde ilenen olaylardr. Kullanc tarafnda oluan bu olaylar, sunucuya
hibir bilgi gndermezler. nk istemci tarafndaki Internet taraycs kodu alr
ve iler.

Client-side olay prosedrleri yalnzca HTML kontrolleri tarafndan kullanlr.


Client-side olay prosedrleri hibir zaman sunucu kayna kullanmaz. rnein
SQL Server veritabanna erimek iin client-side kod kullanlamaz.

Client-side olay prosedrlerini, istemci tarafnda ksa zamanda olumas


istenilen olaylar iin kullanlr. rnein, metin kutusuna girilen deerin
doruluunu kontrol etmek iin client-side kod kullanlabilir.

Client-side kodlar <Script> bloklar ierisinde tanmlanr. rnekte JavaScript


ile istemci tarafl kod tanmlanmaktadr.

<SCRIPT language=JavaScript>

</SCRIPT>
Konu: 1 219

Konu 3: Server Side(Sunucu Tarafl) Olay


Prosedrleri

Server-side olay prosedrleri, sunucu zerinde alan olaylardr. Server-side


olay prosedrleri client-side olay prosedrlerinden olduka gldr.

Server-side olay prosedrleri, web sunucusu zerinde bulunan derlenmi


kodlardan oluur. Web ve HTML server kontrolleri tarafndan oluturulan
olaylarn, ilenmesinde kullanlr. Client-side olay prosedrleri sunucu
kaynaklarn kullanamazken, server-side olay prosedrleri sunucu kaynaklarn
kullanr.

Server-side olay prosedrleri iin aadaki tanmlama yaplr.

<SCRIPT language=c# runat=server>

Client-side olay prosedrleri ile fare ve klavye olaylarna kod yazlabilir. Server-
side olay prosedrleri Click ve Change gibi olaylar iin kullanlr. Fare ve
klavye olaylar gibi ok sk gerekleebilecek olaylar desteklenmez.
220 Modl 8: Asp.Net ile Kod Gelitirmek

Olay Prosedrleri Oluturmak

Visual Studio .NET ierisinde server-side olay prosedrleri iki adm ile
oluturulur. Birinci adm olay retecek kontrolu web form zerine eklemektir.
kinci adm ise code-behind sayfasna olay prosedurn eklemektir.

Olay prosedrleri kontrolun ID zelliine girilen deerden faydalanarak


oluturulur. Handles anahtar szc kontroln hangi olay ile
ilikilendirileceini belirler. Handles anahtar szc ile tek bir olay iin birden
fazla olay prosedr oluturulabilir.

rnekte Web form ierisine btn1 isminde bir button yerletirilmitir. Eklenen
btn1 kontrolunun, retilen HTML kodu ve code-behind sayfasna eklenen olay
prosedr kod 8.4 belirtilmitir.

Kod 8.4: Button Kontrolne Click Olay ile likilendirmek

<asp:Button id=btn1 runat=server/>

...

protected System.Web.UI.WebControls.Button btn1


private void btn1_Click(object sender, System.EventArgs e)
{
//
}
Server olay prosedrlerinin almasn salamak iin kontrollerin WithEvents
anahtar szc ile tanmlanmas gerekir.
Konu: 1 221

Olay prosedrlerine iki parametre girilmelidir.


Sender: Olay tetikleyen kontrol nesnesidir.
EventArgs: Olaya zg parametreleri ieren nesnedir.

Olay Prosedrlerinde Kontrollerle Etkileim

Web uygulamalarnda, genellikle kontrollerden veri alma ve kontrollere veri


gnderme ilemlerine ihtiya duyulur. Server-side olay prosedrleri bu tr zor
ilemlerin kolayca yaplmasn salar.

rnekte txtAd isimli metin kutusuna girilen deer lblMesaj isimli etikete
yazdrlmaktadr.

Kod 8.5: Olay prosedrleriyle almak

<asp:TextBox id=txtAd runat=server />


<asp:Button id=btn1 runat=server/>
<asp:Label id=lblMesaj runat=server />

private void Page_Load(System.Object sender,


System.EventArgs e)
{
Button1.Click +=new EventHandler(btn1_Click);
}

private void btn1_Click (ByVal sender As System.Object, _


ByVal e As System.EventArgs)
{
string mesaj = Merhaba + txtAd.Text.ToString();
lblMesaj.Text = Mesaj;
}
222 Modl 8: Asp.Net ile Kod Gelitirmek

Konu 4: Sayfa Yaam Dngs

Bir ASP.NET sayfas belirli olaylar sras ile alr. Bu sraya Sayfa Yaam
Dngs denir

Bu dng olaylar aadaki srada gerekleir.

1- Page_Init (Page Initialize Sayfann olumaya balamas): Bu


aamada sayfa balatlr ve sayfadaki kontroller oluturulur.
2- Page_Load (Sayfann yklenmesi): Bu olay, sayfa yklendii zaman
tetiklenir.
3- Control Events (Kullanc kontrol olaylar): Click ve Change
olaylardr. Bu olaylar kontrollerin tklanmas veya kontrol deerlerinin
deiimi ile tetiklenir. TxtAd_Changed ve Btn1_Click gibi.
4- Page_Unload (Sayfann Kapanmas): Bu olay, sayfa kapand zaman
tetiklenir.

Page Event yaam dngs sonlandnda sayfaya ait bilgiler hafzadan silinir.

Kontrol olaylarnn ou, sayfa sunucuya geri gnderilene kadar


gereklemez. rnein Click olay ile form sunucuya gnderilmeden Change
olaylar gereklemez.
Konu: 1 223

Response.Redirect

Kullancy bir sayfadan baka bir sayfaya ynlendirmek iin kullanlr.


HyperLink kontrol gibi sayfalar arasnda dolamay salar. Parametre olarak
gidilecek sayfann adresini belirtilir.

rnekte Response.Redirect metodu ile ynlendirme ilemi


gerekletirilmektedir.

Kod 8.6: Response.Redirect

private void ListBox1_SelectedIndexChanged(object sender,


System.EventArgs e)
{

} Response.Redirect(ListBox1.SelectedValue);

<asp:ListBox id="ListBox1" runat="server"


AutoPostBack="True">
<asp:ListItem
Value="http://www.yahoo.com">yahoo
</asp:ListItem>
<asp:ListItem
Value="http://www.google.com">google
</asp:ListItem>
</asp:ListBox>
224 Modl 8: Asp.Net ile Kod Gelitirmek

Postback lemleri

Sunucuya veri gnderme ilemine postback denir. rnein Button kontrol


tklannca otomatik olarak sunucuya veri yollanr.

Varsaylan olarak veri yollayan tek kontrol Button kontroldr. Dier kontroller
iin AutoPostBack zelliinin True yaplmas gerekir.

rnekte DropDownList kontrolunun AutoPostBack zelliine True deeri


girilmitir. Bu durum liste kutusundan seilen deerin sunucuya gnderilmesini
salar.

Kod 8.7 DropDownList Kontrolunun Sunucuya Gnderilmesi

<asp:DropDownList id="DropDownList1"
runat="server" AutoPostBack=True>
<asp:ListItem>Trke </asp:ListItem>
<asp:ListItem>ngilizce</asp:ListItem>
</asp:DropDownList>

<asp:TextBox id=mesaj runat=server/>

private void DropDownList1_SelectedIndexChanged(object


sender, System.EventArgs e)
{
mesaj.Text = DropDownList1.SelectedItem.Value;
}
Konu: 1 225

Page.IsPostback
Page Load olay, sayfa yklendii zaman gerekleir. Sayfaya yaplan her
istekte Page Load olay iindeki kodlar alr. Ayn sayfann her seferinde
yeniden altrlmas, istenilen bir durum deildir.

Page.IsPostback zellii ile, sayfann Load olay iindeki kodlar sadece bir
kez altrlr. Bylece sayfa yeniden arldnda bu ilemler gereklemez.

rnekte Page.IsPostBack zelliinin kullanm gsterilmektedir.

Kod 8.8: Page.IsPostBack

private void Page_Load(System.Object sender,


System.EventArgs e)
{
//Put user code to initialize the page here
if(!Page.IsPostBack)
{
//sadece sayfann ilk yklendiinde alan istenilen
alan
}
//sayfa her yklendiinde allan alan
}

Modl zeti
226 Modl 8: Asp.Net ile Kod Gelitirmek

21. Web form ierisinde kod yazmak iin hangi yntemler kullanlr?
22. Code-Behind kod yazma tekniini aklayn?
23. Sayfa yaam dngsn aklayn?
24. Response.Redirect niin kullanlr?
25. Page.IsPostBack niin kullanlr?

Lab 1: ASP.Net ile Kod Gelitirmek

Bu uygulamada, Code Behind ve Inline kod yntemlerinin kullanmn


reneceksiniz. Ayrca istemci tarafl skriptlerin yazlmn reneceksiniz.

Bu lab tamamlandktan sonra:


Code Behind kod yazma yntemini renecek,
Inline kod yazma yntemini renecek,
stemci tarafl skriptlerin kullanmn reneceksiniz.

Web uygulamas oluturmak


Bu uygulamada kullanlacak ASP.Net Web Application projesini oluturun.
14. File mens altndan New alt mensn iaret edin ve Project
komutunu tklayn.
15. New Project ileti kutusundan ASP.Net Web Application ablonunu
sein.
16. Location metin kutusuna http://localhost/AspCode yazn.
Konu: 1 227

17. Enter butonu tklayn.

Web Form eklenmesi


AspCode projesine Test isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

Button btnCodeBehind Text Code Behind


Button btnInline Text Inline
<INPUT type="button"> Value Java script

Kodlarn yazlmas

1- btnCodeBehind kontrolunun Click olayna Code Behind yazan kodu


yazin. Bu kod code behind yntemi ile btnCodeBehind kontrolunun click
olayn altrr.
Response.Write("Code Behind")

2- Test web formunun HTML blmne aadaki kodlar yazn. Bu kod,


inline kod yntemi ile btnInline butonunun Click olayn altrr. Bu kodu
<Body>..</Body> etiketleri arasna ekleyin.

<script language="c#" runat="server">


private void btn_Click(object sender, System.EventArgs e)
{
Response.Write("Inline");
228 Modl 8: Asp.Net ile Kod Gelitirmek

}
</script>

3- Test web formunun HTML blmne aadaki kodlar yazn. Bu kod,


Java Script ile istemci tarafl kod tanmlamaktadr. . Bu kodu
<Head>..</Head> etiketleri arasna ekleyin.

<script language="javascript">
function mesaj()
{
alert('Hello World')
}

</script>

Fonksiyonu armak iin <Body>..</Body> etiketleri arasna aadaki kodu


ekleyin.

<INPUT style="Z-INDEX: 103; LEFT: 24px; WIDTH: 112px;


POSITION: absolute; TOP: 88px; HEIGHT: 24px"
type="button" value="Java Script" onclick="mesaj()">
Modul 9:

Modl 9: Web Programlamaya Giri

Web uygulamalarn zenginletiren birok programlama dili bulunur. Web


sayfalarn gelitirmek iin HTML dilinin kullanlmas gerekir. Sadece HTML
kullanm statik (sabit) sayfalar gelitirmek iin yeterlidir. Ancak ierii kolayca
ekillendirmeyi salayan CSS dili, istemci tarafl alan kodlarn yazlmas iin
Javascript VBScript dilleri de Web uygulamalarn zenginletirir.
230 Modl 9: Web Programlamaya Giri

Bu modl tamamlandktan sonra:


HTML nesnelerini renecek,
Javascript ve VBScript dilleri ile istemci tarafl kod yazabilecek,
CSS ile sayfalara zel stiller kazandracaksnz.

Konu 1 : Web Programlamaya Giri


stemci ve sunucu tarafnda alan eitli teknolojiler mevcuttur. Bir Web
sayfas tasarlamak iin kullanlan ortak dil HTML dilidir. Ancak HTML sayfalar
iinde, sunucu tarafnda ve kullanc tarafnda alabilen ayr web
programlama dilleri kullanlabilir. rnein JavaScript, kullanc tarafnda
kodlama imkan sunarken, CGI, ASP, Php, Perl, ASP.NET gibi web
programlama dilleri, sunucu tarafnda kod yazma imkan sunar.

Konu 2: HTML

HTML (Hyper Text Markup Language), bir iaretleme dilidir. stemci tarafnda
alan Internet taraycs tarafndan okunur, yorumlanr ve alnan iaretler
neticesinde ekrana ilgili grnt yanstlr.

HTML, HTTP (HyperText Transfer Protocol) ile bir arada alr. Bu iaretleme
dili ile oluturulmu dkmanlar yalnzca istemci tarafnda alr.
Konu: 1 231

HTML dkmanlarnn tm ASCII karakterlerinden oluur ve herhangi bir


metin editrnde yazarak oluturulabilir.

HTML Yaps
HTML dilini oluturan bileenler
Tag (etiket)
Attribute (nitelik)
Value (deer) olarak tanmlanr.

HTML kodlarnn temeli etiketlerdir. Bir etiket, HTMLe yaplmas istenen bir
olayn bildirimini temsil eder. Etiketlerin ierisine attribute ad verilen deerler
girilir. Etiketlere ait deiik zellikler, attribute nesnelerinde saklanr.
Attribute deerleri, olaylara ait ayrntlar tutar. Value ise, bir attribute
deerinin davranaca tarz belirler.

Tag

Etiketler (Tag), <> iaretleri arasnda yazlr. Semboller ve etiket arasnda


boluk yoktur.

<Html>

Bir etikete ait ama ve kapatma ifadeleri vardr. Ama ifadesi <Html>,kapatma
ifadesi ise </Html> eklinde bildirilir. Yani alan bir etiket, ayn isim bana /
iareti getirilerek kapatlr. rnein <P> etiketi,bir paragraf amaya yarar. </P>
232 Modl 9: Web Programlamaya Giri

Kapatma ifadesi kullanldnda ise bu kapatma ifadesinin kullanld yere


kadar olan blm paragrafn , iine dahil edilir. Ancak baz istisnalarda vardr.
<Img> ve <Br> etiketi gibi baz etiketler iin bir kapatma ifadesi yoktur.

HTML etiketlerinde byk harf, kk harf duyarll yoktur.

Attribute

znitelikler (Attribute), bir etikete ait zellikleri belirler. <html> etiketi ve


</html> kapatma etiketi, HTML belgesinin balad ve bittii yeri belirtir ve
Attribute deerine ihtiyac yoktur. Attribute olmadan alan etiketlerin
yan sra, attribute ile birlikte alan etiketler de vardr. <body> etiketi,
</body> kapatma ifadesi ile grntlenecek alann balangcn ve bitiini
bildirir. Bu etiket, hibir attribute tanmlanmadan alabilir. Grntlenecek
alana bir arka plan rengi tanmlamak istediinizde bgcolor veya
grntlenecek yaz tipini tanmlamak istediinizde text zniteliklerine
deerler atanmaldr.

Aadaki rnekte siyah zemin zerine beyaz yaz yazlmaktadr.

<Body bgcolor=#000000 text=#ffffff>


Konu: 1 233

Value

Bir olayn ne ekilde gerekleecei value ile bildirilir. rnein bir paragraflk
metinin hizalanmas, <DIV> etiketi kullanlarak yaplr. DIV etiketinin align
attribute deeri, left, right, center ve justify deerlerinden birini
alr.
234 Modl 9: Web Programlamaya Giri

HTML Belgesi Nasl Oluturulur?

HTML belgeleri tag, attribute ve value bileenleri kullanlarak oluturulur.


Bir HTML belgesi en basit ekilde kod 9.1de gsterilmitir.

Kod 9.1:Temel HTML Belgesi

<html>
<head>
<title> Temel HTML Belgesi </title>
</head>
<body>
Sayfada kullanlacak herey burada bildirilir.
</body>
</html>

<html></html>, Taraycya HTML belgenin balad ve bittii alan bildirir.


<head></head>, Taraycya HTML belge hakknda bilgi verir. <title> ve
<meta> etiketleri <head></head etiketleri arasnda yer alr.
<title></title>, belgenin balk yazsn tutar.
<body><body>, belgenin gvde blmdr. Sayfada grntlenmesi istenen
tm deerler burada bildirilir.
Konu: 1 235

En Sk Kullanlan Etiketler

Balklar
Bir sayfadaki yaznn balklarn standart ekilde tutmak iin HTML balklar
kullanlr. Balklar 1 ve 6 aras deerler alr.

Kod 9.2: HTML Balk Etiketleri

<html>
<head>
<title>Balk Etiketleri</title>
</head>

<body>
<h1>html balklar</h1>
<h1>Bu balk H1 tag'i ile olutu</h1>
<h2>Bu balk H2 tag'i ile olutu</h2>
<h3>Bu balk H3 tag'i ile olutu</h3>
<h4>Bu balk H4 tag'i ile olutu</h4>
<h5>Bu balk H5 tag'i ile olutu</h5>
<h6>Bu balk H6 tag'i ile olutu</h6>
</body>
</html>

Paragraf ve Satr Sonu


<p>... </p> etiketleri arasnda paragraflar tanmlanr. Paragrafta, satr sonunu
bildirmek iin <br> etiketi kullanlr.
236 Modl 9: Web Programlamaya Giri

Sayfalara Balant Vermek


Birden fazla sayfay birbirine balamak iin sayfa balantlar kullanlr.

Bir sayfada baka bir sayfaya balant verebilmek iin


<a> etiketi yazlr,
<a ifadesinden sonra href attribute deerine balant verilecek
sayfann adresi girilir,
Target attribute deerine balant sayfasnn nasl bir sayfada
grntlenecei bilgisi girilir. (Varsaylan olarak _self deeri alnr. Yani
kendi sayfasnda alr.)
> karakteri ile <a> etiketi sonlanr. Balantnn almas iin tklanmas
gereken metin girilir.
Ve metin bitimine </a> etiketi yerletirilir.

Kod 9.3: Sayfa iinde Balant Vermek

<a href="http://www.bilgeadam.com" target="_blank">BilgeAdam


BTA</a>

Listeler
Belge iinde metine liste grnm vermek iin listeleme etiketleri kullanlr.
Srasz ve sral listeler oluturulabilir. Srasz listeler, <ul>...</ul> etiketleri
arasnda oluturulur. Her bir liste nesnesi iin <li> etiketi kullanlr.

Sral listeler, <ol>...</ol> etiketleri arasnda oluturulur. Her bir liste


nesnesi iin <li> etiketi kullanlr.

Kod 9.4: Liste Oluturmak

<h4> Sral liste</h4>


<ol>
<li>nesne 1
<li>nesne 2
</ol>

<h4>Srasz Liste</h4>
<ul>
<li>nesne 1
<li>nesne 2
</ul>

Sral ve srasz listelerin dnda programc tarafndan tanml listeler


oluturulabilir. <dl>...</dl> etiketleri arasnda listelenecek metinler girilir. Bu
etiketler arasna, bal tutan <dt> etiketi ve balk altnda grntlenecek
metini tutan <dd> etiketi yerletirilir.
Konu: 1 237

Kod 9.5: Tanml Liste Oluturmak

<dl>
<dt> Balk 1:
<dd> Balk 1'e ait aklama bu paragrafta girilir.Balk
1'e ait aklama bu paragrafta girilir.
<dt> Balk 2:
<dd> Balk 2'ye ait aklama bu paragrafta girilir.
Balk 2'ye ait aklama bu paragrafta girilir.
</dl>

NOT: Listeleme ifadeleri i ie kullanlabilir.

Resim Grntleme
HTML sayfalarnda resim grntlemek iin <img> etiketi kullanlr. src
attribute deeri, grntlenecek resmin adresini tutar.

Kod 9.6da <img> kullanm gsterilmektedir.

Kod 9.6: Resim Grntlemek

<a href="http://www.bilgeadam.com">
<img src="c:\resimler\resim1.jpg">
</a>

img etiketinin sonlandrma ifadesi yoktur.

Tablolar
Satr ve stnlardan oluan yaplara tablo denir. Bir Web sayfas ierisinde,
grnm belirli snrlarda tutmak iin tablolardan yararlanlr.

<table>...</table> etiketleri ile tablonun balang ve biti alan bildirilir. Bu


etiketler arasndaki, <tr> satrlar, <td> ise stunlar temsil eder. Tablonun
align , border, width, height bgcolor attribute deerleri ile tabloya
eitli nitelikler verilebilir. Align attribute nesnesi center, left veya right
hizalama deerini alr. Border tablo kenarlklarnn kalnlk deerini tutar.

Kod 9.7: 4x3 Boyutlarnda Tablo oluturmak

<table width="140" border="2" bgcolor="#6633CC"


align="left">
<tr>
<td>1. satr 1. stun</td>
<td>1. satr 2. stun </td>
<td>1. satr 3. stun </td>
</tr>
<tr>
<td>2. satr 1. stun </td>
<td>2. satr 2. stun </td>
<td>2. satr 3. stun </td>
</tr>
<tr>
238 Modl 9: Web Programlamaya Giri

<td>3. satr 1. stun </td>


<td>3. satr 2. stun </td>
<td>3. satr 3. stun </td>
</tr>
<tr>
<td>4. satr 1. stun </td>
<td>4. satr 2. stun </td>
<td>4. satr 3. stun </td>
</tr>
</table>

Konu 3: Script Nedir?

HTML dosyas iine gmlm kodlara script denir. Yorumlanmas iin internet
taraycsna ihtiya vardr. HTML dilinin karlayamad baz ihtiyalara zm
retmek iin scriptler kullanlr.
Konu: 1 239

JavaScript

JavaScript dili, Netscape firmas tarafndan oluturulmutur. Yazm biimi


olarak C dili esas alnarak tasarlanmtr. Ama olarak HTMLin yetmedii
yerlere scriptler ile destek vermesi dnlmtir. Web programclna
dinamik bir yap kazandran JavaScript, istemci tarafnda alr. Kullanm
giderek yaygnlaan JavaScript, daha sonra Microsoft firmasnn Internet
Explorer web taraycsnda da kullanlabillir hale geldi. Gnmzde tm
tarayclarn destekledii bir script dilidir.

JavaScript kodlar yazmak iin Notepad gibi bir metin editr yeterlidir. Kodlar
<script>...</script> etiketleri arasnda yazlmaldr.
Bu kod alan iinde yorum satrlar iin // ve /* ... */ ifadeleri kullanlabilir.
Sadece bir satr yorum satr yaplacaksa // ifadesi kullanlr.
// bu satr yorum satrdr.

Birden fazla satr yorum satr yaplacaksa, satrlarn balad yere /*, bittii
yere */ ifadeleri yerletirilir.
/* yoruma alnan 1. satr
2. satr
...
*/

JavaScript kodlar HTML sayfalar iine <head> etiketlerine gml olarak veya
.js uzantl dosyalara referans gnderilerek HTML iinden arlabilir.
240 Modl 9: Web Programlamaya Giri

JavaScript dilinde nesneler, nesnelere uygulanan olaylar ve olaylara ilikin


grevler vardr. Bir nesneyi tklamak, zerine gelmek, zerinde dolamak gibi
ilemler, sayfa ile kullancnn etkileimli olarak almasn salar.

JavaScript, ayn bir programlama dilinde olduu gibi deikenlere, klavyeden


bilgi alma, ekrana kt verme ilemlerine, koul ve dng yaplarna,
fonksiyon, nesne ve olay kavramlarna sahiptir.

Kod 9.8: rnek JavaScript

<html>
<head><title>onClick</title>
<script language="javascript">
function merhaba()
{
alert ("beni tikladiniz");
}
</script>
</head>
<body>
<input type="button" name="tikla" value="tikla"
onClick=merhaba()>
</body>
</html>

script etiketinin language attribute deeri ile kullanlacak script dili belirtilir.
Javascript kullanlmas iin burada language=javascript bildirimi yaplr.

Kod 9.9: rnek JavaScript

<html>
<head>
<title>JavaScript rnei</title>
</head>
<body>
<br> Bu yaz html ile yazld.
<br>
<script language="JavaScript">
document.write("te bu ise JavaScript ile yazld!")
</script>
<br>
Bu yaz yine HTML ile yazld.
</body>
</html>

Buradaki script ifadesi head etiketleri arasnda bir fonksiyon olarak deil,
body etiketleri arasnda satr halinde kullanlmtr.

Deikenler
var anahtar szc ile yeni bir deiken oluturulur. Tr bilgisi saklanmaz.
Saysal deerler verildiinde ilem yapma yeteneine sahip olurlar. ift trnak
ierisinde deer verildiinde ise metin ifadesi olarak anlalr.
Konu: 1 241

Dikkat edilmesi gereken nokta deikenlerin kk byk harf duyarl


olmasdr. Baz tarayclar iin deiken isimlerinde bu duyarllk gz nnde
bulundurulmazken, ou taraycda kk byk harf duyarllna dikkat
edilir. Bu nedenle her deiken ad bu durum gz nnde bulundurularak
verilmelidir.

var deger1;
var deger2=20;
var deger3=30;
var ay=Mays;
var yil=2005;

var degerToplam=deger2+deger3;
var tarih=ay+yil;

Satrn sonunda sonlandrma karakteri olarak ; kullanlr. degerToplam isimli


deikende 20 ve 30 deerleri toplanarak elde edilen 50 deeri tutulurken,
tarih isimli deikende, ay ve yil deikenlerinden gelen metin ifadeleri
birletirilir ve Mays2005 deeri oluturulur.

Koul Operatr
[koul ifadesi] ? koul_doru_ise : koul_yanl_ise

Deiken tanmlarken aritmetik, karlatrma ve mantksal operatrler


kullanlabilir. Bunlara ek olarak C dilinden gelen koul operatrleri kullanlabilir.
Bir if deyiminin tek satrda yazlm haline benzeyen bu operatrn kullanm
kod 3.1.1de gsterilmitir.
Genel kullanm biimi ise
[koul ifadesi] ? koul_doru_ise : koul_yanl_ise
eklindedir.

Kod 9.10: Koul Operatrnn Kullanm

var a=5;
var b=7;
var c=14;
var d=23;
var e;

e = (a + b < c) ? d : a+b ;

Bu kodda, (a + b < c ) ifadesi ile elde edilen sonuca gre, e deerine d


veya a + b deerleri atanr.
a + b ileminin sonucu olan 12 deeri, c deerinden kk olduu iin ifade
doru olarak sonulanr. Bu durumda d deeri, e deikenine atanr ve e
deikeni 23 deerini tar.
Bu koulu if deyimi ile yazlabilir.
if (a + b < c)
e = d;
else
242 Modl 9: Web Programlamaya Giri

e = a+ b;

Operatrler
JavaScript operatrleri, Visual Basic .NET dilinde kullanlan operatrlerden
biraz farkldr. rnein mod almak iin Mod anahtar szc yerine % mod alma
operatr kullanlr.

Atama Operatr ( = )
Deikenlere deer atamak iin = karekteri kullanlr.

Aritmetik Operatrler
Deikenler zerinde aritmetik ilemler yapmak iin tanmlanm operatrlerdir.

Operatr Aklama

+ Saysal deikenleri toplar. String


deikenlerini birbirine ekler.
- Saysal deikenlerde karma
ilemi yapar.
* Saysal deikenlerde arpma
ilemi yapar.
/ Saysal deikenlerde blme ilemi
yapar.
% Saysal deikenlerde mod alma
ilemini yapar.
++ Saysal deikenlerde artma
ilemini yapar.
-- Saysal deikenlerde azalma
ilemini yapar.

Tablo 9.1: Aritmetik Operatrler

Visual Basic .NET aritmetik operatrlerinden farkl olan ++ ve -- operatrleri, C


dili operatrlerindendir. Deikeni bir arttrma veya bir azaltma yeteneine
sahiptir. Prefix (deiken isminin nnde) ve subfix (deiken isminin
arkasnda) olmak zere iki kullanm ekli vardr.

Deikenin prefix kullanm kod 9.11 de gsterilmektedir.

Kod 9.11: Prefix ++ operatr

var x = 5;
// x deikeni bir arttrlr ve ekrana 6 deeri yazlr
document.write(++x);
Konu: 1 243

Deikenin subfix kullanmnda ise nce deer alnr, ak bir sonraki satra
getikten sonra deikenin deeri bir arttrlr.

Kod 9.12: Subfix ++ operatr

var x = 5;
/* x deikeni nce yazlr, sonra bir arttrlr.
Yani ekrana 5 yazlr. */
document.write( x++);
// Ekrana 6 deeri yazlr.
document.write(x);

Karlatrma Operatrleri
JavaScript kodlar ierisinde de karlatrma ilemleri yaplabilir. Ancak bu
operatrler Visual Basic .NET karlatrma operatrlerinden biraz farkldr.

Operatr Aklama

== Eit midir? operatr. ki deer de


birbirine eit ise true sonucu verir.
!= Eit deil midir? operatr. ki
deer birbirine eit deilse true
sonucunu verir.
< Kk operatr. Sol taraf deeri,
sa taraf deerinden kkse true
sonucunu verir.
> Byktr operatr. Sol taraf
deeri, sa taraf deerinden byk
ise true sonucunu verir.
<= Kk eittir operatr.
>= Byk eittir operatr.

Tablo 9.2: Karlatrma Operatrleri

ki deerin eitliinin karlatrlmas iin == operatr kullanlr.


if (a == b) {
document.write(a ile b deikeni eit)
}
ki deerin eitsizliinin karlatrlmas iin != operatr kullanlr.
if (a != b) {
document.write(a ile b deikeni eit deildir)
}

Mantksal Operatrler
Mantksal operatrler ise Visual Basic .NET mantksal operatrlerinden
tamamen farkldr.
244 Modl 9: Web Programlamaya Giri

Operatr Aklama

&& And (ve) operatr. ki tarafta


belirtilen ifadeler true ise, sonu
olarak true deerini dndrr.
|| Or (veya) operatr. ki tarafta
verilen ifadelerden en az birinin
doru olmas durumunda true
deerini dndrr.
! Not operatr: Koulun yanl
olmas durumunda true deerini
verir.
Tablo 9.3: Mantksal Operatrler

Visual Basic .NET programlamada And operatrnn karl && operatrdr.


Or operatrnn karl ise || operatrdr. Bir deerin deili anlamna
gelen Not operatrn karl ise ! operatrdr.

Klavyeden Bilgi Alma ve Ekrana kt Verme


JavaScript dilinde kullancdan bilgi almak iin formlarn dnda promt komutu
kullanlr. promt komutu ile kullancdan bilgi alrken ayr bir pencere alr.

prompt(soru, cevap iin rehber ifade);

Kod 9.13: Prompt ile kullancdan deer almak

var sehir;
sehir=prompt(Yaadnz ehrin trafik kodunu giriniz,
stanbul iin 34, Ankara iin 6 gibi);

JavaScript dilinde HTML sayfasna yaz yazdrmak iin write komutu kullanlr.

document.write(Yazlmak istenen deikene ilikin


aklama, degisken);

Grld gibi write komutu document fonksiyonuyla birlikte kullanlr.

Koul ve Dng Yaplar


Programlamann akn ynlendiren koul yaplar ve dnglerdir. Dngler
birden fazla gerekletirilecek ilemlerin blok halinde yazlmasn salar.

if koul ifadesinin genel yaps

if ( koul )
// koul doru ise alacak ifade

// koul yanl ise akn devam edecei alan


Konu: 1 245

Koulun doru olmas halinde yaplacak ilemler bir satrdan fazla yer
tutuyorsa, bu satrlar {} parantezleri ile gruplanr. Visual Basic .NET dilindeki
gibi End if ifadesi kullanlmaz.

if (koul) {
//koul doru ise
}
else {
//koul yanl ise
}

Tekrarlanan belirli bir ilemi yaptrmak iin kullanlan dnglerin JavaScript


dilindeki kullanm tamamen C dilinin yapsna gre tasarlanmtr.

for dngsnn genel kullanm biimi;


for(balang_deeri; dng_ifadesi; deiecek_deiken_ad)
{
//yaplacak ilemler
}
eklindedir.

Kod 9.14: For Dngsnn Kullanm

var a;
var b = 10;
for (a = 1; a <= b; a++) {
document.write( a , . say, <br>);
}

while dngsnn yaps


while ( dng_koul_ifadesi )
{
//art doruysa yaplacak ilemler
}
//art doru deilse yaplacak ilemler

Visual Basic .NET dilindeki Select Case dngsne karlk olarak JavaScript
dilinde switch-case ifadesi vardr. Genel kullanm:

switch (parametre)
{
case ifade1:
// ifade1 koulu doru ise yaplmas istenenler
break; //break ile dier koullarn da almas
//engellenir ve dngden klr.
case ifade2:
//ifade2 koulu doru ise yaplmas istenenler
break;
}

Fonksiyonlar
JavaScript dilinde, kodlarn yeniden kullanlabilmesi iin kullanlr. Genel
kullanm:
246 Modl 9: Web Programlamaya Giri

function fonksiyon_ismi(parametre1, parametre2)


{
//yaplacak ilemler
}

Fonksiyon iinde hesaplanan deer, return ifadesi ile geri dndrlr.

Kod 9.15: JavaScript ile Toplama

function topla(deger1, deger2)


{
var sonuc= deger1+deger2;
return sonuc;
}

Topla fonksiyonuna gnderilen deger1 ve deger2 deikenleri toplanarak,


fonksiyon iinde oluturulan sonuc deikenine atanr. return sonuc; ifadesi
ile topla fonksiyonunda elde edilen sonu geri dndrlr.

JavaScript Nesneleri
JavaScript iinde baz ilemler, baz nesnelerin fonksiyonlar arlarak yaplr.
rnein document.write komutu, aslnda document nesnesinin write
metodunu arr.

Window Nesnesi
Genel pencere zelliklerini tutan nesnedir. Pencere ama ve kapama ilemleri
iin bu nesne kullanlr.

Genel kullanm:
window.open( url ,pencere_ismi,pencere_ozellikleri);
window.close();

Open komutu ile yeni bir pencere alrken, close komutu ile pencere kapatlr.
Yeni bir pencere amak iin open komutuna ilk parametrenin girilmesi
zorunludur. Pencere_ismi, birden fazla pencere ile ilem yapld durumlarda
kullanlabilir. Pencereye ait zellikler tablo 9.4te belirtilmitir.

zellik Aklama

Menubar Menu ubuunun


grntlenmesini salar.
Toolbar Ara ubuun
grntlenmesini salar.
Location Adres ubuunun
grntlenmesini salar.
Status Durum ubuunun
grntlenmesini salar.
Konu: 1 247

Scrollbars Kaydrma ubuklarnn


grntlenmesini salar.
Resizable Penceresinin
boyutlandrlmasn salar.
Width Alan pencerenin pixel
geniliini belirtir.
Height Alan pencerenin pixel
yksekliini belirtir.
Left Ekrann sol noktasna ile
pencere arasndaki uzakl
verir.
Top Ekrann st noktasna ile
pencere arasndaki uzakl
verir.
Tablo 9.4: Pencere zellikleri

Kod 9.16: Yeni bir pencere ama

window.open("http://www.bilgeadam.com", "bilgeadam" ,
"menubar=no, toolbar=no, scrollbars=yes, location=yes,
width=300, heigt=300";)

Internet taraycs ile daha nce ziyaret edilmi sayfalara tekrar ulaabilmek iin
window.history.go(-1) komutu kullanlabilir. -1 ifadesi ile bir nceki sayfaya
gidilir. Say arttrlarak daha nceki sayfalara da gidilebilir.

Internet taraycsnn en alt ksmnda bulunan status penceresine erimek iin


window.status komutu kullanlr.

window.status =JavaScript reniyoruz!;

Navigator (tarayc) Nesnesi


JavaScript, tarayclar da bir nesne olarak deerlendirir. Kullancnn
taraycsna ilikin bilgileri almak iin tablo 3.1.5te belirtilen deikenler
kullanlabilir.

Deiken smi Aklama

appname Tarayc ad
appversion Tarayc versiyonu
appCodeName Taraycnn kod ad
userAgent Taraycnn sunucuya kendini
tantrken verdii isim.
Tablo 9.5: Navigator (Tarayc) Nesnesinin Deikenleri

Kod 9.17: Tarayc nesnesi ile bilgi almak

<html>
248 Modl 9: Web Programlamaya Giri

<head>
<title>Browser'mz tanyalm</title>
<METAcontent=text/html;CHARSET=iso-8859-9 http-
equiv=Content-Type>
<script language="Javascript">
function Tarayici()
{
var browseradi=" ";
browseradi +="Browser:"+navigator.appName +"\r ;
browseradi +="Surumu:"+navigator.appVersion +"\r ;
browseradi +="Kodadi:"+navigator.appCodeName+"\r ;
browseradi +="Useragent:"+navigator.userAgent+"\r ;
alert(browseradi);
}
</script>
</head>
<body onLoad="Tarayici()"></body>
</html>

Olaylar
Bir Web sayfas zerinde kullancnn her trl hareketi kontrol edilebilir. Bir
kontroln zerine gelmesi, dolamas ve zerinden ayrlmas gibi hareklere
olay denir. Bu olaylar ise onClick, onMuoseOver, onMouseOut,
onSubmit,onReset, onChange, onLoad, onUnLoad, onError, onAbort,
onFocus, onBlur olarak belirtilebilir.

onClick
Internet sitelerinin ounda en sk kullanlan JavaScript olaydr. Sayfa
zerinde bir nesnenin fare ile tklanp braklmas sonucunda gerekleen
olaydr. Link, button ve resim nesneleri tklanarak onClick olay tetiklenebilir.
Nesnelerin etiketlerinde ise onClick olaylarn tetikleyen fonksiyonlarn ismi
bildirilmelidir.

Kod 9.18: onClick Olay

function tikla()
{
alert(Tklama ilemi gerekleti);
}
<input type="button" name="tikla" value="tikla"
onClick=tikla()>

Butona tklanp brakldnda, onClick olay tetiklenir ve bu olayla


ilikilendirilen tikla fonksiyonu devreye girer. alert komutu ile ekrana bir
mesaj kutusu kar.

Ayrca onDblClick, ift tklanma olayn tetikler.

onMouseOver, onMouseOut
Fare nesnenin zerindeyken onMouseOver, fare nesne zerinden ayrlnca
onMouseOut olaylar devreye girer.
Konu: 1 249

Kod 9.19: onMouseOver ve onMouseOut Olay

function nesneUzerinde()
{
window.status="u anda nesne zerindesiniz.";
}
function nesneDisinda()
{
window.status="nesnenin dna ktnz." ;
}

<a href="http://www.google.com"
onMouseOver = nesneUzerinde()
onMouseOut = nesneDisinda()> Google
</a>

onSubmit
Web safyalarnda ziyaretinin forma bilgi girip sunucuya gndermesi
durumlarnda onSubmit devreye girer. Gnderilecek forma girilen verilerin
uygunluunun kontrol bu olayn tetikledii fonksiyonlara yaptrlabilir.

Kod 9.20: onSubmit Olay

function dogrula()
{
confirm (Formu doldurduysanz OK'i tklaynz');
}

<form action="mail.pl" method="post" onSubmit="dogrula()">

confirm komutu, kullancya Ok ve Cancel butonlarndan oluan bir diyalog


penceresi aar.

onReset
Form iinde kullanlan tm metin alanlarnn temizlenmesini salar. Doldurulan
formda yanllk olduunda bu olay tetiklenir. Kullancya onay penceresi
kartmak iin de kullanlabilir.

Kod 9.21: onReset Olay

function sil()
{
return confirm('Silmek istediginize emin misiniz?');
}

<form onReset="return sil()">


<input type="text" name="mail">
<input type="reset" value="sil">
</form>

onChange
Bilgi girii yaplan alanlarda, deiikliin gerekletii bilgisi onChange olay ile
tetiklenir.
250 Modl 9: Web Programlamaya Giri

Kod 9.22: onChange Olay

function degisti()
{
alert(Seimi deitirdiniz);
}

<form method="post">
<p>
<select name="degistir" size="1" onChange="degisti()">
<option>Istanbul
<option>Ankara
<option>Antalya
</select>
</form>

Sunulan seeneklerden herhangi biri seidiinde uyar penceresi kacaktr.

onLoad, onUnLoad
onLoad olay sayfaya giri yapldnda gerekleir. onUnLoad olay sayfadan
kldnda gerekleir.

Kod 9.23: onLoad ve onUnLoad Olay

function giris()
{
alert(Sayfaya Giri Yaptnz!");
}
function cikis()
{
alert("Sayfadan ktnz..");
}

<body onLoad="giris()" onUnload="cikis()">


</body>

onError, onAbort
Ziyaret edilen sayfadaki nesneler, eitli nedenlerden dolay tam olarak
yklenememi olabilir. Genellikle resim nesnelerinin yklenmesinde problem
kabilir. Bu tr durumlar ziyaretiye bildirmek iin onError veya onAbort
olaylar kullanlr.

Kod 9.24: onError ve onAbort Olay

<img src="resim.gif" onError="alert(Resim dosyas


yklenemedi')">

onFocus, onBlur
onFocus olay kullanc kontrollerine giri yaplrken gerekleir. OnBlur olay
ise ve kullanc kontrollerinden k yaplrken gerekleir.

Kod 9.25: onFocus ve onBlur Olay

function dogru()
{
Konu: 1 251

document.form1.mesaj.value="Ltfen hata yapmayn!";


}
function sor()
{
document.form1.mesaj.value="isminiz alnd";
}

<form name="form1" method="post">


<p><h3>Ltfen isminizi yaznz!</h3></p>
<input type="text" size="20" name="isim"
onfocus="dogru()" onblur="sor()">
<p>
<input type="text" name="mesaj"></p>
</form>

VbScript

VbScript , Microsoft tarafndan gelitirilmitir. Ancak, VbScript tm tarayclar


tarafndan desteklenmez. Bu nedenle tm tarayclarda alacak script
yazlmak isteniyorsa, JavaScript kullanlmaldr.

Vbscript dilinin kullanlabilmesi iin script etiketi ierisindeki language


zniteliine vbscript deeri atanr.
<script language="vbscript">...</script>

Kod 9.26: lk VbScript rnei

<html>
<body>
<script language="vbscript">
document.write("lk VBScript!")
</script>
</body>
</html>

Deiken tanmlamalar dim anahtar szc ile yaplr.

Kod 9.27: Deiken tanmalamas

<html>
<body>
<script language=vbscript">
dim isim
isim="Bilge Adam"
document.write(isim)
</script>
</body>
</html>

Metot tanmlamas Visual Basic.NET diline benzer. Geriye sonu


dndrmeyen metotlar Sub, geriye sonu dndren metotlar ise function
anahtar szc ile tanmlanr. Bu tanmlanm metotlar call MetotAd()
anahtar szc ile arlabilirler.
252 Modl 9: Web Programlamaya Giri

Kod 9.28: Sub Tanmlamas

<html>
<head>
<script language="vbscript">
sub mySub()
msgbox("sub procedure")
end sub
</script>
</head>

<body>
<script language=vbscript">
call mySub()
</script>
<p> sub procedure geri dn deeri tamaz.</p>
</body>
</html>

Kod 9.29: Function Tanmlamas

<html>
<head>
<script language=vbscript">
function sehir()
sehir = "Trabzon"
end function
</script>
</head>

<body>
<script language=vbscript">
document.write("En sevdiim sehir: " & sehir())
</script>
<p> function procedure geri dn deerine sahiptir.</p>
</body>
</html>

Koul ve dng yaplarnn kullanm Visual Basic .NET dilindeki gibidir.


Konu: 1 253

Konu 4: CSS

CSS (Cascading Style Sheets), HTML sayfalar ierisinde zel stiller


tanmlamak iin kullanlr. Sayfann yaz tr, arka plan rengi, link renkleri,
nesnelerin sayfa zerindeki yerleimi birer stil eleridir. Bir sitedeki tm
sayfalara ayn stili vemek iin CSS dosyalar hazrlanr. Bu CSS dosyalar
HTML sayfalarna dahil edilir.

Stiller HTML sayfalarna yntem ile dahil edilebilir:


Inline (i)
Embedded (gml)
Linked (balantl)

(Inline)
Herhangi bir HTML etiketi iinde stil kullanlabilir. rnein paragraf etiketine
style=x attribute deeri eklenebilir. Ve o paragrafa zel tasarm zellikleri
bildirilebilir.

<p style=font: 12pt arial> Bu paragraftaki tm yazlar


arial 12 stilidedir.</p>

Gml (Embedded)
Gml stiller, HTML sayfasnn Head etiketi ierinde tanmlanr. Bu stilleri
tanmlamak iin <Style>..</Style> etiketleri kullanlmaldr.
254 Modl 9: Web Programlamaya Giri

Kod 9.30: Gml stillerin Tanmlanmas

<html>
<head>
<style>
body
{
background:#ff0000;
color:#ffffff;
}
</style>
</head>
<body>
Krmz zemin zerine beyaz renkle yaz
</body>
</html>

Balantl (linked)
Stil verileri .css uzantl dosyalarda tanmlanr. En gl tasarm zellii
balantl stil dosyalarndadr. Tasarm zellikleri bu dosyada tanmlanr ve her
sayfa iinden bu stil dosyasna balant verilerek etiketlere gerekli stiller
uygulanr.

HTML sayfalarda stil dosyas ile balant kurmak iin aadaki tanmlama
yaplr. Bu tanmlama head etiketleri ierisinde yaplr.

<link rel=stylesheet href=stil.css type=text/css>

Style Sheetlerin Sz Dizimi


Slide12

Stil nesnelerinin sz dizimi, HTML sz dizimine benzer yapdadr. Stil


nesnelerinin belirli ksmlar vardr:
Seici (Selector): Atanlan zellikler ve deerleri alr. H1 ve P gibi HTML
etiketlerine benzerler.
zellik (Property): Bir seiciyi tanmlar. P paragraf etiketine verilen
zellikler o seiciyi tanmlar. Kenar boluklar, font ve arka plan deerleri
birer zellik esidir.
Deer (Value): zellikleri tanmlayan elerdir.

zellikler ve deerler birleerek bir tanm oluturur. Seici ve tanm ise bir kural
oluturur. Sayfa dzeni ,kenar boluklar, girinti ve hizalama deerleri kontrol
edilerek hazrlanm bir site profosyonel bir grnme sahip olabilir.

En ok kullanlan yaz zellik ve deerleri tablo 4.1de listelenmitir.


Konu: 1 255

zellik ve Deer Aklama

Margin-left Sol kenar boluunu belirlemek iin kullanlr. Punto,


in, cm ve piksel cinsinden deer verilir.
{margin-left: 10px;}
Margin-right Sa kenar boluunu belirlemek iin kullanlr.
Margin-top st kenar boluklarn belirlemek iin kullanlr.
text-indent Bir yaz iin girinti bilgisini belirler.
text-align Yaznn hizalanmasn salayan deeri tutar. left,
center, right
text-decoration underline, overline, line-through,
none deerleriyle yazya ekil verir.
text-transform Yaznn byk veya kk harflerle
grntlenmesini salar. Uppercase, lowercase
Tablo 9.6: En ok kullanlan yaz zellik ve deerleri

Body {
margin-left: 10px;
margin-right: 10px;
margin-top: 20px;
margin-bottom:15px;
}

Font zellik ve deerleri tablo 9.7de belirtilmitir.


zellik ve Deer Aklama

font-size Yaz bykln belirler.


color Yaznn rengini tutar.
font-family Yaznn tipini belirler.
font-style Yaznn italikliini belirler. italic, normal.
font-weight Yaz kalnln belirler. Bold, normal
Tablo 9.7: Font zellik ve deerleri
p {
font-size: 20;
color: blue;
font-weight: bold;
font-style: italic;
font-family: Times New Roman;
}

Liste zellikleri ve deerleri tablo 4.3te belirtilmitir.


zellik ve Deer Aklama

list-style-type Liste elemanlarnn bana gelecek karakteri belirler.


disc, circle, square, decimal
lower(upper)- Liste elemanlarnn bana kk veya byk Roma
roman rakamlar koyar.
lower(upper)- Liste elemanlarnn bana kk(byk) harfler
256 Modl 9: Web Programlamaya Giri

alpha koyar.
none Liste elemanlar iin bir sembol almaz.
list-style- Liste imleri yerine resim kullanr.
image
list-style- indise: Listenin ikinci satrn en soldan balatr.
position
outside: kinci satr bir ncekinin dikey
hizasndan balatr.
Tablo 9.8: Liste zellikleri ve deerleri

Background zellikleri ve deerleri tablo 9.9de belirtilmitir.


zellik ve Deer Aklama

background- Arka plan renk deerini tutar.


color
background- Arka plan resminin yol bilgisini tutar.
image
background- Resmin x ve y koordinatlar boyunca tekrarlanmas
repeat bilgisini tutar.
repeat: tm ynlerde
repeat-x: x ekseni boyunca
repeat-y: y ekseni boyunca
no-repeat: tekrar edilmez
background- left: Resmi pencerenin sol kenarna yaklatrr.
position
right: Sa kenara yakaltrr.
center: Resmi ortalar.
Tablo 9.9: Background zellik ve deerleri

p {
background-color:blue;
background-image: url(back.gif);
background-position:left;
backround-repeat:repeat-x;
}

Seiciler
Seiciler, oluturulan <H1>, <P> gibi etiketlerin mevcut zelliklerini ayn tutarak
onlara yeni zellikler ekleme olana verir. Ayrca istenilen bir kelimeye stil
zellii atayp istenilen zamanda arlmasn salar.
h1 {
background:green;
color:white;
font-weight:bold;
font-family:arial;
}
h1.kirmizi{color:red}
Konu: 1 257

Linkler ve CSS
Sayfalarda ziyaret edilen linklerin mavi alt izgilerini ortadan kaldrmak veya
baka stiller vermek iin CSS dilinden yararlanlabilir. <A> etiketinin stilini
belirlemekte kullanlan drt ifade vardr:
active: Tklanan linkin stilini belirler.
link: Link yaz stilini belirler.
visited: Ziyaret edilmi linkin sitilini belirler.
hover: Fare linkin zerindeyken nasl bir stil alacan belirler.

a:link{text-decoration:none; color:teal}
a:active{text-decoration:none; color:red}
a:visited{text-decoration:none; font-family:Times New Roman;
color:green}
a:hover{background-color:teal; color:white; font-
family:arial}

Snf ve Gruplama
Snf (class), stil kurallarnn kk paralara ayrlmasn salar. Sayfadaki
herhangi bir yaznn dier yazlardan farkl grnmesi istendii durumda,
istenilen sayda zel HTML etiketi oluurulabilir. rnein sayfada iki farkl trde
H1 etiketi kullanlmak istensin.

H1.serif {
font: 14pt Century Schoolbook;
}
H1.sans{
font: 20pt Arial;
}
Bu stilleri kullanmak iin kod iine serif veya sans snf ismi vermek yeterlidir.

Gruplama, stil zellikleri ve deerleri younlatrldnda oluur. rnein;


P.1 {
font: verdana;
font-size: 12pt;
line-height: 18pt;
}
1 snfndaki tm paragraflar 12 punto Verdana fontuyla ve 18 punto satr
yksekliiyle grntlenir. Snf yerine gruplama yaplabilir.

P.1{font:12pt/18pt verdana}

Her iki gsterimde de ayn grnt elde edilir. Ancak gruplamada deerler
girerken font-size, font-height ve font sralamasna uyulmas gerektiine
dikkat edilmelidir.
258 Modl 9: Web Programlamaya Giri

Modl zeti

26.
HTML nedir? En sk kullanlan HTML etiketlerini aklayn.
27. Script Nedir?
28. Java Script nedir? Java Script niin kullanlr?
29. CSS nedir?
30. CSS, Html sayfalara nasl dahil edilebilir?
Konu: 1 259

Lab 1: Web Programlamaya Giri

Bu uygulamada, Java Script .ile sanal klavye yapmasn reneceksiniz.


Ayrca Java Script ile popup pencere oluturmay reneceksiniz.

Bu lab tamamlandktan sonra:


Java Script ile Sanal Klavye oluturabilecek,
Java Script ile popup pencere oluturabileceksiniz.

Web uygulamas oluturmak


Bu uygulamada kullanlacak ASP.Net Web Application projesini oluturun.
18. File mens altndan New alt mensn iaret edin ve Project
komutunu tklayn.
19. New Project ileti kutusundan ASP.Net Web Application ablonunu
sein.
20. Location metin kutusuna http://localhost/ WebOrnek yazn.
21. Enter butonu tklayn.

Sanal Klavye oluturmak


WebOrnek projesine SanalKlavye isminde yeni bir Html sayfa ekleyin.
260 Modl 9: Web Programlamaya Giri

Aadaki kodlar <Body>..</Body> etiketlerinin arasna yazarak Html sayfay


tasarlayn.

<div id="klavyem">
<table width="200" border="1" cellpadding="0"
cellspacing="0" bordercolor="#00ff00" bgcolor="#0099cc"
ID="Table1">
<tr>
<td><input type="button" id="ba"
onClick="HarfA()" value="A" NAME="ba"></td>
<td><input type="button" id="bb"
onClick="HarfB()" value="B" NAME="bb"></td>
<td><input type="button" id="bc"
onClick="HarfC()" value="C" NAME="bc"></td>
<td><input type="button" id="bd"
onClick="HarfD()" value="D" NAME="bd"></td>
<td><input type="button" id="be"
onClick="HarfE()" value="E" NAME="be"></td>
<td><input type="button" id="bf"
onClick="HarfF()" value="F" NAME="bf"></td>
<td><input type="button" id="bg"
onClick="HarfG()" value="G" NAME="bg"></td>
<td><input name="button2" type="button" id="bh"
onClick="HarfH()" value="H"></td>
</tr>
<tr>
<td><input type="button" id="bi"
onClick="HarfI()" value="I" NAME="bi"></td>
<td><input type="button" id="bj"
onClick="HarfJ()" value="J" NAME="bj"></td>
<td><input type="button" id="bk"
onClick="HarfK()" value="K" NAME="bk"></td>
<td><input type="button" id="bl"
onClick="HarfL()" value="L" NAME="bl"></td>
<td><input type="button" id="bm"
onClick="HarfM()" value="M" NAME="bm"></td>
<td><input type="button" id="bn"
onClick="HarfN()" value="N" NAME="bn"></td>
<td><input type="button" id="bo"
onClick="HarfO()" value="O" NAME="bo"></td>
<td><input type="button" id="bp"
onClick="HarfP()" value="P" NAME="bp"></td>
Konu: 1 261

</tr>
<tr>
<td><input type="button" id="br"
onClick="HarfR()" value="R" NAME="br"></td>
<td><input type="button" id="bs"
onClick="HarfS()" value="S" NAME="bs"></td>
<td><input type="button" id="bt"
onClick="HarfT()" value="T" NAME="bt"></td>
<td><input type="button" id="bu"
onClick="HarfU()" value="U" NAME="bu"></td>
<td><input type="button" id="bv"
onClick="HarfV()" value="V" NAME="bv"></td>
<td><input type="button" id="by"
onClick="HarfY()" value="Y" NAME="by"></td>
<td><input type="button" id="bz"
onClick="HarfZ()" value="Z" NAME="bz"></td>
</tr>
</table>
</div>
<br>
<form name="form1" method="post" ID="Form1">
<table width="268" border="1" cellpadding="1"
cellspacing="2" bordercolor="#99ff66" bgcolor="#0099cc"
ID="Table2">
<tr>
<td width="85">Kullanici Adi</td>
<td width="167"><input name="text" type="text"
id="user"></td>
</tr>
<tr>
<td>Parola</td>
<td><input type="password" id="password"
readonly NAME="password"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="button2" type="button"
id="giris" value="Giris Yap" onClick="hosgeldin()">
&nbsp; <input name="button2" type="reset"
id="temizle" value="Sil"></td>
</tr>
</table>
</form>

Kodlarn yazlmas
SanalKlavye Html sayfasnn HTML blmne aadaki kodlar yazn. Bu kod,
Java Script ile istemci tarafl fonksiyonlar eklemektedir. Bu kodu
<Head>..</Head> etiketleri arasna ekleyin.

<script language="javascript">

function HarfA()
{
form1.password.value += "A";
}

function HarfB()
{
form1.password.value += "B";
}
262 Modl 9: Web Programlamaya Giri

function HarfC()
{
form1.password.value += "C";
}

function HarfD()
{
form1.password.value += "D";
}
function HarfE()
{
form1.password.value += "E";
}

function HarfF()
{
form1.password.value += "F";
}
function HarfG()
{
form1.password.value += "G";
}

function HarfH()
{
form1.password.value += "H";
}
function HarfI()
{
form1.password.value += "I";
}

function HarfJ()
{
form1.password.value += "J";
}
function HarfK()
{
form1.password.value += "K";
}

function HarfL()
{
form1.password.value += "L";
}
function HarfM()
{
form1.password.value += "M";
}

function HarfN()
{
form1.password.value += "N";
}
function HarfO()
{
form1.password.value += "O";
}

function HarfP()
{
Konu: 1 263

form1.password.value += "P";
}
function HarfR()
{
form1.password.value += "R";
}
function HarfS()
{
form1.password.value += "S";
}
function HarfT()
{
form1.password.value += "T";
}

function HarfU()
{
form1.password.value += "U";
}
function HarfV()
{
form1.password.value += "V";
}

function HarfY()
{
form1.password.value += "Y";
}
function HarfZ()
{
form1.password.value += "Z";
}

function hosgeldin()
{
alert("hosgeldiniz sayin: " + form1.user.value)
}
</script>

Popup pencere oluturmak


WebOrnek projesine Popup isminde yeni bir Html sayfa ekleyin.
264 Modl 9: Web Programlamaya Giri

Aadaki kodlar <Body>..</Body> etiketlerinin arasna yazarak Html sayfay


tasarlayn.

<INPUT id="Button1" type="button" onclick="pencereac()"


value="Pencere A" name="Button1">

WebOrnek projesine acilan_pencere isminde yeni bir Html sayfa ekleyin.

Aadaki kodlar <Body>..</Body> etiketlerinin arasna yazarak Html sayfay


tasarlayn.

Burada aclan pencere mevcut


<br>
<INPUT id="Button2" onclick="window.close()" type="button"
value="Pencere Kapat" name="Button2">
Konu: 1 265

Kodlarn yazlmas
Popup, Html sayfasnn HTML blmne aadaki kodlar yazn. Bu kod, Java
Script ile istemci tarafl fonksiyon eklemektedir. Bu kodu <Head>..</Head>
etiketleri arasna ekleyin.

<script language="javascript">
function pencereac()
{
window.open('acilan_pencere.htm','acilan','width=500,heig
ht=300')
}
</script>
Modl 10:

Modl 10: Kullanc Kontrolleri Oluturmak

Web uygulamalar gelitirirken, her sayfada grntlenecek sabit paneller


gerekebilir. Bu panelleri her sayfa iin tekrar oluturmak zaman ve performans
Modul 10: 267

kaybna yol aar. Bu paneller, User Controls (kullanc kontrolleri) biminde


oluturulup, proje iinde birok yerde kullanlabilir.

Bu modl tamamlandktan sonra :


Kullanc kontrollerin yapsn renecek,
Kullanc kontrol oluturabilecek,
Kullanc kontrollerini proje iinde kullanabileceksiniz.

Konu 1: Kullanc Kontrolleri

Sk kullanlan kontroller bir araya getirilerek yeni bir kontrol oluturulur. Bu


kontroller uygulama ierisinde her sayfada kullanlabilir. rnein sayfalar aras
dolam salayan men paneli, kullanc kontrol haline getirilebilir.

Web kontrollerinde olduu gibi kullanc kontrolleri de sunucu tarafnda alr.

Kullanc kontrolleri System.Web.UI.UserControl snfndan tretilmitir.

Kullanc Kontrolnn Avantajlar


Kullanc kontrolleri, ayr bir namespace iinde tanmlanr. Bu durum
kullanldklar Web formlar ile oluabilecek isim akmasn ortadan
kaldrr.
Kullanc kontrolleri, ayn sayfa iinde birden fazla kullanlabilir. Hibir
zellik veya metot iin isim akmas sz konusu deildir.
268 Modl 10: Kullanc Kontrolleri Oluturmak

Kullanc kontrolleri ayr dillerde yazlabilir.

Kullanc kontrolleri, uygulama iindeki tm sayfalara eklenebilir. Ancak dier


uygulamalardaki kullanc kontrolleri sayfalara direk eklenemez. Dier
uygulamalardaki kullanc kontrolleri, kullanmadan nce uygulamaya
eklenmelidir.

Kullanc Kontroln Projeye Eklemek

Projeye yeni bir kullanc kontrol eklemek iin aadaki admlar takip edin.

1. Solution Explorer penceresi an.


2. Proje ad zerinde farenin sa butonunu tklayn.
3. Alan penceredeki Add mensnden Add Web User Control
komutunu sein.
4. Name metin kutusuna kullanc kontrolune verilecek ismi girin.
Modul 10: 269

Kullanc kontrol formlar, normal Web formlar gibi tasarlanr. Kullanc kontrol
dosyalar .ascx ve bu kontrollere ait code-behind sayfas ise ascx.cs uzantldr.

Kullanc kontrollerinde HTML ve Visual Basic .NET kodu birlikte kullanlabilir.


Ancak kullanc kontrolleri web formlar tarafndan kullanld iin <head>,
<body>, <form> gibi HTML elementleri bulundurmaz.

Web form direktifi olan @Page yerine kullanc kontrollerinde @Control ifadesi
kullanlr. Bu direktif @Page direktifinin AspCompat ve Trace dndaki tm
attribute deerlerine sahiptir.
270 Modl 10: Kullanc Kontrolleri Oluturmak

Kullanc kontrollerini Web form ierisine eklemek iin @Register ifadesi


kullanlr. Bu ifade kullanc kontrollerinin web forma balanmasn salar.

<%@ Register TagPrefix=deneme TagName=Login


src=login.ascx %>

TagPrefix attribute deeri kullanc kontrol iin bir namespace oluturur.


Bylece her kontrol ayr bir namespace iinde tanmlanr. TagName, kullanc
kontrolnn ismidir. Src ise kullanc kontrolnn bulunduu yolu belirtir.

@Register ifadesi ile forma balanan kullanc kontrolu, aada kod ile web
form ierisinde grntlenir. Kullanc kontrolleri sunucu zerinde alt iin,
runat="server" parametresi ile tanmlanmaldr.

<deneme:Login id="Login1" runat="server"/>


Modul 10: 271

rnekte tm sayfalarda kullanlacak sayfa bal, kullanc kontrol olarak


tasarlanmtr.

<%@ Control Language="cs" AutoEventWireup="false"


Codebehind="Header.ascx.cs"
Inherits="KullaniciKontrolleri.UserControls.Header" %>
<table width="100%" height="100%" bgcolor="#ffeeaa">
<tr valign="middle">
<td align="center">
<asp:Label id="lblHeader" runat="server"
Font-Bold="True" ForeColor="White"
Font-Size="X-Large">Hogeldiniz
</asp:Label>
</td>
</tr>
</table>
272 Modl 10: Kullanc Kontrolleri Oluturmak

Modl zeti

31. Kullanc kontrolleri niin oluturulur?


32. Kullanc kontrollerinin avantajlar nelerdir?.
33. Web form ierisinde kullanc kontrolleri nasl kullanlr?
Modul 10: 273

Lab 1: E-Ticaret Uygulamas Gelitirmek

Bu uygulamada, e-ticaret uygulamasnn kullanc kontrolleri tasarlanacaktr. Bu


uygulamada, btn sayfalarda kullanlacak st ve alt men oluturulacaktr.
Ayrca kategori isimli kullanc kontrolu ile tm kategoriler listelenecektir.
Kategori deerleri veritaban ierisinden alnr.

Bu lab tamamlandktan sonra:


Kullanc kontrolu oluturabileceksiniz.

Kullanc kontrollerin eklenmesi


AspEticaret isimli projeyi an.

Ust kontrolunun eklenmesi


ASPEticaret projesine Ust isminde yeni bir kullanc kontrol ekleyin.

Kullanc kontrolu ierisine tablodaki kontrolleri ekleyin.

Kontrol Kontrol smi zellik Deer

HyperLink btnAnaSayfa NavigateUrl Default.aspx


Text AnaSayfa
HyperLink btnUyeGiris NavigateUrl UyeGiris.aspx
Text tklaynz
274 Modl 10: Kullanc Kontrolleri Oluturmak

HyperLink btnUyeKayit NavigateUrl UyeKayit.aspx


Text ye Kayit
LinkButton btnCikis Text k
Visible False
Label lblAd

Ust isimli kullanc kontrolunn Html kodlar aadaki gibi olacaktr.


<%@ Control Language="cs" AutoEventWireup="false"
Codebehind="Ust.ascx.cs" Inherits="AspEticaret.Ust"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"
%>
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" border="0">
<TR>
<TD style="HEIGHT: 17px">
<P align="center"><FONT face="Lucida Handwriting"
size="6">Yazilim Uzmani&nbsp;Kitapevi</FONT></P>
</TD>
</TR>
<TR>
<TD>&nbsp;
<asp:Label id="lblAd"
runat="server"></asp:Label>&nbsp;</TD>
</TR>
<TR>
<TD>
<P align="center">
<asp:HyperLink id="btnAnaSayfa" runat="server"
NavigateUrl="Default.aspx">AnaSayfa</asp:HyperLink>&nbsp;|
<asp:HyperLink id="btnUyeGiris" runat="server"
NavigateUrl="UyeGiris.aspx">ye Giri</asp:HyperLink>&nbsp;|
<asp:HyperLink id="btnUyeKayit" runat="server"
NavigateUrl="UyeKayit.aspx">ye
Kayit</asp:HyperLink>&nbsp;&nbsp;&nbsp;
&nbsp;
<asp:LinkButton id="btnCikis" runat="server"
Visible="False">ks</asp:LinkButton></P>
</TD>
</TR>
</TABLE>

Ust isimli kullanc kontrolunn code behind kodlar aadaki gibi olacaktr.

Using System.Data.OleDb

private void Page_Load(System.Object sender,


System.EventArgs e)
{
If (Session("user") != "")
{
Modul 10: 275

lblAd.Text = "Bay / Bayan : " + Session("ad") +


" " + Session("soyad");
btnCikis.Visible = true;
else
{
btnCikis.Visible = false;
}
}

private void btnCikis_Click(System.Object sender,


System.EventArgs e)
{
Session.Abandon();
btnCikis.Visible = false;
Response.Redirect("Default.aspx");
}

Alt kontrolunun eklenmesi


ASPEticaret projesine Alt isminde yeni bir kullanc kontrol ekleyin.

Kullanc kontrolu ierisine tablodaki kontrolleri ekleyin.

Kontrol Kontrol zellik Deer


smi

HyperLink Link1 NavigateUrl


Text AnaSayfamYap
HyperLink Link2 NavigateUrl
Text SikKullanilanlaraEkle
HyperLink Link3 NavigateUrl mailto:tamer.sahiner@bilgeadam.com
Text Iletisim

Alt isimli kullanc kontrolunn Html kodlar aadaki gibi olacaktr.

<%@ Control Language="cs" AutoEventWireup="false"


Codebehind="Alt.ascx.cs" Inherits="AspEticaret.Alt"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"
%>
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" border="0">
<TR>
<TD>
<P align="center"><asp:hyperlink id="Link1"
runat="server">AnaSayfamYap</asp:hyperlink>&nbsp;|
<asp:hyperlink id="Link2"
runat="server">SikKullanilanlaraEkle</asp:hyperlink>&nbsp;|
<asp:hyperlink id="Link3" runat="server"
NavigateUrl="mailto:tamer.sahiner@bilgeadam.com">Iletisim</a
sp:hyperlink></P>
276 Modl 10: Kullanc Kontrolleri Oluturmak

</TD>
</TR>
</TABLE>

Yan kontrolunun eklenmesi


ASPEticaret projesine Yan isminde yeni bir kullanc kontrol ekleyin.

Yan isimli kullanc kontrolunn Html kodlar aadaki gibi olacaktr.

<%@ Control Language="cs" AutoEventWireup="false"


Codebehind="yan.ascx.cs" Inherits="AspEticaret.yan"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"
%>
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="150" border="0">
<TR>
<TD>
<P align="center"><A
href="http://www.yazilimuzmani.com"><IMG
src="resimler/YazilimUzmani.gif" border="0"></A></P>
</TD>
</TR>
<TR>
<TD style="HEIGHT: 35px">
<P align="left"><IMG
src="resimler/bilgeadam%20logo.jpg" border="0"><A
href="http://www.yazilimuzmani.com"></A></P>
</TD>
</TR>
<TR>
<TD>
<P align="left"><A
href="http://sdnet.bilgeadam.com"><IMG
src="resimler/sdNetLogo.gif" border="0"></A></P>
</TD>
</TR>
</TABLE>

DataSet nesnesinin Oluturulmas


dsBook isminde yeni bir DataSet oluturun.
Modul 10: 277

1- Solution Explorer penceresi an.


2- Proje ad zerinde farenin sa butonunu tklayn.
3- Alan penceredeki Add mensnden Add New Item komutunu sein.
4- Templates seenei ierisinden DataSet esini sein
5- Name metin kutusuna dsBook ismini girin.

Balant oluturulmas
KitapDB veritaban zerinde ilem yaplmas iin balant kurulmas gerekir. Bu
balanty Server Explorer kullanarak oluturun. Bu baglant ile veritaban ierisindeki
Kategori tablosu, dsBook isimli dataset ierisine eklenecektir.

KitapDb uygulamas iin yeni balant oluturmak.


5. Server Explorer penceresi zerinde farenin sa butonunu tklayn. Alan
menden Add Connection komutunu tklayn.
6. Alan Data Link Properties penceresinin Provider sekmesini tklayn.
7. Provider sekmesinden Microsoft.Jet.OLEDB.4.0 Provider i seerek
Next butonunu tklayn.

8. Alan Connection sekmesinin grntsn resimdeki gibi dzenleyerek OK


butonunu tklayn.
9. Server Explorer penceresinden DataConnections seeneini sein
10. Eklediiniz balant ierisinden Tables seeneini sein.
11. Tables ierisindeki Kategori tablosunu dsBook nesnesinin ierisine
srkleyin.
278 Modl 10: Kullanc Kontrolleri Oluturmak

Kategori kontrolunun eklenmesi


ASPEticaret projesine Kategori isminde yeni bir kullanc kontrol ekleyin.

Kullanc kontrolu ierisine tablodaki kontrolleri ekleyin.

Kontrol Kontrol smi zellik Deer

Repeater rptKategori NavigateUrl Default.aspx

Kategori isimli kullanc kontrolunn Html kodlar aadaki gibi olacaktr.

<%@ Control Language="cs" AutoEventWireup="false"


Codebehind="kategori.ascx.cs"
Inherits="AspEticaret.kategori"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"
%>
<asp:Repeater id="rptKategori" runat="server">
<ItemTemplate>
<table width="150" cellpadding="2" cellspacing="2">
<tr bgcolor="#0099ff">
<td>
<a style="COLOR: white"
href='Kitap.aspx?KategoriID=<%#
databinder.eval(Container.dataitem,"KategoriID") %>'>
<%# Databinder.eval(container.dataitem
,"KategoriAdi") %>
</a>
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>

Kategori isimli kullanc kontrolunn code behind kodlar aadaki gibi


olacaktr.

using System.Data.OleDb;

private void Page_Load(System.Object sender,


System.EventArgs e)
{
String connStr = "Provider=Microsoft.Jet.OleDB.4.0; " +
"Data Source=" + Server.MapPath("KitapDb.mdb");
OleDbConnection conn = new OleDbConneciton();
Modul 10: 279

conn.ConnectionString = connStr;

OleDbCommand comm = new OleDbCommand();


comm.CommandType = CommandType.Text;
comm.CommandText = "Select * from Kategori";
comm.Connection = conn;

OleDbDataAdapter da =new OleDbDataAdapter();


da.SelectCommand = comm;

DataSet ds = new DataSet();


try
{
conn.Open();
da.Fill(ds, "Kategori");
rptKategori.DataSource = ds.Kategori;
rptKategori.DataBind();
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
if (conn.State = ConnectionState.Open)
{
conn.Close();
}
}
}
Modul 11:
Modul 11: 281

Modul 11: ADO.NET ile Veriye Eriim

Web uygulamalar ile veriye eriim, Windows uygulamalarna olduka


benzemektedir. Ancak verileri listelemek iin kullanlan kontrollerin alma
yaps farkllk gsterir. Veriye ulam ADO.NET nesneleri ile gerekleir.
282 Modl 11:

Bu modl tamamlandktan sonra:


Repeater, DataList ve DataGrid gibi listeleme kontrollerini
renecek,
Web uygulamlarnda Connected ve Disconnected alma yapsn
renecek,

Konu 1: Veri Balantl Kontroller

ASP.Net ile veritaban iindeki veriyi grntlemek ve dzenlemek iin veri


balant kontrolleri kullanlr. ListBox, DropDownList kontrolleri dnda
CheckBoxList, RadioButtonList kontrolleri veri balantl olarak alabilir.
Repeater, DataList ve DataGrid kontrolleri veri listelemek iin kullanlr.
Modul 11: 283

CheckBoxList, RadioButtonList Kullanm

CheckBox ve RadioButton kontrollerinden farkl olarak, birden fazla seenek


arasnda seim yaplmasn salayan CheckBoxList ve RadioButtonList
kontrolleri kullanlabilir. rnein bir sayfada drt tane istee bal seenek
varsa drt ayr CheckBox kullanmak yerine, bir CheckBoxList kontrol
kullanlr. Ayn ekilde be seenekten sadece bir tanesi seilmesi gerekiyorsa,
be ayr RadioButton oluturmak yerine, bir RadioButtonList kontrol
kullanlr.

CheckBoxList kontrolnn DataSource, DataMember, DataTextField ve


DataValueField zellikleri ile veritaban ilemleri gerekletirilir. DataSource,
balantsz alan DataSet nesnesine balanr. DataMember, bu DataSet
ierisindeki tablo ismini temsil eder. DataValueField, value zelliinde
tutulmas istenen kolonu, DataTextField ise text zelliinde grntlenmek
istenen kolonu temsil eder.

rnekte CheckBoxList kontrol ile seilen tm eler, lblMsg isimli etiketin


ierisine yazdrlmaktadr.

int i ;

for (int i=0;i< checkboxlist1.Items.Count ;i++)


{
If (checkboxlist1.Items(i).Selected)
{
lblMsg.Text &= checkboxlist1.Items(i).Text & "<br>"
284 Modl 11:

}
}
CheckBoxList kontrol ile birden fazla seim yaplabilir. Fakat
RadioButtonList kontrol ile sadece bir e seilebilir.

rnekte CheckBoxList veya RadioButtonList kontrol ile veritaban


balants .gsterilmektedir.

private void Page_Load(System.Object sender,


System.EventArgs e)
{
da.Fill(DataSet1, "Kitaplar");
CheckBoxList1.DataSource = DataSet1;
CheckBoxList1.DataMember = "Kitaplar";
CheckBoxList1.DataTextField = "Kitap_baslik";
CheckBoxList1.DataValueField = "kitap_ISBN";

CheckBoxList1.DataBind();
}

Repeater, DataList ve DataGrid Kullanm

Repeater, DataList ve DataGrid, veri listelenmesi iin tasarlanm zel


kontrollerdir.

Bu kontrol ablonlardan oluur. Ortak ablonlar ise HeaderTemplate,


ItemTemplate ve FooterTemplate ablonlardr. ablonlar ierisinde verinin
grntlenmesine ynelik tanmlamalar yaplr.
Modul 11: 285

DataList ve DataGrid, veriler zerinde gncelleme yapma imkan sunarken,


Repeater sadece veri grntlemeyi salar. Ancak DataGrid, DataList
kontrolnden farkl olarak veri sayfalama ve sralama zellikleri sunar.

Repeater

Repeater; veriyi veritabandan alarak istenilen biimde grntlenmesini


salayan olduka gl bir kontroldr. Her kaydn grntlenme ekli, HTML
etiketleri ile oluturulan bir ablon ile belirlenir. Haber yayn yapan sitelerinin
ounda bu kontrol kullanlr.

Kod 11.1 de Repeater kullanm gsterilmektedir.

Kod 11.1:Repeater Kullanm

<asp:Repeater id="Repeater1" runat="server">


<HeaderTemplate>
<asp:Label id="lblh" Runat="server" text="Company _
Name" Font-Bold="True" Width="260"></asp:Label>
<asp:Label id="lblh2" Runat="server" text="Contact _
Name" Font-Bold="True"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td width="260">
<asp:Label ID=lbl1 Runat=server
text='<%#Databinder.eval(container.dataitem,
"companyname")%> ' >
</asp:Label>
</td>
286 Modl 11:

<td>
<asp:Label ID=Lbl2 Runat=server
text='<%# Databinder.eval(container.dataitem,
"contactname")%> ' >
</asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
<FooterTemplate>
<b>BilgeAdam BTA</b>
</FooterTemplate>
</asp:Repeater>

Repeater kontrolnn ItemTemplate ablonda, her kayt iin yaplacak


gsterim ekli belirlenir. HTML etiketleri kullanarak ktya ekil verilebilir.
HeaderTemplate ablonu repeater kontrolnn balnn, FooterTemplate
alt baln biimini belirler.

HeaderTemplate iinde alan bir <table> etiketi, FooterTemplate iinde


</table> ifadesiyle kapatlabilir. SeperatorTemplate ablonu, kaytlar
arasnda ayra stili belirler.

Tablo 11.1de Repeater kontrolnn ablonlar aklanmtr.

ablon Ad Aklama

ItemTemplate Veritabanndan gelecek satrlarn


grntlenecei stilin belirlendii alan.
AlternatingItemTemplate Ardl olarak gelen satrlarn birbirinden
farkl olmasn salar.
HeaderTemplate Repeater kontrolnn baldr.
stenilen stil verilebilir.
FooterTemplate Repeater kontrolnn en altndaki
alandr. Alt balk olarak istenilen stil
verilebilir.
SeperatorTemplate Veritabanndan gelen her bir satr
dierinden ayran ablondur.

Tablo 11.1: Repeater kontrolnn ablonlar

<table> </table> etiketleri ile kaytlarn bir tablonun satrlar biiminde


grntlenmesini salanr. <tr> </tr> etiketi arasnda iki <td> </td> etiketi
kullanr. Bu ekilde, bir satr bilgiyi iki kolona ayrlm biimde grntlenmesini
istenir. lk td etiketinde bir <asp:Label> etiketi kullanarak bu birinci stunda
verinin bir Label kontrol iinde grntlenmesi isteini bildirilir. Ve Label
etiketinin Text zellii iine,
Modul 11: 287

text='<%#Databinder.eval(container.dataitem,
"companyname")%> '

ifadesi yazlarak veri balama ilemi gerekletirilir. Burada


Databinder.eval, repeater kontrolne balanan veri kmesi iinden
CompanyName ad verilen kolonu bulur ve o kolondaki verileri srasyla repeater
iine alr ve grntler.

kinci td etiketinde, Label kontrolnn Text zelliine ContactName kolonunu


balar.

text='<%#Databinder.eval(container.dataitem,
"contactname")%> '

Code-behind sayfasnda ise, Repeater kontrolnn DataSource zelliine,


veri kaynan temsil eden DataSet nesnesinin ismi bildirilir. Ve DataBind
metodu ile balantnn ilenmesi salanr.

Repeater1.DataSource = DataSet2;
Repeater1.DataBind();

Sonu olarak Repeater kontrol, HTML kullanmn youn olarak gerektirir ve


karlnda, verilerin istenilen ablona uygun biimde grntlenmesini salar.

DataList
288 Modl 11:

DataList kontrol, Repeater kontrolnn daha gelimi halidir. Veri


grntlemek dnda, verilerin seilip ve zerinde gncelleme ilemleri
yapmaya olanak salar.

Datalist eklemek iin aadaki admlar takip edin. rnekte DataList kullanm
gsterilmektedir.

1. Ara kutusundan DataList kontrol seerek formumuzun zerine


srkleyip brakn.
2. Kontrol zerine sa tklayn ve alan menden Edit Template alann
sein.
3. Alan yeni pencerede Header and Footer Templates, Item
Template ve Seperator Templates alanlar kacaktr. Header and
Footer Templates alann seerek, balk ve alt balk alanlarna
istenilen form girilebilir. Header alanna iki label ekleyin ve Text
zelliine Kitap Ad ve Yazar deerini verin. Footer alanna yine bir
Label ekleyin ve Text zelliine Bilge Adam BTA yazn.
4. Kontrol zerinde tekrar sa tklayn ve Item Templates alann sein.
ItemTemplate ve AlternatingItemTemplate ablonuna ek olarak,
SelectedItemTemplate ve EditItemTemplate ablonlar bulunur.
ItemTemplate alannda, grntlemek istenilen alanlar temsil edecek
kontrolleri oluturulur. Bu kontrolde repeater kontrolnden farkl olarak,
tasarm ekrannda ara kutusundan istenen kontrol ItemTemplate
ablonuna eklenebilir.
5. ki tane Label kontroln ItemTemplate alanna ekleyin ve HTML
koduna geerek veri balama ilemlerini gerekletirin.

Kod 11.2: DataList kullanmnda code-behind sayfas

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; +


Data Source=" & Server.Mappath("./Stok.mdb");
OleDbConnection conn = new OleDbConnection (connStr);
OleDbDataAdapter da = new OleDbDataAdapter("select * from
kitaplar", conn);
DataSet ds = New DataSet();

private void Page_Load(Object sender, EventArgs e)


{
da.Fill(ds, "kitaplar");
DataList1.DataSource = ds;
DataList1.DataBind();
}

Kod 11.3: DataList aspx sayfas ve veri balama

<form id="Form1" method="post" runat="server">


<asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT:
88px; POSITION: absolute; TOP: 168px" runat="server">
<HeaderTemplate>
<asp:Label id="Label1" runat="server" Width="300px"
Font-Bold="True">Kitap Ad</asp:Label>
Modul 11: 289

<asp:Label id="Label2" runat="server" Width="65px"


Font-Bold="True">Yazar</asp:Label>
</HeaderTemplate>
<FooterTemplate>
<asp:Label id="Label3" runat="server" Font-
Bold="True">Bilge adam Bta</asp:Label>
</FooterTemplate>
<ItemTemplate>
<asp:Label id=Label5 runat="server" Width="300px"
text='<%# databinder.eval(container.dataitem,
"kitap_baslik")%>'> </asp:Label>
<asp:Label id=Label4 runat="server" text='<%#
databinder.eval(container.dataitem, "kitap_yazar")%>'>
</asp:Label>
</ItemTemplate>
</asp:DataList>
</form>

DataList kontrolnn bir dier fark, kt grnmnn tablo iinde veya dz


bir biimde verilmesidir. RepeatLayout zelliinin Table ve Flow deerlerini
kullanarak tablo grnm ve dz grnm verilir. Varsaylan grlm Table
biimindedir.

RepeatColums zellii ise verilerin ka stun halinde grntleneceini belirler.


RepeatDirection zellii ise tekrarlanan kaytlarn alt alta veya yan yana
sralanarak grntlenmesini salar.

GridLines zellii ise dikey ve yatay izgilerle kayt grntlerini birbirinden


ayrr.

DataList ierisinde grnt formunu dzenlemek iin properties


penceresindeki grnme ilikin pek ok zellik sunulmutur.

SelectedItemTemplate ablonu, listeden seilen nesneye ait ayrntlarn


grntlenmesini salar.

EditItemTemplate ablonu, kullancnn setii kayt zerinde dzenleme


yapmasn salayan alana ait kodlarn girildii blmdr..

DataList kontrolnn ablonlar ierisine kullanlan kontrollere, formun


zerinden direk eriilemez. rnein DataList iindeki bir Button kontrolnn
Click olayna kod yazlamaz. DataList iinde kullanlan Button kontrolne
kod yazmak iin, DataList kontrolnn CommandName zellii kullanlr. Bu
zellik, Button kontroln Command nesnesi ile alr ve forma yollar. Ve
DataList kontrolnn ItemCommand olaynda, gelecek komutun adna gre
kod yazlr.
290 Modl 11:

DataGrid

DataGrid kontrol, DataList kontrolnden daha gelimi zelliklere sahiptir.


Verileri sayfalama ve sralama yetenei sayesinde grntleme ilemleri
zellemitir. DataGrid, veritabanndan alnan bir tabloyu, tablo biimi ile
ekrana yanstlmasn salar. Seilen kayt zerinde deiiklik yapma ve kayt
silme olanaklarn salar. Sayfalama, sralama, seme, dzeneleme ve silme
ilemlerini destekler. DataGrid kontrolne veri balamak iin ablon
kullanmaya gerek yoktur.

Kod 11.4: DataGrid kontrolnn en basit kullanm

string connStr = "Provider= Microsoft.Jet.OLEDB.4.0;+


Data Source=" + Server.Mappath("./Stok.mdb");
OleDbConnection conn = new OleDbConnection(connStr);
OleDbDataAdapter da = new OleDbDataAdapter("select * from
kitaplar", conn);
DataSet ds = new DataSet;

private void Page_Load(Object sender, EventArgs e)


{
da.Fill(ds, "kitaplar");
DataGrid1.DataSource = ds;
DataGrid1.DataMember = "kitaplar";
DataGrid1.DataBind();
}

HTML

<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101;


LEFT: 28px; POSITION: absolute; TOP: 96px"
runat="server" Width="432px" Height="203px">
Modul 11: 291

</asp:DataGrid>

Sadece tasarm ekran kullanlarak DataGrid oluturulabilir.


Server Explorer panelinden yeni bir Access veritaban balants
oluturun.
Bu veritabanndan, kullanmak istediiniz tabloyu srkleyerek form
zerine brakn. Formun alt penceresinde iki yeni nesne oluacaktr.
(OleDbConnection1 ve OleDbDataAdapter1)
OleDbDataAdapter1 nesnesi sein ve Properties panelinden
Generate DataSet komutunu verin.
Alan pencerede Next dmeleri ile ilerleyin.
Ara kutusundan DataGrid kontroln srkleyip forma brakn.
Properties penceresinde DataSource alanna oluturulan DataSet
kontrolnn ismi, DataMember alanna, DataSet iine alnan
tablolardan birini girin.
DataSet kontroln veri ile dolduran ve balama ilemlerini
gerekletiren kodlar yazn.
OleDbDataAdapter1.Fill(DataSet1, Tablo_ismi);
DataGrid1.DataBind();

DataGrid iin hazrlanm eitli ablonlar vardr. Hazr ablonlar semek


iin DataGrid kontrol zerinde sa tklanr ve AutoFormat seilir.

Varsaylan olarak DataGrid verileri Grid grnmnde sunar. GridLines


zelliine Both, Hortizonal, Vertical ve None deerlerinden biri
atanabilir. BackImageUrl zellii sayesinde DataGrid kontrolnde bir arka
plan resmi grntlenebilir.

DataGrid Kontrolnde Kolon Oluturma


Slide9

DataGrid kontrol ierisinde eitli kolon trleri bulunur.


BoundColumn
HyperLinkColumn
TemplateColumn
ButtonColumn
EditCommandColumn

AutoGenerateColumns zellii, varsaylan olarak True deerini alr ve


tablodan gelen kolonlar deitirmeden grntler.

BoundColumn
BoundColumn, DataGrid kontrolnn varsaylan kolonudur. Kaytlar
grntler. Veri kaynandan alnan tablodan sadece belirli kolonlarn
292 Modl 11:

grntlenmesi istenirse, BoundColumn kontrolleri kullanlabilir. Kod 11.5de


veri kaynandan alnan tablonun istenilen kolonlar grntlenir.

Kod 11.5: DataGrid ierisinde BoundColumn kullanm

BoundColumn ile sadece grntlenmesi istenen kolonlar DataGrid


kontrolne eklenir.

private void Page_Load(Object sender, EventArgs e)


{
string connStr = Provider=Microsoft.Jet.OLEDB.4.0; +
Data Source=" & Server.Mappath("./Stok.mdb")
OleDbConnection conn =new OleDbConnection(connStr);
OleDbCommand cmdSelect = new OleDbCommand("Select * From
kitaplar", conn);

conn.Open();
DataGrid1.DataSource = cmdSelect.ExecuteReader();
DataGrid1.DataBind();
conn.Close();
}

Html

<asp:DataGrid ID="DataGrid1"
AutoGenerateColumns="False"
EnableViewState="False" Runat="Server">

<Columns>
<asp:BoundColumn DataField="Kitap_baslik"
HeaderText=Kitap Ad />
<asp:BoundColumn DataField="Kitap_yazar"
HeaderText=Yazar Ad/>
</Columns>
</asp:DataGrid>

AutoGenerateColumns zellii varsaylan olarak True deerindedir ve tm


kolonlarn otomatik olarak grntlenmesini salar. rnekte bu zellie False
deeri atanmtr.

BoundColumn kolonunun birok zellii vardr.


DataField
DataFormatString
FooterText
HeaderImageUrl
HeaderText

BoundColumn kolonu, DataGrid kontrolnn Columns etiketi ierisinde


tanmlanmtr. DataField zelliinde ise kolon ad belirtilmitir.
Modul 11: 293

PUCU: DataGrid iinde grntlenecek kolonlar seen sql komut


tanmlanrken select * from ... ifadesinden kanlmaldr. Bu komut yerine
sadece ihtiya duyulan kolonlar tek tek belirtilmelidir. Aksi halde, Web zerinde
yayn annda performans kayb ortaya kar. BoundColumnun DataFormatString
zellii ise, kolondan alnan ifadenin belirli bir formatta grntlenmesini salar.
rnein bir para miktar sz konusuysa bu zellik kullanlabilir.

<asp:BoundColumn DataField="Kitap_fiyat"
DataFormatString="{0:c}"/>

BoundColumnun HeadetText, FooterText ve HeaderImageUrl zellikleri,


header, footer alanlarna grntlenmesi istenilen yazlar, ve balkta
grntlenecek resimi belirler. HeaderText alanna yazlan yaznn
grntlenebilmesi iin DataGrid kontrolnn ShowFooter zellii True
yaplmaldr. Bu zellik varsaylan olarak False deerindedir. Ayn anda
HeaderImageUrl ve HeaderText zelliklerine deer girildiinde, resim ve yaz
beraber grntlenemez.

rnekte Header alannda hem resim hem de yaz gsterilir

HeaderText="<img src=myImage.Gif>Balk"

HyperLinkColumn
HyperLinkColumn, kaytlar linkler eklinde grntleyen kolondur. Yani
DataGrid kontrolnde grntlenen kaytlar zerinden baka sayfalara ilgili
linkler verilmek isteniyorsa, HyperLinkColumn kullanlmaldr. DataGrid
kaytlarna ilikin ayrntl bilgi verilmek isteniyorsa master/detail formlar
eklinde grnt vermek iin yine bu kolon kullanlabilir.

rnekte HyperLinkColumn kullanm gsterilmektedir. DataGrid nesnesi


zerindeki Detaylar kolunu tklanarak, detay bilgileri getirilebilir. Bu bilgiler
Detaylar.aspx sayfas zerinde gsterilir.

Kod 11.7: DataGrid ierisinde HyperLinkColumn kullanm

private void Page_Load(Object sender,EventArgs e)


{
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; +
Data Source=" & Server.Mappath("./Stok.mdb");
OleDbConnection conn =new OleDbConnection(connStr);
OleDbCommand cmdSelect = OleDbCommand("Select * From +
musteri", conn);
conn.Open();

DataGrid1.DataSource = cmdSelect.ExecuteReader();
DataGrid1.DataBind();
conn.Close();
}
294 Modl 11:

Html

<asp:DataGrid ID="DataGrid1"
AutoGenerateColumns="False" EnableViewState="False"
CellPadding="10" Runat="Server">

<Columns>
<asp:BoundColumn
HeaderText="Mteri Ad"
DataField="musteri_ad" />
<asp:BoundColumn
HeaderText="Mteri Soyad"
DataField="musteri_soyad" />
<asp:HyperLinkColumn
HeaderText="Detaylar"
DataNavigateUrlField="musteri_id"
DataNavigateUrlFormatString="Detaylar.aspx?id={0}"
Text="Detay Grntle" />
</Columns>

</asp:DataGrid>

Sayfaya Parametre Yollama


Tablodan genel bilgi verilecek alan belirlenir ve tkland zaman o kolona ait
veri hakknda daha ayrntl bilgi grntlemek iin detay sayfasna link verilir.

HyperLinkColumn kolonunda grntlenen linkler, DataNavigateUrlField,


DataNavigateUrlFormatString ve Text zelliklerine girilen bilgiler ile
yaplandrlr. DataNavigateUrlField linkin adresini, DataTextField link
zerinde grntlenecek yazy tutar.

HyperLinkColumn kolonunun zellikleri:


DataNavigateUrlField
DataNavigateUrlFormatString
DataTextField
DataTextFormatString
FooterText
HeaderImageUrl
HeaderText
NavigateUrl
Target
Text

DataTextField ve DataTextFormatString zellikleri, her bir hyperlink iin


farkl etiketler grntlenmesi iin kullanlabilir.

rnekte HyperLinkColumn kullanm gsterilmektedir. Site linkleri(link_url) ve


balklar(link_title) veritabanndaki linkler tablosundan ekilerek, DataGrid
Modul 11: 295

zerinde gsterilir. Link_title kolonu site balklarnn grntlenmesini salar.


Link_title kolunu tklanarak link_url kolonundaki adres bilgisine ynlendirilir.

Kod 11.8: DataGrid ierisinde HyperLinkColumn kullanm

private void Page_Load(Object sender, EventArgs e)


{
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; +
Data Source=" + Server.Mappath("./Stok.mdb");
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand cmdSelect = OleDbCommand ("Select * From
linkler", conn);
conn.Open();

DataGrid1.DataSource = cmdSelect.ExecuteReader();
DataGrid1.DataBind();
conn.Close();
}

Html

<asp:DataGrid ID="DataGridLink"
AutoGenerateColumns="False" EnableViewState="False"
ShowHeader="False" CellPadding="10" Runat="Server">

<Columns>
<asp:HyperLinkColumn
DataNavigateUrlField="link_url"
DataTextField="link_title" />
</Columns>

</asp:DataGrid>

TemplateColumn
TemplateColumn, kaytlar bir ablona uyarak grntleyen kolondur.
DataGrid hcreleri iinde grntlenecek verileri eitli kontroller kullanarak
ekrana yanstmak iin bu kolon kullanlr. Ancak TemplateColumn, kendi iinde
HeaderTemplate, FooterTemplate, ItemTemplate ve EditItemTemplate
olmak zere alanlara ayrlr.

Kod 11.9 da TemplateColumn kullanm gsterilmektedir. TemplateColumn


alannda, kitaba ait yazar ve aklama bilgileri grntlenir. Ancak bu iki kolon
bilgileri HTML kodlaryla alnr.

Kod 11.9: DataGrid ierisinde TemplateColumn kullanm

private void Page_Load(Object sender, EventArgs e)


{
string connStr= Provider=Microsoft.Jet.OLEDB.4.0; +
Data Source=" + Server.Mappath("./Stok.mdb");
296 Modl 11:

OleDbConnection conn = new OleDbConnection(connStr);


OleDbCommand cmdSelect = OleDbCommand("Select * From
kitaplar",conn);
conn.Open();

DataGrid1.DataSource = cmdSelect.ExecuteReader();
DataGrid1.DataBind();
conn.Close();
}

HTML

<asp:DataGrid ID="DataGrid1"
AutoGenerateColumns="False" EnableViewState="False"
ShowHeader="False" CellPadding="10" Runat="Server">

<Columns>
<asp:BoundColumn
DataField="kitap_baslik" />

<asp:TemplateColumn>
<itemTemplate>
<table>
<tr>
<td>Yazar:</td>
<td><%# DataBinder.Eval( Container.DataItem,
"kitap_yazar" )%></td>
</tr>
<tr>
<td>Aklama:</td>
<td><%# DataBinder.Eval(Container.DataItem,
"kitap_aciklama" )%></td>
</tr>
</table>
</itemTemplate>
</asp:TemplateColumn>
</Columns>

</asp:DataGrid>
Modul 11: 297

ButtonColumn
ButtonColumn, Button kontrollerinin grntlenmesini salar. Uygulanacak
metot kolon zerinde, button eklinde grntlenir. rnein Sepete Ekle gibi
bir i iin Button kullanlr ve ButtonColumn ierisinde tanmlanr.

ButtonColumn alan kullanarak Select ismindeki butona tkland zaman


kontroln arka plan rengi ve yaz kalnl deitirilir. UnSelect seildiinde
kontrol eski haline getirilir.

Kod 11.9: DataGrid ierisinde ButtonColumn kullanm

private void Page_Load(Object sender, EventArgs e)


{
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; +
Data Source=" + Server.Mappath("./Stok.mdb");
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand cmdSelect = OleDbCommand("Select * From
kitaplar", conn);

conn.Open();
DataGrid1.DataSource = cmdSelect.ExecuteReader();
DataGrid1.DataBind();
conn.Close();
}

void DataGrid1_ItemCommand(s, DataGridCommandEventArgs e)


{
if (e.CommandName =="select")
{
e.Item.BackColor = System.Drawing.Color.LightGreen;
298 Modl 11:

e.Item.Font.Bold = true;
}
else
{
e.Item.BackColor = System.Drawing.Color.Blue
e.Item.Font.Bold = False
}
}

HTML

<asp:DataGrid ID="DataGrid1"
OnItemCommand="DataGrid1_ItemCommand"
AutoGenerateColumns="False"
CellPadding="10" Runat="Server">
<Columns>
<asp:BoundColumn
HeaderText="Kitap Ad" DataField="kitap_baslik" />

<asp:ButtonColumn
CommandName="select"
Text="Select!" />

<asp:ButtonColumn
CommandName="unselect"
Text="UnSelect!" />

</Columns>
</asp:DataGrid>

Select butonuna basldnda, DataGrid kontrolnn OnItemCommand


zelliinde belirtilen DataGrid1_ItemCommand isimli metot devreye girer.
ItemCommand olayn tetikleyen DataGrid1_ItemCommand isimli metot, ilgili
ilemleri gerekletirir.

Unselect dmesine tklandnda ise, yine OnItemCommand zelliinde


tutulan DataGrid1_ItemCommand metodu devreye girer. Ancak tklanan
butonun isimlerine gre yaplacak ilem belirlenir.

if (e.CommandName="select")
{
e.Item.BackColor = System.Drawing.Color.LightGreen;
e.Item.Font.Bold = true;
}
else
{
e.Item.BackColor = System.Drawing.Color.White;
e.Item.Font.Bold = False;
}

e.CommandName, hangi buttonun tklandn belirtir. Tklanan butona gre


hangi metodun uygulanacan belirler.

ButtonColumn zellikleri:
ButtonType: LinkButton veya PushButton
Modul 11: 299

CommandName
DataTextField
DataTextFormatString
FooterText
HeaderImageUrl
HeaderText
Text

EditCommandColumn
EditCommandColumn, Edit, Update, Cancel gibi dzenleme komutlarnn
grntlenmesini salar. EditCommandColumn ile sadece bir satr
dzenlenebilir. Dzenlemenin veritaban gemesi ayr ilemler gerektirir.

EditCommandColumn kolonunun grntledii kayt, dzenleme iin kayt


seen DataGrid nesnesinin EditItemIndex zelliine gre deiecektir.

Dzenleme ileminin seili olmad durumda bu kolonda Edit butonu


gzkr. Edit seildii anda ise Update ve Cancel butonlar gzkr.

EditCommandColumn zellikleri:
ButtonType
CancelText
EditText
FooterText
HeaderImageUrl
HeaderText
UpdateText
300 Modl 11:

DataGrid Kontrolnde Sralama Ve Sayfalama

DataGrid kontrolnn kolonlarnda sralama yapmak iin hazrlanm zellikler


vardr. stee gre tm kolonlarda veya sadece belirli kolonlarda sralama
yaplabilir.

DataGrid iindeki tm kolonlara sralama yapma izni vermek iin, varsaylan


olarak False olan AllowSorting zellii True yaplr. Ve SortCommand olayn
tetikleyecek bir metot yazlr.

Kod 11.10: DataGrid ierisinde Sralama

private void Page_Load(Object sender,EventArgs e)


{
If (! IsPostBack)
{
BindDataGrid( "kitap_baslik" );
}
}

void BindDataGrid(string strSortField)


{
String connStr = "Provider=Microsoft.Jet.OLEDB.4.0; +
Data Source=" + Server.Mappath("./Stok.mdb");
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand cmdSelect = OleDbCommand("Select * From
Kitaplar Order By " & strSortField, conn );
conPubs.Open("Select * From kitaplar", conn)
conn.Open();
Modul 11: 301

DataGrid1.DataSource = cmdSelect.ExecuteReader();
DataGrid1.DataBind();
conn.Close();
}

void DataGrid1_SortCommand (Object s,


DataGridSortCommandEventArgs e)
{
BindDataGrid( e.SortExpression );
}

Html

<asp:DataGrid ID="DataGrid1" AllowSorting="True"


OnSortCommand="DataGrid1_SortCommand"
CellPadding="10" Runat="Server" />

BoundColumn kolonunun SortExpression zelliine ilgili kolon isimleri girilerek


sralama yaplacak kolonlar belirtilebilir.

Sayfalama
Sayfalarca uzunluktaki kaytlar bir seferde gstermek yerine sayfalara ayrmak
daha kullanl olur. DataGrid kontrolnde sayfalama yapabilmek iin
kontroln AllowPaging zellii True yaplr. Varsaylan deer False deeridir.
PageIndexChanged olayn tetikleyecek bir metodun yazlmas gerekir.

Kod 11.11: DataGrid ierisinde Sayfalama

private void Page_Load(Object sender, EventArgs e)


{
if (!Page.IsPostBack)
{
BindDataGrid();
}
}
void BindDataGrid()
{
string connStr =
"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source='"+Server.MapPath("./Stok.mdb")+"'";
OleDbConnection conn = new OleDbConnection(connStr);
OleDbDataAdapter da = new OleDbDataAdapter("Select *
From Kitaplar Order By Kitap_baslik", conn);
DataSet ds = new DataSet();
da.Fill(ds);
}
private void DataGrid1_PageIndexChanged(object source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex =e.NewPageIndex;
}

html

<asp:DataGrid ID="DataGrid1"
302 Modl 11:

AllowPaging="True" PageSize="5"
OnPageIndexChanged="DataGrid1_PageIndexChanged"
CellPadding="3" Runat="Server" />

DataGrid kontrolnde sayfalama yapldnda kaytlar sayfalara ayrlr ve dier


sayfalara linkler verilir. PageSize zellii, bir sayfada ka kayt grntlenecei
bilgisini tutar.

Sayfalamaya ait stiller, tasarm penceresinde DataGrid kontrolne sa tklanp


Property Builder ile seilebilir.

DataGrid Kontrol zerinde Kayt Dzenleme lemleri


DataGrid kontrolnn EditCommand, UpdateCommand ve CancelCommand
olaylar kullanlarak DataGrid iinde grntlenen veriler zerinde istenilen
deiiklikler yaplabilir. Ayn ekilde kayt silme ilemi de gerekletirilir.

Dzenleme yaplacak kayt seildiinde EditCommand olay devreye girer.


EditItemIndex zellii ile dzenleme yaplacak kaydn indeksi alnr ve o
satrdaki tm veriler TextBox kontroll biiminde grnr. zerinde dzenleme
yaplmasn istenmeyen kolona, BoundColumn alannn ReadOnly zelliine
True deeri verilmelidir.

Update dmesine tklanlnda ise UpdateCommand olay devreye girer. lgili


kaydn Primary Key deeri alnr ve Primary Key ile gncelleme kodu
altrlr.

PlaceHolder Kullanm
Programn alma zaman srasnda, kullancdan gelecek istee gre yeni
kontroller eklenmek isteniyorsa PlaceHolder kontrol kullanlr. PlaceHolder
kontrolnn amac, dinamik olarak eklenen bu kontrollerin bir arada
tutulmasdr. Dinamik olarak oluturulan kontroller istenildii gibi dizayn
edilebilir.

<asp:PlaceHolder id="PlaceHolder1" runat="server">


</asp:PlaceHolder>

alma zamannda forma yeni bir kontrol eklemek iin Controls.Add()


metodu kullanlr.

Kod 11.12: PlaceHolder Eklemek

private void Page_Load(Object sender, EventArgs e)


{
int i;
Button btnNewButton;
Modul 11: 303

for (i = 1;i<=10;i++)
{
PlaceHolder1.Controls.Add(
New LiteralControl("<p>Alan " & i & ": "));
PlaceHolder1.Controls.Add(New TextBox);
}

btnNewButton = New Button();


btnNewButton.Text = "Tklayn!";
PlaceHolder1.Controls.Add(btnNewButton);
}

Konu 2: Connected ve Disconnected


Uygulamalar Gelitirme

ADO.NET ile veriye erimek iin Connected ve Disconnected veri eriim


yntemi kullanlr. Bu yntemler ile ASP.NET sayfalarnda veri alverii yaplr.
304 Modl 11:

ASP.NET uygulamalar web sunucular zerinde ilem yapaca iin


performans ok nemlidir. Dolaysyla, alma modelinin yerinde seilmesi
gereklidir. rnein veriler sadece grntlenmek amacyla alnacaksa
Connected balant modeli kurulmal ve kaynaklar mmkn olan en az
seviyede tketilmelidir. Ancak veri zerinde gncelleme ilemleri sz
konusuysa disconnected balant modeli uygulanmaldr.
Modul 11: 305

Namespace

ADO.NET snflarn, ASP.NET uygulamas iinde kullanabilmek iin


System.Data isimalan using yaplmaldr. Ayrca Access veri tabanna
balant iin System.Data.OleDb isimalan import edilmelidir.

Code behind sayfasnda using ilemi, Windows uygulamalarnda kullanlan


biimdedir.

using System.Data;
using System.Data.OleDb;

Inline kod yazmnda <%@ %> ifadeleri arasnda isim alanlar using yaplr.

<%@ using Namespace=System.Data %>


<%@ using Namespace=System.Data.OleDb %>
306 Modl 11:

Modl zeti

34. Veri balant kontrolleri nelerdir? Aklayn


35. Repeater niin kullanlr? Aklayn
36. DataList niin kullanlr? Aklayn
37. DataGrid niin kullanlr? Aklayn
38. DataGrid ile sayfalama nasl yaplr?
Modul 11: 307

Bu uygulamada, e-ticaret uygulamas ile Connected ve Disconnected


veritaban ilemleri gerekletirilecektir. Bu uygulamada Uye kayt ve Uye giri
ilemlerini gerekletirebileceksiniz. Ayrca kategoriye gre tm kitaplar
listeleyecek ve kitap satn alma ilemini gerekletirebileceksiniz.

Bu lab tamamlandktan sonra:


Connect ve Disconnect veritaban ilemlerini reneceksiniz.
DataSet ierisindeki veriyi Repeater, DataGrid ve DataList
kontrollerinei balayabileceksiniz.

Connect Veritaban ilemleri


AspEticaret isimli projeyi an.

UyeKayit formu ile veritaban ilemlerinin yaplmas


UyeKayt web formunu an.

UyeKayit web formunun Code Behind kodlar aadaki gibi olacaktr.

using System.Data.OleDb ;

private void btnKaydet_Click(System.Object sender,


System.EventArgs e)
{
string connStr= "Provider=Microsoft.Jet.OleDB.4.0;+
Data Source=" & Server.MapPath("KitapDb.mdb");
308 Modl 11:

OleDbConnection conn = new OleDbConnection();


conn.ConnectionString = connStr

OleDbCommand comm = new OleDbCommand();


comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = "INSERT INTO
Musteri(Ad,Soyad,Email,Sifre)
values(@ad,@soyad,@email,@sifre)" ;

comm.Parameters.Add("@ad", txtAd.Text);
comm.Parameters.Add("@soyad", txtSoyad.Text);
comm.Parameters.Add("@email", txtEmail.Text);
comm.Parameters.Add("@sifre", txtSifre.Text);
int sonuc;
try
{
conn.Open();
sonuc = comm.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
conn.Close();
}
if (sonuc == 1)
{
Response.Redirect("Kayit.aspx");
}
}

UyeGiris formu ile veritaban ilemlerinin yaplmas


UyeGiris web formunu an.

UyeGiris web formunun Code Behind kodlar aadaki gibi olacaktr

using System.Data.OleDb;

private void btnGiris_Click(System.Object sender,


System.EventArgs e)
{
' Session["user"] = "tamer";
string connStr ="Provider=Microsoft.Jet.OleDB.4.0;+
Data Source=" + Server.MapPath("KitapDb.mdb");

OleDbConnection conn = new OleDbConnection();


conn.ConnectionString = connStr;

OleDbCommand comm =new OleDbCommand();


comm.CommandType = CommandType.Text;
comm.CommandText =
"Select * from Musteri Where Email=@email and +
Sifre=@sifre";
comm.Connection = conn;
Modul 11: 309

comm.Parameters.Add("@email", txtEmail.Text);
comm.Parameters.Add("@sifre", txtSifre.Text);
bool sonuc;
OleDbDataReader dr = OleDbDataReader();
try
{
conn.Open();
dr = comm.ExecuteReader();

if (dr.HasRows == true)
{
sonuc = true;
if (dr.Read = true)
{
Session["user"] = dr.Item("Email");
Session["ad"] = dr.Item("Ad");
Session["soyad"] = dr.Item("Soyad");
Session["musteriId"] = Item("MusteriID");
}
}
else
{
sonuc = false;
}

dr.Close();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
if (sonuc == true)
{
Response.Redirect("Default.aspx");
}
Else
{
lblMesaj.Text = "Hatali kullanici adi veya sifre";
}
}

KitapDetay formunun eklenmesi ve veritaban


ilemlerinin yaplmas
ASPEticaret projesine KitapDetay isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

Label lblKitapAdi
310 Modl 11:

Label lblYazarAdi
Label lblFiyat
Label lblAciklama
Label lblMesaj
Image imgResim
TetxBox txtAdet
Button btnSatinAl Text Satn Al

KitapDetay Web formun Html kodlar aadaki gibi olacaktr

<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %>


<%@ Page Language="c#" AutoEventWireup="false"
Codebehind="KitapDetay.aspx.cs"
Inherits="AspEticaret.KitapDetay" %>
<%@ Register TagPrefix="uc1" TagName="kategori"
Src="kategori.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<title>KitapDetay</title>
<meta content="Microsoft Visual Studio .NET 7.1"
name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript"
name="vs_defaultClientScript">
<meta
content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
</HEAD>
<body bgColor="#f0fff0">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3"><uc1:ust
id="Ust1" runat="server"></uc1:ust></TD>
Modul 11: 311

</TR>
<TR>
<TD width="150" vAlign="top"><uc1:kategori
id="Kategori1" runat="server"></uc1:kategori></TD>
<TD vAlign="top" width="400">
<P><BR>
</P>
<P>
<TABLE id="Table2" borderColor="#000033"
cellSpacing="0" cellPadding="0" width="300" align="center"
border="0">
<TR>
<TD width="100" rowSpan="5">
<P align="center"><asp:image
id="imgResim" runat="server"></asp:image></P>
</TD>
<TD>
<P align="center"><asp:label
id="lblKitapAdi" runat="server"></asp:label></P>
</TD>
</TR>
<TR>
<TD>
<P align="center"><asp:label
id="lblYazarAdi" runat="server"></asp:label></P>
</TD>
</TR>
<TR>
<TD>
<P align="center"><asp:label
id="lblFiyat" runat="server"></asp:label></P>
</TD>
</TR>
<TR>
<TD>
<P align="center"><asp:label
id="lblAciklama" runat="server"></asp:label></P>
</TD>
</TR>
<TR>
<TD>
<P align="center">Adet:
<asp:textbox id="txtAdet"
runat="server" Width="68px"></asp:textbox>&nbsp;
<asp:button id="btnSatinAl"
runat="server" Text="Satn Al"></asp:button></P>
</TD>
</TR>
<TR>
<TD colSpan="2">
<P align="center">
<asp:Label id="lblMesaj"
runat="server"></asp:Label></P>
</TD>
</TR>
</TABLE>
</P>
</TD>
<TD width="150" bgColor="#0099ff" vAlign="top">
<uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
312 Modl 11:

<TD bgColor="#99ccff" colSpan="3"><uc1:alt


id="Alt1" runat="server"></uc1:alt></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>

KitapDetay web formunun Code Behind kodlar aadaki gibi olacaktr.

using System.Data.OleDb ;

string kID;
private void Page_Load(System.Object sender,
System.EventArgs e)
{
If (Session["user"] == "")
{
Response.Redirect("Giris.aspx");
}

kID = Request.Params("kID");
'Response.Write(kID)
string connStr= "Provider=Microsoft.Jet.OleDB.4.0;+
Data Source=" + Server.MapPath("KitapDb.mdb");

OleDbConnection conn = new OleDbConnection();


conn.ConnectionString = connStr;

OleDbCommand comm =new OleDbCommand();


comm.CommandType = CommandType.Text;
comm.CommandText =
"Select * from Kitap Where KitapID =@kitapID";
comm.Connection = conn;

comm.Parameters.Add("@kitapID",Convert.ToInt32(kID));
OleDbDataReader dr = OleDbDataReader();
try
{
conn.Open();
dr = comm.ExecuteReader();
if (dr.Read = True)
{
lblKitapAdi.Text = dr.Item("KitapAdi");
lblYazarAdi.Text = dr.Item("Yazar");
lblFiyat.Text = dr.Item("Ucret");
lblAciklama.Text = dr.Item("Aciklama");
imgResim.ImageUrl = "resimler/" +
dr.Item("Image");
}
dr.Close();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
If (conn.State == ConnectionState.Open)
{
Modul 11: 313

conn.Close();
}
}
}

private void btnSatinAl_Click(System.Object sender,


System.EventArgs e)
{
if (txtAdet.Text == "")
{
lblMesaj.Text = "Adet Giriniz";
return;
}

string connStr = Provider=Microsoft.Jet.OleDB.4.0;+


Data Source=" + Server.MapPath("KitapDb.mdb");

OleDbConnection conn = new OleDbConnection();


conn.ConnectionString = connStr;

OleDbCommand comm = new OleDbCommand();


comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = "INSERT INTO
Siparis(MusteriID,SiparisTarihi,KitapID,Adet)
values(@MusteriID,@SiparisTarihi,@KitapID,@Adet)";

comm.Parameters.Add("@MusteriID",
Session["musteriId"]);
comm.Parameters.Add("@SiparisTarihi",
DateTime.Now.ToShortDateString);
comm.Parameters.Add("@KitapID", CInt(kID));
comm.Parameters.Add("@Adet", txtAdet.Text);
int sonuc
try
{
conn.Open();
sonuc = comm.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
conn.Close();
}
if (sonuc = 1)
{
Response.Redirect("Satis.aspx");
}

Disconnect Veritaban ilemleri


AspEticaret isimli projeyi an.
314 Modl 11:

Default formunun eklenmesi ve veritaban


ilemlerinin yaplmas
ASPEticaret projesine Default isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

DataGrid dgEncokSatanlar

Default Web formun Html kodlar aadaki gibi olacaktr.

<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %>


<%@ Page Language="cs" AutoEventWireup="false"
Codebehind="Default.aspx.cs" Inherits="AspEticaret._Default"
%>
<%@ Register TagPrefix="uc1" TagName="kategori"
Src="kategori.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<title>Default</title>
<meta name="GENERATOR" content="Microsoft Visual
Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body bgColor="honeydew">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3">
Modul 11: 315

<uc1:Ust id="Ust1"
runat="server"></uc1:Ust></TD>
</TR>
<TR>
<TD width="150" vAlign="top">
<uc1:kategori id="Kategori1"
runat="server"></uc1:kategori></TD>
<TD width="400" vAlign="top">
<P>
<TABLE id="Table2" cellSpacing="0"
cellPadding="0" width="350" align="center" border="0">
<TR>
<TD style="HEIGHT: 55px">
<P align="center">En ok
Satanlar</P>
</TD>
</TR>
<TR>
<TD>
<DIV align="center">
<asp:DataGrid
id="dgEncokSatanlar" runat="server"
AutoGenerateColumns="False" Width="253px" BorderWidth="1px"
BorderColor="#003333">
<HeaderStyle Font-
Bold="True"></HeaderStyle>
<Columns>
<asp:HyperLinkColumn
DataNavigateUrlField="KitapID"
DataNavigateUrlFormatString="Kitapdetay.aspx?KID={0}"

DataTextField="KitapAdi" HeaderText="Kitap Adi">


<HeaderStyle
Width="275px"></HeaderStyle>
</asp:HyperLinkColumn>
<asp:BoundColumn
DataField="Ucret" HeaderText="Fiyati">
<HeaderStyle
Width="75px"></HeaderStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid></DIV>
</TD>
</TR>
<TR>
<TD></TD>
</TR>
</TABLE>
</P>
</TD>
<TD width="150" bgColor="#0099ff" vAlign="top">
<uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
<TD colSpan="3" bgColor="#99ccff">
<uc1:Alt id="Alt1"
runat="server"></uc1:Alt></TD>
</TR>
</TABLE>
&nbsp;
</form>
</body>
</HTML>
316 Modl 11:

DataSet ierisine DataTable Eklenmesi

12. Server Explorer penceresinden DataConnections seeneini sein


13. Veritaban tablo ve sorgularna erimek iin oluturduumuz, balant
ierisinden Views seeneini sein.
14. Views ierisindeki EnCokSatanlar sorgusunu dsBook nesnesinin ierisine
srkleyin.

Default web formunun Code Behind kodlar aadaki gibi olacaktr.

using System.Data.OleDb;

private void Page_Load(System.Object sender,


System.EventArgs e)
{
if(!Page.IsPostBack)
{
string connStr =
"Provider=Microsoft.Jet.OleDB.4.0;Data Source=" +
Server.MapPath("KitapDb.mdb");
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connStr;

OleDbCommand comm = new OleDbCommand();


comm.CommandType = CommandType.Text;
comm.CommandText = "SELECT Kitap.KitapAdi, "+
"Kitap.Ucret, Kitap.KitapID FROM Kitap INNER JOIN Siparis "+
"ON Kitap.KitapID = Siparis.KitapID GROUP BY "+
"Kitap.KitapAdi, Kitap.Ucret, Kitap.KitapID ORDER BY"+
"Count(Siparis.Adet) DESC";

comm.Connection = conn;

OleDbDataAdapter da = new OleDbDataAdapter();


da.SelectCommand = comm;

DataSet ds = new DataSet();


try
{
conn.Open();
da.Fill(ds, "EnCokSatanlar");
dgEncokSatanlar.DataSource =
ds.Tables["EnCokSatanlar"];
dgEncokSatanlar.DataBind();
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
finally
{
if(conn.State == ConnectionState.Open)
{
conn.Close();
Modul 11: 317

}
}
}
}

Kitap formunun eklenmesi ve veritaban


ilemlerinin yaplmas
ASPEticaret projesine Kitap isminde yeni bir web form ekleyin.

Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.

Kontrol Kontrol smi zellik Deer

DataList dlKitap RepeatColumns 2

Kitap Web formun Html kodlar aadaki gibi olacaktr.

<%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %>


<%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %>
<%@ Register TagPrefix="uc1" TagName="kategori"
Src="kategori.ascx" %>
<%@ Page Language="cs" AutoEventWireup="false"
Codebehind="Kitap.aspx.cs" Inherits="AspEticaret.Kitap" %>
<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<title>Kitap</title>
<meta content="Microsoft Visual Studio .NET 7.1"
name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript"
name="vs_defaultClientScript">
<meta
content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
318 Modl 11:

</HEAD>
<body bgColor="#f0fff0">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" cellSpacing="0" cellPadding="0"
width="700" align="center" border="0">
<TR>
<TD bgColor="#99ccff" colSpan="3"><uc1:ust
id="Ust1" runat="server"></uc1:ust></TD>
</TR>
<TR>
<TD width="150" vAlign="top"><uc1:kategori
id="Kategori1" runat="server"></uc1:kategori></TD>
<TD vAlign="top" align="center" width="400">
<asp:datalist id="dlKitap" runat="server"
RepeatColumns="2">
<ItemTemplate>
<table width="180">
<tr align="center">
<td>
<a
href='KitapDetay.aspx?kID=<%#
databinder.eval(Container.dataitem,"KitapID") %>'><img
border=0 src='resimler/<%#
databinder.eval(Container.dataitem,"Image") %>'>
</a>
</td>
</tr>
<tr align="center">
<td>
<%#
databinder.eval(Container.dataitem,"KitapAdi") %>
</td>
</tr>
<tr align="center">
<td>
<%#
databinder.eval(Container.dataitem,"Yazar") %>
</td>
</tr>
<tr align="center">
<td>
<%#
databinder.eval(Container.dataitem,"Ucret") %>
</td>
</tr>
</table>
</ItemTemplate>
</asp:datalist>
</TD>
<TD width="150" bgColor="#0099ff" vAlign="top">
<uc1:yan id="Yan1"
runat="server"></uc1:yan></TD>
</TR>
<TR>
<TD bgColor="#99ccff" colSpan="3"><uc1:alt
id="Alt1" runat="server"></uc1:alt></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>
Modul 11: 319

DataSet ierisine DataTable Eklenmesi

1. Server Explorer penceresinden DataConnections seeneini sein


2. Veritaban tablo ve sorgularna erimek iin oluturduumuz, balant
ierisinden Tables seeneini sein.
3. Tables ierisindeki Kitap tablosunu dsBook nesnesinin ierisine srkleyin.

Kitap web formunun Code Behind kodlar aadaki gibi olacaktr.

using System.Data.OleDb

private void Page_Load(System.Object sender,


System.EventArgs e)
{

string kategoriID = Request.Params["KategoriID"];


Session["KategoriID"] = kategoriID;
//Response.Write(kategoriID)
string connStr =
"Provider=Microsoft.Jet.OleDB.4.0;Data Source=" +
Server.MapPath("KitapDb.mdb");
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connStr;

OleDbCommand comm = new OleDbCommand();


comm.CommandType = CommandType.Text;
comm.CommandText = "Select * from Kitap Where" +
"KategoriID =@kID";
comm.Connection = conn;

comm.Parameters.Add("@kID",
Convert.ToInt32(kategoriID));

OleDbDataAdapter da = new OleDbDataAdapter();


da.SelectCommand = comm;

DataSet ds = new DataSet();


try
{
conn.Open();
da.Fill(ds, "Kitap");
dlKitap.DataSource = ds.Kitap;
dlKitap.DataBind();
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
finally
{
if(conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
320 Modl 11:
Modul 12:

Modl 12: ASP.NET ile Durum Ynetimi

Bu modlde ASP.NET Web uygulamalarnda kullanlan durum ynetimi


zerinde durulacaktr. Durum ynetim alt yaps kullanlarak uygulama
seviyesinde veri paylam gerekletirilebilir.
322 Modl 12:

Bu modl tamamlandktan sonra:


ASP.NET Web uygulamalarnda kullanlan durum ynetim alt yapsn
tanmlayabilecek,
Application ve Session ile web uygulamalarn ynetebilecek,
Cookies ve Cookieless Session kavramlarn aklayabileceksiniz.

Durum Ynetimi

Web formlar stateless alr. Yani kullanclardan gelen isteklerin nereden


geldii anlalmaz. Web sunucusuna yaplan her istekte web formlar yeniden
oluturulur.

ASP.NET, sunucuda uygulamaya ait zel bilgileri tutan ve sayfalar aras veri
aktarm gerekletiren bir altyap salar.
Modul 12: 323

Sayfalar aras state ynetimi sayesinde sunucuda tutulan bilgiler yeniden


kullanlabilir. Bylece veriler sunucuya gnderilip geri geldiinde kullancnn
yeniden veri girii yapmasna gerek kalmaz.

rnein bir Login sayfasna Bilge kullanc ismiyle giri yapldktan sonra,
dier sayfalarda Merhaba Bilge mesajn verilebilir. Bu mesaj gstermek iin
Bilge kullanc ad State ynetimi ile bir deikende tutulmaldr.

Sunucu tarafl durum ynetimi birden fazla ynetim seenei sunar.


Application state
Session state
Kullanc tarafl durum ynetimi ise genellikle cookie nesneleri ile salanr.
324 Modl 12:

Konu 1: Session

Kullanc bilgisayar ve web sunucusu arasnda kurulan balantya session


denir. Bir session, birden fazla web sayfasn kapsayabilir. Kullancnn web
uygulamasna girii ile k arasnda tutulan deikenlerdir ve bu deikenler
kullancya zeldir.
Session deikenlerine, uygulama sresince eriilip gerekli bilgiler hzl bir
ekilde kullanlabilir. Sayfalar aras bilgi aktarmak iin pratik bir yntemdir.
Veritabanna balant kurularak alnan ve uygulama iinde srekli kullanlan
bilgiler session deikenleri iinde tutulur.

ASP.NET session deikenlerini ynetirken HttpSessionState snfn


kullanr.
Modul 12: 325

Kullanc web sunucusuna balanp bir ASP.NET sayfas grntlemeyi talep


ettii zaman, sunucu, kullancya bir SessionID atar ve bu deeri kullancya
gnderir. Kullanc uygulamadan kana kadar bu SessionID deikeni
sunucuda tutulur.

Kod 12.1: SessionID

private void Page_Load(Object sender,EventArgs e)


{
Response.Write(Session.SessionID);
}

Kod 12.2: Session Nesnesini kullanmak

Login.aspx sayfas

private void BtnGiris_Click(Object sender, EventArgs e)


{
Session[ad] = TxtAd.Text;
Response.Redirect(Sayfam.aspx);
}

Sayfam.aspx sayfas

private void Page_Load(Object sender,EventArgs e)


{
lblAd.Text = Session[ad] + Ho Geldiniz;
}

ASP.NET uygulamalarnn, Session deikenlerine ait eitli zellikleri,


web.config dosyas iinde tanmlanr.
326 Modl 12:

<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data
source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>

SessionState in varsaylan attribute deerleri Visual Studio.NET


tarafndan atanmtr.

Mode: session deerlerinin nerede tutulacan belirler. InProc, deerler IIS


iinde saklanr. StateServer deerler sunucuda arka planda alan ASP.NET
state servisinde saklanr. SqlServer, deerler SQL Server iindeki tablolarda
saklar.

Cookieless: Varsaylan olarak False deerini alr. Session deikenlerinin


kullanc bilgisayarnda cookie iinde tutulmasn belirler. True deeri
verildiinde ise SessionID deeri URLye eklenerek kullancya geri yollanr.

Timeout: Session deikenlerinin yaam sresini belirler. Varsaylan olarak


20 dakikadr.

Baz tarayclarn cookie destei olmad dnldnde, kullancya ait


bilgileri session deikenlerinde tutmak daha geerli olacaktr.

Session Deikenine lk Deer Vermek


Global.asax dosyasnda, Session nesnesinin Start olay prosedr iinde ilk
deer verme ilemleri gerekletirilebilir.
Kod 12.3 de Session_Start olaynn kullanm gsterilmektedir.

Kod 12.3: Session_Start

void Session_Start(Object Sender,EventArgs e)


{
Session[ArkaPlan] = blue;
Session[Yazi] = gray;
}

Konu 2: Cookie

Kullanc tarafl durum ynetimi iin cookie deikenleri kullanlr. Internet


sitelerinin ou istemci bilgisayarda cookie denilen kk metin dosyalar
Modul 12: 327

oluturur. Microsoft XP, Windows 2000 sistemlerinde cookie nesneleri


C:\Documents And Settings\Kullanc Ad\Cookies klasrnde saklanr. Bir
siteye ilk defa giri yapldnda cookie oluur. Daha sonra tekrar giri
yapldnda cookie iindeki deerler okunur ve bu deerlere gre gerekli
ilemler yaplr. rnein yelik sistemi ieren web sitelerindeki Beni Hatrla
seenei bu mantkla alr.

ASP.NET Cookie deikenlerini ynetirken HttpCookie snfn kullanr.


Cookie deikenleri iin yazma ve okuma ilemleri yaplrken Response ve
Request nesneleri kullanlr.

rnek:
Kullanc ad girilip Cookie yap butonuna tklannca kullanc tarafnda bir
cookie oluturuluyor. Cookie oku butonuna tklandnda ise oluturulan
cookie nesnesinden veri alnyor.

ekil 2.1: Cookie kullanm

Kod 12.4: Cookie oluturup okumak

private void btnYap_Click(System.Object sender,


System.EventArgs e)
{
// Cookie oluturmak iin verilen direktif.
HttpCookie mycookie = new HttpCookie("sitem");
// Formdan Gelen Bilgileri Anahtarlara Yazar.
mycookie["ad"] = txtad.Text;
// Cookie'nin Biti Sresi.
mycookie.Expires = DateTime.Now.AddDays(30);
// Cookie'yi Gnder.
Response.Cookies.Add(mycookie);
}

private void btnOku_Click(System.Object sender,


System.EventArgs e)
{
' Cookie'yi oluturur.
HttpCookie mycookie;
' Cookie'yi kullanc tarafndan alr.
myCookie = Request.Cookies("sitem");
' Cookie'den gelen deerlerle formu doldurur.
txtad2.Text = mycookie("ad");
328 Modl 12:

Cookie Trleri
ki tr Cookie vardr:
Temporary (Geici)

Temporary cookie nesneleri, session cookie veya non-persistent


cookie olarak da isimlendirilir. Bu cookie ler sadece taraycnn hafzasnda
tutulup, tarayc kapatldnda tm temporary cookie nesneleri hafzadan
atlrlar.

Persistent (Kalc)
Modul 12: 329

Persistent cookie nesneleri, temporary cookie nesnelerinden farkl


olarak hafzadan silinecei zaman tutan bir deikene sahiptirler. Tarayc,
kalc bir cookie isteinde bulunan bir sayfa atnda, cookie sabit diske
yazlr. Bu tr cookie nesneleri kullanc bilgisayarnda istenilen srede
tutulabilir.

Cookie nesnelerinin diskte tutulacann garantisi yoktur. Kullanc sabit


diskinden bu dosyalar silmi olabilir.
330 Modl 12:

Konu 3: Application

Application nesnesinin tanmlanmas session nesnesine benzer. Ancak


kullanm alan ok farkldr. Web uygulamasna giri yapan ilk kullancdan son
kullancya kadar devam eder. Tm kullanclara ait olan bir deikendir.
rnein sitenin ka kii tarafndan ziyaret edildii, Application nesnesinde bir
deiken tanmlanarak belirlenebilir. Application deikenini kullanrken
lock yaparak baka kullanclarn kullanmas engellenir ve deiken ile iiniz
sonra unlock yaplmaldr.
Modul 12: 331

Session kullancya zg deikenleri tutarken Application uygulamann


kendisine ait deikenleri tutar.

ASP.NET Application deikeni kullanrken HttpApplicationState snfn


kullanr.

Kod 12.4: Application Deikeni

Void Session_Start (Object sender, EventArgs e)


If (Application("ziyaret") == null)
{
Application("ziyaret") = 0;
}
Application.Lock();
Application("Ziyaret") = Application("Ziyaret") + 1;
Application.UnLock();
TextBox1.Text = "Ziyaret Says: " +
Application("ziyaret").ToString();
}

Bu rnekte her bir yeni session aldnda, yani siteye her istek yapldnda
ziyareti says birer artrlmaktadr.
Application deikeni doldurulduktan sonra uygulama iinden armak iin
Application(degisken_ismi) ifadesi kullanlr.

Application Deikenine lk Deer Vermek


Global.asax dosyasnda, Application nesnesinin Start olay prosedr
iinde balang deerleri verilir. Bu olay prosedr uygulama almaya
332 Modl 12:

baladnda ve ilk istek geldiinde alr. Application deikeni Web


uygulamas kaldrldnda sonlanr.

Kod 12.5de Application_Start olaynn kullanmna rnek verilmitir.

Kod 12.5: Application_Start

void Application_Start(Object sender,EventArgs e)


{
Application(ziyaret) = 0;
}

Konu 4: Global.asax

Sadece sunucu zerindeki uygulama zerinde alabilen bir dosyadr.


Global.asax, ASP.NET web uygulamasnn alt srada, eitli olaylar ele
alacak bir dosyadr.
Bu dosyann birok zellii vardr.
Her bir web uygulamasna ait bir global.asax dosyas vardr.
Global.asax dosyas, web uygulamasna ait sanal dosya iinde
saklanr.
Uygulamaya ait application ve session deikenlerine ilk deer
vermek iin kullanlan balang ve biti olaylarn tutar.
Bu dosyann tanmlanmas istee baldr. Eer bu dosya projede
bulunmuyorsa, ASP.NET hibir application ve session olay
prosedr tanmlanmam varsayar.
Modul 12: 333

Global.asax dosyasnda desteklenen olaylar kategoride toplanabilir:

Sayfaya bir istekte bulunulduunda


stekte bulunan sayfa istemciye yollandnda
Koullu application olaylar gerekletiinde

Koullu application olaylar ise tablo 12.1 de listelenmitir.

Olay ismi Aklama

Application_Start Uygulamann ilk almaya baladnda alr.


Application_End Uygulama sona erdiinde alr.
Session_Start Yeni bir session olutuunda alr.
Session_End Session kapandnda alr.
Application_Error Uygulamann almas srasnda bir hata
olutuunda alr.
Tablo 12.1: Koullu Application olaylar
334 Modl 12:

Modl zeti

39.
Session niin kullanlr?
40. Cookie niin kullanlr?
41. Cookie trleri nelerdir?
42. Application niin kullanlr?
Modul 12: 335

Lab 1: E-Ticaret Uygulamas Gelitirmek

Bu uygulamada session nesnesi ile KitapDetay sayfasna eriim


engelenecektir. KitapDetay sayfasna sadece sisteme giri yapan kullanclar
eriebilecektir.

Bu lab tamamlandktan sonra:


Session kullanmn reneceksiniz.

Session kullanmak
AspEticaret isimli projeyi an.

UyeGiris formu ierinde Session Kullanmak


UyeGiris web formunu an.

UyeGiris web formunun Code Behind kodlar aadaki gibi olacaktr. UyeGiris
kod dosyas ierisindeki iaretli satrlar, veri taban ierisinden ekilen kaytlarn
session deikenlere aktarlmasn salar.

using System.Data.OleDb

private void btnGiris_Click(System.Object sender,


System.EventArgs e)
{
' Session["user"] = "tamer";
336 Modl 12:

string connStr =
Provider=Microsoft.Jet.OleDB.4.0;Data Source="
+ Server.MapPath("KitapDb.mdb");

OleDbConnection conn = new OleDbConnection();


conn.ConnectionString = connStr;

OleDbCommand comm = new OleDbCommand();


comm.CommandType = CommandType.Text;
comm.CommandText = "Select * from Musteri
+ Where Email=@email and Sifre=@sifre";
comm.Connection = conn;
comm.Parameters.Add("@email", txtEmail.Text);
comm.Parameters.Add("@sifre", txtSifre.Text);
Boolean sonuc;
OleDbDataReader dr;
try
{
conn.Open();
dr = comm.ExecuteReader();

if (dr.HasRows == True)
{
sonuc = True;
if (dr.Read == True )
{
Session["user"] = dr.Item("Email");
Session["ad"] = dr.Item("Ad");
Session["soyad"] = dr.Item("Soyad");
Session["musteriId"] = dr.Item("MusteriID");
}
}
else
{
sonuc = False;
}

dr.Close();
}

catch (Exception ex)


{
Response.Write(ex.Message);
}
finally
{
If (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
if (sonuc == True )
{
Response.Redirect("Default.aspx")
}
else
{
lblMesaj.Text = "Hatali kullanici adi veya sifre";
}
}
Modul 12: 337

KitapDetay formu ierinde Session Kullanmak


KitapDetay web formunu an.

KitapDetay web formunun Code Behind kodlar aadaki gibi olacaktr.


KitapDetay kod dosyas ierisindeki iaretli satrlar, kullancnn sisteme giriini
kontrol etmektedir. Eer kullanc sisteme giri yapmadysa, user deikeni
ierisine deer aktarlmaz. Bu durum kullancnn Giris.aspx sayfasna
ynlendirilmesine sebeb olur.

using System.Data.OleDb

string kID
private void Page_Load(System.Object sender,
System.EventArgs e)
{
if (Session["user"] == "" )
{
Response.Redirect("Giris.aspx");
}

kID = Request.Params("kID");
'Response.Write(kID)
string connStr =
"Provider=Microsoft.Jet.OleDB.4.0;Data Source=" +
"Server.MapPath("KitapDb.mdb");
OleDbConnection conn ;
conn.ConnectionString = connStr;

OleDbCommand comm = new OleDbCommand();


comm.CommandType = CommandType.Text;
comm.CommandText =
"Select * from Kitap Where KitapID =@kitapID" ;
comm.Connection = conn ;

comm.Parameters.Add("@kitapID",Convert.ToInt32(kID));
OleDbDataReader dr = new OleDbDataReader();
Try
{
conn.Open();
dr = comm.ExecuteReader()
If (dr.Read == true)
{
lblKitapAdi.Text = dr.Item("KitapAdi");
lblYazarAdi.Text = dr.Item("Yazar");
lblFiyat.Text = dr.Item("Ucret");
lblAciklama.Text = dr.Item("Aciklama");
imgResim.ImageUrl = "resimler/" +
dr.Item("Image");
}
dr.Close();

Catch (Exception ex)


{
Response.Write(ex.Message);
}
finally
338 Modl 12:

{
If (conn.State = ConnectionState.Open)
{
conn.Close();
}
}
}

Ust kullanc kontrolu ierisinde Session


kullanmak
Ust kullanc kontrolunu an.

Ust kullanc kontrolunn Code Behind kodlar aadaki gibi olacaktr. Ust kod
dosyas ierisindeki iaretli satrlar, session deikenin deerini lblAd isimli
etikete yazmaktadr.

private void Page_Load(System.Object sender,


System.EventArgs E)
{
if (Session["user"] != "" )
{
lblAd.Text = "Bay / Bayan : " + Session["ad"] + "
" + Session["soyad"];
btnCikis.Visible = true ;
}
else
{
btnCikis.Visible = false;
}
}

btnCikis butonunundaki iaretli kod satrlar, tm session deikenlerin deerini


sfrlar.
private void btnCikis_Click(System.Object sender,
System.EventArgs e)
{
Session.Abandon() ;
btnCikis.Visible = false;
Response.Redirect("Default.aspx");
}

You might also like