Вы находитесь на странице: 1из 186

YAZILIM VE VERTABANI

C# 3.0 ile Programlama


Temelleri

Emre Ayrlmaz

Editr Hakan Kilyusufolu

14-5
C# 3.0 ile Programlama Temelleri
Emre Ayrlmaz

Editr: Hakan Kilyusufolu

Kapak Tasarm: Melih Sancar

Grafik Tasarm: Tuna Erkan

Grafik Uygulama: Soner Ik

Yayn Ynetmeni: Seluk Tzel

Genel Yayn Ynetmeni: Mehmet mleki

1. Basm: Ocak 2008

Bilge Adam Yaynlar: 15

Eitim Yaynlar Dizisi: 15

ISBN: 978-605-5987-14-5

Yaync Sertifika No: 1107-34-009150

Copyright 2007, Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..

Eserin tm yayn haklar Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..ye aittir. Yaynevinden yazl izin
alnmadan ksmen ya da tamamen alnt yaplamaz, hibir ekilde kopya edilemez, oaltlamaz ve tekrar yaymlanamaz.
Bilge Adamn rencilerine cretsiz armaandr, para ile satlamaz.

Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..


19 Mays Mahallesi, 19 Mays Caddesi, UBM Plaza, No: 59-61, Kat: 4-7; ili, stanbul
Telefon (212) 272 76 00 (212) 217 05 55 Faks: (212) 272 76 01
www.bilgeadam.com - info@bilgeadam.com

Tantm nshasdr, para ile satlamaz.


indekiler
Blm 1: Programlamaya Giri ve .NET Platformu1

Yazlm Nedir?1

Yazlmc Kimdir?2

Programlama Dilleri2

Blm 2: Microsoft Visual Studio Arayz9

Visual Studio Kurulumu9

Visual Studio Ortam12

Yardm Kullanmak19

LAB 2.1 Dinamik Yardm20

Lab 2.2 Contents20

Lab 2.3 Arama20

Lab 2.4 ndeks21

Lab 2.5 Pencereler ile almak21

Blm 3: Visual C# .NET ile Windows Tabanl Programlama25

lk Uygulama25

Visual C# .NET Kontrolleri25

zellikler, Metotlar ve Olaylar30

Lab 3.1 Button Yakalama34

Lab 3.2 Dokunma!36

Lab 3.3 Dijital Saat39

devler40

Blm 4: Deikenler ve Veri tipleri43

Deikenler43

Veri Tipleri46

k Dizisi49

Aritmetik Operatrler52

Lab 4.1 Personel Formu53

Lab 4.2 Global Deiken55

Lab 4.3 Topla Birletir56

devler57
IV indekiler

Blm 5: Hatalar ve Hatalarn Giderilmesi61

Giri61

Hatalar62

Lab 5.1 Ya hesaplama77

Lab 5.2 Dardan uygulama altrma79

Lab 5.3 Gei Notu Hesaplama81

devler84

Blm 6: Algoritma89

Algoritma Nedir?89

Ak Diyagram90

Algoritma Uygulamalar91

Lab 6.1 Stok Takip Yazlm94

dev94

Blm 7: Operatrler ve Karar Yaplar97

Operatrler97

if Deyimi101

switch Deyimi103

Lab 7.1 Say Tahmin Oyunu105

Lab 7.2 Uygulama Ykleyici106

Lab 7.3 ans Oyunu109

devler111

Blm 8: Dngler115

for dngs115

while dngs118

do while dngs119

foreach dngs120

Lab 8.1 Tarih Dorulama120

Lab 8.2 Gazeteler122

Lab 8.3 Kelime Arama123

devler124

Blm 9: Diziler127

Baz Dizi zellikleri ve Metotlar129

Lab 9.1 Saysal Loto130


indekiler 

devler132

Blm 10: Metotlar135

Metot Nedir?135

Metotlar Kullanmak135

Parametreler136

Kendi Metodumuzu Yazmak137

Metot Overload138

Lab 10.1 Hesap Makinesi140

Lab 10.2 Hepsini Temizle142

Lab 10.3 IsNumeric143

devler144

Blm 11: String Math DateTime Metotlar147

String147

ToCharArray151

Math152

DateTime154

IsLeapYear155

Lab 11.1 Ka Gndr Yayorum156

Lab 11.2 Kayan Yaz158

Lab 11.3 Kelimeyi Ters evir159

Lab 11.4 lk Harf Byk160

Lab 11.5 Metot alma Zaman162

devler164

Ek A: .NET Framework MSIL CLR Kavramlar167

.NET Framework Nedir ?167

C# Compiler Kullanarak Uygulama Derlemek168

Wizard (Sihirbaz) Yardmyla Setup Hazrlamak169

Online MSDN zerinden Arama173

ToString Metodu Numerik Biimlendirme174


Sunu
1989

Bilgisayarla ilk tantm ve Basic dili ile uygulama gelitirdiim yllardan itibaren bilgisayar ve
yazlm konusundaki gelimeleri ok zor takip ettiimi hatrlyorum. nternet yerine BBSlerin (Bul-
letin Board System) kullanld o yllarda belirli konular zerinde bilgi paylam yapmak ve henz
yazlmla ilgili kitaplarn ilk kt bu dnemlerde yazlm renmek olduka zordu. Ancak gn-
mzde internetin hzl geliimi, Microsoftun yazlm hamleleri ve bu konudaki yaynlarn art ile
birlikte bilgi paylam kolaylat.

Bu kitap, o yllarda okumak istediim kitaptr.

Yusuf Emre Ayrlmaz


1
Programlamaya
Giri ve .NET
Platformu
1 Programlamaya Giri ve
.NET Platformu
Yazlm Nedir?

Yazlmc Kimdir?

Programlama Dilleri
Programlamaya Giri ve .NET Platformu
Bu blmde, bir yazlmcnn bilmesi gereken temel programlama kavramlarna giri yaplacaktr.
Bir yazlm oluturan eler ve yazlm alma sreci tamamlanana kadar geen aamalar ayr
ayr ilenecektir. Bu kavramlar yazlmcnn ve programlama dillerinin tanmlanmasna yardmc
olacaktr.

Bu blmn sonunda:

Bir yazlmn alma prensibini aklayabilecek,


Yazlmc kavramn tanmlayabilecek,
Deiik programlama dillerinin geliimini aklayabilecek,
Microsoft .NET platformu hakknda genel bilgi sahibi olabileceksiniz.

Yazlm Nedir?
Gnmzde bilgisayarlarn kullanm alanlar byk lde artmtr. Dolaysyla ilerimizi daha
hzl ve dzenli bir ekilde yapmamz, bilgisayarlar ne kadar iyi kullandmza baldr. Bunun
iin, eitli amalara gre yazlan uygulamalar kullanrz.

Yazlm, bilgisayarn belli bir ii yapmas iin tasarlanan komutlarn tmdr. Kullanm amalar ve
yerlerine gre birok deiik yazlm tr vardr. rnein kelime ilemleri iin MS Word, formlsel
ilemler iin MS Excel, tasarm ilemleri iin Adobe Photoshop ve yazlm gelitirme ilemleri iin
Visual Studio .NET gibi uygulamalar kullanlr.
Yazlmlar genel olarak blmde incelenebilir,
Sistem Yazlmlar: Bilgisayar donanmlarn yneten, kontrol eden ve uygulamalarn alabil-
mesi iin gerekli altyapy salayan yazlmlardr. Sistem yazlmlar sayesinde uygulama geliti-
rici; bellek, ilemci ve dier donanm zellikleriyle uramadan kendi projesine odaklanr. letim
sistemleri bu yazlm trne rnektir.

Uygulama Gelitirme Yazlmlar: Yazlm gelitiricilerin, son kullanclarn ihtiyalarn karla-


mak zere, uygulamalar gelitirmek, derlemek, hata ayklamak, test etmek ve yaynlamak iin
kullandklar yazlmlardr. Bu yazlmlara rnek olarak, Microsoft Visual Studio .NET, J Developer
ve Eclipse yazlmlar verilebilir.

Uygulamalar: Son kullanclarn belli grevleri yerine getirmek amacyla kullandklar yazmlardr.
Bu yazlmlara rnek olarak, endstriyel otomasyon, mteri ilikileri ynetimi, kurumsal kaynak
planlama, tedariki zinciri ynetimi uygulamalar verilebilir.
Uygulamalar da kendi aralarnda kullanlan teknolojiye gre blmde incelenebilir.
Windows Uygulamalar: Windows uygulamalar, iletim sistemi zerine kurulan, arayz ve ierik
bakmndan daha zengin uygulamalardr. Windows uygulamalar durum ynetimi, olaya dayal
programlama, yerel bilgisayar kaynaklarn kullanma gibi zelliklerde web uygulamalarna gre
daha avantajldrlar. Bu avantajlarnn yan sra Windows uygulamalarnn tm istemci bilgisayar-
larda tek tek kurulma gereksinimi ve versiyonlama glkleri bu uygulamalarn kullanmn byk
lde kstlam, yazlm gelitiricilerin daha ok web uygulamalarna ynelmelerini salamtr.

Windows uygulamalarna rnek olarak, Microsoft Word, Microsoft Excel, Microsoft Live Messen-
ger ve Logo gibi muhasebe uygulamalar verilebilir.

Web Uygulamalar: Bir sunucu tarafndan yaynlanan bir web uygulamasn grntlemek iin
istemci tarafnda sadece bir tarayc uygulamas altrmak yeterlidir, dolaysyla kurulum ve ver-
siyonlama glkleri web uygulamalarnda yaanmaz. Durum ynetimi, olaya dayal programla-
ma, yerel bilgisayar kaynaklarnn kullanm asndan Windows uygulamalarna gre daha de-
 Blm 1

zavantajldrlar. Web uygulamalarna rnek olarak, banka web siteleri, arama motorlar, e-ticaret
siteleri verilebilir.

Kurumsal Uygulamalar: Gnmz uygulamalar, leklenebilirlik, i yk ve gvenlik gibi kritik


ihtiyalara sahiptirler. Tm bu kritik ihtiyalarn phesiz tek bir uygulama zerinde giderilmeye
allmas hem uygulamann gelitirilmesi srecini zorlatracak, hem de uygulamann perfor-
mansn olumsuz ynde etkileyecektir. Bu sebeple birden fazla sunucu zerinde alan ve farkl
teknolojilerin btnleik bir ekilde alt kurumsal uygulamalar gelitirilmektedir. Bu tr uygu-
lamalara rnek olarak, bankaclk uygulamalar ve kurumsal irket uygulamalar verilebilir.

Yukarda sz geen tm bu uygulama trleri ile beraber veya tek bana almak zere mobil
uygulama zmleri de gelitirilmektedir.

Yazlmlarn alma Modeli


Yazlmlarn kullanlmasndaki ama, girilen bilgilerin ilenip istenilen ekilde sonularn retilme-
sidir.

Veri girii: Yazlm, kullanclarn veri girmesi ile balar. Girilen veriler daha sonra ilenmek zere
hafzada saklanr.

lem: Veriler, gelitirilen yazlmn alma srecine gre bir dizi ilemden geirilir.

Sonu: lenen veriler kullancya aktarlr.

Uygulamalar, belli kurallar erevesinde yazlr. Bu yazm kurallar sayesinde bilgisayar, prog-
ramn ileyiini anlar ve gerekli sonular kartr. Uygulamalar, belirtilen yazm kurallar kontrol
edilerek derlenir. Bu derleme ilemi sonunda, yazlan kaynak kodlar bilgisayarn anlayaca tek
dil olan makine diline evrilir.

Yazlmc Kimdir?
Yazlmc, belirli ilevlere sahip uygulamalar gelitirebilen uzmandr. Bir yazlmcnn, zerinde
alt platformu, kulland teknolojileri iyi tanmas ve bilgisayarn anlayaca mantksal dilde
dnebilmesi gerekir. Yazlmclar bir proje takmnda veya altklar irketlerde stlendikleri
grevlere gre eitli unvanlar alrlar. Bu unvanlar aadaki gibi listeleyebiliriz,

Uygulama Gelitirici / Application Developer


Yazlm Mimar / Software Architect
Yazlm Uzman / Software Expert
Veritaban Uzman / Database Expert
Proje Mdr / Project Manager
Proje Lideri / Project Leader
Analist Programc / Analyst Programmer
Yazlm Gelitirici / Software Developer
Uygulama Analisti / Application Analyst

Programlama Dilleri
Dnyada konuulan her dilin amac iletiim salamaktr. Farkl kltrlerden insanlarn anlaabil-
mesi iin ortak konutuklar bir dil gerekir. Programlama dillerinin amac da bilgisayar ile yazlm-
cnn haberlemesidir. Yazlmc, bilgisayara hangi komutlarn altrlmas gerektiini bilgisaya-
rn anlayaca dilden konuarak syler.
Programlamaya Giri ve .NET Platformu 

Uygulamalar, makine diline evrildikten sonra alrlar. Numerik makine kodlar ve o bilgisayara
ait ilemci mimarisi komutlarndan oluan bu makine dili, en alt seviye dildir. Dolaysyla yazlm-
larn bu dilde yazlmas olduka zordur, bu yzden konuma diline daha yakn, kolay anlalabi-
lecek diller kullanlr. Bu dillere yksek seviye programlama dilleri denir. Programlama dillerinin
seviyeleri makine diline yakn olup olmamas ile llr.

Bir programlama dili u unsurlardan oluur,

Sz dizimi (Syntax): Bir dil, kendine ait kelimeler ile konuulur. Programlama dillerinin de benzer
bir yaps vardr. Programlama dillerindeki bu kelimeler, programlama dilinin anahtar kelimelerini
komutlarn olutururlar.

Gramer (Dilbilgisi): Programlama dillerini kullanmak iin sadece kelimeleri bilmek yeterli deil-
dir. 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 kul-
lanabiliriz. Ancak konuulan kelimelerin ne iin kullanld da nemlidir. Bir programlama dilinin
zelliklerinin nasl ve ne iin kullanld da, bu dilin semantiidir.

u ana kadar 2500den fazla programlama dili yazlmtr. Bunlardan bazlar Pascal, Basic, C,
C++, Java, Javascript, Cobol, Perl, Python, Ada, Fortran, Visual Basic .NET ve Visual C# prog-
ramlama dilleridir.

Yksek seviye programlama dillerine Visual Basic .Net, Java ve Visual C#, dk seviye prog-
ramlama dillerine ise Fortran ve C rneini verebiliriz.

Programlama Dillerinin Tarihesi


Gemiten gnmze bilgisayarlarn tarihesine baktmz zaman, drt nemli bilgisayar kua
sayabiliriz,

1. Kuak Bilgisayarlar, 1943 ylnda Pennsy-


lvania niversitesinde J.P. Erkert tarafndan
gelitirilmitir, 30 ton arlnda olan bu bil-
gisayarda vakumlu tpler kullanlmtr. Sani-
yede 5000 ilem kapasitesine sahiptir. ENIAC
(Electronic Numerical Integrator and Calcula-
tor) (Elektronik Saysal Dorulayc ve Hesap-
layc) ismine sahip bu bilgisayar, 6000 kablo
kullanlarak gelitirilmitir ve almas iin
150.000Watt enerjiye ihtiya duymaktadr.

2. Kuak Bilgisayarlar, 1955 - 1965 yllar ekil 1.1


arasnda Burroughs firmas tarafndan Ame-
rikan Hava Kuvvetleri iin gelitirilmitir. Vakumlu tpler
yerine transistrlerin kullanlmasyla maliyet dm, hz
ykselmitir. lk iletim sistemi Fortran ve Assembler dilleri
kullanlarak bu dnemde yazlmtr.

3. Kuak Bilgisayarlar, 1965 - 1980 yllar arasnda en-


tegre devreler kullanlarak gelitirilmitir. Yine ayn dnem-
de, 1973te C dili ve Bell laboratuvarlarnda Thompsonve
Ricthie tarafndan Unix iletim sistemi yazlmtr.

4. Kuak Bilgisayarlar, 1980 sonras mikroipler kullan-


larak gelitirilen bilgisayarlardr, IBM 8086 serisi ile bala- ekil 1.2
yan bu kuak gnmzde kullandmz bilgisayarlar da
iermektedir.
 Blm 1

Bilgisayarlar, icat edilmeleriyle birlikte belli bir ii yapmak iin bir dizi komutlara ihtiya duymular-
dr. En bata ok basit ilemler yapan bu komutlar zamanla nesne ynelimli (object oriented) gibi
ileri seviyede zellikler kazanmtr.

lk programlama dilleri, bilgisayarlarn zerinde baz aralarn yerlerini deitirerek veya yeni bile-
enler eklenerek yaplyordu. Yazlmn ilemesi iin bir devinime ihtiya vard. Eskiden yazlmlar
fiziksel olarak yazlyordu. Daha sonra fiziksel programlama yerini elektrik sinyaline brakt. Ku-
rulan elektronik devrelere dk ya da yksek voltajda akm gnderilerek bilgisayarn davran
belirlenmeye baland. Yksek voltaj 1, dk voltaj 0 saylarn ifade ediyordu. Bylelikle bugn
de kullanlan makine dilinin ortaya kmas iin ilk admlar atlm oldu.

Ancak bu ekilde yazlmlar gelitirmek, sistemi oluturan elektronik devrelerin her yazlm iin
batan kurulmasn gerektiriyordu. Bylelikle yazlmlar baz kavramlar erevesinde yazlmaya
baland. ncelikle bilgisayar donanm her yazlm iin batan kurulmamal, bunun yerine basit
bir donanmn zerine yazlan komutlar kullanlmalyd. Daha sonra, yazlmlar tek bir komutlar
kmesi yerine, kk paralar halinde yazlmaya baland. Bu paralarn yazlmn iinde defa-
larca kullanlabilmesi yordam (subroutine veya metot) kavramn ortaya karmtr. Bu modelin
kullanlmas ise mantksal karlatrmalar, dnglerin kullanlmasn ve yazlan kodlarn tekrar
kullanlabildii 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, mantksal ifade-
ler (true-false) ve saysal deikenler (integer, double) kullanlmaya baland.

1959 ylnda, bu programlama dilinin zelliklerini alp, giri-k (Input Output IO) gibi yeni ilev-
ler salayan COBOL dili ortaya kt. Daha sonra 1968 ylnda, COBOL ve FORTRAN dillerinin en
iyi zelliklerini alarak Pascal dili ortaya kt. Ayrca Pascal dili, hafzadaki adresler zerinde ilem
yapmaya olanak veren iareti (pointer) kavramn da 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 zellii ile iletim
sistemlerinin yazlmasnda tercih edilmitir.

Btn programlama dilleri birok zellie sahip olmasna ramen, modler programlamann bir-
ok eksiini gidermek amacyla, yeni bir programlama modeli olan nesneye ynelik programlama
- OOP (object oriented programming) ortaya karld. C dilinin ve OOP modelinin tm zellikle-
riyle 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 GC (garbage collection) gibi
performans arttrc zellikleri ile byk lde geniledi.

Microsoft 1975 ylnda Bill Gates ve Paul Allen tarafndan kurulduunda vizyonu A pc for every
desk (Her masaya bir pc) idi, bugn ise Every desk is a pc (Her masa bir pc) oldu. 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 yaygnlama-
syla 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. alan-
larda eitli engellerin ortaya kmasna neden oldu.

htiya duyduumuz tm bu altyap ilemleri iin hazr, kullanm kolay ve esnek bir platforma
ihtiya vard, Microsoft, 2000 ylnda .NET platformunu sunarak, otuzdan fazla programlama dilini
ayn at altnda toplad. VisualBasic. NET ve C#, .NET platformunu kullanan gnmzdeki en
Programlamaya Giri ve .NET Platformu 

gl yksek seviyeli programlama dilleri arasnda yer almlardr. Bugn, .NET platformuyla
40n zerinde programlama dili kullanlabilir.

.NET Vizyonunun Oluumu


Microsoft, vizyonu dorultusunda att admlarn yazlm gelitiricilere yansyan sonularn s-
rekli izliyordu ve yazlm gelitiricilerin sorunlarn u balklar altnda ele alyordu.

Uygulamalarn yani yazlmlarn, sistemlerin, kurumlardaki birimlerin ve farkl kurumlarn ara-


sndaki iletiim sorunu.
alanlarn ihtiya duyduklar verilere, ihtiya duyduklar an, kesintisiz, hatasz, gvenli ve
istedikleri platformdan eriebilme ihtiyac.
Uygulama gelitirme srecinde, gelitiricilerin altyap kodlar ile uramasndan dolay uygu-
lama gelitirme ve test sresinin uzamas.
Bir uygulamann farkl platformlarda altrlabilmesi iin ayn ilemleri gerekletirecek kod-
larn tekrar tekrar yazlmas ihtiyac.
Microsoft 1990 ylnda, yaanacak 10 yl da ngrerek bu ve benzeri sorunlara zm suna-
cak, uygulama gelitiricilerin ve son kullanclarn ilerini kolaylatracak bir platform gelitirmeye
balad. Microsoft bu platforma ylesine inanyordu ki kaynaklarnn %80inden daha fazlasn,
bu platforma tad. ok geni bir analiz ve gelitirme ekibinin almalarnn sonucunda .NET
platformu ortaya kmtr.

Microsoft .NET platformu her trl yazlm gelitirme ihtiyacna ynelik hazr bir altyap sunarak
uygulama gelitiricilerin Windows, web ve mobil platformlarna ynelik uygulamalar, ok daha
hzl, kolay ve gl bir ekilde gelitirebilmelerine olanak tand.
2
Microsoft
Visual Studio
Arayz
2 Microsoft Visual Studio
Arayz
Visual Studio Kurulumu

Visual Studio Ortam

Yardm Kullanmak

Lab 2.1 Dinamik Yardm

Lab 2.2 Contents

Lab 2.3 Arama

Lab 2.4 ndeks

Lab 2.5 Pencereler ile almak


Microsoft Visual Studio Arayz
Bu blm, Microsoft Visual Studio arayzn tanmay ve etkili bir biimde kullanmay anlatr.
Nasl ki, ev ve i yerindeki alma ortamn dzenlemek daha verimli almay salarsa yazlm
gelitirirken de allan ortam tanmak ve kiiselletirmek rahat allmas asndan nemlidir.

Bu blm tamamladktan sonra:

Microsoft Visual Studio kurulumunu renecek,


Microsoft Visual Studio alma ortamn tanyacak,
Menlerin ilevlerini aklayabilecek,
Balang sayfasnn zelliklerini kullanabilecek,
Solution Explorer, Toolbox, Properties pencerelerini tanyacak,
Microsoft Visual Studio Yardm etkili bir ekilde kullanabileceksiniz.

Visual Studio Kurulumu


Bu blmde, Visual Studio 2008in kurulumunu ekran grntleri zerinden adm adm gerek-
letireceiz.

lk olarak Visual Studio 2008in kurulum DVDsine ihtiya duymaktayz. Bu ihtiyac karladktan
sonra yaplacak tek ey DVDyi DVD srcsne yerletirmek ve karmza kan ynergeleri ta-
kip etmek olacaktr. DVDyi DVD srcsne yerletirdiimizde karmza ekil 2.1deki Autorun
(Otomatik Balat) ekran kmaktadr.

ekil 2.1

Install Visual Studio 2008 seeneine tklayarak kurulum ilemine balyoruz.


10 Blm 2

ekil 2.2

Bir sonraki ekranda Next dmesine tklayarak kuruluma devam ediyoruz.

ekil 2.3

I have read and accept the license terms seeneini setikten sonra Next dmesine tklayarak
kuruluma devam ediyoruz.
Microsoft Visual Studio Arayz 11

ekil 2.4

Default seeneini seip ilgili boyutlandrma seeneklerini inceledikten sonra Install dmesine
tklayarak kurulumu balatyoruz.

ekil 2.5
12 Blm 2

Kurulum tamamlanana kadar bekliyoruz...

ekil 2.6

Kurulum baarl bir ekilde tamamlandnda ekilde ki ekran zerinde bulunan Finish dme-
sine tklayarak kurulumu sonlandrabiliriz. Opsiyonel olarak bilgisayarn yeniden balatlmasnn
istenildii durumlarda bilgisayar kesinlikle yeniden balatlmaldr.

Visual Studio Ortam


Visual Studio, ok gelimi zelliklere ve yardmc aralara sahip bir editrdr. .NET platformu
zerinde gelitirilen proje dosyalar dnda metin dosyalar, resim dosyalar gibi dosyalar da d-
zenlenebilir. Visual Studio ortamn oluturan ve kullanmn kolaylatran drt ana bileen vardr.
Bunlar, alma Sayfalar, Ara ubuklar, Menler ve Pencerelerdir.

alma Sayfalar
Visual Studio ortamnda dosyalar, birer alma sayfas (Tab Pages) olarak alr. Bu dosyalar
sekmeler halinde sralanr. Sayfalar arasnda CTRL-TAB ksayolu ile gei yaplabilir.

Varsaylan olarak bu alma modelinde, e zamanl olarak sadece bir sayfa zerinde alma
yaplr. Ancak Visual Studio bize, alma ortamn paralara blme imkn da verir.

rnek:

1. Visual Studio alma ortamn an. Balang sayfas (Start Page) karnza kar. (Eer
balang sayfas kmyorsa View mensnden, Other Windows alt mensne iaret edin
ve Start Page komutunu sein.)
2. View mensnden, Other Windows alt mensne iaret edin ve Web Browser komutunu se-
in. Visual Studio amak istediimiz internet taraycs iin yeni bir sayfa oluturur.
3. CTRL tuuna basl tutarak TAB tuuna basn. Karnza kan menden, ak olan herhangi
bir sayfay sein.
4. Balang sayfasnn sekmesine sa tklayn ve kan menden New Vertical Tab Group
komutunu sein. Visual Studio birden fazla sayfa zerinde alma imknn, sayfalar sekme
gruplarna ayrarak salar.
Microsoft Visual Studio Arayz 13

5. Balang sayfasn, sayfa ba-


lna basl tutarak, internet ta-
raycsnn bulunduu sekme
grubuna tayn.

Balang Sayfas
Visual Studio alma ortamn a-
tmz zaman karmza ilk gelen
balang sayfasdr. Bu sayfa, o ekil 2.7
ana kadar altnz projeleri ve
Visual Studio ortamn
.NET platformuna ynelik gncel haberleri gsterir. Bu menden ze- bir web taraycs olarak
rinde altnz son projelerinizi (Recent Projects) aabilirsiniz. Son kullanabilirsiniz.
projelerde gzkmeyen bir projeyi amak iin Open
Balang sayfasn kapattktan sonra, View men-
Project veya yeni bir proje oluturmak iin Create snden Other Windows alt seeneini iaretleyip
Project seeneini seebilirsiniz. Start Page seeneine tklayarak aabilirsiniz.

ekil 2.8

Ara ubuklar
Visual Studio, men komutlar iin grsel ksayollar ara ubuklar (Toolbars) 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, ara ubuklar tanarak yer-
leri deitirilebilir veya kayan duruma (float) getirilebilir. Ayrca istenen ubuklar gizlenebilir veya
gsterilebilir. Ara ubuklarnn listesini grmek iin View mensnden Toolbars alt mensn
sein.

Visual Studio bize kendi ara ubuklarmz oluturma imkn da verir. Farkl ilevlere sahip ko-
mutlar gruplanp, kiisel ara ubuu oluturulabilir.
14 Blm 2

rnek:

1. Balang sayfasnn st ksmnda bulunan bir ara ubuuna sa tklayn. kan men, var
olan tm ara ubuklarn listeler. aretli olan ubuklar eklenmi ubuklardr. Bu listeden
Formatting ara ubuunu sein.
2. Web ara ubuu zerinde Formatting ara ubuunu forma doru srkleyip brakn. Bu
ilem ubuu floating (kayan men) duruma getirir. Balna ift tklandnda, ubuk Doc-
kable (sabit duruma) gelir.
3. Ara ubuuna sa tklayn. Listenin en altndaki Customize (zelletir) komutunu sein.
4. Toolbars sekmesinde New (Yeni) komutuna tklayn. kan pencerede ubua Genel lem-
lerim yazn. OK dmesine basn. Visual Studio verilen isimde bir ara ubuu oluturur ve
kayan durumda grntler.
5. 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.

ekil 2.9

6. Bu ekilde u komutlar da ekleyin.

Categories Commands
Tools Options
File Exit
View Web Browser
Window Close All Documents

7. Ara ubuunu, alma ortamnn altna tayarak sabitleyin.


8. Ara ubuuna sa tklayn ve listeden Genel lemlerim (General Operations) ubuunu
seerek alma ortamndan kaldrn.

Menler
Visual Studio menleri birok uygulamann menlerine benzer niteliktedir. Men isimlerinde, be-
lirli 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 ksayol tanmldr. Bu
ksayollar CTRL veya SHIFT gibi birka tu kombinasyonu ile gerekleir.
Microsoft Visual Studio Arayz 15

File Mens
Tm dosya ilemleri bu men altndadr. Standart ara ubuu ile bu mendeki baz komutlara
ulalr. File mensndeki komutlar ile:

Yeni bir proje, bir dosya veya bo bir solution (zm) oluturmak,
Oluturulmu bir projeyi veya var olan bir dosyay amak,
Web zerinde paylatrlm dosya veya projeler amak,
Ak olan dosya veya projeleri kapatmak,
Recent Files ile en son kullanlan dosyalar amak,
Recent Projects ile en son kullanlan projeleri amak,
Dosyalar kaydetmek, yazdrmak mmkndr.

Edit Mens
Tm yaz dzenleme ilemleri iin, bu mendeki komutlar kullanlr. Text Editor ara ubuu da
bu mennn ksayoludur. Edit mensndeki komutlar ile:

Copy, Cut, Paste, Delete, Select All gibi temel ilemler,


Find And Replace, Go, Bookmark gibi navigasyon ilemleri,
Outlining ile metinleri gruplama ilemleri,
Satrlar yorum satr yapma, yorum satrlarn kaldrma, byk kk harf evrimi gibi ileri
seviye ilemler gerekletirilir.

View Mens
Visual Studio alma ortamndaki tm pencereler bu men komutlaryla gsterilir. Ayrca Naviga-
te Backward ve Navigate Forward komutlaryla en son allan satra geri dnlr.

Dier Menler
Refactor (Yeniden Dzenleme); Kod zerinde eitli deiiklikleri kolayca yapabilmemizi sala-
yan seenekler bu men altndadr.

