Академический Документы
Профессиональный Документы
Культура Документы
C# 3.0 Ile Programlama Temelleri PDF
C# 3.0 Ile Programlama Temelleri PDF
14-5
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.
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
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 (Bulletin 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 gnmzde internetin hzl geliimi, Microsoftun yazlm hamleleri ve bu konudaki yaynlarn art ile
birlikte bilgi paylam kolaylat.
Programlamaya
Giri ve .NET
Platformu
Programlamaya Giri ve
.NET Platformu
Yazlm Nedir?
Yazlmc Kimdir?
Programlama Dilleri
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 alabilmesi iin gerekli altyapy salayan yazlmlardr. Sistem yazlmlar sayesinde uygulama gelitirici; bellek, ilemci ve dier donanm zellikleriyle uramadan kendi projesine odaklanr. letim
sistemleri bu yazlm trne rnektir.
Uygulama Gelitirme Yazlmlar: Yazlm gelitiricilerin, son kullanclarn ihtiyalarn karlamak 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 bilgisayarlarda 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 Messenger 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 versiyonlama glkleri web uygulamalarnda yaanmaz. Durum ynetimi, olaya dayal programlama, 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 performansn olumsuz ynde etkileyecektir. Bu sebeple birden fazla sunucu zerinde alan ve farkl
teknolojilerin btnleik bir ekilde alt kurumsal uygulamalar gelitirilmektedir. Bu tr uygulamalara 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.
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,
Programlama Dilleri
Dnyada konuulan her dilin amac iletiim salamaktr. Farkl kltrlerden insanlarn anlaabilmesi iin ortak konutuklar bir dil gerekir. Programlama dillerinin amac da bilgisayar ile yazlmcnn haberlemesidir. Yazlmc, bilgisayara hangi komutlarn altrlmas gerektiini bilgisayarn anlayaca dilden konuarak syler.
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 yazlmlarn bu dilde yazlmas olduka zordur, bu yzden konuma diline daha yakn, kolay anlalabilecek 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 deildir. Eer anlaml bir ekilde bir araya getirilemiyorsa, bu kelimeler hibir anlam ifade etmez.
Semantik (Anlamsal): Bir dili, kelimeleri doru bir gramer kullanm ile bir araya getirerek kullanabiliriz. Ancak konuulan kelimelerin ne iin kullanld da nemlidir. Bir programlama dilinin
zelliklerinin nasl ve ne iin kullanld da, bu dilin semantiidir.
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# programlama dilleridir.
Yksek seviye programlama dillerine Visual Basic .Net, Java ve Visual C#, dk seviye programlama dillerine ise Fortran ve C rneini verebiliriz.
ekil 1.2
Blm 1
Bilgisayarlar, icat edilmeleriyle birlikte belli bir ii yapmak iin bir dizi komutlara ihtiya duymulardr. 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 bileenler eklenerek yaplyordu. Yazlmn ilemesi iin bir devinime ihtiya vard. Eskiden yazlmlar
fiziksel olarak yazlyordu. Daha sonra fiziksel programlama yerini elektrik sinyaline brakt. Kurulan 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 defalarca 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 ifadeler (true-false) ve saysal deikenler (integer, double) kullanlmaya baland.
1959 ylnda, bu programlama dilinin zelliklerini alp, giri-k (Input Output IO) gibi yeni ilevler salayan COBOL dili ortaya kt. Daha sonra 1968 ylnda, COBOL ve FORTRAN dillerinin en
iyi zelliklerini alarak Pascal 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 birok eksiini gidermek amacyla, yeni bir programlama modeli olan nesneye ynelik programlama
- OOP (object oriented programming) ortaya karld. C dilinin ve OOP modelinin tm zellikleriyle C++ dili oluturuldu.
C++ dilini, Sun Microsystems tarafndan kartlan Java takip etti. Java dilinin kullanm alanlar,
nesneye ynelik bir programlama dili olmas ve beraberinde getirdii 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 yaygnlamasyla birlikte) en youn talep gsterdii hizmetler halini ald. Gnmze baktmzda Microsoftun
k noktasndaki hedefine byk oranda ulatn grebiliyoruz. Ancak geldiimiz noktada hzla
artan bilgisayar ve internet kullanc says, beraberinde gvenlik, iletiim, entegrasyon v.b. alanlarda eitli engellerin ortaya kmasna neden oldu.
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
gl yksek seviyeli programlama dilleri arasnda yer almlardr. Bugn, .NET platformuyla
40n zerinde programlama dili kullanlabilir.
Uygulamalarn yani yazlmlarn, sistemlerin, kurumlardaki birimlerin ve farkl kurumlarn arasndaki 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 uygulama gelitirme ve test sresinin uzamas.
Bir uygulamann farkl platformlarda altrlabilmesi iin ayn ilemleri gerekletirecek kodlarn tekrar tekrar yazlmas ihtiyac.
Microsoft 1990 ylnda, yaanacak 10 yl da ngrerek bu ve benzeri sorunlara zm sunacak, 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.
Microsoft
Visual Studio
Arayz
Yardm Kullanmak
ekil 2.1
10
Blm 2
ekil 2.2
ekil 2.3
I have read and accept the license terms seeneini setikten sonra Next dmesine tklayarak
kuruluma devam ediyoruz.
ekil 2.4
Default seeneini seip ilgili boyutlandrma seeneklerini inceledikten sonra Install dmesine
tklayarak kurulumu balatyoruz.
ekil 2.5
11
12
Blm 2
ekil 2.6
Kurulum baarl bir ekilde tamamlandnda ekilde ki ekran zerinde bulunan Finish dmesine tklayarak kurulumu sonlandrabiliriz. Opsiyonel olarak bilgisayarn yeniden balatlmasnn
istenildii durumlarda bilgisayar kesinlikle yeniden balatlmaldr.
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 sein. 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.
5. Balang sayfasn, sayfa balna basl tutarak, internet taraycsnn bulunduu sekme
grubuna tayn.
Balang Sayfas
Visual Studio alma ortamn atmz 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 zebir web taraycs olarak
kullanabilirsiniz.
rinde altnz son projelerinizi (Recent Projects) aabilirsiniz. Son
projelerde gzkmeyen bir projeyi amak iin Open
Balang sayfasn kapattktan sonra, View menProject veya yeni bir proje oluturmak iin Create
snden Other Windows alt seeneini iaretleyip
Start Page seeneine tklayarak aabilirsiniz.
Project seeneini seebilirsiniz.
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 yerleri 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 komutlar gruplanp, kiisel ara ubuu oluturulabilir.
13
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 Dockable (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 lemlerim 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
Commands
Tools
Options
File
Exit
View
Web Browser
Window
Menler
Visual Studio menleri birok uygulamann menlerine benzer niteliktedir. Men isimlerinde, belirli bir harfinin alt izilmitir. Belirtilen harfler ALT tuu ile birlikte basldnda, o menlere ksayolla ulalr. Men komutlarnn bazlarnda ise, sadece o komuta zel bir ksayol tanmldr. Bu
ksayollar CTRL veya SHIFT gibi birka tu kombinasyonu ile gerekleir.
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,
Edit Mens
Tm yaz dzenleme ilemleri iin, bu mendeki komutlar kullanlr. Text Editor ara ubuu da
bu mennn ksayoludur. Edit mensndeki komutlar ile:
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 Navigate Backward ve Navigate Forward komutlaryla en son allan satra geri dnlr.
Dier Menler
Refactor (Yeniden Dzenleme); Kod zerinde eitli deiiklikleri kolayca yapabilmemizi salayan seenekler bu men altndadr.
Project (Proje): Projeye dosya eklemek, karmak, proje zelliklerini gstermek ve referans eklemek 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 satrlar ayarlamak) gibi ilemler yaplr.
Tools (Aralar): Visual Studio ile beraber yklenen yardmc aralarn listelendii mendr. Ara
ubuklarn zelletirmek iin kullanlan Customize seenei gibi Options seenei de en sk
kullanlan zelliklerden biridir. Visual Studio alma ortamnn tm ayarlar Options mensnden
yaplr. Environment ve Text Editor en sk kullanlan seeneklerdir.
Environment (Ortam): Sayfa dzeni ve grnm ayarlar, yaz tipi (font) ve renk ayarlar, komutlar iin 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.
15
16
Blm 2
ekil 2.10
4. Sol penceredeki Environment mensnden Web Browser sekmesine gelin. Home Page metin 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 Numbers (Satr Numaralar) seeneini iaretleyin. Bu seenek, C# projelerinde alrken satr
numaralarn gsterir.
Window (Pencere): Sayfalarn ve pencerelerin grnmlerini ve zelliklerini deitirmek iin kullanlan komutlar bu men altnda bulunur. Tm ak alma sayfalar bu men altnda grld
gibi, istenen sayfa seilerek n plana getirilir. Ayrca, Close All Documents (Tm Sayfalar Kapat)
komutu ile ak olan btn sayfalar kapatlr. Auto Hide All (Tmn Otomatik Gizle) komutu ile
sabit hale getirilmi tm pencereler gizlenir.
Community (Topluluk): Yazlmclarn birbirlerine soru sorup, cevap alabilecekleri ve yazlmclar rnek kodlar, nc parti kontroller bulabilecei sitelere ynlendiren seenekler bu mende
bulunur.
Help (Yardm): Visual Studio alma ortamnda ok sk kullanlan yardm pencerelerinin grnm bu men ile salanr. Bu men ile ayrca, kullanlan Visual Studio alma ortamnn srm
hakknda bilgi alnr, son gncellemeler kontrol edilir, teknik destek iin gereken iletiim bilgilerine
ulalr.
Pencereler
Pencereler, Visual Studio iinde uygulama gelitirirken kullanlabilecek birok eleman belli gruplar halinde tutan alanlardr. alma ortamnda birok pencere bulunmasyla beraber en sk kullandklarmz, Solution Explorer, Toolbox, Object Browser, Properties, Watch, Output, Search Result, Task List pencereleridir.
Grmek istediiniz pencerelerin ounu View mensnden seebilirsiniz.
Auto Hide (Otomatik Gizle): Pencerelerin, fare zerindeyken gzkmesi ve fare ekildikten sonra gizlenmesidir.
Dockable (Sabitlenebilir): Pencerelerin, Visual Studio ortam ierisinde bir yerde sabitlenebilme
zelliidir.
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 pencerenin 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.
ekil 2.11
Properties (zellikler): Penceredeki tm elerin zellikleri, Properties komutu ile grlebilir. Bu komut seildiinde, enin zellikleri
Properties penceresi ile grntlenir. (Properties penceresi bu blmde detayl olarak ele alnacaktr.)
Solution Explorer penceresi, View mensnden grlebildii gibi, varsaylan klavye seeneklerinde CTRL-ALT-L ksayolu ile de grlebilir.
Solution Explorer penceresinde Solution blmn gremiyorsanz, Tools (Aralar) mensnden Options (Seenekler) 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.
17
18
Blm 2
Toolbox Penceresi
Toolbox (Ara Kutusu) penceresi, projelerde kullanlan eitli kontrollerin listelendii penceredir. Buradaki eler, sekmeler iinde gruplanmtr. Her sekme, ortak platformlarda alan veya benzer ilevleri
olan kontrollere sahiptir. rnein, Data sekmesinde veri taban ilemlerinde kullanlan kontroller vardr. Printing kontrolleri Windows platformunda alan projelerdeki kt ilemlerinde kullanlr.
ekil 2.12
Properties Penceresi
Properties (zellikler) penceresi, seilen bir nesnenin zelliklerini grntler. Penceredeki grnm, zellik Ad - Deeri eklindedir. Silik olarak grnen zellikler salt okunurdur ve deitirilemez. Pencerenin zerindeki alr liste, alma sayfasndaki
kontrolleri listeler. Buradan istenilen kontrol seilerek zellikleri
grntlenir.
Penceredeki zellikler kategorilere gre gruplanmtr, ancak alfabetik olarak da dizilir. Pencerenin stnde bulunan ara kutusundan Categorized (Kategoriletirilmi) veya Alphabetical (Alfabetik) seilerek zelliklerin grnmleri deitirilir.
ekil 2.13
Bir kontroln zerindeyken
F4 tuuna basnca, Properties penceresi grntlenir.
Yardm Kullanmak
Yazlm gelitirirken en ok kullanacamz kaynaklar
yardm dosyalar olacaktr. Bir programlama dilinin ok
eitli zellikleri, kullanm farkllklar olabilir. yi bir yazlmc 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 kullanm kolayl salar.
Visual Studio Yardm dosyalarnn yaps balk, ierik
ve ilikili konulardan (See Also) olumutur. Ayrca her
yardm dosyasnn altnda bulunan Send Comments
balants ile konu hakknda yorum gnderilebilir.
Visual Studio yardm pencereleri Dynamic Help, Search, Index ve Contents olarak drde ayrlr. Bu pencereler, Help mensnden ulalabilir.
ekil 2.14
Visual Studio Yardmn kullanmak iin, MSDN
(Microsoft Developer Network) yardm ktphanelerinin yklenmi olmas gerekir.
Dynamic Help
Dynamic Help (Dinamik Yardm) penceresi, ierii otomatik olarak deien bir aratr. Kod yazarken, 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 sayfada 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 gsterir.
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 istenmeyen 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.
19
20
Blm 2
Index
Yardm dosyalarndaki btn konular alfabetik srada dizer. Filtreleme ilevi, arama penceresinde 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) penceresinde 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.
3. Toolbox penceresinde, Windows Forms tabnda Button kontroln sein. Dynamic Help penceresindeki ilk konunun ismi ne olarak deiti?
4. Button seiliyken F1 tuuna basn. Alan sayfann ismi nedir?
1. Help mensnden Sync Contents komutuna tklayn. Button Members konulu yardm dosyas hangi konularn altnda bulunuyor?
2. Contents penceresinin ilk bal olan Visual Studio .NET altnda,
Gettings Assitance altnda, Using Help in Visual Studio .NET altnda, Tips for Using the Help Keyword Index konulu yardm an.
File mensnden Print komutunu sein ve sayfay yazdrn.
3. Contents penceresini kapatn.
21
Visual C# .NET
ile Windows
Tabanl
Programlama
3 Visual C# .NET
ile Windows Tabanl
Programlama
lk Uygulama
devler
lk Uygulama
Visual C#.NET ile yazacamz Windows uygulamas ekrana, Merhaba Dnya mesajn kartr.
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 grnmnde alr.
Toolbox penceresinden Button kontroln formun zerine srkleyip brakn. Properties penceresini aarak Button kontrolnn Text zelliine Hello World! yazn.
Eklenen Button kontrolne ift tklayarak kod sayfasna gein. Button kontrolne basldnda
altrlacak kodu yazn:
MessageBox.Show(Merhaba Dnya);
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 yorum satr yazn.
// MessageBoxn Show metodunu kullanarak ekrana Merhaba Dnya
yazdryoruz.
26
Blm 3
ekil 3.1
Form
Windows uygulamalar, Windows kontrollerinin tutulduu pencereler olan formlardan oluur. Bir Windows
projesi ald zaman form kontrol otomatik olarak
eklenir. kinci bir form eklemek iin Project mensnden Add Windows Form komutu seilir. Proje alt
zaman balang formu grntlenir. Balang formu
Soluton Explorerda grlen Program.cs dosyas zerinden deitirilir.
Application.Run(new frmStart());
ekil 3.2
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 uygulama, Debug mensnden Stop Debugging komutu seilerek kapatlabilir.
Form zerindeki simge durumuna kltme, ekran kaplama ve formu kapama kutularnn grnmn ve eriilebilirliini kontrol eder.
StartPosition
Form ald zaman nerede grneceini belirler. CenterScreen seenei formu ekrann ortasnda 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;
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
EventArgs e)
btnChangeColor_Click(object
sender,
System.
void
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
EventArgs e)
textBox1_TextChanged(object
sender,
System.
void
Label
Bir Windows etiketini temsil eder. Kullancya, form zerinde bir yazy gstermek amal kullanlr. 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 seilidir.
ekil 3.3
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 penceresinin en stnde bulunan ComboBoxtan kontrol semeniz yeterli olacaktr.
27
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 Collection Editor penceresinde, her enin deeri tek bir satrda yazlr.
ekil 3.5
alma annda e eklemek iin kod sayfasnda, kontroln Items zelliinin Add metodu kullanlr.
comboBox1.Items.Add(Beikta);
comboBox1.Items.Add(Galatasaray);
comboBox1.Items.Add(Fenerbahe);
comboBox1.Items.Add(Trabzon);
ekil 3.6
ListBox
Bir Windows liste kutusunu temsil eder. Kontroldeki eler sabit bir liste olarak grntlenir. ListBox kontrolne e ekleme ilemi, ComboBox kontrolndeki ilemler ile ayndr. ComboBox kontrolnden 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 gerekleeceini 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
29
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 eden oluur.
Icon (Simge): Mesaj kutusunda gsterilecek olan simgeyi ve ald zaman kartlacak sesi
belirler.
MessageBox.Show(Devam
etmek
istiyor
musun?,
MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
Uyar,
ekil 3.8
Mesaj kutusu, kapanrken hangi dmenin basldn DialogResult nesnesi ile programcya bildirir.
if(MessageBox.Show(Deiiklikler
kaydedilsin
mi?,
MessageBoxButtons.YesNoCancel) == DialogResult.Cancel)
Kayt,
{
//Eer
Cancel
alacak...
(ptal)
dmesine
tklanrsa
bu
kod
blou
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 zellikler kod tarafndan da okunup deitirilebilir.
Kontrollerin birok zellii hem okunabilir hem de deitirilebilirdir. Ancak baz zellikler salt okunur (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 olabilir. 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 txtAd, saatin gsterilecei bir Labela lblZaman gibi...
31
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.Visible = false;
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 cinsindendir.
Saysal grntlerin (Image) en kk paras olan
noktalara Piksel denir.
label1.Top = 200;
label1.Left = 150;
Metotlar
Metotlar (Methods) kontrollerin yapabilecei ilemlerdir. Yine bu blmn banda verdiimiz alar 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.Clear();
textBox1.Focus();
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 istenen eylemler Button1_Click metoduna yazlr.
Visual Studio, olaylarn metot isimlerini Kontrolsmi_Olaysmi olarak biiminde yazar.
Tasarm zaman herhangi bir
kontrole ift tkladnzda, kontroln varsaylan olay iin Vi-
Hatal veya bilerek herhangi bir kontrol iin atadnz olay iptal etmek iin kod
tarafndan ilgili metodu silmeyin. Onun yerine, Properties penceresinden kontroln ilgili olayn bulun. Olayn zerine sa tklayp Reset komutunu verin.
33
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 Propeties komutu verin)
2. Alan Properties penceresinde zerinde sar imek simgesi olan tua basn. Artk Properties 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 kullanlan 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 kontroller zerinde yaplan deiikliklere gre olaylarn alma sralarna bakn.
ekil 3.11
ekil 3.12
3. Forma bir adet Button kontrol ekleyin. Name zelliini btnYakala, Text zelliini ise Beni
Yakala olarak deitirin.
35
36
Blm 3
ekil 3.13
MouseEnter olayna ift tkladktan sonra kod ksmnda btnYakala_MouseEnter metodu oluacaktr. 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
zelliklerine atanyor.
konumu deimi oluyor.
bir fazlas yazlr. Bu
btnYakala.Left = r.Next(0,501);
btnYakala.Top = r.Next(0,501);
}
6. Uygulamay F5 tuu ile altrp gzlemleyin.
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 metot atanacaktr. Bu ilemi yapabilmek iin her Buttonnun da MouseHover olayna ekil
3.15teki gibi alan menden btnYesilUzun_MouseHover metodunu atayn.
37
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.
ekil 3.16
Tablo 3.2
Name
Text
Label
lblSaat
[--]
Button
btnKapat
[X]
Timer
tmrSaat
ekil 3.17
39
40
Blm 3
devler
1.Treeview ve Progressbar kontrollerini inceleyin. Her bir kontroln herhangi 3 metodunu, 3 olayn ve 3 zelliini aratrn.
2.ekil 3.18de grlen formu tasarlayn.
ekil 3.18
Deikenler
ve Veri Tipleri
Deikenler
Veri Tipleri
k Dizisi
Aritmetik Operatrler
devler
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 alnmasna 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, karlatrma ve atama operatrleri, parantezler kullanlamaz.
Uygulama gelitirirken hatal deiken tanm yaplmas kodun derlenmemesine yol aacaktr. Hatal baz deiken tanmlar:
Deiken isimlerinde Trke karakter kullanlrsa, farkl dil seenekli iletim sistemlerinde alma annda hata retecektir.
44
Blm 4
int int;
short (sayi);
int 333sayisi;
string kelime;
string <isim>;
Ayn tipteki deikenler tek bir satr iinde tanmlanabilir.
int numara1, numara2;
ekil 4.1
ekil 4.1deki duruma bakacak olursak; snftaki renci snf iindeki, Bilgeadam iindeki ve sokaktaki tm p kovalarn kullanabildiini grrsnz. Bilgeadam iindeki bir misafir ise Bilgeadam 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.
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 benzetebiliriz. Dardan ierisi grnmezken ierden dars grnr.
ekil 4.2
ekil 4.2deki rnekte grld gibi kod gelii gzel yazlmam, belli bloklar satr girileri braklan 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 tanmland scope ve alt scopelarnda kullanlabilir. Bu bilgiden yararlanarak rnekteki deikenler hakknda 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 ktklarnda hafzadan da silinirler bylelikle yaam dngs ( life cycle ) tamamlanm olur. rnekte 22
nolu satrda tanmlanan ortancaSayi isimli deiken 28 nolu satrda yaam dngsn tamamlam olur.
Tablo 4.2, kod bloklarndan hangi deikenlere ulaabilindiini gsterir.
Tablo 4.2
enBykSayi
ortancaSayi
Scope 1
evet
Scope 2
evet
Evet
Scope 3
evet
Evet
enKucukSayi
evet
Sabit
Sabit, srekli ayn deeri tutan deikendir. Uygulamann almas boyunca deimeyen bir
deer kullanlyorsa sabit kullanlmas, kodun
kolay okunmasn salayacaktr.
45
46
Blm 4
Sabitler tanmlandktan sonra deitirilemeyecei iin, tanmlandklar anda deerlerinin verilmesi gerekir.
const double PI = 3.14;
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. nceki 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. rnein bir lig takviminde takmlarn isimleri ve puanlar vardr. Takmlarn isimleri szel bir veri ierirken 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 bulunmaktadr.
Tamsaylar
Tamsaylar
Tip
Bit
Deer Aral
byte
0dan 255e
sbyte
-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
Int16, Int32, Int64 .NET veri tipleridir. Visual C# dilindeki karlklar short, int, long veri tipleridir.
Ondalk Saylar
Ondalk Saylar
Tip
Bit
Deer Aral
float
32
double 64
decimal 128
.NETte ondalk tipli veriler iin float ve double kullanlr. Tek duyarlkl saylar iin float, ift duyarlkl saylar iin ise double kullanlr.
47
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 ilemleri 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
char
16
string
Deer Aral
20+(n/2)*4
char veri tipi sadece tek bir karakter ierebilir. C#, dier dillerde olduu gibi 8 bitlik alanlar kullanmaz 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 desteklenmesini 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 hafzada 20 + ( 8 /2 ) * 4 = 36 bitlik alan kullanlr.
String, dier veri tiplerinden yap bakmndan olduka farkldr. lerleyen derslerimizde reneceiniz 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 ekilde 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 mantksal 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.
k Dizisi
C# dilinde metinsel ifadelerden string veri tipini kullanrken, baz belli bal karakterleri kullanamayz. 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
\n
\r
\t
\v
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 dnm ilemi tamamen .NET Frameworke braklrken, ak dnmde net bir ekilde deerin
hangi tre dntrlecei belirtilir.
1
int Toplam;
byte adet = 5;
Toplam = adet;
49
50
Blm 4
Bu rnekte tip dnm 3 nolu satrda gerekleiyor. Sa taraftaki deikenin deeri sol taraftaki 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 evirme ilemini otomatik yapar. Buna kapal dnm (implicit conversion) denir.
1
int i;
double de = 10.56;
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 yaplr. 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 evrilemeyeceinden, evrilecek tip mutlaka belirtilerek tip atamas yapmak gerekir.
1
byte yol;
byte zaman = 5;
rnekte tanmlanm tm deikenler byte tipindedir ancak 4 nolu satrdaki tip atamas yaplmazsa 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 dndrmektedir. Ancak bir arpma ileminin sonucunun byten snrlarn gemediinden eminseniz ve
srarla sonucu byte deikende tutmak istiyorsanz, yukardaki gibi yol deikenine atama ilemini gerekletirirken, tip atamasn da yapabilirsiniz.
Aadaki tip dnm tablosu, kapal dnm hangi veri tipleri iin kullanabileceinizi gsterir,
Tip
Dnebilecei Tip
sbyte
byte
short
ushort
int
uint
long, ulong
float
double
char
Ak ve kapal tip dnmlerinin yan sra System.Convert snf kullanlarak da tip dnmleri
yaplabilir.
1 double sayi1 = Convert.ToDouble(txtSayi1.Text);
2
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 uyumlu 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 bilgisayar 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);
Hata verecektir. 6.15.1980 tarihi geerli deildir nk 15.ay yoktur.
Tarih format iletim sisteminin Blgesel Ayarlarna (Regional and Language Options) gre deikenlik gsterebilir. Bu rnekte kullanlan bilgisayarn Blgesel Ayarlarnn Trkiye (Turkish) olduu varsaylmtr.
Aadaki tablo, System.Convert snf kullanlarak yaplabilecek tip dnmlerini ksaca zetlemektedir,
51
52
Blm 4
Tip Dnm
Aklama
Convert.ToBoolean()
Convert.ToByte()
Convert.ToChar()
Convert.ToDateTime()
Convert.ToDecimal()
Convert.ToInt32()
Convert.ToString()
Aritmetik Operatrler
Aritmetik Operatrler
+
Toplama
karma
arpma
Blme
Blmden Kalan
++
Arttrma
--
Eksiltme
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:
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 gelecekSene;
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 gelecekSene;
gelecekSene = ++sene;
Sonu
sene = 2001
gelecekSene = 2001
Bu rnekte ise 3 nolu satrda bir fark gryoruz. Arttrma iareti deikenden evvel yazlm. Arttrma iareti deer atamalarnda deikenden evvel eklenirse nce arttrma ilemine yaplr sonra
deikenin deeri atanr.
53
54
Blm 4
ekil 4.3
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 MultiLine zelliini true yapnz. lboxSehir adl ListBox
kontrolnn Items zelliine Istanbul ,Ankara
ve Izmir i ekleyin.
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;
}
Uygulamay altrp gzlemleyin.
ekil 4.4
Text
Label
lblSayac
Button
btnArttir
Button
btnEksilt
55
56
Blm 4
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.
txtSayi1
TextBox
txtSayi2
TextBox
txtSonuc
Button
btnTopla
Text
Topla
3. btnTopla adl Button kontrolne ift tklayp toplama ilemi iin gerekli kodlar yazn:
private void btnTopla_Click(object sender, EventArgs e)
{
}
4. Uygulamay altrn. txtSayi1e 10 ve txtSayi2ye de 20 deerini girip Topla dmesine basn. 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)
{
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
Faiz Oran
x Gn ) / 360
57
Hatalar ve
Hatalarn
Giderilmesi
5 Hatalar ve Hatalarn
Giderilmesi
Giri
Hatalar
devler
Giri
Yazlm dnyasnda kesin olan bir ey varsa, o da hatasz kod yazlamayacadr. Uygulamay 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 gerekir. 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 uygulamalarnn hatalarn, nce kendi test mhendisleri sayesinde bulur ve dzeltir. Daha sonra bu uygulamann 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 ingilizce 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 bilgisayar 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 adresinde 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 gidereceinizi greceksiniz.
Hatalar
Yazlm dnyasnda karlalan hata tipleri e ayrlr:
Derleme hatalar
Mantksal hatalar
Derleme hatalar, byk ounlukla kodlarn yanl yazlmasndan kaynaklanmaktadr. Tanmlanmayan bir deikenin kullanlmas, satr sonuna noktal virgl konulmamas, eksik ssl parantez
kullanm gibi. Bu hatalar, bulunmas en kolay hatalardr. nk kodlar derlenmez ve Visual Studio 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 syleyebilir. Bu hata bir satrda yanllkla art iareti yazmak yerine eksi iareti yazmaktan da meydana 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 yardmc 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 yazldnda gerekleir. Szdizimi hatasna rnek olarak unu verebiliriz:
C# iin deiken tanmlama kural yledir:
ekil 5.2
63
64
Blm 5
Eer ekil 5.2deki pencerede No dmesine tklarsanz, ekil 5.3te grlen Error List penceresi 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. rnein 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, szdizimi 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 etmelisiniz. 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 komShift ve B tular dier
binasyonunu kullanarak proje derlemeyi alkanlk haline getirmelisiniz. Zaman ierisinde
kazandnz deneyimle beraber derlemelerin skln biraz daha azaltabilirsiniz.
tulara nazaran daha
fazla anmtr. Eer
derleme ilemi baar ile
gerekleirse Visual Studionun en alttaki Status Barnn solunda Build Succeeded (Derleme
baar ile gereklemitir.) yazs grnr.
ekil 5.7
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.
65
66
Blm 5
Deikenin bekledii veri tipinde bir deer girmek ya da uygunsa ConvertTo, Parse gibi yntemlerle tr dntrme ilemi gerekletirmektir.
rnek:
int sayac;
sayac = textBox1.Text;
int yas;
yas=on yedi;
Burada textBox1in Text zellii string veri tipindedir. Bu deer, int veri tipindeki sayac deikenine atanmak istendiinde bu hata meydana gelir. kinci bir hata da yas adl int veri tipindeki deikene 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 comboBox1 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
ekil 5.9
67
68
Blm 5
ekil 5.10
Hata mesajnda X olarak belirtilen deiken kullanmndan daha aada bir satrda tanmlanmtr.
ekil 5.11
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)
{
}
}
69
70
Blm 5
ekil 5.12
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.
Microsoft Office iin yazdnz bir eklenti, Office olmayan bir bilgisayarda altrlmaya allabilir.
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.
Net Framework, alma zaman hatalarn, her zaman deil sadece istisnai durumlarda olutuu iin
exception (istisna) olarak adlandrlr.
Bu tip hatalara alma Zaman Hatas denir. alma zaman hatalar, uygulamalarn hatasz bir
ekilde alt koullardan daha farkl koullarn
meydana gelmesiyle oluur.
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 sadece 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 kullancya, 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 zerinden 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 girdii 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-
71
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 dnlemeyebilir. 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 zme 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 ierisindeki 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, kullancya 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 kullanlr. rnein catch blou ierisinde kullanlan ex.Message hatann verdii mesaj, ex.Source
ise hatann nerede olutuunu dner.
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 ilerleyen zamanlarnda greceksiniz.
Uygulamanzda try..catch blou kullanp, catch blou ierisini bo brakrsanz 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 hatalardr. 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 ilgilenmediini 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 yerlere 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 yazlmcnn grevidir. Mantksal hatalar yakalamak dier hata trlerini yakalamaktan daha zordur.
Yukardaki rnekte ortalama deikeninin onlarca satr sonra baka bir matematik ileminde kul-
73
74
Blm 5
Evinizde uzun zamandr kullandnz bir televizyonunuz var. lk aldnz gnden beri kumandanzdan televizyonu kapatamyorsunuz. Bir gn, bu durum cannza tak ediyor ve problemi zmesi 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 sorunu) kendisi test eder ve problemi kendisi de tasdikler. Sonra problemin neden kaynaklanabileceini 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 devreye 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 tularna 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 inceledi, 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 sorunun 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
uygulama alrken bulunabilir. Bu yzden tam hesaplamann balad yerde uygulama durdurulup, 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 koyulabilir. 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 iaretlenir.
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
ekil 5.19
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 Studio birok ara sunsa da en kullanls watch
penceresidir. Watch penceresi yazlmcya takip edecei deiken veya kontrollerin o anki
deerini, adn ve veri tipini gsterir. Watch
penceresi, uygulama sadece debug modda
ise grlr.
Watch penceresindeki satrlara izlemek istediiniz deikenleri, kontrolleri veya kontrollerin
zelliklerini yazabilirsiniz. Watch penceresinde
ekil 5.20
75
76
Blm 5
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 zelliklerinin o anki deerlerini grebilirsiniz.
ekil 5.22
Watch ekranna bir deiken ad yazdnzda, o deikenin o anki deeri Value (deer) stununda 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 yoktur. 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 zerinde sa tklama yaparak Add Watch seeneini de seebilirsiniz.
ekil 5.24
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 yazlmclara Step Into komutu ile verir.
Uygulamanz debug modda iken F11 tuuna basarsanz uygulama 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 kalmayncaya kadar bu durum devam eder. Bylelikle uygulamanzn adm adm nasl altn izleyebilirsiniz.
ekil 5.25
Uygulamanz debug modunda iken F5 (altr) tuuna basarsanz, program debug moddan kar
ve kald yerden almaya devam eder.
ekil 5.26
77
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
ekil 5.29
ekil 5.29da grld gibi uygulama bu sefer hata verip kapanmam, kullancya bir mesaj
kutusu gstermitir.
ekil 5.30
ekil 5.31
79
80
Blm 5
ekil 5.32
ekil 5.33
ekil 5.34
ekil 5.35
ekil 5.35teki gibi uyar mesaj alnd ve uygulama hata verip durmad.
81
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
void
btnGecisNotuHesapla_Click(object
sender,
EventArgs
{
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.
void
btnGecisNotuHesapla_Click(object
sender,
{
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.
EventArgs
83
84
Blm 5
ekil 5.40
Bu satrda bir mantksal hata vardr. textBox2nin deeri finalNotu deikenine atanmas gerekirken, 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
ekil 5.43
85
Algoritma
6 Algoritma
Algoritma Nedir?
Ak Diyagram
Algoritma Uygulamalar
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 zenginlik kazanrlar.
Bu blm tamamlandktan sonra:
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 kontrollerin 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 seildikten 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 kaynaktan alnabilir. Bu bilgiler salanmadan ilem devam etmez.
Kararlar
Karar ve kontrol yaplar algoritmann akn ynlendiren en nemli kavramlardr. Girilen veya
ilem sonucunda elde edilen veriler, ilemin amacna gre kontrol edilir ve sonuca gre algoritma
ak istenilen yere ynlendirilir.
lemler
Algoritmann ak boyunca veriler zerinde deiiklikler, yeni deer atamalar gibi ilemlere ihtiya duyulur. Algoritmalar kurulurken, yaplan ilemlerin yaln halde, tek tek yazlmas okunabilirlii
arttrr.
Algoritmalar adm sras ile alr ve karar yaplar sonucunda farkl bir yere ynlendirilmedii
mddete, bir sonraki adm ile ilemeye devam eder.
rnek: Telefon kulbesinden telefon amak iin rnek bir algoritma
1. Telefon kulbesine git
2. Telefon kart al
90
Blm 6
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 semboller kullanlr.
Bala Bitir
Algoritmann hangi aamadan balayacan ve ne zaman biteceini gsteren semboldr. Bir
algoritmay temsil eden ak diyagramnda, bir tane Bala ve bir tane Bitir sembol olmaldr.
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
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 gerekletirmek iin gerekli kodlar yazlmadan nce, algoritma kurulmaldr.
1. Kullancnn istedii oyun, gn ve yer bilgileri alnr.
2. Veritaban sorgulanarak, belirtilen gnde oynayan oyunun bo yerleri kartlr.
91
92
Blm 6
3. Bo yer says sfrsa, o gnde belirtilen oyun oynamyordur ya da oyundaki btn yerler satlmtr.
4. Her iki durumda da bilet kesilemedii iin ekrana hata mesaj gsterilir. Gn ve oyun bilgilerini
batan almak iin ilk etaba dnlr.
5. Kullancdan oturmak istedii yer bilgisi alnr.
6. stedii yerin dolu olup olmad kontrol edilir.
7. Yer dolu ise ekrana hata mesaj gsterilir ve yer bilgisi tekrar alnmak zere 5. etaba dnlr.
8. Yer bosa, veritabannda oyunun yer kaytlar gncellenir.
9. stenilen gn, oyun ve yer bilgilerini ieren bilet yazcdan kartlr.
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
ekil 6.10
ekil 6.11
93
94
Blm 6
dev
1. Kullanc tarafndan girilen saynn ift ya da tek olup olmadn bulan algoritmay adm adm
yazn.
2. Ak diyagramn MS Visio ile izin.
Operatrler
ve Karar
Yaplar
7 Operatrler ve Karar
Yaplar
Operatrler
if Deyimi
switch Deyimi
devler
Operatrler
Uygulama gelitirilirken bir durum karlatrmas yapmak isteyebiliriz. rnein kullancdan alnan bir bilginin doruluunu snamak isteyebiliriz. Finansman ilemlerinde eksi deerler bir anlam
ifade etmeyecei iin kullancnn girdii bilginin sfrdan byk olup olmad gibi bir snama ilikisel operatrler yardmyla snanabilir.
likisel Operatrler
==
Eittir
!=
Eit deildir
<
Byktr
>
Kktr
>=
<=
likisel ve mantksal operatrler her zaman bool tipinde bir sonu dndrrler. Dolaysyla genellikle if deyimi ile birlikte kullanlr.
Bir say tahmin oyunu yaptmz dnelim ve kullancdan TextBoxa bir say girmesini isteyelim. 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 VE
DEL
6 else
7
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.
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
3
4 if( KullaniciAdi == admin & Parola == 123 )
5
6 else
7
rnekte kullanc ad yanl girilse dahi parola da kontrol edilmektedir. Hlbuki kullanc ad yanl
girilirse parola doru girilse dahi sonu yanl kacaktr.
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 yaplmadan 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
6 else
7
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 zorundadr. 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.
99
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 deikene 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.
<<
>>
<
>
==
!=
&
^
|
&&
||
?:
<=
>=
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 )
{
}
else
{
}
koul ksmnda likisel ve Mantksal Operatrler kullanlarak bir deikenin durumu kontrol edilir.
Hatrlarsanz ilikisel ve mantksal operatrler her zaman bool tipinde bir sonu dndrr demitik. if deyimi bu sonuca gre ilgili blou altrr. if veya else deyiminden sonra sadece tek satr
yazlacaksa ssl parantezler kullanlmadan yazlabilir.
if ( koul )
else
6 }
7 else
8 {
9
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 dndrecek ve ilk scope alacaktr. Eit deil ise o zaman false deerini dndrecek ve else deyiminden 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)
101
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,
doru);
Kullanc
Ad
ve
}
else
{
}
}
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)
Parola
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 kullanlan 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;
103
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 :
rnei incelediimizde, txtAy isimli TetxBoxa girilen sayya denk gelen ksm switch deyimi tarafndan 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.
switch deyimi kullanrken dikkat edeceimiz hususlardan bir tanesi de durumunu kontrol ettiimiz deiken ile caselerde belirttiimiz sabitlerin veri
tiplerinin ayn veya uyumlu olmas gerektiidir.
case
ifadelerinde deiken
kullanlamaz.
ekil 7.1
Text
Label
lblSayi
Label
lblMesaj
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.
105
106
Blm 7
say
eer
rastgele
retilen
sayya
eitse
oyun
if (sayi == girilenSayi)
{
}
//girilen say eer rastgele retilen saydan bykse uyar uyar
verilir.
if (sayi > girilenSayi)
{
}
//girilen
verilir.
say
eer
rastgele
retilen
saydan
kkse
uyar
}
}
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();
}
ekil 7.2
Text
PictureBox
pcbResim
ProgressBar
pbDurum
Label
lblDurum
Birazdan
program
balayacak
Button
btnDevam
Devam ->
Timer
tmrYukleyici
yklemesi
107
108
Blm 7
}
else if(suAnkiDeger>20&&suAnkiDeger<=45) //21-45 arasnda
{
}
else if (suAnkiDeger > 45 && suAnkiDeger <= 70) //46-70 arasnda
{
}
else if(suAnkiDeger>70 && suAnkiDeger<=95) //71-95 arasnda
{
}
else if
arasnda
(suAnkiDeger
>
95
&&
suAnkiDeger
<
100)
//96-100
{
lblDurum.Text
buraklyor.;
Lazer
kalkanlar
devre
}
else
{
//PerformStep() metodu sayesinde art 100 asa bile hata
vermeden
//timer durdurulur
tmrYukleyici.Stop();
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();
}
ekil 7.3
Text
Label
lblSayi1
Label
lblSayi2
Label
lblSayi3
Label
lblSonuc
label1
Button
btnBasla
Start
109
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
arttrn.
ve
lblSayi2
nin
Text
zellii
ise
puan
10
puan
10
puan
+= 10;
}
//lblSayi2
arttrn.
ve
lblSayi3
nin
Text
zellii
ise
puan += 50;
}
//lblSayi3n text zellii 7 ise puan 5 arttrn.
else if (lblSayi3.Text == 7)
{
}
puan += 5;
//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;
ToString();
lblSonuc.Text
else
Puannz
puan.
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.
111
Dngler
8 Dngler
for Dngs
while Dngs
do while Dngs
foreach Dngs
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 balang 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 blenden 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
if (kalan == 0)
10
tamBolen = i;
11
asalMi = false;
12
break;
13
14
}
}
15
16
17
if (asalMi == true)
MessageBox.Show(sayi.ToString() + asaldr.);
Dngler
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 nceden 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 mahiyetinde saklayacaz.
5 nolu satrda grdnz gibi balang noktamz 2 ve koulumuz kk eittir <= deilde sadece 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 kendisini 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 altrlacak.
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 hakknda 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
5
continue;
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.
117
118
Blm 8
while Dngs
C#taki dnglerden bir dieri ise while dngsdr. while dngs bir koul salanyorken dnmeye 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 koulumuz sayac deikeninin deerinin 100 den kk veya eit olmasdr. Koul doru (true) sonucunu verdike dng iletiliyor, koulun yanl (false) deerini vermesi halinde ise dng sonlandrlyor.
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++;
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
7 nolu satrda ise saynn deeri 10a blp kendisine eitlenir. (Bir sayy sonu 0 oluncaya kadar 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 anlamna 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.
119
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.
foreach dngs bir sonraki blm olan Diziler anlatlrken ilenecektir.
ekil 8.1
Text
Label
lblGun
Gn:
Label
lblAy
Ay:
Label
lblYil
Yil:
ComboBox
cmbGun
ComboBox
cmbAy
ComboBox
cmbYil
Button
btnKontrol
3. Formun zerinde bo bir yere ift tklayarak kod penceresine gein ve Load olayna gerekli
kodlar yazn.
Dngler
cmbYil.Items.Add(i);
ekleyin.
cmbAy.Items.Add(counter);
//cmbGun adl ComboBox a 1 den 32ye kadar olan
saylar ekleyin.
cmbGun.Items.Add(counter);
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);
}
catch (Exception ex)
{
//evirme ilemi
setiniz uyars verin.
baarl
olmazsa
Geersiz
bir
tarih
121
122
Blm 8
}
}
5. Projenizi altrn ve geerli bir tarih girip Buttona basn. Ayn ilemi 31.02.1996 tarihi iin
yeniden deneyiniz.
ekil 8.2
clGazeteler
ListBox
lbOkunanlar
Button
btnSec
Text
>>
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 paneline 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)
else
{
Dngler
//Seili
ekliyoruz.
eleri
lbOkunanlar
adl
ListBox
kontrolne
lbOkunanlar.Items.Clear();
lbOkunanlar.Items.Add(gazete);
}
}
5. Foreach dngsnde, clGazeteler.CheckedItems adl koleksiyonda clGazeteler adl kontrolde seili olan tm eler bulunur. Bu koleksiyonda bulunan btn string tipindeki eler lbOkunanlar adl kontrole ekleniyor.
ekil 8.3
Text
TextBox
txtKelime
TextBox
txtMetin
Button
btnAra
Ara
Label
lblMetin
Label
lblKelime
Aranacak Kelime
123
124
Blm 8
Sayi++;
}
//Kullancya
gsterin
Kelimenin
Metin
MessageBox.Show(Girdiiniz ifade,
ToString() + kere geiyor);
iinde
metin
ka
kere
irisinde
getiini
+
Sayi.
}
4. IndexOf metodunun tek parametreli kullanmnda metot Metin ierisinde Kelimenin ilk getii
yerdeki Kelimenin ilk harfinin index numarasn geri dner. rnein Bilge Adam Bilgi Teknolojileri 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, ikinci 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 numarasn 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.
Diziler
9 Diziler
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
Diziler
Dolaysyla string bir ifadeyi foreach ile evirip harflerine teker teker ulaalm. rnek olarak kullancnn girdii bir ifadeyi tersten yazdralm.
string kelime = txtKelime.Text;
string tersKelime = ;
foreach (char harf in kelime)
{
tersKelime = harf.ToString() + tersKelime;
}
MessageBox.Show(tersKelime);
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
129
130
Blm 9
Sort
Parametre olarak verilen dizinin elemanlarn kkten bye sralar. Eer dizi numerik ise rakamlarn 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 bulunursa 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
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
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
//Sayi adl deikenin deerinin sayilar adl dizide var
olup olmadn Array.IndexOf metodu ile kontrol edin.
//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
yazdrn.
sayilar
dizisindeki
deerleri
sra
ile
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 parametre 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.
131
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
10
Metotlar
10 Metotlar
Metot Nedir?
Metotlar Kullanmak
Parametreler
Metot Overload
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 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 kullandmz 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
Next metodu verilebilir. Metotlar ekil 10.1de grld gibi Visual
Studio IntelliSensede mor renkli kutucuklar olarak tanmlanrlar.
ekil 10.1
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 DialogResult 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
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
Metotlar
ekil 10.6
ekil 10.7
lk olarak verilen bir saynn karesini alan yani o sayy kendisi ile arpan bir metot yapalm. Metodun 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 ifadesini 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 almasn durdurur ve sandaki deeri geriye dndrr.
137
138
Blm 10
Uygulama, return ifadesini grdkten sonra metodu altrmay brakr. Bu yzden return ifadesi kullanldktan sonraki yazlan kodlar almayacaktr. Bu durum
size Visual Studio tarafndan Unreachable code detected uyars olarak verilir.
txtToplam.Text = toplam.ToString();
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 tanmlanmasdr. Daha farkl bir anlatmla ayn isimli metodun birden fazla farkl parametre imzas almasdr.
Metotlar
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 deer 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 imzas 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. Visual Studioda bir metodun ka overloadu olduu grlebilir. Ayrca bu metodun overloadlarnn
istedii imzalar IntelliSensede aa-yukar ok tular ile gezilebilir.
139
140
Blm 10
ekil 10.9
ekil 10.8
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 metotlardr. Eer MessageBoxn Show metodunda overload kullanlmasayd,
MessageBox.SadeceMetinGoster(Merhaba Dnya);
MessageBox.MetinVeBaslikGoster(Merhaba Dnya,lk Programmm);
MessageBox.MetinBaslikVeDugmeGoster(Merhaba
Programmm, Buttons.YesNo);
Dnya,lk
gibi kargaaya yol aan bir ok metot kullanlacakt. Oysa overload sayesinde sadece Show metodunu kullanp parametrelerini deitiriyoruz.
ekil 10.11
Text
Label
lblSayi1
lk Sayi
Label
lblSayi
kinci Sayi
Label
lblIslem
lem
TextBox
txtSayi1
TextBox
txtSayi2
ComboBox
cmbIslem
Button
btnIslemYap
lem Yap
Metotlar
3. ncelikle btnIslemYapa tklandnda kullanlacak bir metot hazrlayn. Kod penceresine gein ve gerekli kodlar yazn.
//3 parametre
tanmlayn.
alan
ve
geriye
deer
dndrmeyen
bir
metot
case Topla:
break;
case kar:
break;
case arp:
break;
case Bl:
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)
Blme)
==
&&
cmbIslem.Text
girdii
deerlere
gre
ilemi
yapmay
141
142
Blm 10
try
IslemYap(Convert.ToInt32(txtSayi1.Text),
ToInt32(txtSayi2.Text), cmbIslem.Text);
Convert.
//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);
ekil 10.12
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
if (c is TextBox)
c.Clear();
}
}
4. btnTemizle ift tkland zaman textBoxTemizle adl metodu arn. btnTemizleye ift tklayn ve kod penceresinde btnTemizlenin Click olayna gerekli kodlar yazn.
private void btnTemizle_Click(object sender, EventArgs e)
{
//textBoxTemizleyi arn.
textBoxTemizle();
}
Text
Button
btnTest
Test Et
TextBox
txtGirilen
int i = Convert.ToInt32(value);
return true;
}
catch (Exception)
{
return false;
}
}
Bu metot parametre olarak ald deeri try blou ierisinde sayya dntrmeye altrmaktadr. 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:
143
144
Blm 10
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
String
ToCharArray
Math
DateTime
IsLeapYear
devler
String
Compare
Compare metodu iki string ifadeyi karlatrmak iin kullanlr. lk parametre deeri ikinci parametre 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
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 dndrr. 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
Insert
Insert metodu string deerlere belirtilen indeksten itibaren parametre olarak verilen string deerler 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.
149
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 =
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
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
151
152
Blm 11
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)
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 tiplerinde 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 tiplerinde 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)
153
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)
rnek:
//10.11.2007
DateTime bugun = DateTime.Now;
DateTime BesGunSonrakiTarih = bugun.AddDays(5);
//sonu 15.11.2007
DaysInMonth
DaysInMonth metodu ile parametre deeri olarak
verilen yl ve ayn ka gn olduunu renebilirsiniz.
Eer verilen parametre negatif olursa tarihin eklenmi deil karlm hali dner. 4 gn ncenin tarihini bulmak iin bugun.AddDays(-4) kullanlr.
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
155
156
Blm 11
ekil 11.1
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 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;
157
158
Blm 11
Convert.ToInt32(yasananGun)
gndr
4. Uygulamamzda kullandmz TimeSpan tr zaman aral belirlemek iin kullanlr. TotalDays o aralktaki toplam gn saysn belirtir. Uygulamanz altrn ve geerli bir tarih girerek test edin.
ekil 11.2
Text
Interval
Button
btnBaslat
Balat
Button
btnDurdur
Durdur
Timer
timer1
500
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.
ekil 11.3
Text
TextBox
txtKelime
Label
lblKelime
Kelime:
Label
lblSonuc
Button
btnTersineCevir
Tersine evir
3. btnTersCevire ift tklayarak kod penceresine gein ve btnTersCevirin Click olayna gerekli
kodlar yazn.
159
160
Blm 11
ekil 11.4
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 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 grnts ekil 11.05teki gibidir.
ekil 11.5
161
162
Blm 11
ekil 11.6
btnCalistir
altr
ListBox
lsAsalSayi
Label
lblBaslangic
Balama Zaman:
Label
lblBitis
Biti Zaman:
Label
lblSure
alma Sresi :
int ortakbolenSayisi = 0;
if (i % j == 0)
ortakbolenSayisi++;
if (ortakbolenSayisi == 0)
lbAsalSayi.Items.Add(i);
}
}
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
163
164
Blm 11
devler
1. Temel olarak 4 ilem yapabilen (Daha fazla ilem yaptrabilirsiniz) hesap makinesi uygulamas 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
.NET Framework
MSIL CLR
Kavramlar
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.
Console.ReadLine();
}
}
Dosyay txt olarak
kaydediyoruz, exe
olarak deil !
Ek-A
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.
169
170
Ek-A
VS.NET i atktan sonra File > New > Project penceresinden ekildeki proje ablonunu seiyoruz.
ekil A.3
ekil A.4
kan sihirbaz penceresinde Create a setup for a Windows Application seeneini seelim.
Ek-A
ekil A.5
Next dmesine tkladktan sonra Setup paketi ierisinde hangi dosyalarn bulunacan sememizi isteyecek olan bir sihirbaz penceresi karmza gelmektedir.
ekil A.6
171
172
Ek-A
Add dmesine tklayarak sistemimiz zerinde bulunan uygulamamz seiyoruz ve Next dmesine tklyoruz.
ekil A.7
ekil A.8
Setup paketimiz hazr. Hazrlanan ykleme dosyasn projeyi atmz uygulama klasr ierisinde .msi uzantl olarak bulabiliriz.
ekil A.9
Ek-A
ekil A.10
Sol st kedeki arama kutusuna Bitmap deerini yazarak Enter tuuna basalm ve kan sonulardan ilkine tklayalm.
ekil A.11
173
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 uygulamay altralm.
ekil A.12
ekil A.13
Ek-A
Tablo A.1
Kullanlan Karakter
Anlam
Format:
Integer
Format:
Formatlama:
ondalikSayi.
tamSayi.
ondalikSayi.
Console.WriteLine(SabitNoktalFormatlama:+ondalikSayi.
ToString(F5));
Console.WriteLine(Genel
ToString(G));
Formatlama:
Console.WriteLine(Virglle
ToString(N));
Ayrlm:
Console.WriteLine(Hexadecimal
ToString(X4));
ondalikSayi.
Notasyon:
Console.ReadLine();
}
Kod blou altrldnda ekrana ekil A.14teki grnt gelmektedir:
ondalikSayi.
+
tamSayi.
175
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 yazm (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 gelecek 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 + Bove eit (=) tuuna basp bir boluk verin. Bundan sonra
luk tu kombinasyonunu kullanabilirsiniz.
ift trnak iine metinsel ifade yi yazn.
Baz durumlarda IntelliSense size cevap vermeyecektir.
Bu durumlar:
Sk Yaplan Hatalar
1. C# ta satrlar mutlaka noktal virgl (;) ile bitmelidir.
Yanl
Doru
Ek-A
2. Bir atama ilemi yaplyorsa eittir (=), karlatrma yaplyorsa ift eittir (==) kullanlmaldr.
Yanl
if(a = 10)
Doru
if(a == 10)
3. Karmak bir aritmetik ilem yaplyorsa parantezler ile ncelik sras belirtmek gerekir.
Yanl
Doru
4. Metotlar a kapa patantez () ile kullanlr. Eit (=) ile deer veremezsiniz. Sadece parametreler 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 dndrlmelidir.
Yanl
int toplam(int sayi1, int sayi2)
{
}
int toplam(int sayi1, int sayi2)
{
}
Doru
int toplam(int sayi1, int sayi2)
{
}
177
178
Ek-A