Project (Proje): Projeye dosya eklemek, karmak, proje zelliklerini gstermek ve referans ek-
lemek 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.
Projeyi debug durumunda balatmak, BreakPoint eklemek (hata ayklarken durulmas gerek sa-
trlar 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, komut-
lar iin ksayol ayarlar, internet taraycs ayarlar, yardm ve dinamik yardm ayarlar yaplr.

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

rnek:
1. Tools mensnden Options komutunu sein.
2. Sol pencerede bulunan Environment mensnden Fonts and Colors (Yaz Tipi ve Renkler)
sekmesine gelin.
16 Blm 2

3. Sa pencerede bulunan Display items (eleri Listele) mensnden Numbers (Numaralar)


alann sein ve Item foreground (e n plan) zelliini Purple (Mor) olarak belirleyin. Tm
say deerlerinin rengi mor olacaktr.

ekil 2.10

4. Sol penceredeki Environment mensnden Web Browser sekmesine gelin. Home Page me-
tin kutusuna www.bilgeadam.com yazn.
5. Sol penceredeki Text Editor mensnden C# alt mensn sein. Burada C# diline zel
metin dzenleme seenekleri bulunur. Sa pencerede, Display sekmesinin altnda Line Num-
bers (Satr Numaralar) seeneini iaretleyin. Bu seenek, C# projelerinde alrken satr
numaralarn gsterir.
Window (Pencere): Sayfalarn ve pencerelerin grnmlerini ve zelliklerini deitirmek iin kul-
lanlan 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 pencereler gizlenir.

Community (Topluluk): Yazlmclarn birbirlerine soru sorup, cevap alabilecekleri ve yazlmc-


lar rnek kodlar, nc parti kontroller bulabilecei sitelere ynlendiren seenekler bu mende
bulunur.

Help (Yardm): Visual Studio alma ortamnda ok sk kullanlan yardm pencerelerinin grn-
m 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 iletiim bilgilerine
ulalr.

Pencereler
Pencereler, Visual Studio iinde uygulama gelitirirken kullanlabilecek birok eleman belli grup-
lar halinde tutan alanlardr. alma ortamnda birok pencere bulunmasyla beraber en sk kul-
landklarmz, Solution Explorer, Toolbox, Object Browser, Properti-
Grmek istediiniz pencere- es, Watch, Output, Search Result, Task List pencereleridir.
lerin ounu View mensn-
den seebilirsiniz. Pencereler, Visual Studio ortam ierisinde istenilen yere tanabilir
veya sabitlenebilir. Pencerelerin birka genel zellii vardr:

Auto Hide (Otomatik Gizle): Pencerelerin, fare zerindeyken gzkmesi ve fare ekildikten son-
ra gizlenmesidir.

Dockable (Sabitlenebilir): Pencerelerin, Visual Studio ortam ierisinde bir yerde sabitlenebilme
zelliidir.
Microsoft Visual Studio Arayz 17

Floating (Kayan): Kayan pencereler herhangi bir yere sabitlenemez, her sayfann stnde durur
ve bylece srekli grnr.

Pencerelerin bu zelliklerine Window mensnden eriilebilir.

rnek:

1. View mensnden Other Windows alt mensn iaret edin ve Macro Explorer penceresini
sein. Pencerenin balnda, biri Auto Hide dieri Close olan iki dme grlr. (Pencerenin
kt yere gre sadece Close dmesi de gzkebilir. Dier seeneklerin kmas iin pen-
cerenin balna ift tklayp, pencereyi Dockable durumuna getirin.)
2. Auto Hide dmesine (Raptiye ikonlu dme) basarak pencereyi gizleyin.
3. Pencereyi tekrar sein, Window mensnden Auto Hide zelliini sein. Daha sonra ayn
menden Floating zelliini sein. Pencerenin tanabildiini ancak sabitlenemedii grlr.
4. Tabbed Document seeneini sein. Pencerenin sekme olarak forma yerletii grlr.
5. Pencere seili iken, Window mensnden Dockable zelliini sein. Bu sefer pencerenin,
tand zaman alma ortamnn herhangi bir yerine sabitlenebildii grlr.
6. Pencere seili iken, Window mensnden Hide komutunu sein. Pencereyi tekrar amak iin
bu etaplar tekrarlayn.

Solution Explorer Penceresi


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
penceresi solution iinde bulunan tm projeleri, ilgili dosya ve klasrleri grntler. Pencerede
koyu yaz tipinde grnen proje, solution iindeki balang projesidir.

Bu pencereden, eler zerinde silme, kopyalama, tama, ismini de-


itirme ilemleri yaplabilir. Ayrca pencerenin st ksmnda, seilen
e zerinde basit ilemler gerekletirmek iin bir ara ubuu bu-
lunur.

Refresh (Yenile): Proje dosyalar zerindeki deiikliklerin grnme-


sini salar.

Show All Files (Tm Dosyalar Gster): Seilen projenin bulunduu


klasrdeki tm dosyalar ve alt klasrleri gsterir. Pencerede grnen
beyaz eler proje iine dhil edilmemi elerdir. Proje kapsamnda
kullanlmak istenen eler (rnein arka plan resmi), zerine sa tk-
lanp Include In Project komutu ile projeye dhil edilmelidir.
ekil 2.11
Properties (zellikler): Penceredeki tm elerin zellikleri, Proper-
ties komutu ile grlebilir. Bu komut seildiinde, enin zellikleri
Properties penceresi ile grntlenir. (Properties penceresi bu blmde detayl olarak ele alna-
caktr.)

Solution Explorer penceresi, View mensnden grlebildii gibi, varsaylan klavye seeneklerin-
de CTRL-ALT-L ksayolu ile de grlebilir.

Solution Explorer penceresinde Solution blmn gremiyorsanz, Tools (Aralar) mensnden Options (Se-
enekler) komutunu sein. Alan pencerede Projects and Solutions (Projeler ve Solutionlar) altnda bulunan
Always Show Solution (Her Zaman Solution Gster) kutusunu iaretleyin ve OK komutu ile kn.
18 Blm 2

Toolbox Penceresi
Toolbox (Ara Kutusu) penceresi, projelerde kullanlan eitli kontrol-
lerin listelendii penceredir. Buradaki eler, sekmeler iinde gruplan-
mtr. Her sekme, ortak platformlarda alan veya benzer ilevleri
olan kontrollere sahiptir. rnein, Data sekmesinde veri taban ilem-
lerinde kullanlan kontroller vardr. Printing kontrolleri Windows platfor-
munda alan projelerdeki kt ilemlerinde kullanlr.

Toolbox penceresinde kontroller, isimlerine gre sralanmaktadr.


rnein Common Controls sekmesinde en stte Button, CheckBox,
CheckedListBox ve ComboBox kontrolleri bulunur. Kontroller, yerleri
ve sralar tanarak deitirilebilir, ayrca baka bir sekmeye de ta-
nlabilir.
ekil 2.12
Visual Studio alma ortam, Toolbox penceresindeki kontrollere yeni
isim verme, kontrolleri silme veya pencereye yeni sekmeler ve kontroller ekleme imkanlarn da
salar.

rnek:

1. Common Controls sekmesinde TextBox kontrolne sa tklayn. kan menden Rename


Item (enin smini Deitir) komutunu sein ve Metin Kutusu yazn.
2. Ortaya kan Metin Kutusu kontroln tayarak sekmenin en stne getirin.
3. Pencereye sa tklayn ve Sort Items Alphabetically (Nesneleri Alfabetik Olarak Srala) komu-
tunu sein. Metin Kutusu kontrolnn, alfabetik srada yerini ald grlr.
4. Metin Kutusu kontrolnn adn TextBox olarak deitirin.
5. Pencereye sa tklayn ve Add Tab komutunu sein. Sekmeye Medya ismini verin.
6. Sekmeye sa tklayn ve Choose Items (eleri Se) komutunu sein. Choose Toolbox Items
diyalog kutusu kar. Burada Toolbox penceresine eklenebilecek tm kontroller listelenir.
Com Components sekmesine gelin ve listeden Windows Media Player kontroln iaretleyin.
OK dmesine basarak, diyalog kutusunu kapatn. Windows Media Player kontrolnn, olu-
turulan Medya sekmesine eklendii grlecektir.
Toolbox penceresine varsaylan klavye seeneklerinde CTRL-
ALT-X ksayolu ile ulalr.

Properties Penceresi
Properties (zellikler) penceresi, seilen bir nesnenin zellikle-
rini grntler. Penceredeki grnm, zellik Ad - Deeri ek-
lindedir. Silik olarak grnen zellikler salt okunurdur ve deiti-
rilemez. Pencerenin zerindeki alr liste, alma sayfasndaki
kontrolleri listeler. Buradan istenilen kontrol seilerek zellikleri
grntlenir.

Penceredeki zellikler kategorilere gre gruplanmtr, ancak al-


fabetik olarak da dizilir. Pencerenin stnde bulunan ara kutu-
sundan Categorized (Kategoriletirilmi) veya Alphabetical (Alfa-
betik) seilerek zelliklerin grnmleri deitirilir.

Pencerenin en altnda bulunan mende, her zelliin aklamas


ekil 2.13 bulunur.

Bir kontroln zerindeyken


F4 tuuna basnca, Properti-
es penceresi grntlenir.
Microsoft Visual Studio Arayz 19

Yardm Kullanmak
Yazlm gelitirirken en ok kullanacamz kaynaklar
yardm dosyalar olacaktr. Bir programlama dilinin ok
eitli zellikleri, kullanm farkllklar olabilir. yi bir yaz-
lmc btn bu zellikleri ezbere bilen deil, bu zellikleri
en ksa srede bulan, renen ve kullanandr. Yardm
dosyalarnn kullanmn bilmek, yazlmcln temelini
oluturan nemli unsurlardan biridir.

Visual Studio Yardm yazlmcya, gelimi zelliklere


sahip pencereler ve yardm dosyalar ile geni bir kulla-
nm kolayl salar.

Visual Studio Yardm dosyalarnn yaps balk, ierik


ve ilikili konulardan (See Also) olumutur. Ayrca her
ekil 2.14
yardm dosyasnn altnda bulunan Send Comments
balants ile konu hakknda yorum gnderilebilir.
Visual Studio Yardmn kullanmak iin, MSDN
(Microsoft Developer Network) yardm ktp-
Visual Studio yardm pencereleri Dynamic Help, Sear- hanelerinin yklenmi olmas gerekir.
ch, Index ve Contents olarak drde ayrlr. Bu pence-
reler, Help mensnden ulalabilir.

Dynamic Help
Dynamic Help (Dinamik Yardm) penceresi, ierii otomatik olarak deien bir aratr. Kod yazar-
ken, pencerelerde 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 penceresinde ilk srada bulunan yardm konusu yeni bir say-
fada grntlenir.

Penceredeki yardm konular Help (Yardm), Samples (rnekler) ve Getting Started (Balang)
olarak blme ayrlmtr. Help blm, seilen nesne ve 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 gs-
terir.

Search
MSDN ktphanelerinde arama yaplan penceredir. Look for metin kutusuna, aranacak anahtar
kelimeler girilir. Filtreleme (Filtered by) ile arama sonular belli konulara gre snrlanr ve isten-
meyen seeneklerin gsterilmesi engellenir.

Search penceresinde, 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.
Bulunan sonular Search Results (Arama Sonular) penceresinde gsterilir. Bu pencerede;
Title: Konunun baln,
Location: MSDN ktphanelerinde hangi balk altnda bulunduunu,
Rank: Konunun, aranlan kelimeye olan yaknlk derecesini ifade eder.
20 Blm 2

Index
Yardm dosyalarndaki btn konular alfabetik srada dizer. Filtreleme ilevi, arama pencere-
sinde olduu gibidir. Bu pencerenin 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) pence-
resinde bu seenekler gsterilir.

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

Bir yardm dosyas akken, Help mensnden Sync Contents (erik Senkronizasyonu) komutu
seilerek o yardm dosyasnn Contents penceresindeki yeri bulunabilir.

Lab 2.1 Dinamik Yardm


1. Help mensnden Dynamic Help komutunu seerek Dynamic
Bu lab tamamlamak iin, Help penceresini an. Pencerede gsterilen ilk konunun ismi
MSDN yardm ktphaneleri
nedir?
yklenmi olmaldr.
2. CTRL-ALT-X tularna basp Toolbox penceresini an. Dynamic
Help mensnde ne deiti?
3. Toolbox penceresinde, Windows Forms tabnda Button kontroln sein. Dynamic Help pen-
ceresindeki ilk konunun ismi ne olarak deiti?
4. Button seiliyken F1 tuuna basn. Alan sayfann ismi nedir?

Lab 2.2 Contents


1. Help mensnden Sync Contents komutuna tklayn. Button Mem-
Sayfay yazdrmak iin bil-
gisayarnza bal bir yazc bers konulu yardm dosyas hangi konularn altnda bulunuyor?
bulunmas gerekir.
2. Contents penceresinin ilk bal olan Visual Studio .NET altnda,
Gettings Assitance altnda, Using Help in Visual Studio .NET al-
Yardm dosyalarn yazdrmak, tnda, Tips for Using the Help Keyword Index konulu yardm an.
zellikle uzun metinlerde, ko-
lay alma imkn salar.
File mensnden Print komutunu sein ve sayfay yazdrn.
3. Contents penceresini kapatn.

Lab 2.3 Arama


1. Help mensnden Search komutunu sein. Look for metin kutusuna Visual Studio .NET ya-
zn. 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 bulun-
du?
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 pencerelerini kapatn.
Microsoft Visual Studio Arayz 21

Lab 2.4 ndeks


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.
5. Alan yardm dosyasn inceledikten sonra, sayfann See Also bal altnda Whats New in
Projects konusuna sa tklayn. Alan menden Open Link in New Window komutunu sein.
Window mensnden New Vertical Tab Group komutunu sein.
6. Bir nceki yardm dosyasyla arasndaki benzerlikleri inceleyin.
7. Window mensnden Close All Documents seenei ile btn sayfalar kapatn ve Visual
Studio ortamndan kn.

Lab 2.5 Pencereler ile almak


1. Toolbox penceresini Auto Hide dmesine basarak srekli grnr hale getirin.
2. Pencerenin balna sol tklayp sa tarafta bulunan Solution Penceresine doru tayn. Bu
aamada ekranda mavi klavuz dmeleri grnecektir. Klavuz dmelerinden ortadakinin
zerine gelip brakn.
3. imdi ayn tarafta bulunan Class View Penceresini alt taraftaki sekme yardm ile sa tarafa
tayn.
4. Tools mensnden Import and Export Settings komutunu verin. Reset All Settings seeneini
iaretleyip Next dmesine basn. Karnza kan sihirbazn ynergelerini takip edin. Tm
pencere ayarlarnz ilk halini alacaktr.
3
Visual C# .NET
ile Windows
Tabanl
Programlama
3 Visual C# .NET
ile Windows Tabanl
Programlama
lk Uygulama

Visual C# .NET Kontrolleri

zellikler, Metotlar ve Olaylar

Lab 3.1 Button Yakalama

Lab 3.2 Dokunma!

Lab 3.3 Dijital Saat

devler
Visual C# .NET ile Windows Tabanl
Programlama
Windows tabanl uygulamalar, Windows iletim sistemi zerinde alan uygulamalardr. Win-
dows uygulamalar Windows formlar ve kontrollerinden oluur. Visual Studio bu formlarn ve
zerindeki kontrollerin tasarmn, kodlarn yazlmn byk lde kolaylatrarak uygulama ge-
litirme srecini daha hzl ve kolay hale getirir.

Bu blm tamamladktan sonra:

Windows tabanl programlamada kullanlan kontrolleri tanyacak,


Kontrollerin zellik, metot ve olay kavramlarn reneceksiniz.

lk Uygulama
Visual C#.NET ile yazacamz Windows uygulamas ekrana, Merhaba Dnya 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 proje tiplerini listeler.
Proje tiplerinden Visual C# Project ve Windows Application tipinin seili olduunu kontrol
edin.
Name zelliine HelloWorld yazn ve OK dmesine basn. Bir windows formu tasarm gr-
nmnde alr.
Toolbox penceresinden Button kontroln formun zerine srkleyip brakn. Properties pen-
ceresini aarak Button kontrolnn Text zelliine Hello World! yazn.
Eklenen Button kontrolne ift tklayarak kod sayfasna gein. Button kontrolne basldnda
altrlacak kodu yazn:
Dzgn bir yazlmda
koddan ok yorum
MessageBox.Show(Merhaba Dnya); olmaldr.

Yazdnz kodun ne anlama geldiini belirtmek iin yorum satrlar kullanmak, kodlar okumay
kolaylatrr. Zaman getike yazlmc kendi yazd kod ile ilgili baz blmleri unutabilecei
iin yorum satrlar ok nemlidir. Yorum satrlar // ile balayarak yazlmaldr.

MessageBox.Show metodunun yazld kodun stne, yaplmak istenileni belirten bir yo-
rum satr yazn.

// MessageBoxn Show metodunu kullanarak ekrana Merhaba Dnya


yazdryoruz.
alma sayfalarnn isimlerinin yannda yldz iaretinin grnmesi,
F5 tuuna basarak projeyi alt- o sayfada deiiklik yapldn ancak daha kaydedilmediini belirtir.
Proje dosyalarnz CTRL-S tularna basarak ska kaydedin.
rn.

Visual C# .NET Kontrolleri


Windows tabanl uygulamalar gelitirirken ska kullanacamz bir grup kontrol vardr. Form kon-
trol hari dier btn kontroller Toolbox penceresinden seilir. Bu kontroller srklenip form
zerinde istenilen pozisyona braklr.
26 Blm 3

Kontroller, ToolBox penceresinde zeri-


ne ift tklayarak da eklenebilir.

Kontroller, ToolBox penceresinde sei-


lip, form zerinde bykl izilerek de
eklenebilir.

Kontrollerin byklkleri ve yerleri, tasa-


rm annda Size (Boyut) ve Location (Ko-
num) zellikleri ile deitirilebilecei gibi,
ekil 3.1 fare ile de istenilen ekilde ayarlanabilir.

Form
Windows uygulamalar, Windows kontrollerinin tutul-
duu pencereler olan formlardan oluur. Bir Windows
projesi ald zaman form kontrol otomatik olarak
eklenir. kinci bir form eklemek iin Project mensn-
den Add Windows Form komutu seilir. Proje alt
zaman balang formu grntlenir. Balang formu
Soluton Explorerda grlen Program.cs dosyas ze-
rinden deitirilir.

ekil 3.2 Application.Run(new frmStart());

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 kontroln Width (Genilik) zellii yaplan deiiklie gre gncellenecektir. Ayn
deiiklikler properties penceresinde de grlebilir.

Formlarn, dier kontrollerin zelliklerinden farkl baz zellikleri vardr.

ControlBox
Formun ControlBox zellii false iken uy- Form zerindeki simge durumuna kltme, ekran kapla-
gulama, Debug mensnden Stop Debug-
ging komutu seilerek kapatlabilir. ma ve formu kapama kutularnn grnmn ve eriilebi-
lirliini kontrol eder.

StartPosition
Form ald zaman nerede grneceini belirler. CenterScreen seenei formu ekrann orta-
snda gsterir.

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

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


{
label1.Text = Uygulama balad.. Balang zaman:
+ DateTime.Now;
}
Visual C# .NET ile Windows Tabanl Programlama 27

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

private void btnChangeColor_Click(object sender, System.


EventArgs e)
{
btnChangeColor.ForeColor = Color.Gray;
}

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

private void textBox1_TextChanged(object sender, System.


EventArgs e)
{
MessageBox.Show(Yaz deiti: + textBox1.Text);
}

Label
Bir Windows etiketini temsil eder. Kullancya, form zerinde bir yazy gstermek amal kullan-
lr. Bu yaznn grnm, Label kontrolnn baz zellikleri ile deitirilir.

TextAlign
Yaznn Label kontrol zerinde nerede duracan belirler.

Font
Font (Yaz Tipi) zellii birok alt zellik tar. Bunlardan bazlar
en sk kullanlan zelliklerdir.

Name
Yaz tipinin ismini belirler. Varsaylan Microsoft Sans Serif sei- ekil 3.3

lidir.

Size
Karakterlerin boyutunu belirler. Varsaylan byklk 8,5 deerini alr.

Bold
Yaznn kaln (Bold) tipte olmasn belirler.

Italic
Yaznn italik (Italic) tipte olmasn belirler.

UnderLine
Yaznn alt izgili (UnderLine) olmasn belirler.

Label kontrolnn Text zelliini bo brakrsanz, tasarm zaman Form zerinde


gremezsiniz. Byle bir durumda kontrol tekrar semek iin Properties pence-
resinin en stnde bulunan ComboBoxtan kontrol semeniz yeterli olacaktr.
28 Blm 3

ekil 3.4

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.

Tasarm annda e eklemek iin Properties penceresinden Items zellii seilir. String Collecti-
on Editor penceresinde, her enin deeri tek bir satrda yazlr.

ekil 3.5

alma annda e eklemek iin kod sayfasnda, kontroln Items zelliinin Add metodu kulla-
nlr.

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


{
comboBox1.Items.Add(Beikta);
comboBox1.Items.Add(Galatasaray);
comboBox1.Items.Add(Fenerbahe);
comboBox1.Items.Add(Trabzon);
}
Visual C# .NET ile Windows Tabanl Programlama 29

ekil 3.6

ListBox
Bir Windows liste kutusunu temsil eder. Kontroldeki eler sabit bir liste olarak grntlenir. List-
Box kontrolne e ekleme ilemi, ComboBox kontrolndeki ilemler ile ayndr. ComboBox kon-
trolnden fark, birden fazla enin seilebilir olmasdr.

private void btnEmptyClasses_Click(object sender, System.


EventArgs e)
{
listBox1.Items.Add(YYU3124);
listBox1.Items.Add(YYU3226);
listBox1.Items.Add(YYU3314);
listBox1.Items.Add(YYU3408);
}

ekil 3.7

Timer
Bir Windows sayacn temsil eder. Timer almaya balad zaman, belirli zaman aralklarnda
Tick olay gerekleir. Timer kontrolnn Interval deeri, Tick olaynn ka milisaniyede bir ger-
ekleeceini belirler. rnein Interval deeri 2000 olan bir saya, Tick olaynda yazlan kodlar
2 saniyede bir altracaktr.

Sayac balatmak iin kontroln Start metodu, durdurmak iin ise Stop metodu kullanlr. Enabled
zellii, sayacn aktif olup olmadn belirler.

private void Form1_Load(object sender, EventArgs e)


{
//Her saniye kod gncellenecek
30 Blm 3

timer1.Interval = 1000;
//timer balatlyor
timer1.Start();
//bir saniye gecikmeyi nlemek iin kod bir kere arlyor.
label1.Text = DateTime.Now.ToLongTimeString();
}

private void timer1_Tick(object sender, EventArgs e)


{
//O anki saat label1 kontrolnn Text zelliine atanyor.
label1.Text = DateTime.Now.ToLongTimeString();
}

MessageBox
MessageBox, kullancya bilgi gstermek iin alan mesaj kutusudur. Bu mesaj kutusu drt e-
den oluur.

Text (Metin): Mesaj kutusunda verilmek istenen bilgiyi tutan yazdr.


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 musun?, Uyar,


MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

ekil 3.8

Mesaj kutusu, kapanrken hangi dmenin basldn DialogResult nesnesi ile programcya bil-
dirir.

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


MessageBoxButtons.YesNoCancel) == DialogResult.Cancel)
{
//Eer Cancel (ptal) dmesine tklanrsa bu kod blou
alacak...
}

zellikler, Metotlar ve Olaylar


.NET Kontrolleri, grsel bir uygulama gelitirmek iin gerekli programlanabilir altyap elamanlarn
olutururlar. Yukarda basite deinilen bu kontrollerle, zellikleri, metotlar ve olaylar kullanarak
etkileim salarz. zellik, metot ve olay kavramlarn daha net aklayabilmek iin fiziksel olarak
bir alar saati, bir de .NET kontrol olan Button nesnesini ele alalm.
Visual C# .NET ile Windows Tabanl Programlama 31

zellikler
zellikler (Properties), kontrollerin grnm, yerleim veya davran gibi eitli karakteristiklerini
belirlerler.

Nasl ki bir alar saatin renk, genilik, ykseklik gibi karakteristik, onu dier alar saatlerden ayrt
etmemizi salayacak zellikleri varsa, bir Button kontrolnn de rengini, geniliini ve yksekliini
belirleyecek karakteristik zellikleri vardr. rnein Button kontrolnn, Text zellii, Buttonun
zerinde yazan metni belirlememizi salar.

Kontrollerin zelliklerine, tasarm annda Properties penceresinden ulalabilecei gibi, bu zellik-


ler kod tarafndan da okunup deitirilebilir.

Kontrollerin birok zellii hem okunabilir hem de deitirilebilirdir. Ancak baz zellikler salt oku-
nur (ReadOnly) olabilir. Bu tip zellikler Properties penceresinde grnmezler.

Kontrollerin birok ortak zellikleri vardr. Bunlar;

Text
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)


{
//TextBox kontrolnn Text zelliinin deeri Label
kontrolnn Text zelliine atanyor.
label1.Text = textBox1.Text;
}

ekil 3.9

Name
Name zellii kontrollere ulamak iin kullanlan zelliktir. Birok kontroln Text zellii ayn ola-
bilir. Ancak her biri ayr birer kontrol olduklar iin, Name zelliklerin benzersiz olmas gerekir.

textBox2.Text = textBox1.Text;

ki TextBox kontrolnn yazlar ayn, fakat isimleri farkldr.

Formda allan nesnelere mantkl isimler verilirse, kod yazmnda


ok byk kolaylk elde edilir. rnein isim girilen bir TextBoxa tx-
tAd, saatin gsterilecei bir Labela lblZaman gibi...
32 Blm 3

Size
Size 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
Kontrollerin arka plan renginin ayarland zelliktir. Bu zelliin deeri, Color yapsnda tanml
deerler ile belirlenir.

ForeColor
Kontrollerin zerindeki yazlarn rengini belirler.

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


{
button1.BackColor = Color.Black;
button1.ForeColor = Color.White;
}

ekil 3.10

Visible
Kontrollerin ekranda grnp grnmediklerini belirleyen zelliktir. true ve false olmak zere iki
deer alabilir

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


{
// Label1 kontrol grnmez
label1.Visible = false;

// Label2 kontrol grnr


label2.Visible = true;
}

Top, Left
Kontrollerin, formun veya iine eklendii baka bir kontroln zerindeki koordinatlarn belirleyen
zelliklerdir. Top, stten uzakl belirtirken, Left soldan uzakl belirtir. Uzaklklar piksel cinsin-
dendir.

Saysal grntlerin (Ima-


ge) en kk paras olan
noktalara Piksel denir.
Visual C# .NET ile Windows Tabanl Programlama 33

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


{
// Label1 kontrolnn Formun stnden uzakl
label1.Top = 200;

// Label1 kontrolnn Formun solundan uzakl


label1.Left = 150;
}
Metotlar
Metotlar (Methods) kontrollerin yapabilecei ilemlerdir. Yine bu blmn banda verdiimiz a-
lar saat ve Button rneini kullanacak olursak, SaatiAyarla(), AlarmiKur(), alar saate ait metotlar
olutururken, Select() metodu Button kontrolnn seili hale gelmesini salar.

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)


{
// textBox1 kontrolnn Text ini temizle
textBox1.Clear();
// textBox1 kontrolne odaklan
textBox1.Focus();
}

Kontrollerin baz ortak metotlar vardr. Bunlar,

BringToFront
st ste duran kontroller arasndan en ne getirir.

SendToBack
st ste duran kontrollerin en arkasna gnderir.

Hide
Kontroln grnmesini engeller.

Show
Kontroln grnmesini salar.

Olaylar
Olaylar (Events), kontrollerin cevap verebilecei eylemlerdir. rnein alarm kurulmu bir alar
saat, Alarm olayna ses kartarak cevap verirken, bir Button kontrol Click olayna, bir TextBoxtaki
yaznn deimesi ile karlk verebilir. Bir olay gerekletii zaman yaplacak ilem, ilgili olayn
metoduna yazlr. rnein, Button1 isimli kontroln zerine tkland zaman gerekletirmek is-
tenen eylemler Button1_Click metoduna yazlr.

Visual Studio, olaylarn metot isimlerini Kontrolsmi_Olaysmi olarak biiminde yazar.

Tasarm zaman herhangi bir


Hatal veya bilerek herhangi bir kontrol iin atadnz olay iptal etmek iin kod
kontrole ift tkladnzda, kon- tarafndan ilgili metodu silmeyin. Onun yerine, Properties penceresinden kontro-
troln varsaylan olay iin Vi- ln ilgili olayn bulun. Olayn zerine sa tklayp Reset komutunu verin.
34 Blm 3

sual Studio sizin iin bir metot oluturur. rnein; Button iin Click, Textbox iin TextChanged.
Varsaylanlarn dnda dier olaylara ulamak isterseniz;

1. Kontroln zelliklerini an. (Kontrole bir kez tklayp F4 tuuna basn ya da sa tklayp Pro-
peties komutu verin)
2. Alan Properties penceresinde zerinde sar imek simgesi olan tua basn. Artk Proper-
ties penceresi seilen kontroln olaylarn listeleyecektir. Tekrar zellikleri grntlemek iin
ayn tuun yanndaki zerinde tablo resmi olan tua basmanz yeterli olacaktr.
3. Listeden istediiniz olay ift tklayarak o olay iin kod yazabilirsiniz. Alternatif olarak olayn
karna isimlendirme kurallarna uymak kayd ile istediiniz metot adn yazp Enter tuuna
da basabilirsiniz.

Click
Kontrol zerine tkland zaman tetiklenen olaydr. Windows tabanl programlamada en sk kul-
lanlan olaylardan biridir.

MouseDown
Fare, kontroln zerindeyken herhangi bir tuuna basld zaman gerekleen olaydr. Bu olay,
Click olayndan nce alr.

MouseUp
Fare, kontroln zerindeyken baslan tu brakld zaman alr.

Enter
Kontrol seildii veya zerine odaklanld zaman gerekleen olaydr.

Leave
Baka bir kontrol seilmek zere kldnda, bu kontroln Leave olay tetiklenir.
Olaylarn alma sralarn test etmek iin tm olay yordamlarna, mesaj kutusu
karan MessageBox.Show kodunu yazn. Daha sonra projeyi altrp kontrol-
ler zerinde yaplan deiikliklere gre olaylarn alma sralarna bakn.

Lab 3.1 Button Yakalama


Bu rneimizde Button kontrolnn MouseEnter olayna ve rastgele say retmeye deineceiz.

1. File | New | Project komutu ile yeni bir Windows projesi an. Project Type (Proje Tipi) Visual
C#, Templates (ablonlar) olarak Windows Form Application sein ve ismini (Name) But-
ton_Yakalama olarak deitirin.
Visual C# .NET ile Windows Tabanl Programlama 35

ekil 3.11

2. Formun boyutunu Size zelliini kullanarak ekil 3.12deki gibi deitirin.

ekil 3.12

3. Forma bir adet Button kontrol ekleyin. Name zelliini btnYakala, Text zelliini ise Beni
Yakala olarak deitirin.
36 Blm 3

4. btnYakala isimli Buttonun MouseEnter olayna ift tklayn.

ekil 3.13

MouseEnter olayna ift tkladktan sonra kod ksmnda btnYakala_MouseEnter metodu olu-
acaktr. MouseEnter herhangi bir kontrol iin fare zerine geldiinde gerekleecek olay
belirtir.

5. MouseEnter olay iin oluan metodun iine dmeyi hareket ettirecek kodlar yazn:

private void btnYakala_MouseEnter(object sender, EventArgs e)


{
//Rastgele bir tamsay retebilmek iin kullanacamz Random
snfnn bir rneini oluturuyoruz.
Random r = new Random();

//0-500 aras retilen tamsaylar button kontrolnn Left ve Top


zelliklerine atanyor. Bylece Button kontrolnn Form zerindeki
konumu deimi oluyor. Next metodunda istenilen en byk saynn
bir fazlas yazlr. Bu yzden 500 deil 501 yazld.
btnYakala.Left = r.Next(0,501);
btnYakala.Top = r.Next(0,501);
}

6. Uygulamay F5 tuu ile altrp gzlemleyin.

Lab 3.2 Dokunma!


Bu rneimizde Button kontroln kullanarak basit bir oyun tasarlayacaz. Formumuzun grn-
ts ekil 3.14teki gibi olacak.
Visual C# .NET ile Windows Tabanl Programlama 37

ekil 3.14

Amacmz eklin ak ucundan balayarak fareyi krmz ve yeil dmelere dedirmeden mavi
dmenin zerine getirebilmektir. Krmz ve yeil dmelere dediimizde oyunu kaybedecek,
siyah dmeden balayarak mavi dmeye demeye alrsak ekranda hile mesaj ekranda
grnecektir.

1. Yeni bir Windows projesi an ve ismini Dokunma olarak deitirin.


2. Forma Tablo 3.1deki kontrolleri ekleyin. Tm kontrollerin Text zelliklerini bo brakn.

Tablo 3.1
Name BackColor
Button btnYesilUzun Green
Button btnYesilKisa Green
Button btnKirmiziUzun Red
Button btnKirmiziKisa Red
Button btnBitis Blue
Button btnEngel Black

3. btnYesilUzun isimli Buttonun MouseHover olayna ift tklayn. Kod ksmnda btnYesilUzun_
MouseHover adl metot oluacaktr. Buraya Yandnz mesajn gsterecek kodu yazn:

private void btnYesilUzun_MouseHover(object sender, EventArgs e)


{
MessageBox.Show(Yandnz);
}

4. Uygulamada bulunan btnYesilKisa, btnKirmiziKisa, BtnKirmiziUzun Buttonlar btnYesilUzun


Buttonu ile ayn olay kullanaca iin bu Buttona btnYesilUzun_MouseHover isimli me-
tot atanacaktr. Bu ilemi yapabilmek iin her Buttonnun da MouseHover olayna ekil
3.15teki gibi alan menden btnYesilUzun_MouseHover metodunu atayn.
38 Blm 3

ekil 3.15

5. btnBitis ve btnEngel isimli Buttonlarn MouseHover olayna ift tklayn. Oluan metotlara
Yandnz ve Tebrikler, Kazandnz mesajlarn gsterecek kodlar yazn:

private void btnYesilUzun_MouseHover(object sender,


EventArgs e)
{
//Fare btnYesilUzun,btnYesilKisa, BtnKirmiziUzun ve BtnKirmiziKisa
adl dmelere dediinde Yandnz mesajn grnecek.
MessageBox.Show(Yandnz);
}

private void btnBitis_MouseHover(object sender, EventArgs e)


{
//Fare krmz ve yeil dmelere demeden mavi dmeye ularsa
Kazandnz mesaj grnecek.
MessageBox.Show(Tebrikler, Kazandnz);
}

private void btnEngel_MouseHover(object sender, EventArgs e)


{
//Fare siyah dmeden balayarak mavi dmeye ulamaya alrsa
Hile Yapmayn mesaj verecek.
MessageBox.Show(Hile Yapmayn);
}

Uygulamay F5 tuu ile altrp gzlemleyin.


Visual C# .NET ile Windows Tabanl Programlama 39

Lab 3.3 Dijital Saat


Bu rneimizde Timer nesnesini kullanarak ekrann orta-
snda alan bir dijital saat rnei hazrlayacaz.

Formunuzun grnts ekil 3.16daki gibi olacak.

1. Yeni bir Windows projesi oluturun ve ismini Dijital-


Saat olarak deitirin. Formunuza Tablo 3.2deki kon- ekil 3.16
trolleri ekleyiniz.

Tablo 3.2
Name Text
Label lblSaat [--]
Button btnKapat [X]
Timer tmrSaat

tmrSaatin Interval zelliini 1000 ve Enabled zelliini true olarak deitirin.

Form1in BackColor zelliini ControlDark, FormBorderStyle zelliini None ve StartPosition


zelliini CenterScreen yapn.

lblsaatin Backcolor zelliini ButtonFace ve TextAlign zelliini MiddleCenter olarak dei-


tirin.

2. tmrSaat kontrolne ift tklayarak kod penceresine gein. Her geen saniye iinde o anki saati
lblSaat kontrolnn Text zelliinde gsteren kodu yazn:

private void tmrSaat_Tick(object sender, EventArgs e)


{
lblSaat.Text = DateTime.Now.ToLongTimeString();
}

3. Son olarak btnKapata ift tklayarak kod penceresine gein, Form1i kapatacak btnKapatn
Click olayna gerekli kodlar yazn.

private void btnKapat_Click(object sender, EventArgs e)


{
//Formu kapatn.
this.Close();
}

4. F5 ile uygulamay altrdnzda grnts ekil 3.17deki gibi olmaldr.

ekil 3.17
40 Blm 3

devler
1.Treeview ve Progressbar kontrollerini inceleyin. Her bir kontroln herhangi 3 metodunu, 3 ola-
yn ve 3 zelliini aratrn.

2.ekil 3.18de grlen formu tasarlayn.

ekil 3.18
4 Deikenler
ve Veri Tipleri
4 Deikenler ve Veri Tipleri
Deikenler

Veri Tipleri

k Dizisi

Aritmetik Operatrler

Lab 4.1 Personel Formu

Lab 4.2 Global Deiken

Lab 4.3 Topla Birletir

devler
Deikenler ve Veri Tipleri
Bu blmde deikenler, veri tipleri, tip dnmleri ve aritmetik operatrler hakknda bilgi veril-
mektedir. Deiken tanmlamann ve kullanmann, deikenlerin veri tiplerini, veri tipi semenin
nemini kavrayacaksnz.

Bu blm tamamlandktan sonra:

Deiken tanmlayabilecek ve kullanabilecek,


Veri tiplerinin neler olduunu renecek,
Operatrler yardm ile aritmetik ilem yapabileceksiniz.

Deikenler
Uygulama gelitirirken, baz verilerin daha sonra kullanlmak zere bir yerde tutulmas gerekebilir.
rnein bir hesaplama yaplrken, nceden hesaplanm veriler kullanlmak istenirse, bu verileri
tekrar hesaplamak yerine hafzada tutmak performans artracaktr. Veya veritabanndan alnan
bir kullanc isminin hafzada tutulmas, bu deer her istendiinde veritabanna balanp alnma-
sna tercih edilmelidir. Verilerin bu ekilde hafzada tutulmas deikenler ile salanr.

C# dilinde bir deikenin tanmlanmas u ekildedir :

tip deikenad;

Burada tip verinin ierdii bilgiye en uygun veri tipini, deikenad ise daha sonra veri atamak ve
okumak iin kullanacamz temsil ismini belirtir.

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.

rnein bir kiinin ismini tutmak iin :

string isim;

Bir kiinin ya bilgisini tutmak iin :

byte yas;

Bir kiinin maa bilgisini tutmak iin :

double maas;

Deiken isimlerini belirlerken baz noktalara dikkat etmek gerekir.

Boluk, nokta, soru iareti, noktal virgl, ift trnak, tek trnak, aritmetik operatrler, karla-
trma ve atama operatrleri, parantezler kullanlamaz.
Say ile balayamaz.
Visual C#.NET dilinde tanml anahtar kelimeler kullanlamaz. rnein for,if,while,case,try,st
ruct,do,switch,true,false.
Uygulama gelitirirken hatal deiken tanm yaplma- Deiken isimlerinde Trke karakter kul-
s kodun derlenmemesine yol aacaktr. Hatal baz de- lanlrsa, farkl dil seenekli iletim sistem-
lerinde alma annda hata retecektir.
iken tanmlar:
44 Blm 4

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

Ayn tipteki deikenler tek bir satr iinde tanmlanabilir.

int numara1, numara2;

Deikenlere Deer Atamak


Deikenlere deer atamak = operatr ile yaplr. Eitliin sa tarafndaki deer, sol tarafnda
bulunan deikene atanr. Dolaysyla sa taraftaki ifadenin deeri deimez.

numara1 = 10;
numara2 = sayi1;

Deikenler tanmlandklar srada balang deeri alabilirler.

string isim = Yusuf Emre AYRILMAZ;

Tanmlama ilemi yapldktan sonra kod gidiat ierisinde deikenin deeri tekrar deitirilebilir.

isim = Engin REN;

Deikenlerin Kapsam ve Yaam Sreleri


Kaba bir ifade ile deikenler iinde bulunduklar scope (alan) ve alt alanlarda geerlidir. imdi bu
ifadeyi aklayabilmek iin scope kavram zerinde duralm.

Bir program oluturan kodlar bir btn deildir. Kodlar grevlerine gre blmlere ayrlmtr ve
programn gidiatna gre bu blmler bir kere veya daha fazla altrlabilir veya hi altrl-
mayabilir.

ekil 4.1

ekil 4.1deki duruma bakacak olursak; snftaki renci snf iindeki, Bilgeadam iindeki ve so-
kaktaki tm p kovalarn kullanabildiini grrsnz. Bilgeadam iindeki bir misafir ise Bilgea-
dam iindeki ve sokaktaki p kovalarn kullanabilir. Sokaktaki herhangi biri ise sadece sokakta
bulunan p kovalarn kullanabilir. Eriebilirlik i scopelardan da doru olmaktadr. Durumu,
Tablo 4.1den gzlemleyebilirsiniz.
Deikenler ve Veri tipleri 45

Tablo 4.1
renci Misafir Vatanda
Sokak evet evet evet
Bilgeadam evet evet
Snf evet

C#ta scopelar
ssl parantezler
ile ifade edilir.

Scopelar film taklm camlara ben-


zetebiliriz. Dardan ierisi grn-
mezken ierden dars grnr.

ekil 4.2

ekil 4.2deki rnekte grld gibi kod gelii gzel yazlmam, belli bloklar satr girileri b-
raklan boluklarla scopelara ayrlmtr. Ancak bu boluklar insan gznn rahat okuyabilmesi
iin yaplmtr. Yazlmsal hibir deeri yoktur. Bilgisayar bir scopeun nerede balayp nerede
bittiini { ve } karakterleri sayesinde anlayabilir.

rnekte grld zere nce enBuyukSayi adl deiken tanmlanm. Bu deiken tanmlan-
d scope ve alt scopelarnda kullanlabilir. Bu bilgiden yararlanarak rnekteki deikenler hak-
knda unlar syleyebiliriz:

enBuyukSayi: 12 ile 29 arasndaki tm blgede kullanlabilir.

ortancaSayi: 21 ile 28 arasndaki tm blgede kullanlabilir.

enKucukSayi: 25 ile 27 aras yani iinde bulunduu scopeta kullanlabilir.

Deikenlerin hafzada tanmlandklarndan bahsetmitik. Deikenler kapsam dna ktklarn-


da hafzadan da silinirler bylelikle yaam dngs ( life cycle ) tamamlanm olur. rnekte 22
nolu satrda tanmlanan ortancaSayi isimli deiken 28 nolu satrda yaam dngsn tamam-
lam olur.

Tablo 4.2, kod bloklarndan hangi deikenlere ulaabilindiini gsterir.

Tablo 4.2
enBykSayi ortancaSayi enKucukSayi
Scope 1 evet
Scope 2 evet Evet
Scope 3 evet Evet evet

Sabit
Sabit, srekli ayn deeri tutan deikendir. Uy- C# whitespace yani boluk tuu (space bar) ve sekme
gulamann almas boyunca deimeyen bir tuu (tab) ile oluan boluklara kar duyarl deildir.
deer kullanlyorsa sabit kullanlmas, kodun Kod derlendiinde bunlar otomatik olarak silinir.
kolay okunmasn salayacaktr.
46 Blm 4

Sabitlerin kapsam alanlar deikenler ile Sabitler tanmlandktan sonra deitirilemeyecei iin, ta-
ayndr. Genelde sabit deerler adlandrlr-
nmlandklar anda deerlerinin verilmesi gerekir.
ken tamam byk harf ile yazlr.

const double PI = 3.14;

Deiken Adlandrma Yntemleri


Deikenleri adlandrmak (notasyon), kodlarn daha okunakl ve anlalr olmas asndan ok
nemlidir. Bu sebepten dolay yazlm dnyasnda deikenleri adlandrmak iin belli bal yn-
temler gelitirilmitir. Bunlar,

Pascal
Deikeni adlandrrken, deiken ismini oluturan kelimelerin ilk harfleri byk devam kk
harf olacak ekilde yazlr.

rnek: KatSayi, TextBox, ToString()

Camel
Pascal notasyonuna benzeyen Camel (Deve) isimlendirme standardnda tek fark, ilk kelimenin
tamamen kk harf, geri kalan tm kelimelerin ilk harfi byk olacak ekilde yazlmasdr.

rnek: katSayi, adSoyad, tcKimlikNo

Hungarian
Macar (Hungarian) notasyonu olarak bilinen bu standart ile deiken tanmlarken, ilk 2 veya 3
harfte deiken tipinin veya kullanlan kontroln ksaltmas, sonrasnda ise anmsatc kelime(ler)
yazlr.

rnek: dblIlkSayi, txtOgrenciAdi, strAciklama

Uppercase
Deikenler isimlendirilirken tamam byk harfler ile yazlr.

rnek: KATEGORIADI, OGRENCINO

Underscore
Deikenler isimlendirilirken, deiken adn oluturan kelimeler altizgi (undercore) ile ayrlr.

rnek: KATEGORI_ADI, OGRENCI_NO

Veri Tipleri
Veri tipi, deikenlerin tuttuklar deerlerin trn ve bellekte tutulacak boyutunu tanmlar. n-
ceki blmlerde bahsedildii gibi yazlmlarn amac kullancdan ald veriyi ileyip saklamak ve
istenildiinde kullancya sunmaktr. Kullancdan alnan veriler, bilgisayarn geici hafzasnda
(RAM) ksa sreli olarak saklanr. Verilerin sakland bu alanlara deiken (variable) diyoruz.

Gerek hayattaki verileri incelediimizde verilerin trlerine gre snflandrldklarn grrz. r-


nein bir lig takviminde takmlarn isimleri ve puanlar vardr. Takmlarn isimleri szel bir veri ie-
rirken puanlar saysal bir veri ierir ve puan bilgisi zerinde matematiksel ilemler uygulanabilir.

Veriler zerinde gerekli, ilemlerin yaplabilmesi iin deikenlerin trlerinin belirtilmesi gerekir.
rnein bilgisayarmzda kesirli saylarn kullanlaca daire alan hesaplamas gibi bir problem
zeceksek girdilerin trn belirtmemiz gerekir. C#ta kesirli saylar iin double veri tipi bulun-
maktadr.
Deikenler ve Veri tipleri 47

Deikenlerin geici hafzada (RAM) tutulduundan bahsetmitik. Dolaysyla tanmladmz her


deiken geici hafzada yer kaplamaktadr. Bu yzden yazlm gelitiriciler kullancnn RAMini
tasarruflu kullanmak zorundadr. nk yazacamz uygulamann alaca bilgisayarda sade-
ce bizim uygulamamz almayacaktr. Uygulamamzn performans ve kullancnn refah iin en
uygun veri tipini semek son derece nemli bir kstastr. rnein niversite notu hesaplayan bir
program yazdmz dnelim. renci notlar maksimum 100 olabileceinden bu veri iin 0 ile
255 aras tam saylar tutabilen byte deikeni uygun olacaktr. Bu veri tipi, bilgisayarn RAMinde
8 bitlik bir yer tutacaktr. Ayn ii int veri tipi ile de yapsaydk sonu doru kacakt ancak bu sefer
bilgisayarn RAMinde 32 bitlik yer igal edecek ve 4 kat fazla yer kaplayacaktk. Bu deerler, k-
k ve nemsiz gibi grnebilir ancak yazacanz uygulamada tanmlayacanz deikenlerin
saysn ve ayn anda bilgisayarda alan dier yazlmlarn saysn dnp bir hesap yapt-
mzda, deiken tanmlarken titiz davranlmas gerektii ortaya kar.

nce C#ta deikenlere atayabileceimiz veri tiplerini tanyalm;

Tamsaylar
Tamsaylar

Tip Bit Deer Aral

byte 8 0dan 255e

sbyte 8 -128den 127ye

short 16 -32,768den 32,767ye

ushort 16 0dan 65,535e

int 32 -2,147,483,648den 2,147,483,647ye

uint 32 0dan 4,294,967,295e

long 64 -9,223,372,036,854,775,808de 9,223,372,036,854,775,807ye

ulong 64 0dan 18,446,744,073,709,551,615e

Grdnz gibi her veri tipinin iaretli ve iaretsiz versiyonlar Int16, Int32, Int64 .NET veri tiple-
ridir. Visual C# dilindeki karlk-
mevcut. Aralarndaki fark verilerin tutulduu bitlerde ilk bitin 0 lar short, int, long veri tipleridir.
veya 1 almas durumudur.

Ondalk Saylar
Ondalk Saylar

Tip Bit Deer Aral

float 32 1.5E-45 ile 3.4E+38

double 64 5E-324 ile 1.7E+308

decimal 128 1E-28 ile 7.9E+28

.NETte ondalk tipli veriler iin float ve double kullanlr. Tek duyarlkl saylar iin float, ift duyar-
lkl saylar iin ise double kullanlr.
48 Blm 4

Bir dairenin alann hesaplanmas gibi ondalk saylar kullanlacak ilemlerde float ve double veri
tipleri kullanlabilir. Ayn ekilde trigonometrik ilemlerde de ondalk say kullanld iin bu veri
tipleri kullanlabilir.

Duyarll fazla matematiksel ilemlerde ve parasal ilemlerde ondalk saylarda yuvarlama i-


lemleri sonucunda baz hatalarla karlalr. Bu ilemlerde sonucu en doru hesaplayabilmek iin
geni ondalk saylar tutan deikenlere ihtiya vardr. .NETte bu gibi ilemler iin decimal veri
tipi mevcuttur ve 28 ondalk basamakl bir ifadeyi tutabilir.

Metinsel fadeler
Metinsel fadeler

Tip Bit Deer Aral

char 16

string 20+(n/2)*4

char veri tipi sadece tek bir karakter ierebilir. C#, dier dillerde olduu gibi 8 bitlik alanlar kullan-
maz onun yerine Unicode (Evrensel Kod) dediimiz karakter tipi kullanlr ve 16 bit deerindedir.
Dolaysyla 65,535 farkl karakteri temsil edebilir. Bu ince gibi kark dillerin dahi desteklenme-
sini salar.

string veri tipi ise birden fazla karakter deeri tutmak iin kullanlr. Bir isim, cmle, adres, makale
gibi uzun verileri tutmak iin kullanlr. Hafzada tuttuu yer ise bir forml ile belirlenir:

20+(n/2)*4

n burada string ierisinde tutulan karakter saysn temsil eder. rnein stanbul verisi iin haf-
zada 20 + ( 8 /2 ) * 4 = 36 bitlik alan kullanlr.

String, dier veri tiplerinden yap bakmndan olduka farkldr. lerleyen derslerimizde renece-
iniz referans tipinde bir deikendir. Bunun anlam verinin hafzada ayrlan bir yerde deil de onu
temsil eden baka alanlarda tutulduudur.

lkokul derslerimizde rendiimiz gibi harfler kelimeleri oluturur, kelimelerde cmleleri. Ayn e-
kilde charlar da stringi olutururlar. Yine ilerleyen derslerde reneceiniz dizi kavram ile ifade
etmek gerekirse string bir char dizisidir. Eski programclar metinsel ifadeleri tutmak iin char dizisi
tanmlard ve bunu her metinsel ifade iin gerekletirmek tam anlamyla bir ikence idi.

Mantksal fadeler
Mantksal fadeler

Tip Bit Deer Aral

bool 16 true-false

bool veri tipi sadece 2 deer alabilir, true ya da false. bool veri tipi sayesinde deikenleri man-
tksal olarak tanmlayabiliriz. Mantksal ifadeler daha ok kesin deerler iin kullanlr, evet-hayr,
var-yok, ak-kapal, doru-yanl gibi. rnein, rencinin devini yapp yapmadn tutacak bir
deiken tanmlayalm ad da odevYapildiMi olsun, eer devini yapm ise deeri true deilse
false yaparz.
Deikenler ve Veri tipleri 49

//deiken ilk tanmladnda deer verilmez ise false deerini


alr.
bool odevYapildiMi;
//daha sonradan deeri deitirilebilir.
odevYapildiMi = true;

k Dizisi
C# dilinde metinsel ifadelerden string veri tipini kullanrken, baz belli bal karakterleri kullanama-
yz. Bunun sebebi bu karakterleri C# dilinin de kullanyor olmasdr. rnein ift trnak. Bununla
birlikte bazen alt satra gemek de isteyebiliriz. te bu durumlarda string ifadeler iinde Escape
Squence denen k dizileri kullanmalyz.

Karakter Aklamas
\ Tek trnak
\ ift Trnak
\\ Ters bl
\0 Null
\a Uyar (Alert)
\b Gerisilme (Backspace)
\f Sayfa leri (Form Feed)
\n Satr Sonu (New Line)
\r Satr Ba (Carrige Return)
\t Yatay Sekme (Tab)
\v Dikey Sekme (Verical Tab)

rnek kullanmlar:

string text = Bilgeadam \bilgi\ teknolojileri.;


Bilgeadam bilgi teknolojileri.

string text = Bilgeadam \nbilgi teknolojileri.;


Bilgeadam
bilgi teknolojileri.

string text = Bilgeadam \tbilgi teknolojileri.;


Bilgeadam bilgi teknolojileri.
Tip Dnmleri

Deikenlerle alrken bir tipteki deeri, farkl bir tipteki deikene atama ihtiyac duyabilirsiniz.
Bu ilem ok yaygn olarak kullanlr. .NET Framework iki tr tip dnmn destekler, kapal
dnm (implicit conversion) ve ak dnm (explicit conversion). Kapal dnmde, tip d-
nm ilemi tamamen .NET Frameworke braklrken, ak dnmde net bir ekilde deerin
hangi tre dntrlecei belirtilir.

1 int Toplam;
2 byte adet = 5;
3 Toplam = adet;
50 Blm 4

Bu rnekte tip dnm 3 nolu satrda gerekleiyor. Sa taraftaki deikenin deeri sol taraf-
taki deikenin tipine yani int tipine evriliyor ve Toplam adl deikene atanyor. Tipler uyumlu
olduundan, yani int veri tipi, byte verit tipinin alabilecei deerleri desteklediinden, sistem evir-
me ilemini otomatik yapar. Buna kapal dnm (implicit conversion) denir.

1 int i;
2 double de = 10.56;
3 i = de;

Burada ise 3 nolu satrda hata oluacaktr. nk long veri tipi kendisinden daha kk olan int
veri tipine kapal olarak evrilemez. C#ta tm tipler birbiri ile uyumlu deildir. Bu tr durumlarda
kapal tip dnm yaplamaz. Uyumsuz tipler arasnda atama ilemi tip atamas (cast) ile yap-
lr. Buna da ak dnm (explicit conversion) denir. Bu da deeri evrilecek deikenin nne
parantez ierisinde tip yazlarak salanr. rnein, aadaki rnekte, byte veri tipindeki adet
deikeninin deerinin, int veri tipine evrilerek Toplam deikenine atanaca belirtilmitir.

Toplam = (int) adet;

Byte tipindeki bir deiken deikenin deeri ne olursa olsun, inte evirebilir ama tersi bir durum
sz konusu olmadndan, yani int veri tipinin alabilecei tm deerler byte veri tipine evrileme-
yeceinden, evrilecek tip mutlaka belirtilerek tip atamas yapmak gerekir.

1 byte yol;
2 byte zaman = 5;
3 byte hiz = 10;
4 yol = (byte)(zaman * hiz);

rnekte tanmlanm tm deikenler byte tipindedir ancak 4 nolu satrdaki tip atamas yaplmaz-
sa uygulamamz derleme hatas verecek ve derlenmeyecektir. Hatann sebebi, byte deikenlerin
arpmnn, int veri trnde sonu vermesidir. Veri tiplerinde byten alabildii maksimum deeri
hatrlaynz. Uygulama iki adet byte deikenin olas en byk deeri aldn dnp arpm
sonucunun yine bir byte deikende tutamayacana karar vererek sonucu int tipinde dndr-
mektedir. Ancak bir arpma ileminin sonucunun byten snrlarn gemediinden eminseniz ve
srarla sonucu byte deikende tutmak istiyorsanz, yukardaki gibi yol deikenine atama ilemi-
ni gerekletirirken, tip atamasn da yapabilirsiniz.

Aadaki tip dnm tablosu, kapal dnm hangi veri tipleri iin kullanabileceinizi gste-
rir,

Tip Dnebilecei Tip


sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal

short int, long, float, double, decimal


ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
long, ulong float, double, decimal
float double
char ushort, int, uint, long, ulong, float, double, decimal
Deikenler ve Veri tipleri 51

Ak ve kapal tip dnmlerinin yan sra System.Convert snf kullanlarak da tip dnmleri
yaplabilir.

1 double sayi1 = Convert.ToDouble(txtSayi1.Text);


2 double sayi2 = Convert.ToDouble(txtSayi2.Text);
3 double carpim = sayi1 * sayi2;
4 txtSonuc.Text = Convert.ToString(carpim);

rnekte txtSayi1, txtSayi2 ve txtSonuc TextBox temsil etmektedir. TextBoxn Text zellii
bilindii zere string veri tipinde deer tar.

Satr 1 ve 2de txtSayi1 ve txtSayi2 adl TextBoxlara girilen string deerler matematik ileminden
geirilmesi iin Convert.To yntemi ile double veri tipine dntrlr.

Satr 3te arpm ilemi yaplarak, kan sonu carpim adl double veri tipine sahip bir deikene
atanr.

Satr 4te ise carpim deikenin deeri, txtSonuc TextBoxnn Text zelliine atanabilmesi iin
string tipine dntrlr.

Satr 4te kullanlan Convert.ToString() yerine tm veri tiplerinin sahip olduu ToString() metodu
da kullanlabilir.

4 txtSonuc.Text = carpim.ToString();

Burada dikkat edilmesi gereken en nemli nokta, evrilmek istenilen deerin evrilecek tipe uyum-
lu olmasdr. Aksi halde uygulamanz o noktada hata retecektir. rnein:

double sayi = Convert.ToDouble(yirmiiki);

Grld zere yirmiiki yazs bir rakam deeri belirtmez. Trke olarak anlaml gelse de bilgi-
sayar iin bir anlam tamaz. Kod u ekilde olursa, bir hata alnmaz:

double sayi = Convert.ToDouble(22);

Baka bir rnek olarak tarih dntrme verilebilir:

DateTime dogumTarih = Convert.ToDateTime(6.5.1980);

Hata vermezken,

DateTime dogumTarih = Convert.ToDateTime(6.15.1980);


Tarih format iletim sisteminin Blgesel Ayarlarna (Regional and Lan-
Hata verecektir. 6.15.1980 tarihi ge- guage Options) gre deikenlik gsterebilir. Bu rnekte kullanlan bil-
erli deildir nk 15.ay yoktur. gisayarn Blgesel Ayarlarnn Trkiye (Turkish) olduu varsaylmtr.

Aadaki tablo, System.Convert snf kullanlarak yaplabilecek tip dnmlerini ksaca zet-
lemektedir,
52 Blm 4

Tip Dnm Aklama


Convert.ToBoolean() lgili tipi, bool tipine evirir.
Convert.ToByte() lgili tipi, byte tipine evirir.
Convert.ToChar() lgili tipi, char tipine evirir.
Convert.ToDateTime() lgili tipi, datetime tipine evirir.
Convert.ToDecimal() lgili tipi, decimal tipine evirir.
Convert.ToInt32() lgili tipi, int tipine evirir.
Convert.ToString() lgili tipi, string tipine evirir.

Tip dnmleri ile ilgili ha-


talarla nasl baa kacanz
Blm 5te ele alnmtr.

Aritmetik Operatrler
Aritmetik Operatrler

+ Toplama

- karma

* arpma

/ Blme

% Blmden Kalan

++ Arttrma

-- Eksiltme

Toplama ( + ) , karma ( - ) , Blme ( / ), arpma ( * ) matematiksel ifadelerde nasl alyorsa


C#ta da yle alr.

Blmden Kalan
Blme ( / ) ilemi kalansz bir sonu vermektedir. 10/3n sonucu 1 dir. Kalan bulmak iin ise
Blmden kalan (mod) ( % ) ifadesinden yararlanlr.

int bolunen = 10;


int bolen = 3;
int bolum;
int kalan;
bolum = 10 / 3;
kalan = 10 % 3;

Burada bolum 3, kalan ise 1 deerini alacaktr.

Arttrma ve Eksiltme
Genellikle programlama dillerinde bir deikenin deerini 1 arttrmak veya 1 eksiltmek iin u yola
bavurulur:
Deikenler ve Veri tipleri 53

x = x +1;
y = y -1;

Ancak C#ta bunun iin daha ksa bir yol kullanlmtr:

x+=1;
x-=1;

veya daha farkl olarak u yntem de kullanlabilir:

x++;
y--;

Bu ifade de bir nceki rnektekiyle ayn ii yapar. Ancak baz durumlarda arttrma veya eksiltme
ifadelerinin deikenin sol tarafndan kullanldnda grlr:

++x;
--y;

imdi bir rnekle iki kullanm arasndaki fark grelim:

1 int sene = 2000;


2 int gelecekSene;
3 gelecekSene = sene++;

Sonu

sene = 2001

gelecekSene = 2000

Burada sene deikeninin deeri 2001dir. nk nc satrda sene++ ifadesiyle deerinin 1


arttrldn gryoruz. gelecekSenenin deeri ise 2000 kalmtr nk arttrma ilemi atama
ileminden sonra gelmitir.

1 int sene = 2000;


2 int gelecekSene;
3 gelecekSene = ++sene;

Sonu

sene = 2001

gelecekSene = 2001

Bu rnekte ise 3 nolu satrda bir fark gryoruz. Arttrma iareti deikenden evvel yazlm. Art-
trma iareti deer atamalarnda deikenden evvel eklenirse nce arttrma ilemine yaplr sonra
deikenin deeri atanr.

Lab 4.1 Personel Formu


Bu rneimizde eitli kontrolleri kullanarak basit bir bilgi formu oluturup kullancnn girdii do-
um tarihinden ya hesaplanacaktr.
54 Blm 4

Formun tasarm ekil 4.3teki gibi olacaktr.

ekil 4.3

1. Yeni bir Windows projesi an ve ismini personelFormu olarak deitirin.


2. Tablo 4.3teki kontrolleri formunuza ekleyin.

Tablo 4.3
Name Text
Label lblAd Adnz
Label lblSoyad Soyadnz
Label lblCinsiyet Cinsiyetiniz
Label lblDogumTarihi Doum Tarihiniz
Label lblAdres Adresiniz
Label lblSehir liniz
Label lblYas
TextBox txtAd
TextBox txtSoyad
TextBox txtAdres
RadioButton rdbErkek Erkek
RadioButton rdbBayan Bayan
DateTimePicker dtpDogum
ListBox lboxSehir
Button btnGonder Formu Gnder

Bunlara ek olarak, txtAdres adl textboxn Multi-


lblYas adl Label kontrolnn Text zellii bo olduu Line zelliini true yapnz. lboxSehir adl ListBox
iin Form zerinde grnmemektedir. lblYas kontrol
dtpDogum adl kontroln altnda yer almaldr. kontrolnn Items zelliine Istanbul ,Ankara
ve Izmir i ekleyin.
Deikenler ve Veri tipleri 55

3. Formu dolduran kii DateTimePicker kontrolnden doum tarihini setii anda lblYas adl
Label kontrolnn Text zelliine kiinin ya yazlacak.
4. dtpDogum adl kontroln ValueChanged olayna ift tklayn ve dtpDogum_ValueChanged
metoduna ya hesaplayan kodlar yazn:

private void dtpDogum_ValueChanged(object sender, EventArgs e)


{
//Bugnn yln alp simdikiYl adl int tipindeki deikene
eitliyoruz.
int simdikiYil = DateTime.Now.Year;
//DateTimePicker a girilen tarihin yln alp dogumYili
adl int tipindeki deikene eitliyoruz.
int dogumYili = dtpDogum.Value.Year;
int yas = simdikiYil - dogumYili;
//Kullancnn yan lblYas adl labela yazyoruz.
lblYas.Text = yas.ToString()+ yandasnz;
}

Uygulamay altrp gzlemleyin.

Lab 4.2 Global Deiken


Bu rneimizde deikenlerin kapsamn inceleyeceiz. ncelikle bu konudaki bir cmleyi hatr-
layalm:

deikenler iinde bulunduklar scope (alan) ve alt alanlarda geerlidir.

Formun tasarm ekil 4.4teki gibi olacaktr.

ekil 4.4

1. Yeni bir Windows projesi an ve adn DegiskenlerinKapsami olarak deitirin.


2. Tablo 4.4teki kontrolleri formunuza ekleyin.

Tablo 4.4
Name Text
Label lblSayac 0
Button btnArttir +
Button btnEksilt -
56 Blm 4

3. nce Form1 Class ierisinde sayac deikenini tanmlayn.

int sayac;

4. imdi btnArttir isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnArttirin
Click olayna gerekli kodlar ekleyin:

private void btnArttir_Click(object sender, EventArgs e)


{
sayac++;
lblSayac.Text = Convert.ToString(sayac);
}

Bu kod nce sayac deikeninin deerini bir arttrr ve sonucu lblSayac isimli Label kontrolnn
Text zelliine tip dnm yaparak eitler.

5. imdi btnEksilt isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnEksiltin
Click olayna gerekli kodlar ekleyin:

private void btnEksilt_Click(object sender, EventArgs e)


{
sayac--;
lblSayac.Text = Convert.ToString(sayac);
}

Bu kod nce sayac deikeninin deerini bir eksiltir ve sonucu lblSayac isimli Label kontrolnn
Text zelliine tip dnm yaparak eitler.

btnArttra bastmzda sayac deikenimiz bir artyor, btnEksilte tkladmzda ise bir azalyor.
Grld gibi her iki metodun ierisinde ayn deikeni kullanabiliyoruz. nk sayac deikeni
bu metotlarn bir st seviyesinde tanmland.

Lab 4.3 Topla Birletir


Bu rneimizde + operatrnn saysal ve metinsel veri tiplerine gre nasl bir davran gster-
diini inceleyeceiz.

1. Yeni bir Windows projesi an ve adn ToplaBirlestir olarak deitirin.


2. Formunuza Tablo 4.5teki kontrolleri ekleyin.

Tablo 4.5
Name Text
TextBox txtSayi1
TextBox txtSayi2
TextBox txtSonuc
Button btnTopla Topla

3. btnTopla adl Button kontrolne ift tklayp toplama ilemi iin gerekli kodlar yazn:

private void btnTopla_Click(object sender, EventArgs e)


{
Deikenler ve Veri tipleri 57

txtSonuc.Text = txtSayi1.Text + txtSayi2.Text;


}

4. Uygulamay altrn. txtSayi1e 10 ve txtSayi2ye de 20 deerini girip Topla dmesine ba-


sn. Sonu 1020 olacaktr. Bunun sebebi (+) operatr iki string ifade olduunda toplama
yapmak yerine birletirme ilemi yapmasdr.
5. imdi btnTopla adl Buttonnun Click olayndaki kodu u ekilde deitirin:

private void btnTopla_Click(object sender, EventArgs e)


{
int sayi1 = Convert.ToInt32(txtSayi1.Text);
int sayi2 = Convert.ToInt32(txtSayi2.Text);
int toplam = sayi1 + sayi2;
txtSonuc.Text = toplam.ToString();
}

Uygulamay tekrar altrn ve ayn saylar tekrar girin. Topla dmesine tkladnzda sonucun
30 olduunu greceksiniz. Bunun sebebi (+) operatrnn saysal deerler iin toplama ilemi
yapyor olmasdr.

devler
Bir bankann kredi blmnde alanlarn iini kolaylatracak bir uygulama yazn. Uygulama
kullancdan ekilmek istenen kredi miktarn, faiz oran ve vadeyi alp mterinin deyecei faiz
miktarn hesaplayacaktr.

Uygulamann grnts ekil 4.5teki gibi olacaktr.

ekil 4.5

Faizi hesaplamak iin kullanacamz forml:

Faiz = ( Ana Para x Faiz Oran x Gn ) / 360


5
Hatalar ve
Hatalarn
Giderilmesi
5 Hatalar ve Hatalarn
Giderilmesi
Giri

Hatalar

Lab 5.1 Ya Hesaplama

Lab 5.2 Dardan Uygulama altrma

Lab 5.3 Gei Notu Hesaplama

devler
Hatalar ve Hatalarn Giderilmesi
Bu blmde uygulama gelitirirken karmza kan hata eitlerini, bu hatalarn yakalanma ve
giderilme srelerini reneceksiniz.

Bu blm tamamlandktan sonra:

Hata kavramn anlayacak,


Derleme hatalar, alma zaman hatalar ve mantksal hatalar renecek,
Try..catch yapsn anlayacak,
Visual Studionun hata ayklamada kullancya nasl yardmc olduunu reneceksiniz.

Giri
Yazlm dnyasnda kesin olan bir ey varsa, o da hatasz kod yazlamayacadr. Uygulama-
y gelitiren yazlmcnn deneyimi ne olursa olsun, projenin bykl ne olursa olsun hatalar
kanlmazdr. Hatalar, yazlmcnn yanllkla yazd bir koddan, daha nce ngremedii bir
durumdan veya kullancdan kaynakl olabilir. Yazlm gelitirirken hatalardan korkulmamas gere-
kir. Korkulacak olan durum, bu hatalarn, uygulama piyasa srldkten sonra ortaya kmasdr.
Yazlm gelitirirken uygulamann verdii her hatay zerek, daha salkl bir uygulama ortaya
karmak yazlmcnn temel grevlerinden bir tanesidir.

Kullancya daha salkl bir rn verebilmek iin yazlm firmalar, piyasaya srecekleri uygulama-
larnn hatalarn, nce kendi test mhendisleri sayesinde bulur ve dzeltir. Daha sonra bu uygu-
lamann beta srmlerini karp son kullanclardan gelecek hata bildirimlerini alrlar ve o hatalar
da giderirler. Bu uygulama gelitirme sreci de bazen yeterli olmaz, srasyla CTP (Community
Technology Preview) srmlerini, daha sonra da RC (Release Candidate) srmlerini karrlar.
Tm bu srmler sonucu kullanclardan gelen hata bildirimleri dorultusunda, son hatalar da
ayklayp rn piyasaya karrlar. Hatta byk lekli programlarda bunlar bile ou zaman
tm hatalar arndrmak iin yeterli olmaz; hatalar gidermek iin uygulamalara patch (yama) veya
service pack karrlar.

ekil 5.1
62 Blm 5

Yazlm jargonunda hatalara bug, hata ayklama ilemine ise debugging denir. Aslnda bug ve
debug kelimelerinin, hata ve hata giderme yerine kullanlmas olduka gariptir. nk bug ingiliz-
ce bcek, debuging ise bcekten arndrmak demektir. Bu kelimelerin neden yazlm dnyasnda
kullanldnn ilgin bir hikayesi vardr. 9 Eyll 1947de Amerikada Mark II adl askeri bir bilgi-
sayar durup dururken bozulur. Mark II, bir oda byklnde, birok elektronik paradan oluan
ve amac sadece matematik ilemleri yapmak olan bir bilgisayardr. Uzun aratrmalardan sonra
teknisyenler sonunda bozukluun sebebini bulurlar: Devrelerin arasna skp kalan, kendiyle
beraber, devreleri de kmre dndren bir bcek. Bcein devreden alnmas ve gerekli tamiratn
yaplmasndan sonra Mark II tekrar sorunsuz ekilde almaya balar. Mark IIden sorumlu asker
Grace Murray Hopper, bilgisayarn gnlk rapor defterine bcei bantla yaptrp u notu der:
First actual case of bug being found. (Bcein ilk vakas bulunmutur.). O tarihten bu tarihe
bilgisayarlarda meydana gelen hatalara bug, bu hatalar zme ilemine de debug denir. O
defter sayfas gnmzde, National Museum of American History mzesinde sergilenmektedir.
(Bcein ve Grace Hoppern resimlerini http://en.wikipedia.org/wiki/Admiral_Grace_Hopper ad-
resinde bulabilirsiniz.)

Uygulamalarnz hatasz (bu durum imkansz olduuna gre en az hataya sahip demek daha
doru olur) bir ekilde kullancya sunmak bir yazlm gelitirici olarak temel grevlerinizden bir
tanesidir. Bu blmde hatalar nasl bulacanz, daha da nemli olarak bu hatalar nasl gide-
receinizi greceksiniz.

Hatalar
Yazlm dnyasnda karlalan hata tipleri e ayrlr:

Derleme hatalar
alma zaman hatalar
Mantksal hatalar
Derleme hatalar, byk ounlukla kodlarn yanl yazlmasndan kaynaklanmaktadr. Tanmlan-
mayan bir deikenin kullanlmas, satr sonuna noktal virgl konulmamas, eksik ssl parantez
kullanm gibi. Bu hatalar, bulunmas en kolay hatalardr. nk kodlar derlenmez ve Visual Stu-
dio size bu tip hatalarn nerede olduunu tek tek gsterir.

alma zaman hatalar ise ounlukla kullanc yznden oluan hatalardr. rnein bir
TextBoxta yazlan deeri, kodunuz tarih (DateTime) tipine dntrmek isteyebilir. Kullanc eer
geerli bir tarih girmezse programnz hata verecektir. Bu tip hatalar bu blmde greceiniz try..
catch yaps ile zlebilir.

En zor bulunan hatalar ise mantk hatalardr. nk bu hatalar olutuunda hibir ekilde hata
mesaj almazsnz. Sadece kodlar istediiniz gibi sonu vermez, o kadar. rnein dviz kurlar ile
ilem yapan bir uygulamanzn da, kullanclarnz hesaplamalarn bazen yanl ktn size sy-
leyebilir. Bu hata bir satrda yanllkla art iareti yazmak yerine eksi iareti yazmaktan da meyda-
na gelebilir, internetten dviz kurlarn ekerken yanllkla dolar yerine avro kurunu ekmenizden
de kaynaklanabilir. Belki daha baka akla hemen gelmeyecek sorunlardan da kaynaklanabilir. Bu
durumda yzlerce hatta binlerce kod satr arasndan hatann nereden kaynaklandn bulmanz
gerekir. Kulaa imkansz gibi gelse de, neyse ki Visual Studio bize bu durumlar iin olduka yar-
dmc olur.

Derleme Hatalar
Derleme hatalarn programlama dilinin kurallarna uymayan (Szdizimi Hatas, Syntax Eror) veya
derleyicinin her durumda hata vermesi kesin olan (Derleyici Hatas, Compiler Error) kodlar yazl-
dnda gerekleir. Szdizimi hatasna rnek olarak unu verebiliriz:

C# iin deiken tanmlama kural yledir:


Hatalar ve Hatalarn Giderilmesi 63

[Geerli Bir Veri Tipi] [Deiken Ad];

Ayrca deiken adnn rakamla balamamas, boluk veya zel karakter barndrmamas gibi
tanmlama ile baka kurallar da vardr. Eer bu kurallardan birine uyulmazsa hata alnacaktr.
rnein:

int deneme //satr sonunda noktal virgl yoktur.


int44 deneme; //int44 diye bir veri tipi yoktur.
int 123deneme; //deiken adlar rakam ile balayamaz.

Derleyici hatasna rnek olarak da unu verebiliriz:

int deneme;
deneme = Yaln;

Burada sz dizimi hatas yoktur. lk satrdaki deiken tanmlamas dorudur. kinci satrda ise bir
deikene deer atama sz dizimi dorudur. Ancak int veri tipi bekleyen bir deikene string bir
deer atand iin derleyici ikinci satrda hata verecektir.

Derleme annda, kodunuzun mantkl bir ekilde alp almad kontrol edilmez; sadece ve sadece kodunuzun
programlama dilinin szdizimine uyup uymad ve tr dnmlerinin doru yaplp yaplmad kontrol edilir.
Bu yzden yap olarak doru ancak istenildii ekilde almayan projelerinizde derleme hatas almazsnz.

Eer kodunuzda derleme hatas yapmsa-


nz, uygulamanz altrmak istediinizde
Visual Studio, ekil 5.2deki hata penceresini
gsterecektir.
Buradaki mesajn Trkesi u ekildedir: Uy-
gulamanzda derleme hatalar bulunmutur.
ekil 5.2
Devam etmek ve en son baarl ekilde der-
lenen uygulamanz altrmak ister misiniz?
Bu pencerede Yes (Trke iletim sistemlerinde Evet) dmesine tklarsanz programnz o
anki haliyle deil, var ise en son dzgn alt haliyle alacaktr. rnein, ekrana sadece
bir mesaj kutusunda Merhaba yazs gsteren bir uygulama yazdnz. altrdnz ve bir sorun
kmad. Uygulamanz tam istediiniz gibi alt. Daha sonra uygulamanza, internete balanp,
stanbulun hava durumunu ekip, bunlar kullancya gsteren kodlar eklediniz. Bu ilemleri ya-
parken de formunuza TextBox, ProgressBar, ListBox gibi birok kontrol eklediniz. Ancak deiken
tanmlanan bir satrda yanllkla satrn sonuna noktal virgl koymay unuttunuz. Uygulamanz
grmek iin altrdnzda, derleme hatanz olduu iin ekil 5.2deki hata penceresini gre-
ceksiniz. Eer Yes seenei ile devam ederseniz yeni oluturduunuz formu ve hava durumu
grmek yerine, daha nceki uygulamanz yani ekranda size sadece Merhaba diyen bir mesaj
kutusu greceksiniz. nk yeni yazdnz kodlarda derleme hatas olduu iin yeni kodlarnz
deil, bir nceki hatasz kodlarnz alacaktr. Buradan u sonucu karabilirsiniz; eer binlerce
satrlk programnzn sadece bir yerinde derleme hatas yaparsanz, bundan sadece o kodun
dahil olduu blm deil (rnein hatal satrn olduu bir dmenin tklanma olay) tm proje
etkilenir. Bu sebeple projelerinizde hibir ekilde derleme hatas bulunmamaldr.

ekil 5.2deki mesaj knca asla Do not show this dialog seeini iaretleyip Yes dmesine tklamayn. Bu durum, derleme
hatalarna sahip bir uygulama balatlmaya alldnda size uyar karmadan otomatik olarak eski alr srm gstermesine
neden olur. Eer byle bir durumla karlamsanz tekrar eski ayarlara getirmek iin Visual Studionun Tools mensnn altn-
daki Options seeneini tklayn. Karnza kan listeden Projects and Solutions dmn kenarndaki art iaretine tklayarak
an ve Build and Run seeneini sein. Sa tarafta alan ekrandaki On Run, when build or deployment errors occur: yazl
comboboxta Prompt to launch seeneini seip, OK dmesine tklayn.
64 Blm 5

Eer ekil 5.2deki pencerede No dmesine tklarsanz, ekil 5.3te grlen Error List pen-
ceresi ortaya kacaktr. Bu pencerede uygulamada geen tm derleme hatalarnn bir listesi
sunulur.

ekil 5.3

Her satrda, hatann tanm, hangi dosyada, satrda, stunda ve projede olduu gsterilir. rne-
in ekil 5.3teki hata satr tam olarak unu ifade eder: Hatalar (Project) adl proje ierisindeki
Form1.cs (File) adl kod dosyasnn 26. (Line) satrnn 21. (Column) karakterinde, int veri tipi
bekleyen bir deikene string bir deer atanmaya allm. (Description)

Sizin iin gereken en nemli stun tanm (description) stunudur. Dier stunlardaki bilgiler sizi
ok fazla ilgilendirmez. nk hatay grebilmek iin ilgili projedeki, ilgili dosyay ap, satr ve
stun saymazsnz. Bunu Visual Studio sizin iin otomatik olarak yapar. Hatay grmek iin, Error
List penceresindeki hatay gsteren satra ift tklamanz yeterlidir. Visual Studio imleci hatann
olduu noktaya konumlandrr.

Ayrca ekil 5.4te greceiniz gibi hatann olduu yerin alt izilir.

ekil 5.4

Hatal yerdeki alt izginin rengi hatann tipini de belirtir. Krmz, szdi-
zimi hatalarnda, mavi derleyici hatalarnda kullanlr. Eer alt izginin
rengi yeil ise ilgili yerde hata yoktur, sadece bir uyar vardr.

Ayrca fare ile alt izili yerin zerinde biraz beklerseniz hata mesaj ekil 5.5teki gibi grlecektir.

ekil 5.5

Projenizde kod yazmay bitirdikten sonra derleme hatas olup olmadn kontrol etmek mantkl
bir i deildir. Hatalar, kod yazlrken sk aralklarla kontrol edilmelidir. Projeyi test etmek iin her
seferinde altrmak bir sre sonra tam bir ikence olur. nk ama sadece projede derleme
hatas olup olmadn grmektir. Ancak altrlarak test edilmeye kalklrsa, hata varsa ekil
5.2deki pencere karnza kar ve buradan No dmesine tklayp hatalar grrsnz. Eer
hata yoksa uygulama bou bouna alr. Hele bir de ilk alta uzun sren bir ilem yapyorsa
(internetten bilgi indirmek, veritabanna balanp veri ekmek gibi) bo yere vakit kaybederseniz.
Derleme hata mesajlarn grmek iin uygulamay altrmak yerine derlemeyi (Build) tercih etme-
lisiniz. Derleme ilemini ya Visual Studionun Build mens altndaki Build [Proje Ad] seeneini
tklayarak ya da CTRL+Shift+B ksayolu sayesinde gerekletirirsiniz. Bu yzdendir ki deneyimli
.NET yazlmclarnn
klavyelerindeki CTRL,
Yazlm gelitirme ile yeni tanmsanz her yazdnz satrdan sonra CTRL+Shift+B kom-
binasyonunu kullanarak proje derlemeyi alkanlk haline getirmelisiniz. Zaman ierisinde Shift ve B tular dier
kazandnz deneyimle beraber derlemelerin skln biraz daha azaltabilirsiniz. tulara nazaran daha
fazla anmtr. Eer
derleme ilemi baar ile
Hatalar ve Hatalarn Giderilmesi 65

gerekleirse Visual Studionun en alttaki Status Barnn solunda Build Succeeded (Derleme
baar ile gereklemitir.) yazs grnr.

Ska Alnan Derleme Hatalar


Bu blmde ska alnan derleme hatalarnn nedenleri ve zmleri zerinde durulmutur. rnek
zerinde gsterilen kodlar sadece hataya odaklanabilmek iin sadeletirilmitir. Burada anlat-
lanlar dnda bir hatann daha birok nedeni
ve zm olabilir. Burada amalanan, yazl-
ma yeni balayan kiilerin en ok karlat
ekil 5.6
hatalarn nedenlerini ve zmlerini sunarak,
onlara yol gstermektir.

X expected

Hatann Muhtemel eitleri:

; expected

} expected

) expected

Hatann Muhtemel Nedenleri:

Hata mesajnda X olarak gsterilen karakterin kullanm unutulmutur.

Hatann Muhtemel zmleri:

ekil 5.6da grlen satra ift tklanlr. mlecin konumland yere X olarak belirtilen karakter
yazlr.

rnek:

int sayac //satr sonunda ; yok. ; expected hatas alnr.

Cannot implicitly convert type X to Y

ekil 5.7

Hatann Muhtemel eitleri:

Cannot implicitly convert type string to int

Cannot implicitly convert type string to System.DateTime

Cannot implicitly convert type decimal to bool

Cannot implicitly convert type string to System.Windows.Forms.TextBox

Hatann Muhtemel Nedenleri:

Y veri tipi bekleyen bir deikene X veri tipinde bir deer atanmaya allmtr.
Form zerindeki bir kontroln zelliine deer atanmaya allrken sadece kontroln ad
yazlmtr.
66 Blm 5

Hatann Muhtemel zmleri:

Deikenin bekledii veri tipinde bir deer girmek ya da uygunsa ConvertTo, Parse gibi yn-
temlerle tr dntrme ilemi gerekletirmektir.
Kontroln sadece ad yerine kontroln zellii yazlr.
rnek:

int sayac;
sayac = textBox1.Text;
int yas;
yas=on yedi;

Burada textBox1in Text zellii string veri tipindedir. Bu deer, int veri tipindeki sayac deikeni-
ne atanmak istendiinde bu hata meydana gelir. kinci bir hata da yas adl int veri tipindeki dei-
kene on yedi string deerini atamaya almaktr. Bu hatalarn zm u ekilde olacaktr:

int sayac;
sayac = Convert.ToInt32(textBox1.Text);
int yas;
yas=17;

Hatann ikinci trne rnek olarak u verilebilir. Bir formda textBox1 adnda bir textbox ve com-
boBox1 adnda bir combobox olsun. Yaplmak istenen textBox1 de Yaln yazs karmak ve
comboBox1in elemanlarna da Emre yazsn eklemektir.

textBox1 = Yaln;
comboBox1 = Emre;

Sadece kontrol adlar kullanld iin bu kodlar hataldr. Doru yazm u ekildedir:

textBox1.Text = Yaln;
comboBox1.Items.Add( Emre);

Invalid token X in class, struct, or interface member declaration

ekil 5.8

Hatann Muhtemel eitleri:

Invalid token ( in class, struct, or interface member declaration

Invalid token = in class, struct, or interface member declaration

Hatann Muhtemel Nedenleri:

Kod yazlmamas gereken bir scopea kod yazlmtr. Baz scope sadece deiken tanmlamay
kabul edip, dier tr kodlarda hata verir. Baz scopelar ise deiken tanmlama da dahil hi bir
kod yazmna izin vermez. ekil 5.9da bu scopelar gsterilmitir.
Hatalar ve Hatalarn Giderilmesi 67

ekil 5.9

Hatann Muhtemel zmleri:

Hata veren kod satr doru scopea tanmaldr.

rnek:

namespace Hatalar
{
public partial class Form4 : Form
{
MessageBox.Show(Merhaba);
private void button1_Click(object sender, EventArgs e)
{

}
}
}

Burada iaretli kod ekil 5.9da da grlecei gibi yanl bir scopea yazlmtr. Hatal satr u
ekilde tarsak hatay gideririz:

namespace Hatalar
{
public partial class Form4 : Form
{
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(Merhaba);
}
}
}
68 Blm 5

A namespace does not directly contain members such as fields or methods

(Bkz: Invalid token X in class, struct, or interface member declaration)

The name X does not exist in the current context

ekil 5.10

Hatann Muhtemel eitleri:

The name sayac does not exist in the current context

The name yas does not exist in the current context

The name maas does not exist in the current context

The name dogumTarih does not exist in the current context

Hatann Muhtemel Nedenleri:

Hata mesajnda X olarak belirtilen deiken tanmlanmamtr.


Hata mesajnda X olarak belirtilen deiken kullanmndan daha aada bir satrda tanm-
lanmtr.
Hatann Muhtemel zmleri:

Hatal deiken tanmlanmaldr veya tanmland satr kullanmndan st bir satra alnmaldr.

rnek:

public partial class Form1 : Form


{
private void button1_Click(object sender, EventArgs e)
{
sayac = 0;
}
}

Burada sayac adl daha nce tanmlanmayan bir deiken kullanlmtr. Ayn hata u kod blo-
unda da alnr:

public partial class Form1 : Form


{
private void button1_Click(object sender, EventArgs e)
{
sayac = 0;
int sayac; //kullanmdan sonra tanmlanm
}
}

Bu kodun doru yazm u ekilde olacaktr:


Hatalar ve Hatalarn Giderilmesi 69

public partial class Form1 : Form


{
//sayac deikeni burada da tanmlanabilirdi
private void button1_Click(object sender, EventArgs e)
{
int sayac;
sayac = 0;
}
}

Type or namespace definition, or end-of-file expected

ekil 5.11

Hatann Muhtemel eitleri:

Type or namespace definition, or end-of-file expected

Hatann Muhtemel Nedenleri:

Daha nce almam bir ssl parantez kapatlmtr. Baka bir deyile fazladan kapatma ssl
parantezi ( } ) kullanlmtr.

Hatann Muhtemel zmleri:

Fazla olan kapatma ssl parantezi silinir.


Doru satra ama ssl parantezi ( { ) eklenir.
rnek:

Burada iaretli satrdaki ssl parantez fazladr.

public partial class Form2 : Form

{
private void button1_Click(object sender, EventArgs e)
{

}
}
}

Doru yazm u ekilde olacaktr:

public partial class Form2 : Form


{
private void button1_Click(object sender, EventArgs e)
{
}
}
70 Blm 5

Hata Mesajlar Hakknda Daha Fazla Yardm


Bu blmde her hata mesaj ve o hata mesajlarnn nedenlerinin hepsi yer almamtr. Buradaki
hata mesajlar tanmlar, yazlma yeni balayanlar iin bir klavuz nitelii tama amac gtmek-
tedir.

Eer bu blmde ele alnan hatalardan daha farkl bir


Eer ssl parantez almsa fakat kapa-
tlmamsa } expected hata mesajn g-
hata mesaj alrsanz veya bu anlatmlar sizin probleminizi
rrsnz. zm iin (Bkz: X expected)
kapsamyorsa daha ayrntl bir yardm almalsnz. Blm
2de anlatlan Yardm Kullanmak bal size bu konuda
yol gsterecektir. Ayrca hata mesajlar hakknda MSDNden yardm almak iin Visual Studioda
bir ksayol mevcuttur. Hata listesi ekrannda, yardm almak istediiniz hata satrnn zerine sa
tklayp Show Error Helpi seerseniz bu hata ile ilgili MSDNin sayfasna ynlendirilirsiniz.

ekil 5.12

alma Zaman Hatalar


Hatalar her zaman derleme esnasnda bulunmazlar. Bazen kodlar, szdizimi ve derleyici hatas
almayacak ekilde doru yazld halde alrken koullara gre hata verebilirler.

Bu durumu u rnekle aklayabiliriz: Bir araba irketi araba retir ve mterilere satar. Arabalarn
retim bandndan sorunsuz ve alr olarak kmas, gnlk hayatta bu arabalarn her zaman
alaca anlamna gelir mi? Tabi ki gelmez. Peki, hangi sorunlar yaanabilir?

Mterilerden biri arabaya benzin yerine ay koyarsa araba almayacaktr.


Mterilerden biri arabay suyun ierisinde kullanmaya alrsa araba almayacaktr.
Hava scakl -40 dereceye derse araba almayacaktr.
Arabann yedek paraya ihtiyac olduu zaman, sat katalounda adresi verilen yedek para
dkkn yerinde yoksa araba almayacaktr.
Daha bu gibi birok problem saylabilir. Bu sorunlarn benzeri de yazdnz uygulamalarda sizin
banza gelebilir.

Kullanc tarih girmesi gereken bir TextBoxa rakam yazabilir.


Microsoft Office iin yazdnz bir eklenti, Office olmayan bir bilgisayarda altrlmaya al-
labilir.
Uygulamann alt bilgisayarda bir ilem iin yeterli bellek (RAM) olmayabilir.
nternet zerinden Merkez Bankasndan dviz kuru ektiiniz bir uygulamada Merkez
Bankasnn sunucusu o an iin almyor olabilir.

Bu tip hatalara alma Zaman Hatas denir. a-


Net Framework, alma zaman hatalarn, her za-
man deil sadece istisnai durumlarda olutuu iin lma zaman hatalar, uygulamalarn hatasz bir
exception (istisna) olarak adlandrlr. ekilde alt koullardan daha farkl koullarn
meydana gelmesiyle oluur.
Hatalar ve Hatalarn Giderilmesi 71

Uygulamay altran kullanclar, alma zaman hatas olutuunda ekil 5.13teki pencereyi
grrler.

ekil 5.13

Bu mesajda sadece hatann kaba bir tanm bulunmaktadr. ekil 5.13teki rnekte hata iin sade-
ce Input string was not in a correct format (Girilen yaz doru biimde deil) tanm verilmektedir.
Bu hatann hangi satrda olduu, hatann daha detayl bir aklamas gibi bilgiler yoktur. Details
(Detay) dmesine tklanrsa ekil 5.14teki gibi ok kark, kullanclarn, hatta yazlmclarn,
hibir ey anlamayaca yazlar ortaya kar.

ekil 5.14

Byle bir hata mesajn kullancnn grmesi, istenmeyen bir durumdur. Bu ekran yerine kullanc-
ya, gayet anlalr bir ekilde Ltfen geerli bir tarih giriniz gibi bir mesaj gsterilebilir.

Kullancnn grd bu sevimsiz pencere neyse ki sadece uygulama, ilgili exe dosyas zerin-
den altrldnda grlr. Visual Studioda proje zerinde allrken ayn hata daha farkl bir
pencere ile gsterilir.

ekil 5.15

ekil 5.15te de grld zere bu pencere daha yazlmc dostudur. Hata olan satr sar renk ile
iaretlenir. Hata penceresinin en stnde hata mesaj yer alr. Troubleshooting tips yazan alanda
ise bu hatann muhtemel zmleri yer alr. Bu zmlerden birine tklanldnda o hata ilgili
MSDN sayfas alr.

Ancak hatann bilinmesi tek bana bir zm salamaz. rnein bu senaryoda kullancnn gir-
dii veri sayya dntrlebilir olmad iin bu hata alnr. Bu sebepten tr kullancdan veri
alma kodu kaldrlamaz. Bu hatay zmek iin eitli yntemler uygulanabilir. rnein sadece
rakam kabul eden bir TextBox kullanlabilir veya bu satra gelmeden nce girilen deerin raka-
72 Blm 5

ma dntrlp dntrlmeyecei kontrol edilebilir. Ancak rnekte verilen kod ok basit bir
koddur. ok daha kark ve uzun bir kodda meydana gelebilecek aksaklklarn hepsi dnle-
meyebilir. Bu yzden, hangi olaslkta olursa olsun, bir hata olutuunda program durdurmayp,
kullancya anlalr bir ekilde hatay anlatan, belki de hata olutuunda yazlmcnn sonradan
inceleyebilmesi iin bir dosyaya bu hatalar yazan veya hatay e-posta olarak gnderen bir z-
me ihtiya olacaktr. Bu zmn ad try..catchdir.

try..catch
try..catch, uygulamada hata olutuunda yaplmas istenilen kodlarn yazld try ve catch isimli
bloklardan oluan bir yapdr. try blounda hata vermesi muhtemel kodlar yer alr. Eer bir hata
oluursa, uygulama hata oluan satrda durup hata vermez; bunun yerine catch blou ierisinde-
ki kodlar almaya balar. catch bloundaki kodlar altktan sonra uygulama hata oluan try
blou ierisinden deil, try..catch yaps altndaki kodlardan devam eder. Bylelikle uygulamamz
hata olusa bile salkl bir ekilde almaya devam eder.

try..catch yaps u ekildedir:

try
{
//Try Blou
//Buraya hata vermesi muhtemel kodlar yazlr
}
catch (Exception ex)
{
//Catch Blou
//Buraya hata olutuunda alacak kodlar yazlr
}

rnek olarak bir projede textBox1 isimli bir TextBox kontrolnz var. Kullancnn bu kontrole
girdii deeri, matematik ileminde kullanlmak iin int veri tipine evirmek istiyorsunuz. Bu kodda
meydana gelebilecek muhtemel alma zaman hatasn nceden kestirebilirsiniz. Kullanc int
veri tipine dntrlemeyecek bir veri girerse uygulama hata verir. Bu durum olutuunda, kul-
lancya anlalr bir ekilde uyar vermek de istersiniz. Bu yzden kodunuzu try blou ierisine
yazarsnz. Bu blok ierisindeki kodda bir hata olutuunda, beklediiniz hata veya baka bir hata
fark etmez, catch blou ierisindeki kod alr.

try
{
int sayi;
sayi = Convert.ToInt32(textBox1.Text);
}
catch (Exception ex)
{
MessageBox.Show(Geerli bir say giriniz.);
}

Catch blounun yanndaki (Exception ex) blm, oluan hata ile ilgili detayl bilgi almak iin kul-
lanlr. rnein catch blou ierisinde kullanlan ex.Message hatann verdii mesaj, ex.Source
ise hatann nerede olutuunu dner.
Hatalar ve Hatalarn Giderilmesi 73

Bir try blounun birden fazla catch blou olabilir. Bylelikle oluacak hataya gre farkl kodlar
altrabilirsiniz. rnein bir dosya ama programnda dosyann belirttiiniz yolda olmamas bir
hatadr, dosyann bozuk olmas baka bir hatadr.

Bir de try..catch yaps ile beraber alan finally blou vardr. Bu blok tamamen opsiyoneldir,
kullanp kullanmamak sizin kararnza kalmtr. finally blounda yazlan kodlar, try ierisinde bir
hata olusun ya da olumasn her zaman alr.

Bu iki senaryoyu da eitiminizin iler- Uygulamanzda try..catch blou kullanp, catch blou ierisini bo brakr-
leyen zamanlarnda greceksiniz. sanz uygulamanz asla hata vermez. Ancak bu istenmeyen bir durumdur.
nk uygulamann verdii hata zlmeyip, sadece gz ard edilmitir.

Mantiksal Hatalar
Mantksal hatalar, uygulamalarn istenildii gibi almad zamanlarda meydana gelen hata-
lardr. Dier hata trlerinin aksine bu hatalar mesaj olarak almak imkanszdr. Mantksal hatalar
%100 yazlmcdan kaynaklanr. Genellikle algoritmalarn yanl kurulmasndan veya yanllkla
bir kod yazlmasndan meydana gelir.

Mantksal hatalar daha iyi anlamak iin araba rneine geri dnelim. Araba retim bandndan
salkl bir ekilde kar yani arabada bir derleme hatas yoktur. Motoru vardr, drt kaps vardr,
tekerleri vardr ve hepsi yerli yerindedir. (derleme hatalarnn uygulamann nasl altyla ilgi-
lenmediini hatrlaynz) Ancak arabada bir problem vardr. Silecek altrlmak istenildii zaman
arabann kornas alar. Bu bir alma zaman hatas deildir. nk araba almamazlk etmez
veya silecek altrlmak istenildiinde elektriin fazla gelmesinden dolay birden durmaz. Sorun
sadece arabada bir parann istenildii gibi almamasdr. Bunun muhtemel sebebi elektrikten
sorumlu teknisyenin bir anlk dalgnl sonucu silecek kablolar ile elektrik kablolarn yanl yer-
lere balamas olabilir, silecek kablosunun gevek sklmasndan dolay kayp kornaya demesi
olabilir, direksiyon iindeki kablolarn yanl balanmasndan kaynaklanyor olabilir ve bu gibi
birok farkl neden olabilir.

Gerek bir rnek vermek gerekirse:

decimal ortalama;
decimal sayi1;
decimal sayi2;

sayi1 = 10;
sayi2 = 30;
ortalama = sayi1 + sayi2;

MessageBox.Show(ortalama.ToString());

Bu kod 10 ve 30un ortalamasn alp bunu kullancya gstermek amac ile yazlmtr. Ancak
altrldnda grlr ki, ekrana 20 yerine 40 yazan bir mesaj kutusu kar. Bu kodlarda hi bir
ekilde derleme hatas yoktur. Her ey C# kurallarna uygun olarak yazlmtr, tr dnmleri
de doru bir ekilde yazlmtr. Kodda alma zaman hatas da yoktur. nk decimal veri tipi
bekleyen deikenlere doru tipte veriler atanmtr ve kullancdan deer alnmad iin baka
bir koul olumas da sz konusu deildir. Ancak yine de uygulama doru almaz. Btn sorun,
yazlmcnn ortalama ilemini yapan satrda (iaretli satr) toplam ikiye blmesini unutmasndan
veya yanllkla silmesinden kaynaklanmaktadr.

Grld zere mantksal hatalar olutuunda bir hata mesaj alnmaz. Ortada sadece yolunda
gitmeyen bir durum vardr. Bu sorunun nereden kaynaklandn bulmak ve onu gidermek yaz-
lmcnn grevidir. Mantksal hatalar yakalamak dier hata trlerini yakalamaktan daha zordur.
Yukardaki rnekte ortalama deikeninin onlarca satr sonra baka bir matematik ileminde kul-
74 Blm 5

lanldn dnn. Ortalama deikeni


yanl deer tad iin o sonu da ha-
tal kacaktr. Yine onlarca satr sonra bir
nceki durumdan kan sonucun yine bir
ilemden geip, kullancya gsterildiini
varsayn. ans yaver giderse kullanc
bu durumu fark eder ve yazlmcya haber
verir. Yazlmc hatal sonu veren sat-
rn yaknlarnda bile olmayan kck bir
hatay bulmak zorundadr. Peki, yzlerce
hatta binlerce satr kod arasndan mesaj
bile vermeyen kck bir hata nasl bulu-
nur? te bu bcek ayklama sanatdr.

Debugging (Hata ayklama) ileminin nce


ekil 5.16 mantn anlamanz gerekir. yle bir r-
nek verilebilir:

Evinizde uzun zamandr kullandnz bir televizyonunuz var. lk aldnz gnden beri kumanda-
nzdan televizyonu kapatamyorsunuz. Bir gn, bu durum cannza tak ediyor ve problemi z-
mesi iin bir tamirci aryorsunuz. Televizyon da yazlm projesi gibidir. Nasl bir yazlm projesi
yzlerce satr koddan oluursa, televizyon da yzlerce elektronik devreden oluur. Televizyonun
kumandadan kapanmama sorunu bu devrelerin herhangi birinden kaynaklanyor olabilir. Tamirci
bu problemi nasl zer? nce belirttiiniz durumu (televizyonun kumandadan kapanmama soru-
nu) kendisi test eder ve problemi kendisi de tasdikler. Sonra problemin neden kaynaklanabilece-
ini kabaca dnr. Sorunun ya kumandada ya da televizyonda olduunu dnr. Kendisine
daha kolay geldii iin kumanday incelemeye balar. nce kapatma tuuna basld zaman
elektrik verip vermediine bakar. Eer elektrik varsa bir sonraki adm olan bu elektriin kzl tesi
vericiye ulap ulamadna bakar. Bir sorun yoksa bir sonraki adm olan kzl tesi sinyalinin
doru bir ekilde vericiden kp kmadna bakar. Burada da bir sorun yoksa bir sonraki adm
olan televizyondaki kzl tesi alcnn bu sinyali doru bir ekilde alp almadna bakar. Burada
da bir sorun yoksa bir sonraki adm olan alcnn televizyondaki elektrii kesmeye yarayan dev-
reye elektrik akm verip vermediini kontrol eder ve nihayet alcnn elektrii veremediini grr.
Bu durumda bir sonraki adm olan alcy ap iini incelemeye balar. Kumandadan deiik tu-
larna basarak eitli sinyaller gnderip her devrenin istenildii gibi alp almadn inceler.
ncelemelerinin sonucunda elektrik olmas gereken bir kabloda elektrik olmadn grr. Kablo
yanmtr. Bu kabloyu yeni bir kablo ile deitirir. Daha sonra kumandann kapatma tuuna basar
ve artk problemin zlm olduunu grr.

Tamircinin yaptklarn zetleyelim:

1. Kullancnn syledii durumun doru olduunu test etti.


2. Sorunun nereden kaynaklanabileceini tahmin edip, ie oradan balad.
3. Kumandann tuuna baslmasndan balayarak, adm adm tm gerekleen ilemleri incele-
di, her eyin olmas gerektii gibi olduundan emin oldu.
4. Hatann yerini tespit etti.
5. Orada da adm adm inceleyerek hatay buldu ve zd.
6. Her eyin artk olmas gerektii gibi olduundan emin oldu.
Yazlm gelitirmede hata ayklama bu rnee ok benzer. Bir mantksal hata varsa nce bu so-
runun nerelerden kaynakland tahmin edilir. rnein uygulamann hesaplama ksmnda bir hata
varsa muhtemelen ilk olarak hesapla dmesine basld zaman alan kodlar incelenmeye
balayacaktr. Koda bakldnda hatann sebebini bulmak ok zordur. Bu tip hatalar, ounlukla
Hatalar ve Hatalarn Giderilmesi 75

uygulama alrken bulunabilir. Bu yzden tam hesaplamann balad yerde uygulama durdu-
rulup, adm adm gerekleen ilemlerin takip edilmesi gerekir.

Uygulamay durdurmak ve sonra adm adm ilerletmek amacyla deikenlerin ve kontrollerin


nasl altn incelemek iin Visual Studio bize debug aralarn sunar.

Breakpoint
Uygulamann alrken durmas istenilen noktalara Breakpoint koyulur. Breakpoint, ilgili satrn
zerindeyken F9 tuuna basarak veya satrn sol kenarndaki boluu fare ile tklayarak koyula-
bilir. Ayrca satr zerindeyken sa tkla gelen menden BreakPoint Insert BreakPoint seenei
ile de koyulabilir. ekil 5.17de grld gibi Breakpoint koyulan bir satr krmz renk ile iaret-
lenir.

ekil 5.17

Breakpoint, uygulamann alrken ilgili satrda durmasn salar. Dolays ile yazlmc o satrdan
balayarak adm adm kodlar izleyebilir. Uygulama breakpointin olduu satra geldiinde ekil
5.18de grld gibi sar bir renk alr ve debug moduna geer.

ekil 5.18

Uygulama debug moduna getikten sonra artk adm adm incelenmeye


balanabilir. Nasl tamirci iin paralarn doru alt nemli ise yaz-
lmc iin de deikenlerin istenilen deerleri tamas nemlidir. Dei- ekil 5.19
kenlerin o anki deeri ekil 5.19da grld gibi fare ile deikenin
tanmnn ya da kullanmnn zerinde durularak grlebilir.

ncelenmesi gereken sadece deikenler olmayabilir. rnein bir ListBoxn o anda ka eleman
tadn ve bu elemanlarn ne olduklar renilmek istenebilir. Visual Studio sayesinde istenilirse
ListBoxn tm zellikleri veya sadece bir zellii mercek altna alnabilir. Hatta uygulama adm
adm ilerletilirken mevcut deerleri deiirse uyar vermesi de salanabilir.

Watch Penceresi
Bu senaryoyu gerekletirmek iin Visual Stu-
dio birok ara sunsa da en kullanls watch
penceresidir. Watch penceresi yazlmcya ta-
kip edecei deiken veya kontrollerin o anki
deerini, adn ve veri tipini gsterir. Watch
penceresi, uygulama sadece debug modda
ise grlr.

Watch penceresindeki satrlara izlemek istedi-


iniz deikenleri, kontrolleri veya kontrollerin
ekil 5.20
zelliklerini yazabilirsiniz. Watch penceresinde
76 Blm 5

Eer watch penceresini yanllkla kapatmsanz Visual Studionun yaz yazarken ekil 5.21de grld-
Debug mensnden Windows - Watch - Watch 1 seeneini tklayarak gibi Visual Studionun ntelliSense
ya da Ctrl+D,W ksayolunu kullanarak tekrar kartabilirsiniz.
zelliinden de faydalanrsnz.

ekil 5.21

Eer watch ekranna bir kontrol ad yazarsanz, ilgili satrn yannda bir art iareti belirecektir. Bu
art iaretine basarsanz ekil 5.22de grld gibi incelemek istediiniz kontroln tm zellik-
lerinin o anki deerlerini grebilirsiniz.

ekil 5.22

Watch ekranna bir deiken ad yazdnzda, o deikenin o anki deeri Value (deer) stunun-
da siyah renkli olarak kacaktr. Uygulamanz adm adm ilerlettike eer izlediiniz deikenin
deerinde bir deiiklik olursa ekil 5.23teki gibi Value stunundaki deer krmz renk olacaktr.

ekil 5.23

Bir deikeni veya kontrol izlemek iin adn illaki watch penceresine elle yazmanza gerek yok-
tur. zlemek istediiniz deikeni veya kontroln adn koddan seip watch penceresi zerine
srkleyip brakabilirsiniz.

Baka bir alternatif olarak, ekil 5.24te grld gibi bir deiken ya da kontroln adnn zerin-
de sa tklama yaparak Add Watch seeneini de seebilirsiniz.

ekil 5.24
Hatalar ve Hatalarn Giderilmesi 77

Step Into
Uygulamann durmas ve deikenlerin izlenmesi tek bana bir ie yaramaz. Uygulamann adm
adm altrlp her satrda yaplan ilemlerin izlenmesi de gerekir. Visual Studio bu imkan yaz-
lmclara Step Into komutu ile verir.

Uygulamanz debug modda iken F11 tuuna basarsanz uy-


gulama o anki durduu satr altrp bir sonraki satra geer.
zerine gelinen satr ekil 5.25te grld gibi sar renk ile
iaretlenir. Her F11 tuuna bastnzda, alacak satr kal-
mayncaya kadar bu durum devam eder. Bylelikle uygulama- ekil 5.25
nzn adm adm nasl altn izleyebilirsiniz.

Uygulamanz debug modunda iken F5 (altr) tuuna basarsanz, program debug moddan kar
ve kald yerden almaya devam eder.

Lab 5.1 Ya Hesaplama


1. Visual Studioda TryCatchBlogu adnda yeni bir Windows projesi oluturun.
2. Formun Text zelliini Ya Hesaplayc olarak deitirin.
3. Forma bir tane TextBox kontrol ekleyin. Name zelliini txtDogumTarih olarak deitirin.
4. Forma bir tane Label ekleyin. Name zelliini lblDogumTarih olarak, Text zelliini de Do-
um Tarihi olarak deitirin.
5. Forma bir tane Button ekleyin. Name zelliini btnYasHesapla, Text zelliini de Ya He-
sapla olarak deitirin.

ekil 5.26

6. btnYasHesapla dmesine ift tklayarak alan kod blouna u kodlar yazn:

private void btnYasHesapla_Click(object sender, EventArgs e)


{
DateTime dogumTarih;
dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);
int yas;
yas = DateTime.Now.Year - dogumTarih.Year;
MessageBox.Show(yas.ToString());
}

7. Projeyi altrn.
8. txtDogumTarih kontrolne geerli bir tarih girin.
rn: 6.5.1980
9. btnYasHesapla kontrolne tklayn.
Herhangi bir hata alnmam; uygulama, girilen tari-
he gre ya hesaplamtr.

ekil 5.27
78 Blm 5

10. txtDogumTarih kontrolne geersiz bir tarih girin. rn: 21345 veya 41.5.1980
11. btnYasHesapla kontrolne tklayn.
ekil 5.28de grld gibi uygulama girilen metni tarih formatna eviremeyip hata vermitir.

ekil 5.28

12. Projeyi durdurun.


13. Kodlar u ekilde deitirin:

try
{
DateTime dogumTarih;
dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);
int yas;
yas = DateTime.Now.Year - dogumTarih.Year;
MessageBox.Show(yas.ToString());
}
catch (Exception)
{
MessageBox.Show(Ltfen geerli bir tarih giriniz.);
}

14. Projeyi tekrar altrn.


15. txtDogumTarih kontrolne tekrar geersiz bir tarih girin.
16. btnYasHesapla kontrolne tklayn.

ekil 5.29

ekil 5.29da grld gibi uygulama bu sefer hata verip kapanmam, kullancya bir mesaj
kutusu gstermitir.
Hatalar ve Hatalarn Giderilmesi 79

17. Projeyi durdurun.


18. Kodlar u ekilde deitirin. (Deien yerler iaretlenmitir.)

try
{
DateTime dogumTarih;
dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);
int yas;
yas = DateTime.Now.Year - dogumTarih.Year;
MessageBox.Show(yas.ToString());
}
catch (Exception ex)
{
MessageBox.Show(Programda hata olutu: + ex.Message);
}

19. Projeyi tekrar altrn.


20. txtDogumTarih kontrolne tekrar geersiz bir tarih girin.
21. btnYasHesapla kontrolne tklayn.
ekil 5.30da grld gibi uygulama hata verip kapanmam ve kullancya hatann ne olduu-
nu sylemitir.

ekil 5.30

Lab 5.2 Dardan Uygulama altrma


1. Visual Studioda TryCatchBlogu2 adnda yeni bir Windows projesi oluturun.
2. Formun Text zelliini altr!!! olarak deitirin.
3. Forma bir TextBox kontrol ekleyin. Name zelliini txtUygulama olarak deitirin.
4. Forma bir Button ekleyin. Name zelliini btnCalistir, Text zelliini ise altr olarak de-
itirin.

ekil 5.31
80 Blm 5

5. btnCalistir kontrolne ift tklayarak alan kod blouna u kodlar yazn:

private void btnCalistir_Click(object sender, EventArgs e)


{
System.Diagnostics.Process.Start(txtUygulama.Text);
}

6. Projeyi altrn.
7. txtUygulama kontrolne geerli bir internet adresi yazn. rnek: www.yazilimuzmani.com
8. btnCalistir kontrolne tklayn.
ekil 5.32deki gibi yeni alan bir browserda istediiniz sayfa grnd.

ekil 5.32

9. txtUygulama kontrolne calc yazn.


10. btnCalistir kontrolne tklayn.
ekil 5.33 teki gibi ekrannza Windowsun hesap makinesi kt.

ekil 5.33

11. txtUygulama kontrolne geersiz bir uygulama ad yazn. rn: c:\uydurdum.exe,


w.yazilimuzmani.com gibi
12. btnCalistir kontrolne tklayn.

Olmayan bir web adresi girmek System.Diagnosistics.Process.Start iin bir hata


Visual Studio ekil 5.34teki
deildir. Bu kodun grevi altrmak istediiniz ey bir web sayfas ise yazdnz gibi bir hata mesaj kard.
sayfay iletim sisteminizin browserna yollayp orada atrmaktr.
Hatalar ve Hatalarn Giderilmesi 81

ekil 5.34

Bu hatann sebebi yazdnz uygulama ya da dosya yolunun yanl olmasdr.

13. Projeyi durdurun.


14. Kodu u ekilde deitirin:
private void btnCalistir_Click(object sender, EventArgs e)

{
try
{
System.Diagnostics.Process.Start(txtUygulama.Text);
}
catch (Exception)
{
MessageBox.Show(Girdiiniz uygulama ya da dosya yolu
yanl.);
}
}

15. Projeyi altrn.


16. txtUygulama kontrolne geersiz bir uygulama ad yazn.
17. btnCalistir kontrolne tklayn.

ekil 5.35

ekil 5.35teki gibi uyar mesaj alnd ve uygulama hata verip durmad.

Lab 5.3 Gei Notu Hesaplama


1. Visual Studioda MantiksalHata adnda yeni bir Windows projesi oluturun.
2. Formun Text zelliini Gei Notu Hesaplama olarak deitirin.
82 Blm 5

3. Forma 5 tane Label kontrol ekleyin. Bir tanesinin Name zelliini lblSonuc, Text zelliini
ise 0 olarak deitirin.
4. Forma 2 tane TextBox kontrol ekleyin. zelliklerinde herhangi bir deiiklik yapmayn.
5. Forma 1 tane Button kontrol ekleyin. Name zelliini btnGecisNotuHesapla, Text zelliini
ise Gei Notu Hesapla olarak deitirin.

ekil 5.36

6. btnGecisNotu dmesine ift tklayarak alan kod blouna u kodlar yazn:

private void btnGecisNotuHesapla_Click(object sender, EventArgs


e)
{
double vizeNotu;
double finalNotu;

vizeNotu = Convert.ToDouble(textBox1.Text);
finalNotu = Convert.ToDouble(textBox1.Text);

double ortalama;
ortalama = vizeNotu * 0.3 + finalNotu * 0.7;

lblSonuc.Text = ortalama.ToString();
}

7. Projeyi altrn.
8. textBox1e 40, textBox2ye 60 deerini girin.
9. btnGeciNotuHesapla dmesine tklayn.

ekil 5.37

ekil 5.37deki gibi gsterilen sonucun doru olmadn greceksiniz. (Sonucun (40*0.3) +(60*0.7)
= 54 kmas gerekirdi.)

10. Projeyi durdurun.


Hatalar ve Hatalarn Giderilmesi 83

11. Seili satra Breakpoint koyun.

private void btnGecisNotuHesapla_Click(object sender, EventArgs


e)
{
double vizeNotu;
double finalNotu;

vizeNotu = Convert.ToDouble(textBox1.Text);
finalNotu = Convert.ToDouble(textBox1.Text);

double ortalama;
ortalama = vizeNotu * 0.3 + finalNotu * 0.7;

lblSonuc.Text = ortalama.ToString();
}

12. Projeyi altrn.


13. textBox1e 40, textBox2ye 60 deerini girin.
14. btnGeciNotuHesapla dmesine tklayn.
Uygulama bu noktada duracaktr.

15. Watch penceresine textBox1.Text yazn.


16. textBox2.Text yazsn seip watch penceresine srkleyip brakn.
17. vizeNotu deikeni zerine sa tklama yapp Add Watch seeneini tklayn.
18. Watch penceresine finalNotu yazn.

ekil 5.38

19. F11 tuuna basarak seili satr altrp bir sonraki satra gein.
Deerlerin ekil 5.39da gsterilen ekilde deimi olmas gerekir.

ekil 5.39

20. Tekrar F11 tuuna basarak seili satr altrp bir sonraki satra gein.
84 Blm 5

Deerlerin ekil 5.40ta gsterilen ekilde deimi olmas gerekir.

ekil 5.40

Bu satrda bir mantksal hata vardr. textBox2nin deeri finalNotu deikenine atanmas gerekir-
ken, finalNotu, textBoxin deerini alyor.

21. Projeyi durdurun.


22. Hatay bulduunuz satr u ekilde deitirin:

finalNotu = Convert.ToDouble(textBox2.Text);

23. Projeyi altrn.


24. textBox1e 40, textBox2ye 60 deerini girin.
25. btnGeciNotuHesapla dmesine tklayn.
Sonu hatasz olarak ekil 5.41deki gibi grlecektir:

ekil 5.41

devler
1. Yeni bir Windows projesi oluturup, ekil 5.42deki gibi tasarlayn. Uygulamann almas u
ekilde olacak ekilde kodlarn yazn:
TextBoxa girilen deer eer saysal ise 1. ListBoxa, deilse 2. ListBoxa atlsn.

ekil 5.42

2. Yeni bir Windows projesi oluturup, ekil 5.43teki gibi tasarlayn.


Hatalar ve Hatalarn Giderilmesi 85

TexBoxlarn ad txtSayi1 ve txtSayi2dir. Formda sonucun kaca Label kontrolnn ad da


lblSonuctur.

ekil 5.43

Uygulama TextBoxlara girilen iki saynn ortalamasn gsterir.

ki saynn ortalamas, bu iki saynn toplamnn ikiye blnmesi ile bulunur.

rnek: 10 ile 20 nin ortalamas 15tir. Bu sonu u ekilde bulunur:

10+20=30

30/2=15

private void btnHesapla_Click(object sender, EventArgs e)


{
double 1inciSayi
double 2inciSayi;
1nciSayi = txtSayi1.Text;
2ncisayi = txtSayi2.Text;

double ortalama;
ortalama = 1nciSayi + 2ncisayi / 2;

lblSonuc.Text = ortalama.ToString();
}

Verilen kodlardaki derleme hatalarn ortadan kaldrn.


Verilen kodlar alma zaman hatas vermeyecek ekilde dzenleyin.
Verilen kodlardaki mantk hatasn dzeltin.
6 Algoritma
6 Algoritma
Algoritma Nedir?

Ak Diyagram

Algoritma Uygulamalar

Lab 6.1 Stok Takip Yazlm

dev
Algoritma
Programlamann temelinde alma akn, izlenecek yollar belirleyen algoritmalar vardr. Bir i
yaplmaya balanmadan nce nasl planlanyorsa, kodlamaya geilmeden nce de bir alma
plan belirlenmelidir. Yazlmlar, bu planda yazlan kodlar belli bir sra ile okur ve iler. Dolaysyla
algoritma yapsn ok iyi kurmak gerekir. Kurulan algoritmalar ak diyagramlar ile grsel zen-
ginlik kazanrlar.

Bu blm tamamlandktan sonra:

Algoritma kurmay renecek,


Ak diyagramlar ile algoritmalar grsel olarak ifade edebileceksiniz.

Algoritma Nedir?
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, uygulamann almas iin kullanlan kaynaklarn, yaplmas gereken kon-
trollerin veya ilemlerin aka ifade edilmesi gerekir. Ayrca iyi bir algoritmann, tm ihtimalleri
kontrol edip istenmeyen durumlarda ne yaplmas gerektiini belirtmesi gerekir.

rnein, bir e-ticaret uygulamasnda rn sat algoritmas karlr. Satn alnacak rn seildik-
ten sonra, kullancdan adet miktar bilgisi alnr. Uygulama yazlrken, bu deerin int veri tipinde
olacana karar verildii dnlrse; kullancnn girdii adet miktar bu deikene atanmadan
nce kontrol edilmelidir. Eer int 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 veriler, ilemi balatan kiiden veya belirtilen bir kay-
naktan 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 ihti-
ya 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
90 Blm 6

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 7ye dn
13. Kapy a, dar k
Bu algoritmann ilemesi iin, her ihtimal gzden geirilerek, algoritma ak gerekli yerlere yn-
lendirilir. rnein kapnn kapal olmas durumunda kapy amak iin gerekli komutlar verilmeli-
dir. 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; evrile-
cek numara, algoritma balamadan nce belirlenmitir.

Ak Diyagram
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 sem-
boller 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.

ekil 6.1

Veri Girii

Kullancdan veya baka bir kaynaktan alnan verilerin isimlerini tutar.

ekil 6.2

Karar Verme

Karar yapsn belirten semboldr. stnde koul ifadesi belirtilir.

ekil 6.3
Algoritma 91

Veri taban

Veri tabannda okuma veya yazma ilemi yapldn gsterir.

ekil 6.4

Ekran

zerinde yazlan yaznn bilgi olarak ekranda grneceini belirtir.

ekil 6.5

Printer

zerinde yazlan yaznn yazcdan karlacan belirtir.

ekil 6.6

lem

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

ekil 6.7

Fonksiyon

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

ekil 6.8

Algoritma Uygulamalar
Bilet Satma
Bir tiyatro uygulamasnn srekli gerekletirecei temel ilem bilet satmaktr. Bu ilemi gerek-
letirmek 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.
92 Blm 6

3. Bo yer says sfrsa, o gnde belirtilen oyun oynamyordur ya da oyundaki btn yerler sa-
tlmtr.
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.

ekil 6.9

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.
Algoritma 93

ekil 6.10

niversite Eitim Notunu Hesaplama


niversitede bir dersin baar notu, genelde bir vize ve bir final notu ile 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 diyag-
ram ile gsterir.
1. Notu hesaplanacak rencinin numaras
kullancdan alnr.
2. Veritabanndan rencinin vize ve final not-
lar ekilir.
3. Eer final notu 28 veya daha dkse -
renci kalr ve 9. etaba gidilir. Bu durumda
vize notu 100 olsa dahi, sonu olarak top-
lanan not 50 altnda olur. Dolaysyla ren-
cinin 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 fi-
nal notunun %70 i atanr.
6. Sonuc deikenine, vize ve final deerleri-
nin toplam atanr.
7. Sonuc deerinin 50den byk olup olmad-
kontrol edilir.
8. Sonuc 50den bykse ekrana Getiniz ya-
zan bir mesaj kartlr. Algoritmadan klr.
9. Sonuc 50den kkse ekrana Kaldnz ya-
zan bir mesaj kartlr. ekil 6.11
94 Blm 6

Lab 6.1 Stok Takip Yazlm


Basit bir stok takip yazlmnn algoritmas:

1. Kullancnn kullanc ad ve ifre bilgileri alnr.


2. Girilen kullanc ad ve ifre bilgilerinin veri tabannda olup olmad kontrol edilir.
3. Eer varsa; kullancn yetkili olduu formlar alr. Yoksa kullancya mesaj dner. Bilgiler
tekrar istenir.
4. Kullanc stok takibi yapmak istedii rn seer.
5. Seilen rn veri tabannda taranarak stok bilgileri ekrana getirilir.
6. Eer rn stou kritik seviyede ise kullanc uyarlr.
7. Kullanc rn stounu gncellemeye altnda yeni stok deerinin negatif olup olmad
kontrol edilir.
8. Eer negatif ise gncelleme kabul edilmez. Pozitif ise gncelleme kabul edilir.
9. Kullanc yeni rn eklemeye altnda eklenecek rnn veri tabannda olup olmadna
baklr.
10. Eer rn varsa stok bilgisini gnceller, yoksa rn veri tabanna kaydeder.
Algoritmas oluturulan Stok Takip Uygulamasnn ak diyagramn hazrlayn.

dev
1. Kullanc tarafndan girilen saynn ift ya da tek olup olmadn bulan algoritmay adm adm
yazn.
2. Ak diyagramn MS Visio ile izin.
7
Operatrler
ve Karar
Yaplar
7 Operatrler ve Karar
Yaplar
Operatrler

if Deyimi

switch Deyimi

Lab 7.1 Say Tahmin Oyunu

Lab 7.2 Uygulama Ykleyici

Lab 7.3 ans Oyunu

devler
Operatrler ve Karar Yaplar
Bu blmde ilikisel ve mantksal operatrler ve program akn kontrol eden deyimleri incelen-
mektedir. Bir veya birden fazla deikenin durumunu kontrol etmek, hangi durumda programn ne
ekilde davranaca ele alnacaktr.

Bu blm tamamlandktan sonra:

likisel ve mantksal operatrleri kavrayacak,


if deyimi etkin bir biimde kullanacak,
switch deyimi ile gelimi durum kontrol yapabileceksiniz.

Operatrler
Uygulama gelitirilirken bir durum karlatrmas yapmak isteyebiliriz. rnein kullancdan al-
nan bir bilginin doruluunu snamak isteyebiliriz. Finansman ilemlerinde eksi deerler bir anlam
ifade etmeyecei iin kullancnn girdii bilginin sfrdan byk olup olmad gibi bir snama ili-
kisel operatrler yardmyla snanabilir.

likisel Operatrler
== Eittir

!= Eit deildir

< Byktr

> Kktr

>= Byktr veya eittir

<= Kktr veya eittir

likisel ve mantksal operatrler her zaman bool tipinde bir sonu dndrrler. Dolaysyla genel-
likle if deyimi ile birlikte kullanlr.

Bir say tahmin oyunu yaptmz dnelim ve kullancdan TextBoxa bir say girmesini isteye-
lim. Kullancnn sayy doru bilip bilmediini snayalm:

1 int sayi = 5;
2 int tahmin = Convert.ToInt32(TextBox1.Text)
3 if ( sayi == tahmin )

4 MessageBox.Show(Tebrikler, bildiniz.);
5 else
6 MessageBox.Show(zgnm, bilemediniz.);

3 nolu satrda grld gibi bir ilikisel operatr kullanlarak eitliin salanp salanmad
snanmtr.
98 Blm 7

Mantksal Operatrler
& VE

| VEYA

|| Ksa Devre VEYA

&& Ksa Devre VE

! DEL

Mantksal operatrler ise iki bool deerini karlatrmak iin kullanlr.

Bunu parola giri ekrannda Kullanc Ad ve Parolann snand bir rnekte aklayalm.

1 string KullaniciAdi = txtKullaniciAdi.Text;


2 string Parola = txtParola.Text;
3
4 if( KullaniciAdi == admin & Parola == 123 )

5 MessageBox.Show(Tebrikler, giri baarl.);


6 else
7 MessageBox.Show(zgnm, giri baarsz.)

4 nolu satrda grld gibi iki adet ilikisel operatr kullanlm. KullaniciAdi == admin ve
Parola == 123. Daha nce ilikisel ve mantksal operatrlerin her zaman bool tipinde deer
dndrdnden bahsetmitik. Dolaysyla bu iki ilikisel snamann bool tipindeki sonularn &
mantksal operatr ile snayarak her iki deerinde dorulunu kontrol etmi olduk.

Mantksal Operatrlerin Sonular


p q p & q p | q !p

false false false false true

true false false true false

false true false true true

true true true true false

Ksa Devre Operatrler


Ksa devre operatrlerinin normal VE ( & ) ve VEYA ( | ) operatrlerinden alma mant biraz
farkldr. Normal operatrlerde ne olursa olsun her iki operatrde kontrol edilir. rnein normal
VE ( & ) operatrnde ilk operatrn sonucu yanl ( false ) ise ikinci operatrde ne olursa olsun
sonu yanl ( false ) kacaktr. Ayn ekilde VEYA ( | ) operatr kullanldnda ilk operatrn
sonucu doru ( true ) ise ikinci operatr ne olursa olsun sonu doru ( true ) kacaktr. Bu iki
durumda da ikinci operatrn kontrol edilmesi gereksizdir. Ksa devre operatrleri ( && , || ) kul-
lanld zaman bu durumlarda ikinci operatr kontrol edilmez. Bu performans art salayaca
gibi baz istisnai durumlarda programn hata vermesini de engelleyecektir.

1 string KullaniciAdi = txtKullaniciAdi.Text;


2 string Parola = txtParola.Text;
Operatrler ve Karar Yaplar 99

3
4 if( KullaniciAdi == admin & Parola == 123 )

5 MessageBox.Show(Tebrikler, giri baarl.);


6 else
7 MessageBox.Show(zgnm, giri baarsz.)

rnekte kullanc ad yanl girilse dahi parola da kontrol edilmektedir. Hlbuki kullanc ad yanl
girilirse parola doru girilse dahi sonu yanl kacaktr.

false & true = false

Dolaysyla parolay ikinci bir kez kontrol etmeye gerek yoktur. 4. satrdaki VE( & ) operatrn
Ksa Devre VE ( && ) yaparsak kullanc adnn yanl girilmesi halinde Parola kontrol yaplma-
dan sonuca daha ksa srede ulaarak yanl ( false ) sonucunu dndrecektir.

1 string KullaniciAdi = txtKullaniciAdi.Text;


2 string Parola = txtParola.Text;
3
4 if( KullaniciAdi == admin && Parola == 123 )

5 MessageBox.Show(Tebrikler, giri baarl.);


6 else
7 MessageBox.Show(zgnm, giri baarsz.)

Bu yzden C#ta normal VE ( & ) ve VEYA ( | ) operatrlerinden daha ok Ksa Devre ( && ) ve
Ksa Devre VEYA ( || ) kullanlmaktadr.

Atama Operatr
Atama operatr bir adet eittir ( = ) dir.

deiken = deer;

Sadaki deeri soldakine aktarr. Ancak sadaki deer soldakinin veri tipine uyumlu olmak zorun-
dadr. Deilse, tip dntrme ilemi uygulanmaldr.

Ard ardna deer atama ilemine izin verir.

Bir oyun uygulamas gelitirdiinizi balangta her oyuncuya 30 puan verdiinizi dnelim.

byte oyuncu1,oyuncu2,oyuncu3;
oyuncu1 = oyuncu2 = oyuncu3 = 30;

Burada nce oyuncu3n deeri 30 olacak, ardndan oyuncu2ye oyuncu3 deeri atanacak ve
oyuncu1e de ayn ekilde oyuncu2nin deeri atanacak ve sonuta tm deikenler ayn deere
sahip olacaktr.

?: Operatr
?: Operatr C#ta olduka kullanldr. Bu operatr paradan oluur. Bu yzden l ( ternary
) operatr de denir. ?: operatr baz durumlarda ilerleyen blmlerde greceimiz if-else deyimi
yerine kullanlr. ?: operatr genellikle bir atama operatr ile beraber kullanlr.
100 Blm 7

Yazm u ekildedir:

deiken = koul ? doru ksm : yanl ksm ;

koul blmnde bir deikenin deeri ilikisel ve mantksal operatrler ile snanr. Sonu doru
( true ) ise doru ksm deeri deikene atanr, sonu yanl ( false ) ise yanl ksm deeri de-
ikene atanr.

Bir saynn mutlak deerini alacamz varsayalm. nce saynn sfrdan kk olup olmadn
kontrol etmemiz gerekir. Eer sfrdan kk ise sayy eksi ile arparz, sfrdan byk ise saynn
kendi deerini alacaz.

1 int sayi = -5;


2 int mutlakDeger;
3 mutlakDeger = ( sayi < 0 ) ? 1 * sayi : sayi;

Burada mutlakDeger deikeni sonu olarak 5tir. 3 nolu satrda atama yaplmadan evvel sayinn
sfrdan kk olup olmad snanm sonu olarak doru ( true ) kmtr ve ?: operatrnn
doru ksm altrlmtr.

Operatrlerin ncelik Sras

* / %

+ -

<< >>

< > <= >=

== !=

&

^
|

&&

||

?:

=
Operatrler ve Karar Yaplar 101

if Deyimi
C#ta uygulama aklarn kontrol etmek iin kullanlan deyimlerden biri if, dieri ise switchtir.
Switch deyimi bir sonraki konuda incelenecektir. if, uygulamada bir koulun kontroln salayan
deyimdir. Genel yazm ekli yledir:

if ( koul )
{
Koul doru ise yaplacak iler;
}
else
{
Koul yanl ise Yaplacak iler;
}

koul ksmnda likisel ve Mantksal Operatrler kullanlarak bir deikenin durumu kontrol edilir.
Hatrlarsanz ilikisel ve mantksal operatrler her zaman bool tipinde bir sonu dndrr demi-
tik. if deyimi bu sonuca gre ilgili blou altrr. if veya else deyiminden sonra sadece tek satr
yazlacaksa ssl parantezler kullanlmadan yazlabilir.

if ( koul )
doru ise yaplacak iler;
else
yanl ise Yaplacak iler;

Bu durumda deyimlerden sonraki ilk satr scope gibi alglanacaktr.

imdi kullancnn girdii parolay kontrol eden bir rnek yapalm:

1 string parola = txtParola.Text;


2

3 if (parola == 123456)

4 {
5 MessageBox.Show(tebrikler, parola doru);
6 }
7 else
8 {
9 MessageBox.Show(zgnm, parola yanl);
10 }

rnei incelediimizde, 3 nolu satrda if deyimi ierisinde parola deikeninin deeri == operatr
ile kontrol ediliyor. Kullancn girdii deer 123456 deerine eit ise deyim true deerini dnd-
recek ve ilk scope alacaktr. Eit deil ise o zaman false deerini dndrecek ve else deyimin-
den sonraki scope alacaktr. imdi rneimizi biraz gelitirelim. Kullancdan parola dnda bir
de kullanc ad bilgisi isteyelim ve her ikisi de doru ise ilem baarl olsun.

string parola = txtParola.Text;


string kullaniciAdi = txtKullaniciAdi.Text;
if (kullaniciAdi == admin && parola == 123456)
102 Blm 7

{
MessageBox.Show(tebrikler, Kullanc Ad ve Parola doru);
}
else
{
MessageBox.Show(zgnm, Kullanc Ad veya Parola yanl);
}

Burada if deyiminde VE (&&) operatr ile iki koulunda true olmas durumunda girii doruladk.
Fakat durumun false olmasnn hangi kouldan kaynaklandn bilemiyoruz. Bu durumu i ie if
deyimi kullanarak zebiliriz.

string parola = txtParola.Text;


string kullaniciAdi = txtKullaniciAdi.Text;

if (kullaniciAdi == admin)
{
if (parola == 123456)

{
MessageBox.Show(tebrikler, Kullanc Ad ve Parola
doru);
}
else
{
MessageBox.Show(zgnm, Parolanz yanl);
}
}
else
{
MessageBox.Show(zgnm, Kullanc Adnz yanl);
}

Bazen uygulama gelitirirken pe pee birok if deyimi kullanmak zorunda kalabiliriz.

byte ay = Conver.ToByte(txtAy.Text);
if (ay == 1)
MessageBox.Show(Ocak);
else if (ay == 2)
MessageBox.Show(ubat);
else if (ay == 3)
MessageBox.Show(Mart);
else if (ay == 4)
MessageBox.Show(Nisan);
else if (ay == 5)
MessageBox.Show(Mays);
else if (ay == 6)
Operatrler ve Karar Yaplar 103

MessageBox.Show(Haziran);
else if (ay == 7)
MessageBox.Show(Temmuz);
else if (ay == 8)
MessageBox.Show(Austos);
else if (ay == 9)
MessageBox.Show(Eyll);
else if (ay == 10)
MessageBox.Show(Ekim);
else if (ay == 11)
MessageBox.Show(Kasm);
else if (ay == 12)
MessageBox.Show(Aralk);
else
MessageBox.Show(1-12 aras say girmelisiniz);

rnekte olduu gibi 1 ile 12 aras girilen sayya gre kullancya ay bilgisi dnmektedir. Burada
pe pee 12 adet if yerine tek if deyimi kullanlm ve devamnda ise else if deyimleri ile devam
edilmi girilen deer 1 ile 12 aras deil ise else deiminde uyar mesaj verilmitir. Burada kullan-
lan else if deyimi, kodun tm if deyimlerini kontrol etmesini engellemi ve sondaki else deyiminin
kullanmn salamtr.

switch Deyimi
switch deyimi de if deyimi gibi uygulama aklarn kontrol etmek iin kullanlr. Genellikle daha
okunakl ve birok durum iin daha verimli olduu iin karmak else if bloklar yerine kullanlr.
Genel yazm ekli yledir:

switch ( deiken )
{
case durum1 :
yaplacak iler;
break;
case durum2 :
yaplacak iler;
break;
case durum3 :
yaplacak iler;
break;
.
.
.
default :
yaplacak iler;
break;
}
104 Blm 7

Bir nceki konuda else if deyimi ile yaptmz rnei birde switch ile yapalm:

byte ay = Conver.ToByte(txtAy.Text);
switch (ay)
{
case 1 :
MessageBox.Show(Ocak);
break;
case 2:
MessageBox.Show(ubat);
break;
case 3:
MessageBox.Show(Mart);
break;
case 4:
MessageBox.Show(Nisan);
break;
case 5:
MessageBox.Show(Mays);
break;
case 6:
MessageBox.Show(Haziran);
break;
case 7:
MessageBox.Show(Temmuz);
break;
case 8:
MessageBox.Show(Austos);
break;
case 9:
MessageBox.Show(Eyll);
break;
case 10:
MessageBox.Show(Ekim);
break;
case 11:
MessageBox.Show(Kasm);
break;
case 12:
MessageBox.Show(Aralk);
break;
default :
MessageBox.Show(1-12 aras say girmelisiniz);
break;
}
Operatrler ve Karar Yaplar 105

rnei incelediimizde, txtAy isimli TetxBoxa girilen sayya denk gelen ksm switch deyimi ta-
rafndan ilgili casede (durum) altrlr. lem yapldktan sonra break atlama ifadesi ile dier
caselerin almas nlenir. En sonda bulunan default if deyimindeki else gibi alr yani hibir
casein uymad durumda alan blmdr.
case ifadele-
switch deyimi kullanrken dikkat edeceimiz hususlardan bir tanesi de du- rinde deiken
rumunu kontrol ettiimiz deiken ile caselerde belirttiimiz sabitlerin veri kullanlamaz.
tiplerinin ayn veya uyumlu olmas gerektiidir.

Lab 7.1 Say Tahmin Oyunu


1. Yeni bir Windows projesi an ve ismini SayiTahmini olarak deitirin. Formunuzun grn-
ts ekil 7.1deki gibi olmaldr.

ekil 7.1

2. Formunuza Tablo 7.1deki kontrolleri ekleyin.

Tablo 7.1
Name Text
Label lblSayi Bir Sayi Giriniz
Label lblMesaj 1-100 aras bir sayi girin
Button btnTahminEt Tahmin Et
Button btnBaslat Oyunu Balat
Button btnKapat Oyundan k

3. Tahmin edilecek sayy tutmak iin int tipinde bir deiken tanmlayn. Ardndan bu says
rastgele oluturacak Random nesnesini ekleyin. Bu nesnelere tm scopelardan ulalaca
iin global tanmlanmaldr.

int sayi;
Random rastgele = new Random();

4. btnBaslat adl Buttona ift tklayarak kod penceresine gein ve rastgele say reterek oyunun
balatan kodu yazn.

private void btnBaslat_Click(object sender, EventArgs e)


{
//0-100 ars rastgele bir say retip deerini sayi adl deikene
atyoruz.
sayi = rastgele.Next(0, 101);
}

5. btnTahminEt adl Buttona ift tklayarak kod penceresine gein ve txtSayi kontrolne girilen
saynn tahmin edilen say ile ayn olup olmadn kontrol eden kodlar yazn.
106 Blm 7

private void btnTahminEt_Click(object sender, EventArgs e)


{
//Kullancnn girdii sayiyi girilenSayi adl tamsay deikene
atyoruz.
int girilenSayi = Convert.ToInt32(textSayi.Text);

//girilen say eer rastgele retilen sayya eitse oyun


kazanlr
if (sayi == girilenSayi)
{
lblMesaj.Text = BRAVOO BULDUNNN !!!;
}

//girilen say eer rastgele retilen saydan bykse uyar uyar


verilir.
if (sayi > girilenSayi)
{
lblMesaj.Text = Daha byk bir say girin;
}

//girilen say eer rastgele retilen saydan kkse uyar


verilir.
if (sayi < girilenSayi)
{
lblMesaj.Text = Daha kk bir say girin;
}
}

6. Son olarak btnKapat adl Buttonun Click olayna formu kapatacak kodlar yazn.

private void buttonKapat_Click(object sender, EventArgs e)


{
//Formu Close metodu ile form kapanyor.
this.Close();
}

Lab 7.2 Uygulama Ykleyici


Bu rneimizde arka planda bir program yklenirken kullancya programn yklenmesiyle ilgili
detaylar veren bir uygulama gelitireceiz. Programnz mevcut yklenme miktarn da grafiksel
olarak gsterebilmelidir. Uygulama bittiinde programn grnts ekil 7.2deki gibi olacaktr.
Operatrler ve Karar Yaplar 107

ekil 7.2

1. Yeni bir Windows projesi an ve ismini ProgramYukleniyor olarak deitirin.


2. Formunuza Tablo 7.2deki kontrolleri ekleyin.

Tablo 7.2
Name Text
PictureBox pcbResim
ProgressBar pbDurum
Label lblDurum Birazdan program yklemesi
balayacak
Button btnDevam Devam ->
Timer tmrYukleyici

tmrYukleyicinin Interval zelliini 1000 yapn.

3. Formun Load olayna ykleme ilemini balatan kodlar yazn.

private void Form1_Load(object sender, EventArgs e)


{
//Ykleme ilemi bitmeden devam dmesine baslamasn
btnDevam.Enabled = false;

//Ykleme ilemi imdi balasn


tmrYukleyici.Start();
}

4. tmrYukleyici adl Timer kontrolnn Tick olayna uygulamann gvdesini oluturacak if deyimi
ile yklenen modlleri gsterecek kodlar yazn.

private void tmrYukleyici_Tick(object sender, EventArgs e)


{
//Art salamak iin rastgele say oluturucu tanmlyoruz
//Artn rastgele olmasnn sebebi kullancnn uygulamay her
yklediinde
//farkl artlar grp durumdan phelenmemesi :)
//sterseniz timern intervalini de rastgele deitirip daha da
gereki hale
//getirebilirsiniz
Random rastgeleSayiOlusturucu = new Random();
int artisOrani = rastgeleSayiOlusturucu.Next(1, 20);
108 Blm 7

//oluturduumuz rastgele art progress barn art olarak


atyoruz.
pbDurum.Step = artisOrani;

//progress bardan art gerekletirmesini salyoruz.


pbDurum.PerformStep();

//arttan sonraki progress barn deerini suAnkiDeger deikenine


atyoruz
int suAnkiDeger=pbDurum.Value;

if (suAnkiDeger<=20) //0-20 arasnda


{
lblDurum.Text = Program yklenmeye hazrlanyor.;
}
else if(suAnkiDeger>20&&suAnkiDeger<=45) //21-45 arasnda
{
lblDurum.Text=Gvenlik modl ykleniyor.;
}
else if (suAnkiDeger > 45 && suAnkiDeger <= 70) //46-70 arasnda
{
lblDurum.Text=Veritaban modl ykleniyor.;
}
else if(suAnkiDeger>70 && suAnkiDeger<=95) //71-95 arasnda
{
lblDurum.Text = Bellek optimizasyonu yaplyor.;
}
else if (suAnkiDeger > 95 && suAnkiDeger < 100) //96-100
arasnda
{
lblDurum.Text = Lazer kalkanlar devre d
buraklyor.;
}
else
{
//geriye sadece tek ihtimal kalyor. O da 100.
//100 aamaz nk progress barn maximum deeri 100.
//PerformStep() metodu sayesinde art 100 asa bile hata
vermeden
//deeri otomatik olarak 100e tanr.

//Ykleme bitti yazs


lblDurum.Text = Ykleme baar ile tamamlanmtr.;

//timer durdurulur
Operatrler ve Karar Yaplar 109

tmrYukleyici.Stop();

//artk kullanc devam dmesine basabilir


btnDevam.Enabled = true;
}
}

5. btnDevam kontrolne ift tklayarak kod penceresinde formu kapatan kodu yazn.

private void btnDevam_Click(object sender, EventArgs e)


{
//ve form kapatlr
this.Close();
}

Lab 7.3 ans Oyunu


Bu rneimizde ekrana rastgele gelen 3 numaraya gre oynanan bir ans oyunu uygulamas
yapacaz.

1. Yeni bir Windows projesi an ve ismini SansOyunu olarak deitirin. Uygulamanz ekran
grnts ekil 7.3teki gibi olacaktr.

ekil 7.3

2. Formunuza Tablo 7.3teki kontrolleri ekleyin.

Tablo 7.3
Name Text
Label lblSayi1 0
Label lblSayi2 0
Label lblSayi3 0
Label lblSonuc label1
Button btnBasla Start
110 Blm 7

3. Form1in Load olayna ift tklayarak kod penceresine gein ve gerekli kodlar yazn.

private void Form1_Load(object sender, EventArgs e)


{
lblSonuc.Text = Puannz : + puan.ToString();
}

4. btnBaslaya ift tklayarak kod penceresine gein ve btnBaslann Click olayna gerekli kodlar
yazn.

int puan=30;

private void btnBasla_Click(object sender, EventArgs e)


{
//Rastgele say retebilmek iin kullanacanz Random trnden
bir nesne tanmlayn.
Random rnd = new Random();
//Label kontrollerine rastgele sayilar ataynz.
lblSayi1.Text = rnd.Next(1, 11).ToString();
lblSayi2.Text = rnd.Next(1, 11).ToString();
lblSayi3.Text = rnd.Next(1, 11).ToString();
//Label kontrollerine atanan rastgele sayilar kontrol edin.
//lblSayi1, lblSayi2 ve lblSayi3n herbirinin Text zellii 7
ise puan 100 arttrn.
if (lblSayi1.Text == 7 && lblSayi2.Text == 7 && lblSayi3.Text
== 7)
{
puan += 100;
}
//lblSayi1 ve lblSayi2 nin Text zellii 7 ise puan 10
arttrn.
else if (lblSayi1.Text == 7 && lblSayi2.Text == 7 )
{
puan += 10;
}
//lblSayi2 ve lblSayi3 nin Text zellii 7 ise puan 10
arttrn.
else if (lblSayi2.Text == 7 && lblSayi3.Text == 7)
{
puan += 50;
}
//lblSayi3n text zellii 7 ise puan 5 arttrn.
else if (lblSayi3.Text == 7)
{
puan += 5;
}
Operatrler ve Karar Yaplar 111

//puan 3 azaltn.
else
{
puan -= 3;
}
//puan Yazdrn.
lblSonuc.Text=Puannz : + puan.ToString();
//Eer puan<=0 ise kullancya yeniden oynayp oynamak istemediini
sorun.
if (puan<=0)
{
if (MessageBox.Show(Oyun bitti. Tekrar oynamak ister misiniz?,
this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1)==DialogResult.Yes)
{
//Tekrar oynamak isterse puan deikenini ve
Label kontrollerini programn balangcndaki hale getirin.
puan = 30;
lblSayi1.Text = 0;
lblSayi2.Text = 0;
lblSayi3.Text = 0;
lblSonuc.Text = Puannz : + puan.
ToString();
}
else
{
//Tekrar oynamak istemezse uygulamay kapatn.
this.Close();
}
}
}

devler
1. Alrken saydamlktan donuklua, kapanrken donukluktan saydamla geebilen bir form
hazrlayn. Bunun iin formun Opacity zelliini kullanabilirsiniz.
2. Msn Messenger uygulamasnda olduu gibi Buttona tklandnda formu titreten uygulamay
hazrlayn.
8 Dngler
8 Dngler
for Dngs

while Dngs

do while Dngs

foreach Dngs

Lab 8.1 Tarih Dorulama

Lab 8.2 Gazeteler

Lab 8.3 Kelime Arama

devler
Dngler
Dngler bir programlama dili iin en ok kullanlan ifadelerden biridir. Ard ardna ya da sral bir
i yaptracamz zaman bunu dngler yardmyla yaparz. C# dilinde 4 adet dng eidi vardr.
Bunlar for, while, do while ve foreach dngleridir.

for Dngs
for dngs balang deerinden itibaren belirtilen koul salanana kadar iine yazld kod
parasn ard ardna altrr. Genel yazm ekli yledir;

for ( balang;koul;artm)
{
yaplacak iler;
}

balang, dng kontrol deikeni olarak da ifade edilebilir. Dng ierisinde bir saya grevini
grr.

koul, dngnn ne kadar alacan denetleyen mekanizmadr. Koul salanyorken dng


almaya devam eder. Koul salanmadnda ise dng durur. Koulda genellikle balang
deerinin durumu denetlenir.

artm, balang deerinin dngnn her admda artma yada azaltma miktarn belirler. Eer ba-
lang deeri hi deimez ise sonsuz dng oluur.

imdi 1den 100e kadar olan saylarn toplamn bulan bir uygulama gelitirelim:

int toplam = 0;

for (byte i = 1; i <= 100; i++)


{
toplam += i;
}

MessageBox.Show(toplam.ToString());

Kodu altrdnzda sonu olarak 5050 alacaksnz.

balang, byte i = 1; for dngsnde dngnn hangi admda olduu i deikeninin durumu ile
ifade edilir.

koul, i <= 100; koulun grevi dngnn devam edip etmeyeceine karar vermektir. Her admda
koul kontrol edilir. Doru ( true ) verdike dng devam eder. Buradaki rnekte i deikeni 100
den kk ve eit iken dng almaya devam edecektir.

artm, i++; burada dngnn her admnda inin deeri 1 arttrlr.

Bu bilgiler nda imdi de 1den 100e kadar ift saylarn toplamn bulalm.

int toplam = 0;
for (byte i = 0; i <= 100; i += 2)
{
116 Blm 8

toplam += i;
}

MessageBox.Show(toplam.ToString());

Sonu: 2550

Grdnz gibi sadece artm ksmn deitirdik. Bylelikle dngmz ilk rnekteki gibi 100 kere
deil 50 kere dnm oldu.

imdiye kadar yaptmz rneklerde balang deeri artarak devam ediyordu. Baz durumlarda
balang deerinin azalarak devam etmesini isteyebiliriz. rnein bir ie bavuru formunda sene
bilgilerini bir ComBoxa teker teker elle girdirmek yerine bunu bir for dngs yardmyla rahatlkla
yapabilir. En yakn senenin en stte olmasn istenirse bu balang deerini 2008den 1908e
doru azalarak gitmesi gerekir:

for(short i = 2008; i >= 1908;i -=1)


{
cmbSene.Items.Add(i);
}

Kullancdan aldmz bir saynn asal olup olmadn denetleyen bir program yazalm. Bildiiniz
gibi asal saylar 1e ve kendisinden baka saylara tam blnmeyen saylardr. Bir saynn asal
olup olmadn, onu 1 ve kendisi hari tm saylara blmnden kalan denetleyerek bulabiliriz.

Bu rnekte for dngs yannda mod ( % ) operatrnden ve program atlama ifadesi breakten
yararlanacaz. Zira bir saynn birden fazla tam bleni olabilir ve bizim bulduumuz ilk tam b-
lenden sonra dngnn almasna gerek kalmayabilir. Bu ekilde byk bir say girildiinde
dngnn uzun sre almasn engelleyerek performans art salam oluruz.

1 int sayi = Convert.ToInt32(txtSayi.Text);


2 bool asalMi = true;
3 int tamBolen = 0;
4
5 for (int i = 2; i < sayi; i++)

6 {
7 int kalan = sayi % i;

8 if (kalan == 0)
9 {
10 tamBolen = i;
11 asalMi = false;
12 break;
13 }
14 }
15
16 if (asalMi == true)
17 MessageBox.Show(sayi.ToString() + asaldr.);
Dngler 117

18 else
19 MessageBox.Show(sayi.ToString() + asal deildir. Tam
bleni: + tamBolen.ToString());

1 nolu satrda kullancnn girdii sayy alyoruz.

2 nolu satrda asalMi deikenine true deerini atyoruz. Bu, kullancnn girdii tm saylar n-
ceden asal kabul ettiimiz anlamna gelir. For dngs ierisinde asal say kuraln bozan durum
gerekletirirse asalMi deikeni false olmaktadr.

3 nolu satrda tamBolen deikeni ile kullancnn girdii saynn en kk tam blenini bilgi ma-
hiyetinde saklayacaz.

5 nolu satrda grdnz gibi balang noktamz 2 ve koulumuz kk eittir <= deilde sade-
ce kktr < . Bildiiniz gibi asal say kuralna gre say 1 ve kendisinden baka bleni olmayan
say idi. Balang noktasn 2 vererek 1 saysn, kk eittir yerine kk yazarak saynn ken-
disini blme ileminden saf d tutuyoruz.

7 nolu satrda sayinn iye blmnden kalan mod kullanarak hesaplanyor.

8 nolu satrda kalan kontrol ediliyor. Eer kalan sfrda ise 10,11 ve 12 numaral satrlar altr-
lacak.

10 nolu satrda kullancya bilgi mahiyetinde sunulacak tamBolen deeri atanyor.

11 nolu satrda daha sonra 16 nolu satrda kontrol edeceimiz asalMi deikeninin deerine true
atanyor.

12 nolu satr performans iin kilit noktadr. Burada break ifadesini kullanmasak da uygulamamz
yine doru sonu retecektir. 1000000 gibi byk bir say girildiinde dngmz 2 den 999999
a kadar alacaktr. Ancak dngmz henz ilk admda iken yani i deikeni 2 iken tamBolen
bulunursa dier saylarn kontrol edilmesine gerek yoktur. Bu yzden break ifadesi yardmyla
dngden klr ve geri kalan saylar gereksiz yere kontrol edilmez.

16 nolu satrda asalMi deikeninin durumu kontrol edilerek kullancya uygulamann sonu hak-
knda bilgi verilir.

Continue
Bir dngnn sonraki tekrara erken geiini salamak iin continue ifadesi kullanlr. Bir bakma
break ifadesinin tamamlaycsdr. Daha nceki konuda rneini yaptmz 1 ile 100 arasndaki
ift saylarn toplamn bulan uygulamay biraz deitirerek continue ifadesini kullanarak tekrar
yapalm.

1 for (int i = 0; i <= 100; i ++)


2 {
3 f((i%2) != 0)
4 continue;

5 listBox1.Items.Add(i);
6 }

rneimizi incelediimizde, 3 nolu satrda mod operatr ile saynn ift olup olmad kontrol
ediliyor. Eer say ift deilse 4 nolu satrdaki continue ifadesi ile o satrdan itibaren kod icra
edilmeyip dngye tekrar zorlanyor yani kod 1 nolu satra dallanyor. Bylelikle sadece ift olan
saylar iin 5 nolu kod satr alyor ve ift saylar ListBox kontrolne ekleniyor.
118 Blm 8

while Dngs
C#taki dnglerden bir dieri ise while dngsdr. while dngs bir koul salanyorken dn-
meye devam eder. Koul yanl ( false ) sonucunu verdii zaman ise sonlandrlr. Genel yazm
ekli yledir.

while( koul )
{
yaplacak iler;
}

1den 100e saylarn toplamn bulan bir while dngs yazalm:

int toplam = 0;
int sayac = 1;

while( sayac <= 100 )

{
toplam+= sayac;
sayac++;
}

Sonuta toplam deikeni 5050 verecektir. rnekte grld gibi sayac dng ierisinde her
admda 1 arttrlyor. Bylelikle sayac 101 olduunda dng artk sonlandrlyor. Burada koulu-
muz sayac deikeninin deerinin 100 den kk veya eit olmasdr. Koul doru (true) sonu-
cunu verdike dng iletiliyor, koulun yanl (false) deerini vermesi halinde ise dng sonlan-
drlyor.

while dngs bu ekilde srayla yaplacak ilemlerden ziyade problem zmnde bir koulun
durumun snamak iin kullanlr.

Kullanc tarafndan girilen bir saynn ka basamakl olduunu bulmak while dngs iin daha
aklayc bir rnek olacaktr.

1 int sayi = Convert.ToInt32(txtSayi.Text);


2 int basamak = 0;
3
4 while (sayi > 0)

5 {
6 basamak++;
7 sayi /= 10;

8 }
9
10 MessageBox.Show(Girdiiniz say + basamak.ToString() +
basamakldr.);

rnekte grld gibi 4 nolu satrda koulumuz sayi deikeninin sfrdan byk olmasdr.

6 nolu satrda basamak deikeni 1 arttrlr.


Dngler 119

7 nolu satrda ise saynn deeri 10a blp kendisine eitlenir. (Bir sayy sonu 0 oluncaya ka-
dar ka kere 10a blerseniz, o saynn basamak saysn bulursunuz.)

Bylelikle say basamak says kadar 10a blnecektir.

do while Dngs
C#taki bir dier dng de do while dngsdr. for ve while dnglerinden farkl olarak koul
dngnn sonunda kontrol edilir. Bu da do while dngsnn en az bir kere altrlaca anla-
mna gelir.

Genel yazm ekli yledir:

do
{
yaplacak iler;
} while ( koul );

1den 100e kadar olan saylarn toplamn do while dngs yardmyla bulalm.

int toplam = 0;
int sayac = 0;

do
{
sayac++;
toplam += sayac;

} while (sayac < 100);


MessageBox.Show(toplam + toplam.ToString() + ,sayac + sayac.
ToString());

Hatrlarsanz benzer bir rnei while dngs ile yaptk, ancak while dngsndeki koulumuzu
bir hatrlayalm:

while( sayac <= 100 )


{
....
}

Grld gibi sayac 100den kk ve eit.

do whiledaki koulumuza tekrar bakalm:

do
{
....
} while ( sayac < 100 );

Grld gibi do while dngsnde koulumuz 100den kk olmas aranyor ancak sayac 100
iken bile bir kez alyor ve koul aada olduu iin sayac 100 iken dngden kyor.
120 Blm 8

foreach D ngs
C#ta bir dier dng de foreach dngsdr. foreach, dizi (Array) ve koleksiyon ( collection )
tabanl nesnelerin elemanlar zerinden ilerleyen bir dngdr.

Genel kullanm ekli yledir;

foreach(tip deiken in koleksiyon)


{
yaplacak iler;
}

tip: buradaki tip koleksiyonun veri tipi ile ayn veya uyumlu olmak zorundadr.

deiken: foreach dngs ierisinde koleksiyonda bulunan sradaki


foreach dngs bir son- eleman temsil eder.
raki blm olan Diziler an-
latlrken ilenecektir. koleksiyon: ArrayList ya da dizi gibi ayn tip verileri barndran ko-
leksiyon.

Lab 8.1 Tarih Dorulama


Bu rnekte ama, form yklendii anda gn, ay ve yl bilgisini tutan 3 adet ComboBox kontroln
for dngleri yardm ile doldurmaktr.

Formunuzun grnts ekil 8.1deki gibi olmaldr.

ekil 8.1

1. Yeni bir Windows projesi an ve ismini TarihDogrulama olarak deitirin.


2. Formunuza Tablo 8.1deki kontrolleri ekleyin.

Tablo 8-1
Name Text
Label lblGun Gn:
Label lblAy Ay:
Label lblYil Yil:
ComboBox cmbGun
ComboBox cmbAy
ComboBox cmbYil
Button btnKontrol Geerli Tarih mi?

3. Formun zerinde bo bir yere ift tklayarak kod penceresine gein ve Load olayna gerekli
kodlar yazn.
Dngler 121

private void Form1_Load(object sender, EventArgs e)


{
//cmbGun ve cmbAy adl Comboboxlar uygun saylarla doldurabilmek
iin int tipinde bir deiken tanmlayn.
int counter = 1;
for (int i = 1920; i <= 2008; i++)
{
//cmbYil adl ComboBox a 1920 den 2008e kadar olan saylar
ekleyin.
cmbYil.Items.Add(i);
if (counter < 13)
{
//cmbAy adl ComboBox a 1 den 13e kadar olan saylar
ekleyin.
cmbAy.Items.Add(counter);
}
if (counter < 32)
{
//cmbGun adl ComboBox a 1 den 32ye kadar olan
saylar ekleyin.
cmbGun.Items.Add(counter);
}
//Her dngde counter adl deikeni bir arttrn.
counter++;
}
}

4. kinci aamada kullanc btnKontrol adl Buttona tklad anda girdii tarihin geerli bir tarih
olup olmadn kontrol edeceiz. btnKontrola ift tklayarak kod penceresine gein ve Click
olayna gerekli kodlar yazn.

private void btnKontrol_Click(object sender, EventArgs e)


{
try
{
//Kullancnn ComboBox kontrollerine girdii deerleri
DateTime trnden dt isimli bir deikene dntrmeye aln.
Eer evirme ilemi baarl olursa Geerli bir tarih setiniz
uyars verin.
DateTime dt = Convert.ToDateTime(cmbGun.Text + . + cmbAy.Text +
. + cmbYil.Text);
MessageBox.Show(Geerli bir tarih setiniz);
}
catch (Exception ex)
{
//evirme ilemi baarl olmazsa Geersiz bir tarih
setiniz uyars verin.
122 Blm 8

MessageBox.Show(Geersiz bir tarih setiniz);


}
}

5. Projenizi altrn ve geerli bir tarih girip Buttona basn. Ayn ilemi 31.02.1996 tarihi iin
yeniden deneyiniz.

Lab 8.2 Gazeteler


Bu rneimizde foreach dngs ile bir kontrolden dierine elerin nasl aktarldna bakaca-
z.

Formunuzun grnts ekil 8.2deki gibi olmaldr.

ekil 8.2

1. Yeni bir Windows projesi an ve ismini Gazete olarak deitirin.


2. Tablo 8.2deki kontrolleri formunuza ekleyin.

Tablo 8.2
Name Text
CheckedListBox clGazeteler
ListBox lbOkunanlar
Button btnSec >>

clGazeteler adl CheckedListBoxa Milliyet, Hrriyet, Sabah, Radikal, Posta, Fotoma, Fanatik,
Takvim, Tercman elerini ekleyin.

clGazeteler adl kontrolde Ctrl tuuyla biden fazla e seebilmek iin kontroln Properties pane-
line girerek SelectionMode zelliini MultiSimple olarak deitirin.

3. Amacmz kullancnn clGazeteler adl CheckedListBoxtan setii gazeteleri btnSec adl


dmeye tkladnda lbOkunanlar adl Listbox kontrolne eklemektir.
4. imdi btnSec isimli Buttonun Click olayna aadaki kodlar yazn.

private void btnSec_Click(object sender, EventArgs e)


{
//Eer Button a tklandnda hi bir gazete seili deilse
kullancya uyar veriyoruz.
if (clGazeteler.SelectedItems.Count == 0)
MessageBox.Show(Hi bir Gazete Seilmedi);
else
{
Dngler 123

//Seili eleri lbOkunanlar adl ListBox kontrolne


ekliyoruz.
lbOkunanlar.Items.Clear();
foreach (string gazete in clGazeteler.CheckedItems)
{
lbOkunanlar.Items.Add(gazete);
}
}
}

5. Foreach dngsnde, clGazeteler.CheckedItems adl koleksiyonda clGazeteler adl kontrol-


de seili olan tm eler bulunur. Bu koleksiyonda bulunan btn string tipindeki eler lbO-
kunanlar adl kontrole ekleniyor.

Lab 8.3 Kelime Arama


Bu rneimizde kullancnn girecei bir ifadenin aranan metin ierisinde ka kere getiini veren
bir uygulama oluturacaz.

Formunuzun grnts ekil 8.3teki gibi olmaldr.

ekil 8.3

1. Yeni bir Windows projesi oluturun ve ismini KelimeArama olarak deitirin.


2. Formunuza Tablo 8.3teki kontrolleri ekleyin.

Tablo 8.3
Name Text
TextBox txtKelime
TextBox txtMetin
Button btnAra Ara
Label lblMetin Arama Yaplacak Metin
Label lblKelime Aranacak Kelime

Ayrca lblMetinin kontrolnn MultiLine zelliini true olarak deitirin.

3. btnAraya ift tklayarak kod penceresine gein ve kullancnn txtMetin kontrol ile girdii
deeri metin iinde arayan kodlar yazn.

private void btnAra_Click(object sender, EventArgs e)


{
//aradmz ifadenin metin ierisinde ka kere getiini
124 Blm 8

//tutacak olan Sayi adl integer tipinden deiken tanmlayn.


int Sayi = 0;
//kullancnn txtMetine girmi olduu deeri Metin deikenine
atadk.
string Metin = txtMetin.Text;
//kullancnn txtKelimeye girmi olduu deeri Kelime deikenine
atadk
string Kelime = txtKelime.Text;
//Konum adnda integer tipinden deikenini tanmlayp Kelimenin,
Metin ierisindeki konumunu bu deikene atayn.
int Konum = Metin.IndexOf(Kelime);
//Kelime Metin iinde tekrar ettii srece devam edecek while
dngs tanmlayn.
while (Konum!=-1)
{
//Konum deikenini Kelimenin Metin ierisinde bir sonra
getii konuma eitleyin.
Konum = Metin.IndexOf(Kelime, Konum + 1);
//Sayi deikenini bir arttrn.
Sayi++;
}
//Kullancya Kelimenin Metin iinde ka kere getiini
gsterin
MessageBox.Show(Girdiiniz ifade, metin irisinde + Sayi.
ToString() + kere geiyor);
}

4. IndexOf metodunun tek parametreli kullanmnda metot Metin ierisinde Kelimenin ilk getii
yerdeki Kelimenin ilk harfinin index numarasn geri dner. rnein Bilge Adam Bilgi Tekno-
lojileri Akademisi metninde Bilgi kelimesini IndexOf methodunu kullanarak ararsak dnen
sonu 11 olacaktr. Herhangi bir metin iindeki karakterlerin index numaras 0 dan balar.
IndexOf metodunun iki parametre alan kullanmnda ise ilk parametre aranacak kelimeyi, ikin-
ci parametre ise arama yapmaya balanacak karakterin index numarasn ifade eder.

IndexOf metodu belirtilen kelimeyi aranan metin iinde bulamazsa geriye -1 dner.

5. txtMetin ve txtKelime kontrollerine veriler girerek uygulamanz test edin.

devler
1. For dngs kullanarak arpm tablosu hazrlayn. Sonular ListBox kontrolnde gsterin.
2. Cep telefonlarnn PIN giri ekranna benzer bir form tasarlayn. Kullanc 3 defa PIN numara-
sn hatal girerse Uygulamanz bloke olmutur mesaj verin ve Button kontroln grnmez
yapn. Kullanc 3 deneme hakk iinde doru olarak PIN numarasn girerse Ho geldiniz
mesaj verip formu kapatn.
9 Diziler
9 Diziler
Baz Dizi zellikleri ve Metotlar

Lab 9.1 Saysal Loto

devler
Diziler
Deikenleri renirken grdk ki her deikene sadece bir deer atayabiliriz. Baz durumlarda
ayn tipteki deikenleri bir arada tutma ihtiyac duyabiliriz. C# bize ayn tipteki deikenleri tek bir
adla saklayabileceimiz dizileri (Array) sunmaktadr.

Bir dizi tanmlamann genel yazm ekli yledir:

tip[] diziismi = new tip[elemansayisi];

tip: dizide tutulacak verilerin tipidir.

diziismi: dizinin ismi.

boyut: dizide tutulacak eleman says. 5 elemanl tam saylar dizisi tanmlamak istersek:

int[] sayilar = new int[5];

Dizilere veri atamak istersek:

diziismi [indeks] = deer;

indeks: dizideki verilere verilen sra numaras. C#ta indeksler sfrdan balar.

Dizilerden deer okumak iin ise:

deiken = diziismi [indeks];

rnein 10 kiilik bir snftaki rencilerin notlarn her renci iin bir not deikeni oluturup
tutmak yerine notlar dizisi ierisinde tutabiliriz.

byte[] notlar = new byte[10];

Bu ekilde notlar isminde 10 tane byte deeri tutabilecek bir dizi tanmladk. imdi notlar diziye
aktaralm.

notlar[0] = 50;
notlar[1] = 60;
notlar[2] = 90;
notlar[3] = 40;
notlar[4] = 60;
notlar[5] = 30;
notlar[6] = 40;
notlar[7] = 70;
notlar[8] = 60;
notlar[9] = 100;
128 Blm 9

ekil 9.1

notlar dizi deikenindeki 5 numaral Ahmetin notunu okuyalm:

byte ahmetinNotu;
ahmetinNotu = notlar[5];

Btn deerlere tek tek erimek, eer bu deerler bir ka tane ise pek sorun olmayacaktr. Fakat
tmn listelemek istersek bu yntem pek uygun olmayacaktr. Bunun iin foreach dngs kul-
lanlabilir. imdi foreach dngs ile tm elemanlar ListBox ta gsterelim:

foreach(byte not in notlar)


{
listbox1.Items.Add(not);
}

foreach dngs bir dizi zerinde ilem


yaparken, dizi elemanlar sadece okunur
durumdadr, deerleri deitirilemez.

Bir diziyi ilk deerleri vererek de tanmlayabiliriz.

tip[] diziismi = { deer1, deer2, deer3.... deerN};

Bu ekilde ssl parantezler ierisinde dizinin btn deerleri girilir ve dizinin boyutu da N olur.

byte[] notlar = { 50, 60, 90, 40, 60, 30, 40, 70, 60, 100 };

imdi dizide bulunan notlarn aritmetik ortalamasn alalm. Bunun iin dizideki her eleman genel-
Toplam isimli bir deikene aktaracaz. Sonuta genelToplam dizi mevcuduna blp aritmetik
ortalamay elde edeceiz.

byte[] notlar = { 50, 60, 90, 40, 60, 30, 40, 70, 60, 100 };
int genelToplam = 0;
int ortalama;

foreach (byte not in notlar)

{
genelToplam += not;
}
ortalama = genelToplam / notlar.Length;

MessageBox.Show(Aritmetik Ortalama :+ortalama.ToString());

imdi Blm 4te Veri Tipleri konusunda string hakknda rendiimiz bir cmleyi hatrlayalm:
String bir char dizisidir.
Diziler 129

Dolaysyla string bir ifadeyi foreach ile evirip harflerine teker teker ulaalm. rnek olarak kulla-
ncnn girdii bir ifadeyi tersten yazdralm.

string kelime = txtKelime.Text;


string tersKelime = ;
foreach (char harf in kelime)

tersKelime = harf.ToString() + tersKelime;


}
MessageBox.Show(tersKelime);

Baz Dizi zellikleri ve Metotlar


Diziler, .NET Framework iinde tanml Array snf temsil eder. Tm diziler Array snfnda tanml
zellikleri ve metotlar kullanrlar. Bu metotlardan ve zelliklerden en sk kullanlanlar:

Length
Dizinin saklayabilecei toplam eleman saysn veren zelliktir.

string[] isimler = new string[20];


MessageBox.Show(isimler.Length.ToString());
//Sonu = 20

Clear
Parametre olarak verilen dizinin, belirtilen indeks aralndaki tm deerlerini 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 = {50, 63, 64, 75};


//1 nolu elemandan itibaren 2 eleman siler

Array.Clear(dizi, 1, 2);

MessageBox.Show(dizi[2].ToString());
//Sonu = 0

// Dizideki tm elemanlar siler


Array.Clear(dizi, 0, dizi.Length);

Reverse
Parametre olarak verilen dizinin eleman srasn tersine evirir. Dizinin tm elemanlarnn veya
belirli indeks aralndaki elemanlarnn sras tersine evrilebilir.

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

Array.Reverse(harfler);

MessageBox.Show(harfler[2]);
// Sonu = A
130 Blm 9

Sort
Parametre olarak verilen dizinin elemanlarn kkten bye sralar. Eer dizi numerik ise ra-
kamlarn byklne gre, yaz tiplerinde ise ba harflerine gre sralanr. Reversen tersidir.

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


Array.Sort(harfler);

MessageBox.Show(harfler[2]);
// Sonu = C

IndexOf
lk parametrede verilen dizide, ikinci parametrede verilen deeri arar. Aranan deer dizide bulu-
nursa bulunan elemann indeks deeri, bulunamazsa -1 dndrr.

decimal[] sonuclar = {78, 99, 100, 12.2};


decimal maksimum = 100;
MessageBox.Show(Array.IndexOf(sonuclar,maksimum).ToString());

// Result= 2

Lab 9.1 Saysal Loto


1. Yeni bir Windows projesi an ve ismini SayisalLoto olarak deitirin.
2. Formunuza Tablo 9.1deki kontrolleri ekleyin.

Tablo 9.1
Name Text
Label lbl1 1.Sayi
Label lbl2 2.Sayi
Label lbl3 3.Sayi
Label lbl4 4.Sayi
Label lbl5 5.sayi
Label lbl6 6.sayi
Button btnBaslat Balat

3. Formunuzun grnts ekil 9.2deki gibi olmaldr.

ekil 9.2

4. Amacmz btnBaslat adl Buttona tklandnda 1-49 aras 6 farkl sayy Label kontrolleri
aracl ile form zerinde grntlemektir. imdi btnBaslata ift tklayarak kod penceresine
gein ve gerekli kodlar olayna yazn:

private void btnBaslat_Click(object sender, EventArgs e)


{
Diziler 131

// Boyutu 6 olan int array i tanmlayn.


int[] sayilar = new int[6];
//Random tipinden bir deiken oluturun.
Random r = new Random();
//int tipinden bir deiken oluturun ve ilk deerini 0 olarak
atayn.
int counter = 0;
//Bir while dngs tanmlayn ve koul olarak counter<6 olarak
belirtin.
while (counter<6)
{
//int tipinden bir deiken oluturun ve deerini Random
deikenin 1 ile 49 aras rettii tamsayya eitleyin.
int sayi = r.Next(1, 50);
//Sayi adl deikenin deerinin sayilar adl dizide var
olup olmadn Array.IndexOf metodu ile kontrol edin.
if (Array.IndexOf(sayilar, sayi) == -1)
{
//Eer sayi adl deikenin deeri sayilar dizisinde
yoksa dizinin counter numaral esine sayi deerini eitleyin.
sayilar[counter] = sayi;
//counter 1 arttrn.
counter++;
}
}
//Sayilar dizisini kkten bye dzenleyin.
Array.Sort(sayilar);
//Label kontrollerine sayilar dizisindeki deerleri sra ile
yazdrn.
lb1.Text = sayilar[0].ToString();
lbl2.Text = sayilar[1].ToString();
lbl3.Text = sayilar[2].ToString();
lbl4.Text = sayilar[3].ToString();
lb5.Text = sayilar[4].ToString();
lb6.Text = sayilar[5].ToString();
}

5. Uygulamada kullandmz IndexOf metodu ilk parametre olarak ald dizi iinde ikinci para-
metre olarak ald deeri arar ve eer bu deer varsa deerin bulunduu indeksi yoksa -1 i
geri dndrr.
6. Uygulamay altrn ve Label kontrollerinde grnen saylarn birbirinden farkl ve sralanm
bir biimde olduunu gzlemleyin.
132 Blm 9

devler
1. Kullancnn girdii TC.Kimlik numarasnn geerli olup olmadn kontrol eden bir uygulama
hazrlayn. Geerli bir TC.Kimlik numarasnda ilk 10 hanenin toplamnn birler basamandaki
rakam kimlik numarasnn son hanesindeki rakama eit olmaldr.
2. Kullancnn TextBox kontrolne girdii ifreyi belli kriterleri kullanarak zayf, orta veya kuvvetli
ifre olarak tanmlayan bir Windows uygulamas gelitirin.
Kriterler

Girilen ifre 6 karakterden az ise zayf ifredir.


Girilen karakter says 6 ve daha fazla ise ve,
Sadece saylardan veya sadece harflerden oluuyorsa zayf ifredir.
Rakam ve harflerden oluuyorsa orta kuvvetli ifredir.
Rakam,harf ve alfanumerik karakterler(*,?,+,#,&,!,) ieriyorsa kuvvetli ifredir.
10 Metotlar
10 Metotlar
Metot Nedir?

Metotlar Kullanmak

Parametreler

Kendi Metodumuzu Yazmak

Metot Overload

Lab 10.1 Hesap Makinesi

Lab 10.2 Hepsini Temizle

Lab 10.3 IsNumeric

devler
Metotlar
Bu blmde birok programlama dilinin olduu gibi C#n da temel kavramlarndan olan metotlar
detaylar ile inceleyeceiz. Metotlarn tanmlar ve kullanm, parametrelerin zellikleri rneklerle
ilenecektir.

Bu blm tamamlandktan sonra:

Metot kavramn renecek,


Problem zmede metotlarn yerini kavrayacak,
Parametrelerin tiplerini ve kullanm yerlerini reneceksiniz.

Metot Nedir?
Program yazarken belli bir ii yapan kod blounu bir ka kez kullanmak gerekebilir. Bunun iin
ayn kod blounu tekrar yazmak yerine bunu bir metot olarak hazrlarz ve ihtiya duyduumuz
yerde metot ismi ile ararak altrabiliriz. Bu bize daha az kod yazma imkn salayp zaman
kazandrd gibi, olas deiikliklerde de daha az hata yapmamz salar.

Bir muhasebe program yazdmz ve maa hesaplamalarn programmzn birok yerinde kul-
landmz dnelim. Maa hesaplamas yapan kod blounu metot
olarak tanmlayp ilgili yerlerde bu metodu altrarak iimizi kolayca
halledebiliriz.

Metotlara rnek vermek gerekirse u ana kadar kullanlan TextBoxn


Focus metodu, ComboBoxn Clear (Items.Clear) metodu, Randomn ekil 10.1
Next metodu verilebilir. Metotlar ekil 10.1de grld gibi Visual
Studio IntelliSensede mor renkli kutucuklar olarak tanmlanrlar.

Metotlar Kullanmak
Baz metotlar geriye deer dndrr, bazlar ise dndrmez. Geriye deer dndrmeden kast
udur: u ana kadar birok rnekte Random snfn kullandnz. Random snfnn Next adl bir
metodu vardr. Bu metot, ardnzda size bir sonu retir ve siz onu programnzda uygun
yerlerde kullanrsnz. Baka bir rnek de MessageBox snfnn Show metodudur. Show size Dia-
logResult cinsinden bir deer dndrr ve siz onu yakalayp ilemlerinizi yaparsnz. Bir metodun
geriye hangi tip deeri dndrecei Visual Studio IntelliSensete kolaylkla grlebilir:

ekil 10.2 ekil 10.3

Grld gibi ekil 10.2deki metot DialogResult tipinden, ekil 10.3teki metot ise int tipinden
bir deer dner.

Geriye deer dndren metotlar kullanmak iin genellikle u yol izlenir:

MetodunDneceiTip degiskenAdi;
degiskenAdi=metot;

Bu yap kullanlarak ekil 10.3teki metot, arlmak ve dnen deeri yakalanmak istenirse u
ekilde bir kod yazlabilir:
136 Blm 10

1 Random rastgele=new Random();


2 int sayi;
3 sayi = rastgele.Next(1,101);
4 label1.Text=sayi.ToString();

1 nolu satrda daha nceki rneklerden de hatrlayacanz bir rastgele say retici oluturuldu.

2 nolu satrda ise Next metodunun dnd veri tipine sahip bir deiken oluturuldu.

3 nolu satrda ise 2 nolu satrdaki deiken yazlp, eittir iaretinin sa tarafnda metot yazld.
Bylelikle metottan dnen deer bu deikene atand.

4 nolu satrda ise deer, ekranda gsterildi.


Baz metotlar ise geriye deer dndrmezler. Bunlara
Yazlma yeni balayanlarn ok sk yaptklar
bir hata geriye deer dnen bir metodu kul- void denir. Bir metodun geriye deer dndrmedii ekil
lanp, onu bir deikene eitlememesidir. 10.4teki gibi, Visual Studio IntelliSensede rahata gr-
lebilir.

ekil 10.4

voidleri kullanmak olduka kolaydr. Tek yaplmas gereken isminin yazlmasdr. rnein bir
TextBoxn ieriini temizlemek iin Clear metodunu altrmaya ihtiya vardr.:

textBox1.Clear();

Grld zere voidler bir deikene atanmadan direk altrlrlar.

Parametreler
Parametreler, metotlarn istenilen ilemi yapabilmesi iin kullanc tarafndan deerleri verilmesi
gereken deikenlerdir. Bir metotta istenilen parametrelerin saysna ve bu parametrelerin veri
tiplerine o metodun imzas denir.

rnein Random snfnn Next metodu geriye istenilen aralkta bir rastgele say dndrmek iin
en dk deer ve en yksek deer iin int tipinde iki adet deer bekler.

ekil 10.5

Bu deerleri 1 ve 101 olarak vermek iin kod u ekilde yazlabilir:

sayi = rastgele.Next(1,101);

Grld gibi bir metot birden fazla parametre alyorsa bu deerler girilirken virgl iareti ile
ayrlr.

Baka bir rnek olarak System.Dignosistics.Process.Start metodu verebilir. ekil 10.6daki gibi bu
metoda IntelliSense ile bakld zaman string veri tipinde bir deer bekledii grlr.
Metotlar 137

ekil 10.6

Bu metot u ekilde altrlr:

System.Diagnostics.Process.Start(calc);

ya da

System.Diagnostics.Process.Start(textBox1.Text);

Kendi Metodumuzu Yazmak Eer bir metot parametre istemiyorsa onu


Bir metot u ekilde tanmlanr: armak iin metot ismi yazldktan sonra
parantez alr ve kapatlr. Temizle() gibi...

tip metotismi( parametrelistesi )


{
yaplacak iler;
}

tip: Metodun geriye dndrecei deerin tipidir. An-


cak metot geriye deer dndrmyorsa buraya void
yazlr.

metotismi: Metoda verilen isimdir. Metot yazldk-


tan sonra bu isimle arlacaktr.

parametrelistesi: Metot ierisine gerekli hesapla-


malarn yaplmas iin dardan verilebilecek de-
erlerdir.

Bir metot, ekil 10.7deki gibi geriye deer dndr-


ekil 10.7
me ve parametre alma durumuna gre drt farkl
ekilde tanmlanabilir.

lk olarak verilen bir saynn karesini alan yani o sayy kendisi ile arpan bir metot yapalm. Meto-
dun ad KareAl, geriye dndrecei veri tipi int ve alaca parametre veri tipi de int olsun.

int KareAl(int sayi)


{
int sonuc;
sonuc=sayi*sayi;
return sonuc;
}

rnekte grld gibi nce fonksiyonun geriye dndrecei veri tipi belirtilir. (int) Daha sonra
metoda isim verilir. (KareAl). Parantezler ierisinde metot ierisine gnderilecek parametrelerin
veri tipi ve ismi belirtilir. (int sayi)

Metot ierisinde gerekli ilemler yapldktan sonra geriye deer dndrebilmek iin return ifadesi-
ni kullanlr. Eer return ifadesi yazlmazsa veya her durumda almayacak bir ekilde yazlrsa
(mesela bir if blou ierisine) uygulama hata verir ve derlenmez. return ifadesi metodun alma-
sn durdurur ve sandaki deeri geriye dndrr.
138 Blm 10

Uygulama, return ifadesini grdkten sonra metodu altrmay brakr. Bu yz-


den return ifadesi kullanldktan sonraki yazlan kodlar almayacaktr. Bu durum
size Visual Studio tarafndan Unreachable code detected uyars olarak verilir.

Geriye deer dndrmeyen bir metot ise u ekilde yazlabilir:

void Temizle()
{
textBox1.Clear();
textBox2.Clear();
comboBox1.Items.Clear();
}

lk olarak metodun bir deer dndrmediini belirtmek iin void kelimesi kullanlr. Sonra metoda
isim verilir. Daha sonra parantezler ierisine parametreler yazlr. (Bu rnekte metodun paramet-
reye ihtiyac yoktur)

voidlerde, geri deer dnen metotlardan farkl olarak return ifadesi kullanmak zorunlu deildir.
Ancak istenilirse kullanlabilir. Return ifadesi voidlerde metottan kmak iin kullanlr.

void Sil(bool eminMi)


{
f(eminMi==false)
{
//eminMi parametresinin deeri false gelirse metodun //geri kalan
almaz.
return;
}
//silme ilemi yapan kodlar...
}

Metot tanmlarken dikkat etmeniz gereken bir dier konu da, metotlarn sadece kendi ilerini yapa-
cak ekilde tasarlamak olacaktr. Yani bir metoda hem toplama ilemi hem de sonucu TextBoxa
yazdrma grevi vermemek gerekir. Bu durum metodun kullanl olmasn engeller. rnein:

1 int topla(int sayi1, int sayi2)


2 {
3 int toplam = sayi1 + sayi2;
4 txtToplam.Text = toplam.ToString();

5 return toplam;
6 }

4 nolu satr metodu txtToplam adl TextBox kontrolne baml hale getirdiinden fonksiyonel
olma zelliini kaybetmitir.

Metot Overload
Methot Overload (metotlar ar ykleme), bir metodun birden fazla, farkl imza ile tanmlanmas-
dr. Daha farkl bir anlatmla ayn isimli metodun birden fazla farkl parametre imzas almasdr.
Metotlar 139

Gncel hayattan bir rnek ile konuyu aalm. Biri size Benim doum tarihim 6.5.1980. Ben ka
yandaym? diye sorabilir. Ayn soru Benim doum ylm 1980. Ben ka yandaym? olarak da
sorulabilir. Aslnda burada iki farkl hesaplama sz konusudur. Birincisinde gnmzdeki yldan
verilen deerdeki yl bulunarak kartlr. kincisinde ise gnmzdeki yldan dorudan verilen de-
er kartlr. Bu iki farkl hesaplama dolays ile iki farkl metot gerektirir. Bu metotlar kod olarak
yazmak istersek u ekilde yazabiliriz:

int TariheGoreYasHesapla(DateTime tarih)


{
int sonuc;
int dogumYili=tarih.Year;
sonuc = DateTime.Now.Year - dogumYili;
return sonuc;
}

int YilaGoreYasHesapla(int yil)


{
int sonuc;
sonuc = DateTime.Now.Year - yil;
return sonuc;
}

Ancak grld gibi bu iki metodun da amac ayndr: Ya Hesaplamak! C#, parametrelerin im-
zas ayr olduu srece birden fazla metoda ayn ismi verme olanan tanr.

Bu bilgi nda kodlar u ekilde yazlabilir:

int YasHesapla(DateTime tarih)


{
int sonuc;
int dogumYili=tarih.Year;
sonuc = DateTime.Now.Year - dogumYili;
return sonuc;
}

int YasHesapla(int yil)


{
int sonuc;
sonuc = DateTime.Now.Year - yil;
return sonuc;
}

Artk sadece YasHesapla ismi kullanlarak iki metot da arlabilir. Eer metoda DateTime tipinde
bir deer gnderirseniz ilk metot, int veri tipinde deer gnderirseniz ikinci metot alacaktr. Vi-
sual Studioda bir metodun ka overloadu olduu grlebilir. Ayrca bu metodun overloadlarnn
istedii imzalar IntelliSensede aa-yukar ok tular ile gezilebilir.
140 Blm 10

ekil 10.8 ekil 10.9

Overloadlarn kullanlma nedeni yazlmcy metot kargaasndan kurtarmaktr. ekil 10.10da


grld gibi MessageBox snfnn Show metodunun 21 tane overload vardr.

ekil 10.10

MessageBoxn kullanmn hatrlayn. Bazen sadece ekranda mesaj olarak grnmesi gereken
metni verirken, bazen metnin yannda pencere baln, bazen pencerede gzkecek ikonu,
bazen de Yes-No, OK gibi gsterilecek dmeleri veriyoruz. Aslnda bunlarn hepsi ayr ayr me-
totlardr. Eer MessageBoxn Show metodunda overload kullanlmasayd,

MessageBox.SadeceMetinGoster(Merhaba Dnya);
MessageBox.MetinVeBaslikGoster(Merhaba Dnya,lk Programmm);
MessageBox.MetinBaslikVeDugmeGoster(Merhaba Dnya,lk
Programmm, Buttons.YesNo);

gibi kargaaya yol aan bir ok metot kullanlacakt. Oysa overload sayesinde sadece Show me-
todunu kullanp parametrelerini deitiriyoruz.

Lab 10.1 Hesap Makinesi


Bu rneimizde 4 ilem yapabilen bir hesap makinesi uygulamas gelitireceiz. Uygulamamzda
karar yaplarn, try...catch ifadesini ve metot yazmay inceleyeceiz.

1. Yeni bir Windows projesi an ve ismini HesapMakinesi olarak deitirin. Formunuzun g-


rnts ekil 10.11deki gibi olmaldr.

ekil 10.11

2. Formunuza Tablo 10.1 deki kontrolleri ekleyin.

Tablo 10.1
Name Text
Label lblSayi1 lk Sayi
Label lblSayi kinci Sayi
Label lblIslem lem
TextBox txtSayi1
TextBox txtSayi2
ComboBox cmbIslem
Button btnIslemYap lem Yap
Metotlar 141

3. ncelikle btnIslemYapa tklandnda kullanlacak bir metot hazrlayn. Kod penceresine ge-
in ve gerekli kodlar yazn.

//3 parametre alan ve geriye deer dndrmeyen bir metot


tanmlayn.
void IslemYap(int ilkSayi, int ikinciSayi, string islemTipi)
{
//Islemin sonucunu tutacak bir deiken tanmlayn ve ilk deerini
0 olarak atayn.
int sonuc = 0;
//Kullancnn cmbIslemden seecei ileme gre parametre olarak
aldnz ilkSayi ve ikinciSayiyi ileme sokun.
switch (islemTipi)
{
case Topla:
sonuc = ilkSayi + ikinciSayi;
break;
case kar:
sonuc = ilkSayi - ikinciSayi;
break;
case arp:
sonuc = ilkSayi * ikinciSayi;
break;
case Bl:
sonuc = ilkSayi / ikinciSayi;
break;
default:
break;
}
//Sonucu gsterin
MessageBox.Show(sonuc.ToString());
}

4. btnIslemYapa ift tklayn ve kod penceresine geerek btnIslemYapn Click olayna gerekli
kodlar yazn.

private void btnIslemYap_Click(object sender, EventArgs e)


{
//Kullancnn 0 ile blme yapmasn engelleyin.
if (Convert.ToInt32(txtSayi2.Text) == 0 && cmbIslem.Text =
Blme)
MessageBox.Show(0 ile blme yaplmaz);
else
{
//Kullancnn girdii deerlere gre ilemi yapmay
deneyin.
142 Blm 10

try
{
IslemYap(Convert.ToInt32(txtSayi1.Text), Convert.
ToInt32(txtSayi2.Text), cmbIslem.Text);
}
//Islem Yap metodunun bir hata ile karlamas durumunda
(Kullancnn herhangi bir TextBox kontroln bo gemesi veya bu
kontrollere say haricinde veri girmesi) uyar verin.
catch (Exception)
{
MessageBox.Show(Veri uyumuyor);
}
}
}

Lab 10.2 Hepsini Temizle


Bu rneimizde Form iindeki TextBox kontrollerinin ieriini temizleyen bir metot hazrlayaca-
z.

1. Yeni bir Windows projesi oluturun ve ismini TextBoxTemizle olarak deitirin. Formun g-
rnm ekil 10.12deki gibi olmaldr.

ekil 10.12

2. Formunuza Table 10.2deki kontrolleri ekleyin.

Tablo 10.2
TextBox txt1 1.Textbox
TextBox txt2 2.Textbox
TextBox txt3 3.Textbox
TextBox txt4 4.TextBox
Button btnTemizle Temizle

3. Kod penceresine geerek TextBoxTemizle adl metot iin gerekli kodlar yazn.

private void textBoxTemizle()


{
//Form1deki tm kontrollere foreach dngs ile eriin.
foreach (Control c in this.Controls)
{
Metotlar 143

//Eer kontrol TextBox ise Textini temizleyin.


if (c is TextBox)
{
c.Clear();
}
}
}

4. btnTemizle ift tkland zaman textBoxTemizle adl metodu arn. btnTemizleye ift tkla-
yn ve kod penceresinde btnTemizlenin Click olayna gerekli kodlar yazn.

private void btnTemizle_Click(object sender, EventArgs e)


{
//textBoxTemizleyi arn.
textBoxTemizle();
}

Lab 10.3 IsNumeric


1. Yeni bir Windows projesi an ve adn NumaraTest olarak deitirin.
2. Tablo 10.3 teki kontrolleri formunuza ekleyin.

Tablo 10.3
Name Text
Button btnTest Test Et
TextBox txtGirilen -

3. imdi NumberTest isimli metot iin gerekli kodlar ekleyin:

public bool NumberTest(object value)


{
try
{
int i = Convert.ToInt32(value);
return true;
}
catch (Exception)
{
return false;
}
}

Bu metot parametre olarak ald deeri try blou ierisinde sayya dntrmeye altrmak-
tadr. Eer olumlu sonu alrsa true deer dnecektir. Bu deeri sayya dntremezse catch
blou alacak ve false deer dnecektir.

4. imdi btnTest isimli Button un zerine ift tklayarak kod penceresine gein ve btnTest in
Click olayna gerekli kodlar ekleyin:
144 Blm 10

private void btnTest_Click(object sender, EventArgs e)


{
if (NumberTest(txtGirilen.Text))
{
MessageBox.Show(Say girildi..);
}
else
{
MessageBox.Show(Say girilmedi!);
}
}

if yaps ierisinde koul olarak NumberTest metodu arlmaktadr. Eer bu metottan dnen
deer true ise Say girildi.. mesaj grntlenecektir. Eer bu metottan dnen deer false ise
Say girilmedi! mesaj grntlenecektir.

devler
1. Girilen say dizisindeki tek saylar, ayr bir dizide sralayan uygulamay yazn.
2. Bir TextBoxa say girilirken, girilen sayy basamaklara ayran ve aralarna nokta koyan
uygulamay yazn. (basamaklar er er ayrlacak ve aralarna nokta konulacaktr. Bu ilem
rakamlar girilirken yaplacaktr.)
3. Dviz kurlarna gre, girilen cret miktarn Trk Liras(YTL), Euro() ve Dolar($)a eviren
uygulamay yazn.
11
String Math
DateTime
Metotlar
11 String Math Date-
Time Metotlar
String

ToCharArray

Math

DateTime

IsLeapYear

Lab 11.1 Ka Gndr Yayorum

Lab 11.2 Kayan Yaz

Lab 11.3 Kelimeyi Ters evir

Lab 11.4 lk Harf Byk

Lab 11.5 Metot alma Zaman

devler
String Math DateTime Metotlar
Bu blmde .NET Framework ierisinde en sk kullanlan metotlar inceleyeceiz. Bu metotlar
ana blmde ele alacaz. Karakter tabanl ilemler iin String, matematiksel ilemler iin Math
ve tarih ile ilgili ilemler iin de DateTime balklar altnda metotlar tek tek aklayp rneklendi-
receiz.

String
Compare
Compare metodu iki string ifadeyi karlatrmak iin kullanlr. lk parametre deeri ikinci para-
metre deerinden byk ise 1, kk ise -1 deerler eit ise 0 dndrr.

Tanm:

int Compare ( string strA, string strB)

rnek:

int sonuc = string.Compare(a, b);


//sonuc -1

int sonuc = string.Compare(b, a);


//sonuc 1

int sonuc = string.Compare(a, a);


//sonuc 0

Contains
Contains metodu, string ifadeler iinde arama yapmak iin kullanlr. Parametre olarak verilen
string deer Contains metodunu aran string deer iinde mevcut ise geriye true, deilse false
dndrr.

Tanm:

bool Contains(string str);

rnek:

string cumle = Bilgeadam Bilgi Teknolojileri;


string kelime1 = Bilgi;
string kelime2 = Bilge;
string kelime3 = emre;

bool sonuc = cumle.Contains(kelime1);


//sonuc = true

bool sonuc = cumle.Contains(kelime2);


//sonuc = true
148 Blm 11

bool sonuc = cumle.Contains(kelime3);


//sonuc = false

StartsWith - EndsWith
EndsWith, string ifadeler iinde arama yapmak iin kullanlan baka bir metottur. Metodu aran
string deer parametre olarak verilen string deer ile bitiyor ise geriye true, bitmiyor ise false dn-
drr. StartsWith metodu ile de parametre olarak verilen string deer ile balayp balamadn
renebilirsiniz.

Tanm:

bool EndsWith(string str);


bool StartWith(string str);

rnek:

string cumle = <b>Bu yaz kaln olacak</b>;


string kelime1 = /b>;
string kelime2 = <b;

bool sonuc = cumle.EndsWith(kelime1);


//sonuc = true

bool sonuc = cumle.StartsWith(kelime2);


//sonuc = true

IndexOf
IndexOf, string ifadeler iinde arama yapmak iin en ok kullanlan metottur. Metodu aran
string deer parametre olarak verilen string deeri ieriyor ise ilk konumun indeksini, iermiyor
ise -1 dndrr.

Tanm:

int IndexOf(string str);


int IndexOf(char c);

rnek:

string cumle = Fizik evrenin iletim sistemidir.;


char karakter = j;
string kelime = sistem;
int sonuc = cumle.IndexOf(karakter);
//sonuc = -1

int sonuc = cumle.IndexOf(kelime);


//sonuc = 22
String Math DateTime Metotlar 149

Insert
Insert metodu string deerlere belirtilen indeksten itibaren parametre olarak verilen string deer-
ler eklemek iin kullanlr. Elde edilen string deer geri dner.

Tanm:

string Insert(int indeks, string str);

rnek:

string cumle = Fizik iletim sistemidir.;


string kelime = evrenin + ;
cumle = cumle.Insert(6, kelime);
//cumle = Fizik evrenin iletim sistemidir.

Join
Join metodu string dizilerini birletirmek iin kullanlr. lk parametre deeri ile ikinci parametre
deeri olarak verilen string dizisindeki elemanlar birletirir. Geriye elde edilen string deer dner.
Bu metodun tam tersi Splittir.

Tanm:

string Join(string ayrac, string[] dizi);


rnek:

string[] dizi = {Fizik,evrenin,iletim,sistemidir}; string


cumle = string.Join( , dizi); //cumle = Fizik evrenin iletim
sistemidir;

PadLeft - PadRight
Bir string deer soldan ya da sadan yeni deerler eklemek iin PadLeft ve PadRight metotlar
kullanlr. lk parametre deeri metodu aran string deerin toplam uzunluuna eit olana kadar
ikinci parametrede verilen karakter deerini ekler.

Tanm:

string PadLeft(int uzunluk, char karakter);


string PadRight(int uzunluk, char karakter);

rnek:

string kelime = 7;
sonuc = kelime.PadLeft(2,0);
//sonuc = 07

sonuc = kelime.PadRight(2, 0);


//sonuc = 70

Remove
Remove metodu ile string bir deerin belirli bir blmn karabilirsiniz. lk parametre deeri
balang indeksini ikinci parametre deeri ise ka karakter karlacan belirtir.
150 Blm 11

Tanm:

string Remove(int indeks,int karakterSayisi);

rnek:

string kelime = HoTMaiL;


sonuc = kelime.Remove(0, 1);
//sonuc=otMail

sonuc = kelime.Remove(kelime.Length-1, 2);


//sonuc = hoTMa -- son 2 karakteri karr

Replace
Replace metodunu kullanarak string bir ifadenin belli bir parasn deitirebilirsiniz. lk parametre
deeri deiecek paray ikinci parametre deeri ise yerine geecek paray ifade eder. Elde
edilen deer geri dner.

Tanm:

string Replace(string str1, string str2)

rnek:

string ilem = 1 + 5 = 6;
ilem = ilem.Replace(1, Bir);
ilem = ilem.Replace(+, art);
ilem = ilem.Replace(5, be);
ilem = ilem.Replace(=, eittir);
ilem = ilem.Replace(6, alt);
//ilem = Bir art be eittir alt

//istenmeyen karakterleri silmek iin de kullanlabilir.


string kelime=merhaba@ dnya;
kelime=kelime.Replace(@,)
//kelime= merhaba dnya

Split
Split metodu, bir string deeri, parametre olarak verilen karakter ile blmek iin kullanlr. Geriye
string dizisi dner.

Tanm:

String[] Split(char karakter);

rnek:

string cumle = Yusuf,Emre,AYRILMAZ;


string[] dizi = cumle.Split(,);
//dizi[0] = Yusuf, dizi[1] = Emre v dizi[2] = AYRILMAZ
String Math DateTime Metotlar 151

Substring
Substring metodu ile string bir deerin belirtilen bir parasn elde edebilirsiniz.

Tanm:

string Substring(int indeks, int karakterSayisi)

rnek:

string kelime = Bilgeadam;


string parca = kelime.Substring(5,4);
//parca = adam

ToCharArray
ToCharArray metodu, aran string deerin karakter dizisini dner.

Tanm:

char[] ToCharArray()

rnek:

String kelime = Emre;


Char[] dizi = kelime.ToCharArray();
//dizi[0] = E, dizi[1] = m, dizi[2] = r ve dizi[3] = e

ToLower
ToLower metodu ile bir string deerin tm karakterlerini kk harfe evirebilirsiniz.

Tanm:

string ToLower()

rnek:

string kelime = BLGEADAM;


kelime = kelime.ToLower();
//kelime = bilgeadam

ToUpper
ToUpper metodu ile bir string deerin tm karakterlerini byk harfe evirebilirsiniz.

Tanm:

string ToUpper()

rnek:

string kelime = Bilgeadam;


kelime = kelime.ToUpperr();
//kelime = BLGEADAM
152 Blm 11

Trim - TrimStart - TrimEnd


Trim metodu ile string bir deerin bandaki ve sonundaki boluklar temizleyebilirsiniz. TrimStart
ve TrimEnd metotlar ile de sadece solundaki ya da sandaki boluklar temizlenebilir.

Tanm:

string Trim()

rnek:

string kelime = Bilgeadam ;


kelime = kelime.Trim();
//kelime = Bilgedadam

kelime = kelime.TrimStart();
//kelime = Bilgedadam

kelime = kelime.TrimEnd();
//kelime = Bilgedadam

Math
Ceiling
Ceiling metodu ile parametre deeri olarak verilen ondalkl say yukar yuvarlanarak tam sayya
evrilir.

Tanm:

double Ceiling(double say)

rnek:

double sayi1 = 2.1;


double sayi2 = 2.7;
double sayi3 = -2.7;
double sonuc = Math.Ceiling(sayi1);
//sonuc = 3.0
double sonuc2 = Math.Ceiling(sayi2);
//sonuc2 = 3.0
double sonuc3 = Math.Ceiling(sayi3);
//sonuc3 = -2.0

Floor
Floor metodu ile parametre deeri olarak verilen ondalkl say aa yuvarlanarak tam sayya
evrilir.

Tanm:

double Floor(double say)


String Math DateTime Metotlar 153

rnek:

double sayi1 = 2.1;


double sayi2 = 2.7;
double sayi3 = -2.7;
double sonuc = Math.Floor(sayi1);
//sonuc = 2.0
double sonuc2 = Math.Floor(sayi2);
//sonuc2 = 2.0
double sonuc3 = Math.Floor(sayi3);
//sonuc3 = -3.0

Max
Max metodu ile parametre deeri olarak verilen iki saydan byk olan elde edilir. Tm say tip-
lerinde kullanlabilir.

Tanm:

double Max(double sayi1, double sayi2)

rnek:

Double sayi1 = 90, sayi2 = 91;


Double sonuc = Math.Max(sayi1, sayi2);
//sonuc = 91

Min
Min metodu ile parametre deeri olarak verilen iki saydan kk olan elde edilir. Tm say tiple-
rinde kullanlabilir.

Tanm:

double Min(double sayi1, double sayi2)

rnek:

Double sayi1 = 90, sayi2 = 91;


Double sonuc = Math.Min(sayi1, sayi2);
//sonuc = 90

Pow
Pow metodu ile bir saynn kuvveti elde edilir. lk parametre deeri olarak verilen saynn ikinci
parametre olarak verilen sayya olan kuvveti geriye dner.

Tanm:

double Pow(double sayi1, double sayi2)


154 Blm 11

rnek:

Double sayi = 9;
Double sonuc = Math.Pow(sayi, 2);
//sonuc = 81

Round
Round metodu ile parametre olarak verilen ondalkl sayy en yakn sayya yuvarlar.

Tanm:

double Round(double sayi)

rnek:

Double sayi1 = 9.4;


Double sayi2 = 9.9;
Double sayi3 = -9.1;
Double sonuc = Math.Round(sayi1);
//sonuc = 9
Double sonuc2 = Math.Round(sayi2);
//sonuc2 = 10
Double sonuc3 = Math.Round(sayi3);
//sonuc3 = -9

Sqrt
Sqrt metodu ile parametre deeri olarak verilen saynn karekk geri dner.

Tanm:

double Sqrt(double sayi)

rnek:

Double sayi = 9;
Double sonuc = Math.Sqrt(sayi);
//sonuc = 3

DateTime
AddX
AddX metotlar ile parametre olarak verilen say deer, metodu aran tarihe eklenir.
X yerine kullanlabilecek deerler:
Years (Yl), Months (Ay), Days (Gn), Hours (Saat), Minutes (Dakika), Seconds (Saniye)
ve MiliSeconds (Milisaniye).

Tanm:

DateTime AddDays(double deger)


DateTime AddMinutes(double deger)
DateTime AddYears(deger)
String Math DateTime Metotlar 155

rnek:

//10.11.2007
DateTime bugun = DateTime.Now;
DateTime BesGunSonrakiTarih = bugun.AddDays(5);
//sonu 15.11.2007

DaysInMonth Eer verilen parametre negatif olursa tarihin eklen-


DaysInMonth metodu ile parametre deeri olarak mi deil karlm hali dner. 4 gn ncenin tarihi-
verilen yl ve ayn ka gn olduunu renebilirsi- ni bulmak iin bugun.AddDays(-4) kullanlr.

niz.

Tanm:

int DaysInMonth(int yl, int ay)

rnek:

int gunSayisi = DateTime.DaysInMonth(1996,2);


//gunSayisi = 29;

IsLeapYear
IsLeapYear metodu ile parametre olarak verilen 4 haneli yl deeri, artk yl ise geriye true, deilse
false dner.

Tanm:

bool IsLeapYear(int yl)

rnek:

bool sonuc = DateTime.IsLeapYear(2004);


//sonuc = true;
bool sonuc = DateTime.IsLeapYear(2005);
//sonuc = false;

Subtract
Substract metodu ile iki tarih arasndaki fark bulabilirsiniz.

Tanm:

TimeSpan Substract(DateTime tarih)

rnek:

// 5.4.1976
DateTime tarih1 = new DateTime(1976, 4, 5);

//bugn 10.11.2007
156 Blm 11

TimeSpan fark = DateTime.Now.Subtract(tarih1);


//fark = 11541 gn, 277000 saat ve 16620046 dakika

Lab 11.1 Ka Gndr Yayorum


Bu rneimizde girilen doum tarihine gre kullancnn hangi gn doduunu ve ka gndr
hayatta olduunu hesaplayan bir uygulama gelitireceiz.

1. Yeni bir Windows uygulamas oluturun ve ismini KacGundurYasiyorum olarak deitirin.


Form grnts ekil 11.1deki gibi olmaldr.

ekil 11.1

2. Formunuza Tablo 11.1deki kontrolleri ekleyin. lblDogumGunu ve lblYasanGun, label1 ve


label2nin sandadr.

Tablo 11.1
Name Text
TextBox txtDogumTarih
Label label1 Doduunuz Gn:
Label label2 Yaadnz Gn Says:
Button btnHesapla Hesapla
Label lblDogumGunu
Label lblYasananGun
Label label3 Doum Tarihi:

3. btnHesaplaya ift tklayarak kod penceresine gein ve btnHesaplann Click olayna gerekli
kodlar yazn.

//DateTime trnden bir deiken tanmlayn.


DateTime dogumTarih;

try
{
//txtDogumTarihe girilen deeri Datetime trne evirerek
deikene eitleyin
dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);
}
catch (Exception)
{
//Hatal bir tarih girilirse uyar verin.
MessageBox.Show(Geerli bir tarih giriniz.);
return;
String Math DateTime Metotlar 157

string ingilizceGunAdi;

//DateTime nesnesinin DayOfWeek zelliini kontrol ederek bu deerin


ingilizcesini yakalayn.
ingilizceGunAdi = dogumTarih.DayOfWeek.ToString();

//Trkesini, lblDogumGunune yazdrn


switch (ingilizceGunAdi)
{
case Sunday:
lblDogumGunu.Text = Pazar gn dodunuz;
break;
case Monday:
lblDogumGunu.Text = Pazartesi gn dodunuz;
break;
case Tuesday:
lblDogumGunu.Text = Sal gn dodunuz;
break;
case Wednesday:
lblDogumGunu.Text = aramba gn dodunuz;
break;
case Thursday:
lblDogumGunu.Text = Perembe gn dodunuz;
break;
case Friday:
lblDogumGunu.Text = Cuma gn dodunuz;
break;
case Saturday:
lblDogumGunu.Text = Cumartesi gn dodunuz;
break;
default:
break;
}

//TimeSpan trnden bir deiken oluturun ve kullancnn girdii


tarih ile bugnn tarihi arasndaki fark bu deikene atayn.
TimeSpan fark = DateTime.Now.Subtract(dogumTarih);

//double trnden bir deiken tanmlayn ve kullancnn girdii


tarih ile bugnn tarihi arasndaki toplam gn saysn bu deikene
eitleyin.
double yasananGun = fark.TotalDays;
158 Blm 11

//yasananGun lblYasananGun e yazdrn.


lblYasananGun.Text = Convert.ToInt32(yasananGun) + gndr
hayattasnz;

4. Uygulamamzda kullandmz TimeSpan tr zaman aral belirlemek iin kullanlr. Total-


Days o aralktaki toplam gn saysn belirtir. Uygulamanz altrn ve geerli bir tarih gire-
rek test edin.

Lab 11.2 Kayan Yaz


1. Yeni bir Windows projesi an ve adn KayanYazi olarak deitirin. Formunuzun grnts
ekil 11.2deki gibi olmaldr.

ekil 11.2

2. Formunuza Tablo 11.2deki kontrolleri ekleyin.

Tablo 11.2
Name Text Interval
Button btnBaslat Balat -
Button btnDurdur Durdur -
Timer timer1 - 500

3. imdi Form1 ierisinde global olarak yazi deikenini tanmlayn.

string yazi = C S H A R P ;

4. imdi Form1 in zerine ift tklayarak kod penceresine gein ve Form1in Load olayna ge-
rekli kodlar ekleyin:

private void Form1_Load(object sender, EventArgs e)


{
this.Text = yazi;
}

5. imdi btnBaslat isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnBaslatin
Click olayna gerekli kodlar ekleyin:

private void btnBaslat_Click(object sender, EventArgs e)


{
timer1.Start();
}
String Math DateTime Metotlar 159

6. imdi btnDurdur isimli Buttonun zerine ift tklayarak kod penceresine gein ve btnDurdurun
Click olayna gerekli kodlar ekleyin:

private void btnBitir_Click(object sender, EventArgs e)


{
timer1.Stop();
}

7. imdi timer1 isimli Timern zerine ift tklayarak kod penceresine gein ve timer1in Tick
olayna gerekli kodlar ekleyin:

private void timer1_Tick(object sender, EventArgs e)


{
string ilkharf = yazi.Substring(0, 1);
yazi = yazi.Remove(0, 1);
yazi += ilkharf;
this.Text = yazi;
}

Bu kod kelimemizin ilk harfini bir deiken ierisine kaydettikten sonra kelimemizin ilk harfini
silerek 1 karakter ksaltr. Daha sonra deiken ierisindeki bu harfi kelimenin sonuna ekleyerek
kayma efektini gerekletirir.

Lab 11.3 Kelimeyi Ters evir


Bu rneimizde TextBox kontrolne girilen ifadeyi tersine eviren bir uygulama hazrlayacaz.

1. Yeni bir Windows projesi an ve ismini TersKelime olarak deitirin. Form grnts ekil
11.03teki gibi olmaldr.

ekil 11.3

2. Formunuza Tablo 11.3teki kontrolleri ekleyin.

Tablo 11.3
Name Text
TextBox txtKelime
Label lblKelime Kelime:
Label lblSonuc Girdiiniz Kelimenin Tersi:
Button btnTersineCevir Tersine evir

3. btnTersCevire ift tklayarak kod penceresine gein ve btnTersCevirin Click olayna gerekli
kodlar yazn.
160 Blm 11

private void btnTersineCevir_Click(object sender, EventArgs e)


{
//kullancnn girdii yazy tutan deiken
string girilenYazi = txtKelime.Text;

//oluacak yaz bu deikende tutulacak


string tersYazi = ;

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


{
//srasyla girilenTazidaki her harf dolalp, oluan yaznn
bana atlyor.
tersYazi = girilenYazi.Substring(i, 1) + tersYazi;
}
//sonu kullancya gsteriliyor
lblSonuc.Text = tersYazi;
}

Lab 11.4 lk Harf Byk


Bu rneimizde Textbox kontrolne girilen metin ierisindeki her kelimenin ilk harfini byk harf
yapan bir uygulama hazrlayacaz.

1. Yeni bir Windows uygulamas an ve ismini BuyukHarfeCevirme olarak deitirin. Form


grnts ekil 11.4teki gibi olmaldr.

ekil 11.4

2. Formunuza Tablo 11.4teki kontrolleri ekleyin.

Tablo 11.4
Name Text
TextBox txtMetin
Label lblMetin Metin Giriniz:
Button btnCevir evir
Label lblSonuc Sonuc:

3. btnCevire ift tklayarak kod penceresine gein ve btnCevirin Click olayna gerekli kodlar
yazn.

private void btnCevir_Click(object sender, EventArgs e)


{
//sonucu tutacak deiken
String Math DateTime Metotlar 161

string sonuc=;

//kullancnn girdii deerin ,sandaki ve solundaki boluklar


alnarak girilenYazi deikenine atlr.
string girilenYazi = txtMetin.Text.Trim() ;

//girilenYazi boluk karakterinden Split edilerek kelimeler


ayrtrlr.
string[] kelimeler = girilenYazi.Split( );

//her kelime dnlr


for (int i = 0; i < kelimeler.Length; i++)
{
//kelimenin ilk harfi alnp ilkHarf deikenine atanr.
string ilkHarf = kelimeler[i].Substring(0,1);

//ilk harf haricindeki harfler sonrakiHarfler deikenine


atanr.
string sonrakiHarfler = kelimeler[i].Substring(1);

//kelimenin dzgn yazlm hali ilk harf byk, dierleri de


kk harflere evrilerek duzeltilmisKelime deikenine atanr.
string duzeltilmisKelime = ilkHarf.ToUpper() + sonrakiHarfler.
ToLower();

//elde edilen kelime sonuc deikenine eklenir ve bir sonraki


kelime iin boluk braklr.
sonuc += duzeltilmisKelime+ ;
}

//en sondaki boluk karakteri temizlenir.


sonuc = sonuc.TrimEnd();

//sonu kullancya gsterilir.


lblSonuc.Text = sonuc;
}

4. Uygulamay altrn ve txtMetine deer girerek test edin. alan uygulamann ekran grn-
ts ekil 11.05teki gibidir.

ekil 11.5
162 Blm 11

Lab 11.5 Metot alma Zaman


Bu rneimizde program iinde kullandmz metotlarn almalarnn ka saniye srdn
gsteren bir uygulama gelitireceiz.

1. Yeni bir Windows projesi an ve ismini MethodCalismaSuresi olarak deitirin. Form grn-
tnz ekil 11.06daki gibi olmaldr.

ekil 11.6

2. Formunuza Tablo 11.5teki kontrolleri ekleyin.

Tablo 11.5
Button btnCalistir altr
ListBox lsAsalSayi
Label lblBaslangic Balama Zaman:
Label lblBitis Biti Zaman:
Label lblSure alma Sresi :

3. ncelikle uygulamamzda kullanacamz ve alma sresini gzlemleyeceimiz metodu


tanmlayn. rneimizde 1-100 aras asal saylar bulan bir metot kullanacaz. Bu metot
alma sresi gzlemleyebilmemiz iin iyi bir rnek oluturacaktr. Kod penceresine gein ve
gerekli kodlar yazn.

//1-100 aras asal sayilar bulan ve asal sayilari lstAsalSayida


grntleyen bir method yazn.
private void asalSayi()
{
for (int i = 2; i < 100; i++)
{
int ortakbolenSayisi = 0;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
ortakbolenSayisi++;
}
if (ortakbolenSayisi == 0)
lbAsalSayi.Items.Add(i);
}
}
String Math DateTime Metotlar 163

4. btnCalistira ift tklayarak kod penceresine gein ve btnCalistirin Click olayna gerekli kodlar
yazn.

private void btnCalistir_Click(object sender, EventArgs e)


{
//Metot arlamdan nceki zaman aln.
DateTime baslangic = DateTime.Now;
// Metot arlmadan nceki zaman lblBaslangic a yazdrn. Daha
ayrntl hesaplama iin
//baslangic adl DateTime trnden deikenin Millisecond zelliini
de kullann.
lblBaslangic.Text += baslangic.ToLongTimeString() + : + baslangic.
Millisecond;
//Metodu altrn
asalSayi();
//Metodun almasnn bitii andaki zaman aln.
DateTime bitis = DateTime.Now;
//Metodun almas bittikten sonraki zaman lblBitis e yazdrn.
Daha ayrntl hesaplama iin
//bitis adl DateTime trnden deikenin Millisecond zelliini
de kullann.
lblBitis.Text += bitis.ToLongTimeString()+:+bitis.Millisecond;
//alma sresini elde edebilmek iin TimeSpan trnden bir
nesne tanmlayn ve baslangic ve bitti arasndaki fark bu nesneye
atayn.
TimeSpan sonuc = bitis - baslangic;
//Metodun ka milisaniye altn grntleyin.
lblSonuc.Text += sonuc.TotalMilliseconds.ToString();
}

5. alan uygulamann ekran grnts ekil 11.7deki gibidir.

ekil 11.7
164 Blm 11

devler
1. Temel olarak 4 ilem yapabilen (Daha fazla ilem yaptrabilirsiniz) hesap makinesi uygulama-
s gelitirin.
2. Finans sektr iin uygulama gelitiren yazlm takmnda yer alyorsunuz. Gnlk kurlarn
takip edildii modl yazmanz gerekiyor. Modldeki ama ondalk ksm 6 haneli elde dilen
dviz deerlerini ekranda yuvarlanm ve ondalk ksm 2 hane olarak gstermek
A
.NET Framework
MSIL CLR
Kavramlar
A .NET Framework MSIL
CLR Kavramlar
.NET Framework Nedir ?

C# Compiler Kullanarak Uygulama


Derlemek

Wizard (Sihirbaz) Yardmyla Setup


Hazrlama

Online MSDN zerinden Arama

ToString Metodu Numerik Biimlendirme


.NET Framework MSIL CLR Kavramlar
Uygulama gelitirme srecine balam olduunuz ilk 50 saat ierisinde temel olarak bir uygu-
lama gelitiricisinin hangi zelliklere sahip olmas gerektii, hangi ortamlarn kullanlabilecei ve
temel kavramlarn ne olaca konusunda bilgi sahibi oldunuz. Bu blmde ise .NET Platformunu
daha yakndan tanyacaz. Bu blmde anlatlanlar n bilgi amal olup, eitimin daha sonraki
srelerinde iinize yarayacak olan temel konular iermektedir.

.NET Framework Nedir ?


.NET Framework, dilden, iletim sisteminden ve cihazdan bamsz uygulama gelitirebilecek
olduumuz esnek, geniletilebilir ve kullanm kolay bir uygulama gelitirme platformudur.

Platform kelimesini mercek altna aldmzda ise .NET Framework n bir programlama dili ol-
madn, ierisinde eitli amalar iin gelitirilmi birok aracn bulunduu bir paket olarak de-
erlendirebiliriz.

Temel olarak .NET Framework ; CLS, CTS ve CLR olarak 3 ana aratan oluur. u an iin bu
aralardan sadece CLRn biliniyor olmas sizin iin yeterli olacaktr. CLRn ne olduu konusunda
bilgi sahibi olmadan nce .NET Frameworkn nasl dilden bamsz bir yaps olduu hakknda
bilgi sahibi olalm.

.NET Framework kitap ierisinde de bahsedildii zere 50den fazla dili desteklemektedir. Peki,
bu kadar dil, ortak bir noktada nasl buluabilmektedir? te bu noktada karmza Microsoft ta-
rafndan gelitirilen, 50den fazla dilin derleme aamasnda otomatik olarak dntrld, orta
seviyeli bir dil olan MSIL (Microsoft Intermediate Language) karmza kmaktadr. .Net Fra-
mework uyumlu dillerin derleyicileri, derleme ilemi esnasnda eer kod ierisinde herhangi bir
problem ile karlamaz ise kullanlan uygulama gelitirme dilinin kodlarn MSIL ad verilen ortak
bir dile evirmektedir.

Konunun daha rahat anlalabilmesi asndan ekil A.1 sizlere yardmc olacaktr.

ekil A.1den de anlalabilecei zere ilem 3 admda olumaktadr.

ekil A.1
168 Ek-A

Yazlan kodlar derleyici tarafndan nce MSILe dntrlmekte, daha sonra bu orta seviyeli kod
hangi platform zerinde altrlyor ise o platforma uygun makine diline evrilmektedir. Peki, bu
noktada platforma uygun makine diline evirim ilemi nasl gereklemektedir? Bu hangi ara ile
salanmaktadr? Temel yaklamla bakldnda bu noktada karmza CLR (Common Language
Runtime) isimli ara kmaktadr. CLR alma annda MSIL kodlarn belirli kurallar erevesinde
makine diline evirmekte ve uygulama altrlacak hale getirilmektedir.

Peki, bu aralar sistem zerine nasl kurulabilmektedir?

Eitim sreci ierisinde sz getii zere Microsoft tarafndan gelitirilmi, .Net Framework ad
verilen yaklak 25 MBlk bir ykleme paketi bulunmaktadr. .Net Framework ile gelitirilen bir
uygulamann dier bir makinede (rn: Arkadanzn makinesi, annenizin Notebooku, halanzn
Surface PCsi v.b.) altrlabilmesi iin minimum yaklamla bu paketin sistem zerine kurulu
olmu olmas gerekmektedir. Bu paketin yklemesi sonucunda sisteminize .NET Framework ile
gelitirilen bir uygulamann altrlabilmesi iin gereken temel aralar sisteme kurulacaktr.

C# Compiler Kullanarak Uygulama Derlemek


Bu blmde VS.NET 2008 arayzn kullanmadan Notepad zerinde yazacak olduumuz kod
blounu C# Compilern zerine gnderecek ve uygulamay derleme srecini izleyebileceiz.

Aadaki kod blounu bo bir Notepad sayfasna yazn.

using System;
public static class CSharpCompiler
{
public static void Main(string [] Args)
{
Console.WriteLine(Merhaba Dnya !);
Console.ReadLine();
}
}

Dosyay C:\ dizini altna Kodlar.txt olarak kaydedin.


Dosyay txt olarak
kaydediyoruz, exe
olarak deil !
Bir sonraki admda Balat > altra (Start > Run) u komutlar yazarak
Enter tuuna basn:

%comspec% /k C:\Program Files\Microsoft Visual Studio 9.0\VC\


vcvarsall.bat x86

Alan pencereye aadaki komutu yaznz ve Enter tuuna basn:

csc c:\Kodlar.txt

Ekran zerinde herhangi bir hata kmam ise uygulamamz derlenmi; kodlarnz altrlmak
zere MSIL kodlarna dntrlm demektir.

Uygulamay C:\Program Files\Microsoft Visual Studio 9.0\VC dizini altnda EXE yani Executable
(altrlabilir) formatta bulabilirsiniz.

Exeye ift tkladnzda ekil A.2deki ekran grntleyebilirsiniz.


Ek-A 169

ekil A.2

Bu blmde derleme ilemi iin normal artlarda VS.NETe ihtiyacmzn olmadn ama mantkl
bir yaklamla bakldnda VS.NET kullanmamann ne kadar da zor olduu ile ilgili bilgi sahibi
olmu olduk.

Wizard (Sihirbaz) Yardmyla Setup Hazrlamak


Bu blmde VS.NET zerinde tanml sihirbazlar yardmyla, gelitirmi ve yaynlamay dnd-
mz bir uygulamann Setup (Ykleme) paketinin nasl hazrlanaca ile ilgili basit ve anlalr
bir rnek hazrlayacaz.

rneimizi gelitirmeye gemeden nce bir ykleme paketinin neden oluturulmas gerektii ile
ilgili temel olarak bilgi sahibi olalm.

Gelitirmi olduumuz uygulamalar farkl bilgisayarlar zerinde altrmak isteyebiliriz.

rnein gelitirmi olduumuz bir kart oyununu MSN zerinden bir arkadamza gndererek
uygulamay arkadamz ile paylamak isteyebiliriz. Peki, bu noktada ne tip problemler ile kar-
laabiliriz?

ncelikle karlaabilecek olduumuz en temel problem; uygulamann .Net Framework ile geli-
tirilmi olmasndan dolay uygulamay gnderiyor olduumuz kiinin makinesinde bu kurulumun
gerekletirilmi olmasnn gerekliliidir. Bu kontrol ancak ve ancak uygulamay gnderiyor ol-
duumuz kiiye sorarak gerekletirebiliriz.

Bir dier yaanabilecek problem ise uygulama ile birlikte birden fazla dosyann bulunmasnn
gerektii durumlarda dosyalar tek tek gndermek, tek tek gnderilse bile bunlarn ilgili klasrlere
tek tek kopyalanmasn salamak kolay bir i deildir.

Peki, tm bu problemlere zm olabilecek yapda, hemen hemen internet zerinden indirmi ol-
duumuz tm uygulamalarn ilk altrlma srecinde karmza kan bir ykleme paketi modeli
zerinden ilerlesek hem bizim amzdan hem de uygulamay gnderdiimiz kii asndan daha
uygun olmaz myd?

te bu noktada karmza VS.NET zerinde hazr tanml olan Setup Projesi ablonlar kmak-
tadr. Bu ablonlar yardmyla birka tklama ile uygulamalarmza ykleme paketi oluturabilir,
yklenecek olan makinede yaplmas gereken tm ilemleri bu paket ierisinde tanmlayabiliriz.

Ykleme paketinin bir dier avantaj ise uygulamann yklenecek olduu sistemde .Net Fra-
mework kontroln yapmas, ayet yok ise kiiyi ilgili Download sayfasna ynlendirmesidir.

imdi daha fazla vakit kaybetmeden rnek projemizi oluturalm.


170 Ek-A

VS.NET i atktan sonra File > New > Project penceresinden ekildeki proje ablonunu seiyoruz.

ekil A.3

Bir sonraki admda karmza kan Sihirbaz penceresindeki ynergeleri izleyelim.

ekil A.4

kan sihirbaz penceresinde Create a setup for a Windows Application seeneini seelim.
Ek-A 171

ekil A.5

Next dmesine tkladktan sonra Setup paketi ierisinde hangi dosyalarn bulunacan seme-
mizi isteyecek olan bir sihirbaz penceresi karmza gelmektedir.

ekil A.6
172 Ek-A

Add dmesine tklayarak sistemimiz zerinde bulunan uygulamamz seiyoruz ve Next dme-
sine tklyoruz.

ekil A.7

Finish dmesine tklyoruz ve projeyi Build ediyoruz.

ekil A.8

Setup paketimiz hazr. Hazrlanan ykleme dosyasn projeyi atmz uygulama klasr ierisin-
de .msi uzantl olarak bulabiliriz.

ekil A.9
Ek-A 173

Online MSDN zerinden Arama


Bu blmde internet eriiminin olduu durumlarda Microsoftun evrimii yardm ktphanesi
MSDN zerinden ihtiyacmz olan herhangi bir bilgiye nasl ulaabileceimiz zerinde alaca-
z. Resimler zerinden adm adm bir MSDN aramas gerekletireceiz.

Bilindii zere MSDN Yardm ktphanesinin bilgisayarmz zerinde yaplacak ykleme sonras
kaplayaca alan en az 3-4GB olacaktr.

Ktphanenin boyutunun bu kadar byk olmasnn yan sra ktphane evrimd bir model
zerinden altndan gerekli gncellemelerinin internet zerinden srekli yaplmas gerekmek-
tedir.

nternet eriiminin olduu evrimd paketi yklemenin hi bir gerei yoktur. Ayn sonuca daha
gncel bir ekilde internet zerinden eriebiliriz.

Hzl bir ekilde konuyu rneklendirmemiz gerekirse, Bitmap snfnn nasl kullanlaca ile ilgili bir
MSDN aramas gerekletirelim ve sonucunu birlikte deerlendirelim.

nternet eriiminin olduu bir ortamda taraycmzn adres ubuuna ekil A.10daki adresi yaza-
lm.

ekil A.10

Sol st kedeki arama kutusuna Bitmap deerini yazarak Enter tuuna basalm ve kan sonu-
lardan ilkine tklayalm.

ekil A.11
174 Ek-A

kan sayfa ierisinde snfn yapsn inceleyelim. Uygun olan kod blounu deerlendirdikten
sonra rnek kodu denemek iin VS.NET ierisine alan bir projeye kodu yaptralm ve uygula-
may altralm.

ekil A.12

lgili kod blounu (C#) seerek uygulamay deneyebiliriz.

ekil A.13

ToString Metodu Numerik Biimlendirme


Tm standart .Net numerik tipleri ierisinde bulunan ToString metodu, yaps gerei numerik de-
eri alma zamannda string tipine dntrmeye yaramaktadr.

Bu dntrme ilemi esnasnda ToString metodunun Numeric Format String parametresi ze-
rinden dntrme ilemi farkl ihtiyalar dorultusunda kiiselletirilebilmektedir.

Bilgilendirmeye gemeden nce parametrenin temel kullanmn incelemek daha doru olacak-
tr.

Parametrenin temel yaps aadaki gibidir:

{N:FormatString,M}

Bu noktada sembolik olarak ifade edilen deerlerden N, parametrenin indeks deerini, FormatS-
tring saynn nasl grntleneceini, M ise alann uzunluunu temsil etmektedir.

Aadaki tabloda FormatString parametresine gelebilecek deerler ve aklamalar listelenmi-


tir.
Ek-A 175

Tablo A.1
Kullanlan Karakter Anlam
Numerik deer, lokal sistemin kullanyor olduu
C para birimi format zerinden dntrmeye
sokulur.

Deeri decimal integer formatnda grntler.


D Belirlenen deer kadar saynn bana 0 karakteri
eklenir.
E Deer stel formatta grntlenir.
F Deer sabit-noktal formatta grntlenir.
Deer sabit-noktal ya da tamsay olarak
G grntlenir. Bu noktada en uygun seim otomatik
olarak yaplmaktadr.
N Deer virglle ayrlarak grntlenir.
Deer hexadecimal notasyon kullanlarak
X
grntlenir.

Aada konu ile ilgili rnek bir kullanm gsterilmitir:

static void Main(string[] args)


{
Decimal ondalikSayi = 88.8M;
int tamSayi = 88;
Console.WriteLine(Parasal Format: + ondalikSayi.
ToString(C4));
Console.WriteLine(Decimal Integer Format: + tamSayi.
ToString(D7));
Console.WriteLine(stel Formatlama: + ondalikSayi.
ToString(E));
Console.WriteLine(SabitNoktalFormatlama:+ondalikSayi.
ToString(F5));
Console.WriteLine(Genel Formatlama: + ondalikSayi.
ToString(G));
Console.WriteLine(Virglle Ayrlm: + ondalikSayi.
ToString(N));
Console.WriteLine(Hexadecimal Notasyon: + tamSayi.
ToString(X4));
Console.ReadLine();
}

Kod blou altrldnda ekrana ekil A.14teki grnt gelmektedir:


176 Ek-A

ekil A.14

IntelliSense
C# (csharp) yaps itibariyle yazm kolay olmayan bir dildir. Bu sebepten dolay bu dili ilk defa
renecek olanlar iin hata ou zaman kanlmaz olmaktadr. Burada sz edilen hatalar ya-
zm (syntax) hatalardr. Bu hatalar en aza indirmek iin Visual Studio arayz bize IntelliSense
yazm yardmcsn sunmaktadr. Bu yardmcy iyi kullandnz takdirde hatalarn en aza indiini
greceksiniz.

Kod yazarken, ilk harfe basmanzla beraber devreye giren IntelliSense yardmc size o scope
ierisinde yazlabilecek deiken, metot, zellik gibi eleri listeler. Yazmak istediiniz e seili
hale geldiinde devamn yazmanz gerekmez. Bu durumda yapmanz gereken en mantkl adm
bir sonraki yazmak istediiniz karakteri tulamak olacaktr. rnein TextBox kontrolnn Text
zelliine metinsel bir deer atayan kodu yazacaksnz.

txtAd.Text = metinsel ifade;

t ve x harflerine basn hemen ardndan txtAdn geldiini greceksiniz. imdi yapmanz gereken
nokta . ya basmak. IntelliSense burada eksik olan ksm tamamlayacak ve noktadan sonra ge-
lecek dier kodlar listeleyecektir. Tekrar T harfine basn
IntelliSense i herhangi bir scope iinde kod TabIndex gelecek aa ok tuu ile ilerleyip Texti bulun
yazmadan aktif hale getirmek iin Ctrl + Bo-
luk tu kombinasyonunu kullanabilirsiniz.
ve eit (=) tuuna basp bir boluk verin. Bundan sonra
ift trnak iine metinsel ifade yi yazn.

Baz durumlarda IntelliSense size cevap vermeyecektir.


Bu durumlar:

Kod yazdnz satrda ya da stnde hatal kodlar olduunda,


Komut satrlarnda iken,
String bir ifadeyi yazyor iken.

Sk Yaplan Hatalar
1. C# ta satrlar mutlaka noktal virgl (;) ile bitmelidir.
Yanl

string kelime = yirmiyedi

Doru

string kelime = yirmiyedi;


Ek-A 177

2. Bir atama ilemi yaplyorsa eittir (=), karlatrma yaplyorsa ift eittir (==) kullanlmal-
dr.
Yanl

if(a = 10)

Doru

if(a == 10)

3. Karmak bir aritmetik ilem yaplyorsa parantezler ile ncelik sras belirtmek gerekir.
Yanl

int sonuc = 12 + 7 * 2; //sonu=26

Doru

int sonuc = (12 + 7) * 2; //sonu=38

4. Metotlar a kapa patantez () ile kullanlr. Eit (=) ile deer veremezsiniz. Sadece parametre-
ler aracl ile deer geirebilirsiniz.
Yanl

Math.Round = 90;
Math.Round() = 90;

Doru

Math.Round(90);

5. Eer bir metot geriye deer dndrecek ise mutlaka return ile uygun tipteki deer dndrl-
melidir.
Yanl

int toplam(int sayi1, int sayi2)


{
int sonuc = sayi1 + sayi2;
}
int toplam(int sayi1, int sayi2)
{
return int sonuc = sayi1 + sayi2;
}

Doru

int toplam(int sayi1, int sayi2)


{
return sayi1 + sayi2;
}
178 Ek-A

6. Metotlar oluturulurken parantezlerden sonra noktal virgl (;) konulmaz.


Yanl

void metod1();
{
}

string metod2(string ad);


{
}

Doru

void metod1()
{
}

string metod2(string ad)


{
}

7. for, foreach ve while dngleri ile if, switch deyimlerini tanmlarken noktal virgl (;) kullanl-
maz. Sadece do while dngsnden sonra kullanlr.
Yanl

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

while(true);
{
}

Doru

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

while(true)
{
}

do
{
}while(true);

Вам также может понравиться