You are on page 1of 413

KAPAK Yazlm Uzman Yazan Yazan Editr: Seluk Tzel

Knye sayfas: Yazlm Uzman 1 Yazan Yazan Editr: Tuncer Karaarslan Dzelti: Seluk Tzel Teknik Editr: Zeynep mleki ef Editr: Mehmet mleki

indekiler
Modl 1: Programlamaya Giri ............................................3 Konu 1: Program Nedir?........................................................................ 4 Programlarn alma Modeli ...........................................................5 Konu 2: Programc Kimdir? ................................................................... 6 Konu 3: Programlama Dilleri................................................................. 7 Programlama Dillerinin Tarihesi.......................................................9 Konu 4: Programn Derlenmesi........................................................... 11 Modl Sonu Sorular & Altrmalar .................................................... 12 Modl 2: Microsoft .NET Platformu................................. 15 Konu 1: Yazlm Gelitirme Dnyas ................................................... 16 Konu 2: Sorunun Temeli ............................................................... 18 Konu 3: zm Platformu............................................................. 19 Modl 3: Microsoft Visual Studio Arayz ...................... 23 Konu 1: Visual Studio alma Ortam................................................ 24 alma Sayfalar ....................................................................... 24 Ara ubuklar........................................................................... 25 Menler................................................................................... 26 Paneller................................................................................... 26 Konu 2: Start Page............................................................................... 28 Konu 3: Menler................................................................................... 30 Konu 4: Solution Explorer Paneli ........................................................ 33 Konu 5: Toolbox Paneli........................................................................ 35 Konu 6: Properties Paneli.................................................................... 37 Konu 7: Help Kullanm........................................................................ 38 Dynamic Help............................................................................ 39 Search .................................................................................... 39 Index ...................................................................................... 39 Contents.................................................................................. 40

IV

indekiler

LAB 3.1: Help Kullanm....................................................................... 41 Dynamic Help ........................................................................... 41 Contents.................................................................................. 41 Search .................................................................................... 41 Index...................................................................................... 42 Modl Sonu Sorular & Altrmalar .................................................... 43 Modl 4: Visual Basic.NET ile Windows Tabanl Programlama ......................................................47 Konu 1: lk Uygulama (Hello World, The Time Is...) ......................... 48 Konu 2: zellikler, Metotlar ve Olaylar .............................................. 50 zellikler................................................................................. 50 Metotlar .................................................................................. 52 Olaylar.................................................................................... 53 Konu 3: Visual Basic.NETe Kontrollerin Eklenmesi........................... 55 Form ...................................................................................... 56 Button .................................................................................... 57 TextBox................................................................................... 57 Label...................................................................................... 57 ComboBox ............................................................................... 58 ListBox.................................................................................... 59 Timer ..................................................................................... 60 LAB 4.1: Kronometre Uygulamas.................................................... 61 Form zerine Kontrollerin Eklenmesi, Biimlendirmelerin Yaplmas............................................................................. 61 Kodlarn yazlmas .................................................................. 62 Konu 4: Hazr Fonksiyonlar................................................................. 65 Konu 5: InputBox ................................................................................ 68 Konu 6: MessageBox ........................................................................... 69 Konu 7: Deiken Sabit Nedir? Deikenlerin ve Sabitlerin Tanmlanmas .................................................................. 70 Deiken Nedir, Nasl Tanmlanr? .................................................... 70

Sabit Nedir, Nasl Tanmlanr? ............................................. 73


Veri Tipleri ............................................................................... 74 Structure............................................................................. 77 Dizilerle almak .................................................................. 78 Debug................................................................................. 82

indekiler

Altrma ............................................................................. 84 Konu 8: Operatrler............................................................................. 87 Aritmetiksel Operatrler .............................................................. 87 Karlatrma Operatrleri ............................................................ 88 String Operatrleri ..................................................................... 89 Modl Sonu Sorular & Altrmalar .................................................... 91 Modl 5: Algoritma ve Dump Coding ............................... 95 Konu 1: Algoritma Nedir?.................................................................... 96 Konu 2: Dump Coding Nedir?.............................................................. 98 Konu 3: Ak Diyagramlarnda Kullanlan Semboller......................... 99 Konu 4: Algoritma Uygulamalar ......................................................101 Bilet Satma .............................................................................101 ay Demleme...........................................................................102 niversite Eitim Notunu Hesaplama ..............................................103 Modl Sonu Sorular & Altrmalar ..................................................105 Modl 6: Karar Yaplar ve Dngler .............................. 109 Konu 1: Karar Yaplar .......................................................................110 If ..........................................................................................111 Koul Operatrleri.................................................................114 If Then Else .............................................................................117 ElseIf .....................................................................................118 Select Case .............................................................................118 Hangi Karar Cmlesi Nerede Kullanlr?............................................122 Uygulama ............................................................................... 123 Algoritmann ncelenmesi........................................................124 Forma Kontrollerin Eklenmesi...................................................125 Kodlarn Yazlmas .................................................................126 Konu 2: Dngler...............................................................................129 For Next .................................................................................131 For Dnglerinin e Kullanm ...............................................132 While.....................................................................................136 Do Loop ............................................................................. 138 Do While ............................................................................139 Do Until .............................................................................139

VI

indekiler

Sonsuz Dngler ................................................................... 140 Hangi Dng Nerede Kullanlr? ................................................. 141 Uygulama ........................................................................... 143 Konu 3: Hata Yakalama..................................................................... 146 Try Catch Finally ....................................................................... 148 Lab 1: ifreleme Algoritmas ........................................................ 151 ifreleme ........................................................................... 151 ifreyi zmek ..................................................................... 156 Lab 2: Sralama Algoritmas.......................................................... 160 Dizinin Doldurulmas .............................................................. 160 Dizinin Sralanmas ................................................................ 160 Lab 3: Arama Algoritmas............................................................. 164 Dizinin Sralanmas ................................................................ 164 Arama Algoritmas................................................................. 164 Modl Sonu Sorular & Altrmalar .................................................. 168 Modl 7: Fonksiyonlar ve Yordamlar.............................. 171 Konu 1: Sub........................................................................................ 172 Parametre Kullanm .................................................................. 175 Opsiyonel Parametreler .............................................................. 177 ParamArray ............................................................................. 179 Sub Main................................................................................. 182 Konu 2: Function................................................................................ 184 Fonksiyonlarn ve Yordamlarn Ar Yklenmesi ................................. 187 Konu 3: String Fonksiyonlar............................................................. 189 Konu 4: Matematiksel Fonksiyonlar................................................. 192 Konu 5: Tarih ve Zaman Fonksiyonlar............................................. 194 Konu 6: Offline ve Online Yardmn Etkin Kullanm........................ 198 Offline Yardm.......................................................................... 199 Online Yardm .......................................................................... 202 Lab 1: Kelime Oyunu ......................................................................... 204 Projenin Almas ...................................................................... 204 Yardmc Yordam ve Fonksiyonlar................................................... 205 Olaylarn Yazlmas .................................................................... 207

indekiler

VII

Modl Sonu Sorular & Altrmalar ..................................................209 Modl 8: Veri Tipleri zerine leri Bak.......................... 213 Konu 1: Deer Tipleri.........................................................................214 Built-In Deer Tipleri..................................................................214 Kullanc Tanml Deer Tipleri.......................................................215 Konu 2: Referans Tipleri....................................................................216 Built-In Referans Tipleri ..............................................................216 Kullanc Tanml Referans Tipleri ...................................................217 Konu 3: Organizasyon Yapsn nceleme ........................................218 Structure Organizasyon Yaps ve Bellein ncelenmesi .........................219 Class Organizasyon Yaps ve Bellein ncelenmesi ..............................222 ByVal ve ByRef ncelemesi................................................................229 Modl Sonu Sorular & Altrmalar ..................................................231 Modl 9: Windows Programlama ................................... 235 Konu 1: Formlar ve Windows Forms Kontrolleri..............................236 Form Nesnesi ...........................................................................237 Birden Fazla Form Oluturmak..................................................237 Form zellikleri....................................................................240 Form Olaylar.......................................................................240 Form Metotlar .....................................................................241 Label .....................................................................................242 Label zellikleri ...................................................................242 TextBox ..................................................................................244 TextBox zellikleri ................................................................244 TextBox Olaylar ...................................................................245 TextBox Metotlar..................................................................245 Button ...................................................................................248 Button zellikleri..................................................................248 Button Olaylar.....................................................................248 CheckBox................................................................................250 CheckBox zellikleri ..............................................................250 CheckBox Olaylar .................................................................251 RadioButton ............................................................................252 GroupBox................................................................................252 Panel .....................................................................................252 Panel zellikleri ...................................................................253

VIII

indekiler

ListBox................................................................................... 257 ListBox zellikleri ................................................................. 257 ListBox Olaylar .................................................................... 258 ListBox Metotlar .................................................................. 258 CheckedListBox ........................................................................ 262 CheckedListBox zellikleri ...................................................... 262 CheckedListBox Metotlar........................................................ 262 ComboBox .............................................................................. 265 ComboBox zellikleri............................................................. 265 NumericUpDown....................................................................... 268 NumericUpDown zellikleri ..................................................... 268 NumericUpDown Olaylar ........................................................ 269 NumericUpDown Metotlar....................................................... 269 DomainUpDown ........................................................................ 270 DomainUpDown zellikleri ...................................................... 270 DomainUpDown Olaylar ......................................................... 271 HScrollBar / VScrollBar ............................................................... 272 ScrollBar zellikleri ............................................................... 272 ScrollBar Olaylar .................................................................. 273 TrackBar................................................................................. 274 TrackBar zellikleri ............................................................... 274 TabControl .............................................................................. 275 TabControl zellikleri ............................................................ 275 TabPage zellikleri................................................................ 276 DateTimePicker ........................................................................ 278 DateTimePicker zellikleri ...................................................... 278 MonthCalendar......................................................................... 281 MonthCalendar zellikleri ....................................................... 281 MonthCalendar Olaylar .......................................................... 282 Timer .................................................................................... 284 Timer zellikleri................................................................... 284 Timer Olaylar...................................................................... 284 Timer Metotlar .................................................................... 284 ProgressBar ............................................................................. 285 ProgressBar zellikleri............................................................ 285 ErrorProvider ........................................................................... 288 ErrorProvider zellikleri ......................................................... 288 ErrorProvider Metotlar........................................................... 288 PictureBox .............................................................................. 291 PictureBox zellikleri............................................................. 291 ImageList................................................................................ 293 ImageList zellikleri .............................................................. 293

indekiler

IX

LinkLabel................................................................................295 LinkLabel zellikleri ..............................................................295 LinkLabel Olaylar .................................................................296 TreeView ................................................................................297 TreeNode Nesnesi .................................................................297 TreeNode zellikleri ..............................................................297 TreeNode Metotlar................................................................298 TreeView zellikleri...............................................................298 TreeView Metotlar................................................................299 TreeView Olaylar..................................................................299 ListView .................................................................................303 ListView zellikleri................................................................303 ListView Olaylar...................................................................304 Dinamik Kontroller ....................................................................307 Lab 1: Internet Taraycs.............................................................310 Kontrollerin Eklenmesi ...........................................................310 Kodlarn Yazlmas .................................................................311 Lab 2: Drt Haneli Say Bulma Oyunu ..............................................314 Kontrollerin Eklenmesi ...........................................................314 Kodlarn Yazlmas .................................................................315 Lab 3: Hafza Oyunu...................................................................318 Kontrollerin Eklenmesi ...........................................................318 Kodlarn Yazlmas .................................................................319 Lab 4: Hesap Makinesi ............................................................322 Kontrollerin Eklenmesi ...........................................................322 Kodlarn Yazlmas .................................................................322 Modl Sonu Sorular & Altrmalar ..................................................325 Modl 10: Men Tasarm ve MDI Formlar..................... 329 Konu 1: Men Tasarm......................................................................330 Menler..................................................................................330 MainMenu ...........................................................................330 ContextMenu .......................................................................334 ToolBar ..............................................................................335 ToolTip...............................................................................338 StatusBar............................................................................340 NotifyIcon........................................................................... 343 RichTextBox ........................................................................344 Lab 1: Notepad Uygulamas..........................................................347 Kontrollerin Eklenmesi ...........................................................347 Kodlarn Yazlmas .................................................................350

indekiler

MDI Formlar............................................................................. 359 Fare Olaylar............................................................................ 362 MouseDown olay .................................................................. 362 MouseUp olay...................................................................... 362 MouseMove olay................................................................... 362 Lab 2: File Browser.................................................................... 363 Kontrollerin Eklenmesi ........................................................... 363 Kodlarn Yazlmas ................................................................. 364 Modl Sonu Sorular & Altrmalar .................................................. 369 Modl 11: Veri Yaplar ................................................... 373 Konu 1: Access e Giri....................................................................... 374 Access Ortam .......................................................................... 375 Veritaban Nesnesi Oluturmak ................................................. 376 Konu 2: Veri Yaplarna Giri ............................................................. 379 Metin Veri Tipleri ...................................................................... 380 Saysal Veri Tipleri ..................................................................... 380 Tarih Veri Tipi........................................................................... 380 Evet/Hayr Veri Tipi ................................................................... 380 OLE Veri Tipi............................................................................ 381 Konu 3: Veri Modelleme Gereksinimleri........................................... 382 Birinci Normal Form................................................................... 383 Birincil Anahtar .................................................................... 385 Yabanc Anahtar ................................................................... 387 Tekil Kst (Unique Constraint).................................................. 389 Bire Bir liki........................................................................ 389 Bire Sonsuz liki ................................................................... 390 Sonsuza Sonsuz liki .............................................................. 390 kinci Normal Form .................................................................... 392 nc Normal Form ................................................................. 393 Uygulama: Alveri Modeli........................................................... 395 Kaynak Ynetimi Modl......................................................... 395 Mteri Ynetim Modl ......................................................... 397 Modl Sonu Sorular & Altrmalar .................................................. 401 Modl 12: SQLe Giri..................................................... 405 Konu 1: Access ile Sorgu Oluturmak .............................................. 406 SELECT FROM WHERE ................................................................. 409

indekiler

XI

Hesaplama Fonksiyonlar .............................................................413 INSERT ...................................................................................415 UPDATE ..................................................................................417 DELETE ..................................................................................418 Konu 2: INNER JOIN ile Tablo Birletirmek ........................................419 Konu 3: GROUP BY.....................................................................421 Konu 4: Aritmetiksel lemler........................................................423 Modl Sonu Sorular & Altrmalar ..................................................425

Modl 1: Programlamaya Giri

Bu modlde, bir programcnn bilmesi gereken temel programlama kavramlarna giri yaplacaktr. Bir program oluturan eler ve programn alma sreci tamamlanana kadar geirdii aamalar ayr ayr ilenecektir. Bu kavramlar programcnn ve programlama dillerinin tanmlanmasna yardmc olacaktr. Bu modln sonunda; Bir programn alma prensibini aklayabilecek, Programc kavramn tanmlayabilecek, Deiik programlama dillerinin geliimini aklayabilecek, Derleme ilemini tanmlayabileceksiniz.

Modl 1:

Konu 1: Program 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 de eitli amalara gre yazlan programlar kullanrz. Program, bilgisayarn belli bir ii yapmas iin tasarlanan komutlarn tmdr. Kullanm amalar ve yerlerine gre birok deiik program tr vardr: Sistem programlar. Her program, bir iletim sistemi zerinde alr. letim sistemi, dier programlarn almas iin gerekli olan kaynaklar ve ortam salar. Srcler (Driver). letim sistemi ile donanm aygtlar arasnda iletiim salayan programlardr. Klavye ile yazlan yazlarn alglanmas iin, klavyenin src program kullanlr. Uygulamalar. letim sistemi zerinde alan, kullanclarn ihtiya duyduu ilevleri salayan programlardr. Bir Internet sitesini gezmek istediimizde, Internet Explorer taraycs kullanlabilir. Bu uygulama, iletim sisteminden sitenin istenen sayfasndaki yaz ve resimleri almasn ister. letim sistemi, a kartyla (Ethernet) src program sayesinde Internet sitesinin sunucusuna istei gnderir.

Programlamaya Giri

Programlarn alma Modeli

Programlarn kullanlmasndaki ama, girilen bilgilerin ilenip sonularn istenen ekilde retilmesidir. Veri girii. Program, kullanclarn veri girmesi ile balar. Girilen veriler daha sonra ilenmek zere hafzada saklanr. lem. Veriler, programn yazlma ekline gre bir dizi ilemden geirilir. Sonu. lenen veriler kullancya aktarlr. Programlar, belli kurallar erevesinde yazlr. Bu yazm kurallar sayesinde bilgisayar, programn ileyiini anlar ve gerekli sonular kartr. Yazlan programlar, belirtilen yazm kurallar kontrol edilerek derlenir. Bu derleme ilemi sonunda, yazlan kaynak kodlar bilgisayarn anlayaca tek dile evrilir. Makine dili denilen bu dil, sadece 1 ve 0 saylarndan oluur. rnek: ATM makinesinden para ekmek. 1. Kullanc ATM makinesine kartn yerletirir. 2. ifresini girer. 3. ATM cihaznda alan uygulama kartta yazan bilgileri okur. 4. ifre kontrol ilemi yaplr. 5. ifre doru girilmise kullanc ekmek istedii miktar girer. 6. Bankadaki hesap kontrol edilir. 7. Uygunsa kullancya deme yapar.

Modl 1:

Konu 2: Programc Kimdir?

Programc, belirli ilevlere sahip programlar gelitirebilen bir uzmandr. Bir programcnn, zerinde alt platformu, kulland teknolojileri iyi tanmas ve bilgisayarn anlayaca mantksal dilde dnebilmesi gerekir. Programclarn ou genellikle ayn ii gerekletirse de, stlendikleri grevlere gre programclar gruba ayrlabilir: Mimar. Programlarn yazlmas iin gerekli teknolojileri belirleyen, gerekli durumlarda programn daha kolay ynetilmesi iin kk paralara ayran programcdr. Gelitirici. Program yazan kiidir. Test mhendisi. Programn gelitirilmesi aamasnda, hatalarn kaynaklarn bulan ve gelitiricilere raporlayan programcdr.

Programlamaya Giri

Konu 3: 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 programcnn haberlemesidir. Programc, bilgisayara hangi komutlarn altrmas gerektiini bilgisayarn anlayaca dilden konuarak syler. Bilgisayarda, programlar makine diline evrildikten sonra alr. 1 ve 0 saylarndan oluan bu makine dili, en alt seviye dildir. Dolaysyla programlarn bu dilde yazlmas olduka zordur. Programclar konuma diline daha yakn, kolay anlalabilecek diller kullanr. Bu dillere yksek seviye programla dilleri denir. Programlama dillerinin seviyeleri, makine diline yakn olup olmamalar ile llr. Bir programlama dili u unsurlardan oluur: Sz dizimi (Syntax). Bir dil, kendine ait kelimeler ile konuulur. Programlama dillerinin de benzer bir davran vardr. Programlama dillerindeki bu kelimeler, programlama dilinin anahtar kelimeleridir (komutlardr). Gramer. Programlama dillerini kullanmak iin sadece kelimeleri bilmek yeterli deildir. Eer anlaml bir ekilde bir araya getirilemiyorsa, bu kelimeler hibir anlam ifade etmez. Semantik (Anlamsal). Bir dili, kelimeleri doru bir gramer kullanm ile bir araya getirerek kullanabiliriz. Ancak konuulan kelimelerin ne iin kullanld da nemlidir. Bir programlama dilinin zelliklerinin nasl ve ne iin kullanld da, bu dilin semantiidir.

Modl 1:

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

Bu ekilde yazlan program sz dizimi asndan dorudur. Girilen veriler ve komutlar dnda, programlama dilinin anlamayaca bir kelime kullanlmamtr. Ancak komutlar yanl srada kullanlmtr. ARP komutu hangi saylar arpmas gerektiini bilemeyecektir.
parite ETLE sonu ARP miktar GSTER parite

Komutlar ve deikenleri, programlama dilinin gramerine gre doru yerlerde kullanmamz gerekir. Bu ekilde kullanlan komutlar doru bir ekilde alr. Fakat GSTER komutunun ne iin kullanld yani semantii de nemlidir. stenilen, miktar ile pariteyi arpmak, sonuca eitlemek ve sonucu gstermektir.
sonu ETLE miktar ARP parite GSTER sonu

u ana kadar 2500den fazla programlama dili yazlmtr. Bunlardan bazlar Pascal, Basic, C, C++, Java, JavaScript, Cobol, Perl, Python, Ada, Fortran, Visual Basic .NET, Microsoft Visual C# programlama dilleridir. Yksek seviye programlama dillerine Visual Basic .NET ve Microsoft Visual C++ dillerini rnek verebiliriz. C ile iletim sistemi yazlabildiinden, daha alt seviye bir dil olarak deerlendirilir.

Programlamaya Giri

Programlama Dillerinin Tarihesi

Bilgisayarlar, icat edilmeleriyle birlikte belli bir ii yapmak iin bir dizi komuta ihtiya duymulardr. En bata ok basit ilemler yapan bu komutlar, zamanla nesne ynelimlilik (object orientation) gibi ileri seviyede zellikler kazanmtr. lk programlama dilleri, bilgisayarlarn zerinde baz aralarn yerlerini deitirerek veya yeni bileenler eklenerek yaplyordu. Programn ilemesi iin bir devinime ihtiya vard. Eskiden programlar fiziksel olarak yazlyordu. Daha sonra, fiziksel programlama yerini elektrik sinyallerine brakt. Artk, kurulan elektronik devrelere dk ya da yksek voltajda akm gnderilerek bilgisayarn davran belirlenmeye balanmt. 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 programlar yazmak, sistemi oluturan elektronik devrelerin her program iin batan kurulmasn gerektiriyordu. Bylelikle programlar baz kavramlar erevesinde yazlmaya baland. ncelikle bilgisayar donanm her program iin batan kurulmamal, bunun yerine basit bir donanmn zerine yazlan komutlar kullanlmaldr. Daha sonra, programlar tek bir komutlar zinciri yerine, kk paralar halinde yazlmaldr. Bu paralarn programn iinde defalarca kullanlabilmesi yordam (subroutine) kavramn ortaya karmtr. Bu modelin kullanlmas ise mantksal karlatrmalar, dnglerin kullanlmasn ve yazlan kodlar tekrar kullanld iin ktphane (library) mantn ortaya karmtr. 1957 ylnda IBM, dk seviye (makine diline yakn) bir programlama dili olan FORTRAN dilini ortaya kard. FORTRAN ile beraber basit mantksal karlatrmalar, dngler, lojik (true-false) ve saysal (integer, double) deikenler kullanlmaya baland.

10

Modl 1:

1959 ylnda, bu programlama dilinin zelliklerini alp, giri k (Input/Output IO) gibi yeni ilevler salayan COBOL dili ortaya kt. Daha sonra 1968 ylnda, COBOL ve FORTRAN dillerinin en iyi zelliklerini alarak Pascal ortaya kt. Ayrca Pascal dili, hafzadaki adresler zerinde ilem yapmaya olanak veren iareti (pointer) kavramn 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, kuvvetli giri k ilemleri salamas gibi birok 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 nesne ynelimli programlama (Object Oriented Programming OOP) 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 ynelimli bir programlama dili olmas ve beraberinde getirdii artk toplama (Garbage Collection GC) gibi performans artrc zellikleri ile byk lde geniledi. Microsoft, 2000 ylnda .NET platformunu sunarak, otuzdan fazla programlama dilini ayn at altna toplad. VisualBasic.NET ve Visual C# gnmzde .NET platformunu kullanan en gl yksek seviyeli programlama dilleri arasnda yer alr. .NET platformu hakknda daha detayl bilgi iin Modl 2ye bakn.

Programlamaya Giri

11

Konu 4: Programn Derlenmesi

Programlar yazldktan sonra, almaya uygun hale getirilene kadar bir dizi ilemden geer. Bu ilemi gerekletiren, programlama dilinin derleyicisidir. (Compiler) Programlar bir programlama dilinin gramer ve sz dizimi yapsna uygun bir ekilde yazlr. Yazlan kodlar o dilin derleyicisi tarafndan kontrol edilir. Kontrol ileminden sonra, bu kodlar bilgisayarn anlayaca makine diline evrilir. Ancak bir yazm veya mantk hatas varsa, programcya gerekli hata mesaj verilerek derleme ilemi iptal edilir. Makine diline evrilen kodlar altrlr.

12

Modl 1:

Modl Sonu Sorular & Altrmalar

1. Varolan bir metin dosyasn (.txt) grntlemek iin Notepad programn kullanabiliriz. letim sistemi, dosyay kullanclara gstermek iin monitr ile iletiim kurar. Monitr, iletim sisteminden gelen verilerle gerekli grntleme ilemlerini yapar. Bu senaryodaki program eitlerini belirtin. 2. Bir arkadamza e-posta yollamak istediimizde, e-posta adresi, konu ve mesaj bilgilerini gireriz. Daha sonra e-posta uygulamas mesajmz verilen adrese yollar. Programn alma modelinin aamalarn belirtin. 3. C dilini kullanarak yazdnz kodlarn bilgisayar tarafndan altrlabilir hale gelmesi iin hangi aamalarn gereklemesi gerekir?

Modl 2: Microsoft .NET Platformu

Microsoft .NET, uygulama gelitiricilerin yazlm gelitirme srecinde altyap ilemleri iin harcad eforu en aza indirgemek ve daha gvenli, gvenilir ve salkl uygulamalar gelitirebilmelerini salamak iin gelitirilmi bir altyapdr. Bu modl tamamladktan sonra; Microsof.NET platformu hakknda genel bilgi sahibi olacak, .NET Framework ve bileenlerini aklayabilecek, Microsoft .NET platformunun yazlm gelitiricilere sunduu avantajlar tanmlayabileceksiniz.

16

Modl 2:

Konu 1: Yazlm Gelitirme Dnyas


Microsoft 1975 ylnda Bill Gates ve Paul Allen tarafndan kurulduunda, vizyonu Her eve, her masaya bir PC idi. Donanm ve yazlm alanlarndaki gelimelerin hz ve birbirlerini srekli tetiklemesinin sonucunda bilgisayar kullanclarnn says hzla artt. Artan kullanc says beraberinde yeni gereksinim ve talepleri getirdi. Bu taleplerin doal sonucu olarak da farkl platformlar ve farkl servis salayclar ortaya kt. letiim, finansal hizmetler, ticaret ve 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 kullancs says, beraberinde gvenlik, iletiim ve entegrasyon gibi alanlarda eitli engelleri de getirdi. Gelimelere kendi amzdan, yani yazlm gelitiriciler asndan baktmzda ilerin ok daha zor ve zahmetli durumda olduunu grrz. Kurumsal uygulamalarn gelitirilmesinde performans, gvenlik ve sreklilik gibi konularda belirli bir seviyeyi yakalamak iin olduka fazla efor sarf etmemiz gerekiyor. rnein, elektronik cihazlarla soket iletiimi kuracak uygulamalar gelitirebilmek iin iki alternatifimiz var. Birincisi, 3. parti firmalar tarafndan gelitirilmi olan bileenler satn almak ve uygulamamza entegre etmektir. Dier alternatifimiz ise, olduka uzun srecek bir kodlama ile benzer bir iletiim katmann gelitirmektir. Her ikisi de firmalarn birinci tercihi olmayacaktr. Sorunumuz, sadece soket iletiimi noktasnda deil elbette. Blmn banda da belirttiimiz gibi uygulama gelitiriciler, gvenlik, performans ve yetkilendirme gibi pek ok konuda olduka zahmetli altyap kodlarn gelitirmekle uramak zorunda kalyor. in kt yan, gelitirilen bu altyap kodlarnn ou zaman istenen verimlilii sunmaktan olduka uzak kalmasdr. Kabul etmemiz gereken ey, bu altyap kodlarn gelitirecek bilgiye sahip olmadmz; sahip olsak bile, altyap kodlarn yazacak zamana ve igcne sahip olmadmz; zaman ve igc konusundaki ihtiyalarmz karlayabilsek bile, bu kodlarn testi, gvenlii, gvenilirlii, performans ve uygulamalara entegrasyonu konusunda hibir zaman istenen dzeye ulaamayacamzdr. Keke ihtiya duyduumuz tm altyap ilemleri iin hazr, kullanm kolay ve esnek bir platform olsayd. Hayalini kurduumuz, aslnda yle bir sistem: Bir sanal maazada cep telefonlarndan sorumlu departmanda sat mdr olarak alyorsunuz. dndasnz ve akll cihaznza bir mesaj geliyor: Piyasaya henz km olan telefonumuz inanlmaz satlar yapyor, telefon ok popler ve stoklarmz da olduka azalm durumda. Bu mesajn hemen ardndan, akll cihaznz zerinden, irketiniz iin fiyat ve teslim zaman asndan en uygun olan tedarikiyi bulup, ihtiyacnz kadar telefonu sipari edebiliyorsunuz. Peki ya bu koullar altnda almyor olsaydnz? irketiniz, sizi cep telefonunuzdan arayacak ve problemi iletecekti. Sonra da siz ancak irketinize dnebildiiniz zaman tedarikilerle teker teker irtibata geerek hangisi-

Microsoft .NET Platformu

17

nin irketiniz iin en yararl olduuna karar verecektiniz. Sipari ve teslimat bilgileri zerinde anlatktan sonra ileminizi tamamlam olacaktnz. Yani sadece birka dakikada yapabileceiniz basit bir ilem iin, belki de btn bir gnnz kaybedecektiniz. Verimliliiniz derken, zamannz etkili ekilde kullanamayacaktnz. Oysa akll cihaznz zerinden tm bu ilemleri ksa bir ekilde zebildiinizden, ie gitmenize bile gerek kalmadan ok ksa bir zamanda irketiniz iin en iyi olan seimi yapabilirsiniz. ler kesinlikle ok daha verimli ve kolay ilerlerdi. Elbette bu, kurulabilecek hayallerin sadece mobil platforma ynelik blmnden bir kesit.

18

Modl 2:

Konu 2: Sorunun Temeli

Microsoft, vizyonu dorultusunda att admlarn yazlm gelitiricilere yansyan sonularn srekli izliyordu ve yazlm gelitiricilerin sorunlarn u balklar altnda ele alyordu. Uygulamalar, sistemler ve kurumdaki birimler arasndaki ve farkl kurumlar arasndaki iletiim sorunu. alanlarn ihtiya duyduklar verilere, ihtiya duyduklar anda, kesintisiz, hatasz ve gvenli bir ekilde ve istedikleri platformdan eriebilmeleri gereksinimi. Uygulama gelitirme srecinde, gelitiricilerin altyap kodlar ile uramas ve bunun sonucunda, uygulama gelitirme ve test sresinin uzamas. Bir uygulamann farkl platformlarda altrlabilmesi iin, ayn ilemleri gerekletirecek kodlarn tekrar tekrar yazlmas gereksinimi.

Microsoft .NET Platformu

19

Konu 3: zm Platformu

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, yani kaderini bu platforma balamt. ok geni bir analiz ve gelitirme ekibinin almalar sonucunda ortaya kan rn 2000 ylnda dnyaya sunulduuna, insanlarn karlarnda grdkleri yap karsnda hissettiklerini tanmlamak iin kullanlabilecek en uygun kelime hayranlk idi. Microsoft.NET platformu, her trl yazlm gelitirme ihtiyacna ynelik hazr bir altyap sunarak, uygulama gelitiricilerin Windows, Web ve mobil platformlara ynelik uygulamalar ok daha hzl, kolay ve gl bir ekilde gelitirebilmelerine olanak tanyordu. Uygulama gelitiriciler ifreleme, kimlik dorulama, yetkilendirme, soket iletiimi, her trl veri kaynana ynelik veritaban ilemleri, XML ve Web servisi teknolojilerine kadar burada saymadmz (editrler bir modln 100 sayfay gemesine pek scak bakmyorlar) pek ok teknolojiyi ve hatta milyonlarca hazr snf ve fonksiyonu karlarnda grdler. Bugne kadar gnler, haftalar ve hatta aylar harcayarak gelitirmeye altklar bu yaplarn hepsini, karlarnda kullanma hazr bir ekilde grmekten de son derece memnunlard.

Modl 3: Microsoft Visual Studio Arayz

Bu modl, Microsoft Visual Studio arayzn tanmay salar ve etkili bir biimde kullanmay gsterir. Ev ve iyerindeki alma ortamn dzenlemek, daha verimli almay salar. Yazlm gelitirirken de allan ortam tanmak ve kiiselletirmek, rahat almak asndan nemlidir. Bu modl tamamladktan sonra; Microsoft Visual Studio alma ortamn tanyacak, Menlerin ilevlerini aklayabilecek, Balang sayfasnn zelliklerini kullanabilecek, Solution Explorer, Toolbox, Properties panellerini tanyacak, Microsoft Visual Studio yardmn etkili bir ekilde kullanabileceksiniz.

24

Modl 3:

Konu 1: Visual Studio alma Ortam

Visual Studio, ok gelimi zelliklere ve yardmc aralara sahip bir dosya editrdr. .NET platformu zerinde gelitirilen proje dosyalar dnda, metin dosyalar, *.sql ve *.rtf uzantl dosyalar da dzenlenebilir. Visual Studio ortamn oluturan ve kullanmn kolaylatran drt ana bileen vardr:

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 yaplr. Bu alma modelinde, sadece bir sayfa grnr ve zerinde alma yaplr. Ancak Visual Studio bize, alma ortamn paralara blme imkan verir. rnek: 1. Visual Studio alma ortamn an. Balang sayfas karnza kar. (Eer balang sayfasn gremiyorsanz, Help mensnden Show Start Page komutunu sein.) 2. View mensnden, Web Browser alt mensn iaretleyin ve Show Browser komutunu sein. Visual Studio, amak istediimiz Internet taraycs iin yeni bir sayfa oluturur. 3. CTRL tuunu basl tutarak TAB tuuna basn. Atnz Internet taraycsndan balang sayfasna dnlr. 4. Balang sayfasn sa tklayn ve alan menden New Vertical Tab Group komutunu sein. Visual Studio, sayfalar sekme gruplarna ayrarak birden fazla sayfa zerinde alma imkann salar.

Microsoft Visual Studio Arayz

25

5. Balang sayfasn, sayfa baln tklayp fare dmesini basl tutarak Internet taraycsnn bulunduu sekme grubuna tayn.

RESM 3.1.
PUCU Visual Studio ortamn bir Web taraycs olarak kullanabilirsiniz.

Ara ubuklar
Visual Studio, men komutlar iin grsel ksayollar ara ubuklar (Toolbars) ile sunar. Benzer ilemler iin kullanlan komutlar bir ara ubuunda gruplanr. rnein Standard ara ubuu, yeni dosya oluturmak, bir dosyay amak ve kaydetmek gibi genel dosya ilemleri iin kullanlr. Ara ubuklar, varsaylan durumda menlerin altnda bulunur. Ancak ara ubuklar tanarak yerleri deitirilebilir veya kayan duruma getirilebilir. Ayrca istenen ara ubuklar saklanabilir veya gsterilebilir. Ara ubuklarnn listesini grmek iin View mensnden Toolbars alt mensn iaretleyin. Visual Studio bize kendi ara ubuklarmz oluturma imkan da verir. Farkl ilevlere sahip komutlar gruplanp, kiisel bir ara ubuu oluturulabilir. rnek: 1. Balang sayfasnn stndeki bir ara ubuunu sa tklayn. Alan mende, varolan tm ara ubuklar listelenir. aretli olan ara ubuklar eklenmi ara ubuklardr. Bu listeden Web ara ubuunu sein. 2. Web ara ubuunu ift tklayn. Bu ilem, ara ubuunu Floating (kayan men) durumuna getirir. Tekrar ift tklandnda, ara ubuu Dockable (sabit) durumuna gelir. 3. Ara ubuunu sa tklayn. Alan mennn en altndaki Customize (zelletir) komutunu sein. 4. Toolbars sekmesinde New (yeni) komutunu tklayn. Alan pencerede ara ubuunun ismi iin Genel lemlerim yazn. OK dmesini tklayn. 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 (Resim 3.2).

26

Modl 3:

RESM 3.2: Ara ubuu oluturmak.

Bu ekilde u komutlar da ekleyin:


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

6. Ara ubuunu alma ortamnn altna tayarak sabitleyin. 7. Ara ubuunu sa tklayn ve listeden Genel lemlerim ara ubuunu seerek alma ortamndan kaldrn.

Menler
Birok alma ortamnn yapt gibi, Visual Studio da benzer eler zerinde ilevleri olan komutlar menler halinde gruplar. Menlerin ara ubuklarndan fark, sabit olmalar ve zelletirmeye ak olmamalardr. Menler bu modlde detayl olarak ele alnacaktr.

Paneller
Paneller, Visual Studio iindeki pencerelerdir. alma ortamnda birok panel bulunur. Bunlar arasnda Solution Explorer, Toolbox, Object Browser, Properties, Watch, Output, Search Result, Task List gibi ska kullandmz paneller saylabilir.
PUCU Grmek istenen paneller View mensnden seilebilir.

Microsoft Visual Studio Arayz

27

Paneller, Visual Studio ortam iersinde istenen yere tanabilir veya sabitlenebilir. Panellerin birka genel zellii vardr: Auto Hide (Otomatik gizle). Panelin, fare imleci zerindeyken gzkmesi ve imle ekildikten sonra gizlenmesidir. Dockable (Sabitlenebilir). Panelin, Visual Studio ortam iersinde bir yerde sabitlenebilme zelliidir. Floating (Kayan). Kayan paneller herhangi bir yere sabitlenemez. Ancak her sayfann stnde durur ve bylece srekli grnr. Panellerin bu zelliklerine Window mensnden eriilebilir. rnek: 1. View mensnden Other Windows alt mensn iaretleyin ve Favorites panelini sein. Panelin balnda, biri Auto Hide, dieri Close olmak zere iki dme grlr. 2. Auto Hide dmesini tklayarak paneli gizleyin. 3. Paneli tekrar sein, Window mensnden Auto Hide zelliini sein. Daha sonra ayn menden Floating zelliini sein. Panelin tanabildii, ancak sabitlenemedii grlr. 4. Panel seiliyken, Window mensnden Dockable zelliini sein. Bu sefer, panelin tandnda alma ortamnn herhangi bir yerine sabitlenebildii grlr. 5. Panel seiliyken, Window mensnden Hide komutunu sein. Paneli tekrar amak iin bu admlar tekrarlayn.

28

Modl 3:

Konu 2: Start Page

Visual Studio alma ortamn atmz zaman karmza ilk gelen balang sayfasdr. Bu sayfa blmden oluur (Resim 3.3). Projects. O ana kadar altnz projeleri gsterir. Bu menden son projelerinizi aabilirsiniz. Son projelerde gzkmeyen bir proje (Open Project) veya yeni bir proje (New Project) de aabilirsiniz. Online Resources. Bu blmde rnek uygulamalar (Find Samples), ipular bulabilir, en yeni teknolojileri, gncellemeleri veya en son eklenen haberleri takip edebilir, MSDN ktphanelerinde kod rnekleri ve makaleler aratrabilirsiniz. My Profile. Bu blmde alma eklinize gre bir profil seebilirsiniz. Profiller; kullanlan ksayollara, panellerin yerlerine ve grnmlerine, Visual Studio yardmn kullanrken yaplan filtrelemeye gre deiir. rnein, profili Visual Basic Developer olarak ayarlarsak Toolbox, sayfalarn sol tarafnda ivili olarak durur. Yardm panelinde bir arama yapmak istediimizde ise, sonular Visual Basic filtresine gre kar. Ayrca Solution Explorer paneli CTRL+R ksayolu ile alr.

Microsoft Visual Studio Arayz

29

RESM 3.3: Start Page.

Grnm, ksayollar ve yardm filtresi birbirinden bamsz olarak da ayarlanabilir. Bu durumda seilen profil, custom (zel) olarak gzkecektir. At Startup seeneklerinden, Visual Studio alrken hangi pencerenin gzkeceini belirleyebilirsiniz. rnein, balangta en son altnz projenin almasn istiyorsanz, Load last loaded solution seeneini tercih etmelisiniz.
PUCU Giri sayfasn kapattktan sonra, Help mensnden Show Start Page seeneini tklayarak aabilirsiniz.

30

Modl 3:

Konu 3: Menler

Visual Studio menleri birok uygulamann menlerine benzer niteliktedir. Men isimlerinde, belirli bir harfinin alt izilmitir. Belirtilen harflere 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 (Dosya). Tm dosya ilemleri bu men altndadr. Standard ara ubuu ile bu mendeki baz komutlara ulalr. File mensndeki komutlar ile: Yeni bir proje, bir dosya veya bo bir zm (solution) oluturmak, Oluturulmu bir projeyi veya varolan bir dosyay amak, Web zerinde paylatrlm dosya veya projeler amak, Ak olan dosya veya projeleri kapatmak, En son kullanlan dosya veya projeleri (Recent Files) amak, Dosyalar kaydetmek, yazdrmak mmkndr. Edit (Dzenle). Tm yaz dzenleme ilemleri iin, bu mendeki komutlar kullanlr. Text Editor ara ubuu da bu mennn komutlarna ksayoldur. Edit mensndeki komutlar ile: Copy, Cut, Paste, Delete, Select All gibi temel ilemleri Find And Replace, Go, Bookmark gibi navigasyon ilemleri Outlining ile metinleri gruplama ilemleri Satrlar yorum satr yapma, yorum satrlarn kaldrma, byk-kk harf evrimi gibi ileri seviye ilemler gerekletirilir.

Microsoft Visual Studio Arayz

31

View (Grnm). Visual Studio alma ortamndaki tm paneller bu men komutlaryla gsterilir. Ayrca Navigate Backward ve Navigate Forward komutlaryla en son allan satra geri dnlr. Project (Proje). Projeye dosya eklemek, karmak, proje zelliklerini gstermek iin bu men kullanlr. Build (Derleme). Projelerin almak zere derlenmesi iin gereken komutlar, bu men altndadr. Debug (Hata Ayklama). Projede hata ayklarken gereken komutlar Debug mens altndadr. Projeyi Debug durumunda balatmak, BreakPoints (hata ayklarken durulmas gereken 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 buradan yaplr. Text Editor (Metin dzenleyicisi). Farkl programlama dillerine zg yaz dzeni ayarlar buradan yaplr. rnek: 1. Tools mensnden Options komutunu sein. 2. Sol panelde bulunan Environment mensnden Fonts and Colors (Yaz dzeni ve renkler) sekmesine gelin. 3. Sa panelde bulunan Display items (eleri listele) mensnden Text alann sein ve Item background (e arka plan) zelliini Light Grey (Ak gri) olarak belirleyin. Tm sayfalarn arka plan rengi ak gri olacaktr (Resim 3.4).

32

Modl 3:

RESM 3.4: Arka plan renginin deitirilmesi.

4. Sol panelde Environment mensnden Web Browser sekmesine gelin. Home Page (ana sayfa) zelliinin altndaki Use Default seeneini kaldrn ve metin kutusuna www.bilgeadam.com yazn. 5. Sol panelde Text Editor mensnden Basic alt mensn sein. Burada Visual Basic diline zel metin dzenleme seenekleri bulunur. Sa panelde, Display sekmesinin altnda Line Numbers (Satr numaralar) seeneini iaretleyin. Bu seenek, Visual Basic projelerinde alrken satr numaralarn gsterir. Window (Pencere). Sayfalarn ve panellerin 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 paneller gizlenir. Help (Yardm). Visual Studio alma ortamnda ok sk kullanlan yardm panellerinin grnm bu men ile salanr. Bu men ile ayrca, kullanlan Visual Studio alma ortamnn srm hakknda bilgi alnr, son gncellemeler kontrol edilir, teknik destek iin gereken e-posta adreslerine veya telefonlara ulalr. Yardm kullanm bu modlde detayl olarak ele alnacaktr.

Microsoft Visual Studio Arayz

33

Konu 4: Solution Explorer Paneli

Visual Studio alma ortamnda projeler bir zm (solution) altnda alr. Bir zm iine farkl dilde ve tipte projeler dahil edilebilir. Visual Studio ile bir zm aldnda, Solution Explorer panelinde (Resim 3.5) zm iinde bulunan tm projelerle, ilgili dosya ve klasrler grntlenir. Panelde koyu yaz tipinde gzken proje, zm iindeki balang projesidir. Bu panelden, eler zerinde silme, kopyalama, tama ve ismini deitirme ilemleri yaplabilir. Ayrca panelin st ksmnda, seilen e zerinde basit ilemler gerekletirmek iin bir ara ubuu bulunur. Refresh (Yenile). Proje dosyalar zerindeki deiikliklerin gzkmesini salar. Show All Files (Btn dosyalar gster). Seilen projenin bulunduu klasrdeki tm dosyalar ve alt klasrleri gsterir. Panelde gzken beyaz eler proje iine dahil edilmemi elerdir. Proje kapsamnda kullanlmak istenen eler (rnein, arka plan resmi), sa tklanp Include In Project komutu ile projeye dahil edilmelidir. Properties (zellikler). Paneldeki tm elerin zellikleri, Properties komutu ile grlebilir. Bu komut seildiinde, enin zellikleri Properties paneli ile grntlenir. (Properties paneli bu modlde detayl olarak ele alnacaktr.)

34

Modl 3:

RESM 3.5: Solution Explorer paneli.

Solution Explorer paneli, View mensnden grlebildii gibi, varsaylan klavye seeneklerinde CTRL+ALT+L ksayolu ile de grlebilir.

Microsoft Visual Studio Arayz

35

Konu 5: Toolbox Paneli

Toolbox (Ara kutusu) paneli, projelerde kullanlan eitli bileenlerin listelendii paneldir. Buradaki eler, sekmeler iinde gruplanmtr. Her sekme, ortak platformlarda alan veya benzer ilevleri olan nesnelere sahiptir. rnein, Data sekmesinde veritaban ilemlerinde kullanlan bileenler vardr. Windows Forms bileenleri Windows platformunda alan projelerde, Web Forms bileenleri ise Web tabanl projelerde kullanlan nesnelerdir. ClipBoard Ring sekmesinde ise kopyalanan metinler bulunur. Nesnenin silik gzkmesi, o anda allan sayfada kullanlamayaca anlamna gelir (Resim 3.6).

RESM 3.6: Toolbox paneli.

Toolbox panelinde nesneler, en sk kullanlandan en az kullanlana gre sralanr. rnein, Windows Forms sekmesinde en stte Label, Link Label, Button, TextBox nesneleri bulunur. Nesneler, yerleri ve sralar tanarak

36

Modl 3:

deitirilebilir, ayrca baka bir sekmeye de tanlabilir. Varsaylan sralama dnda, alfabetik olarak da sralama yaplabilir. Visual Studio alma ortam, Toolbox panelindeki nesnelere yeni isim verme, nesneleri silme veya panele yeni sekmeler ve nesneler ekleme imkanlarn da salar. rnek: 1. View mensnden Toolbox panelini sein. 2. Panelde herhangi bir yeri sa tklayn ve Show All Tabs (Btn sekmeleri gster) komutunu sein. 3. Windows Forms sekmesinde TextBox nesnesini sa tklayn. kan menden Rename Item (Ad Deitir) komutunu sein ve Metin Kutusu yazn. 4. Metin Kutusu nesnesini tayarak sekmenin en stne getirin. 5. Paneli sa tklayn ve Sort Items Alphabetically (Nesneleri alfabetik olarak srala) komutunu sein. Metin Kutusu nesnesinin, alfabetik srada yerini ald grlr. 6. Paneli sa tklayn ve Add Tab (Sekme ekle) komutunu sein. Sekmeye Medya ismini verin. 7. Sekmeyi sa tklayn ve Add/Remove Items (Nesne Ekle/Kaldr) komutunu sein. Customize Toolbox iletiim kutusu alr. Burada Toolbox paneline eklenebilecek tm bileenler listelenir. Com Components sekmesine gelin ve listeden Windows Media Player nesnesini iaretleyin. OK dmesini tklayarak iletiim kutusunu kapatn. Windows Media Player nesnesinin, oluturulan Medya sekmesine eklendii grlr. Toolbox paneline varsaylan klavye seeneklerinde CTRL+ALT+X ksayolu ile ulalr.

Microsoft Visual Studio Arayz

37

Konu 6: Properties Paneli

Properties (zellikler) paneli (Resim 3.7), seilen bir nesnenin zelliklerini grntler. Paneldeki grnm, zellik ad deeri eklindedir. Silik olarak gzken zellikler salt okunurdur ve deitirilemez. Panelin zerindeki alr liste, alma sayfasndaki nesneleri listeler. Buradan istenen nesne seilerek zellikleri grntlenir. Paneldeki zellikler kategorilere gre gruplanmtr, ancak alfabetik olarak da dizilebilir. Panelin stnde bulunan ara kutusundan Categorized (Kategoriletirilmi) veya Alphabetic (Alfabetik) seenekleri iaretlenerek zelliklerin grnmleri deitirilebilir.

RESM 3.7: Properties paneli.

Panelin en altnda bulunan blmde, her zelliin aklamas bulunur.


PUCU Bir nesnenin zerindeyken F4 tuuna basnca, Properties paneli grntlenir.

38

Modl 3:

Konu 7: Help Kullanm

Yazlm gelitirirken en ok kullanacamz kaynaklar yardm dosyalar olacaktr. Bir programlama dilinin ok eitli zellikleri ve kullanm farkllklar olabilir. yi bir programc btn bu zellikleri ezbere bilen deil, bu zellikleri en ksa srede bulan, renen ve kullanan programcdr. Yardm dosyalarnn kullanmn bilmek, programcln temelini oluturan nemli unsurlardan biridir.
DKKAT Visual Studio yardmn kullanmak iin, MSDN (Microsoft Developer Network) yardm ktphanelerinin yklenmi olmas gerekir.

Visual Studio yardm programcya, gelimi zelliklere sahip paneller ve yardm dosyalar ile geni bir kullanm kolayl salar. Visual Studio yardm dosyalarnn yaps, balk, ierik ve ilikili konular (See Also) blmlerinden oluur. Ayrca her yardm dosyasnn altnda bulunan Send Comments balants ile konu hakknda yorum gnderilebilir. Visual Studio yardm panelleri Dynamic Help, Search, Index ve Contents olarak drde ayrlr. Bu panellere, Help mensnden ulalabilir (Resim 3.8).

RESM 3.8: Help mens.

Microsoft Visual Studio Arayz

39

Dynamic Help
Dynamic Help (Dinamik yardm) paneli, ierii otomatik olarak deien bir aratr. Kod yazarken, panellerde veya sayfalarda nesneler seildiinde, kullancnn baka bir ilem yapmasna gerek kalmadan, o nesne hakkndaki yardm konularn listeler. F1 tuuna bastmz zaman ise, seilen nesneye ait, Dynamic Help panelindeki ilk yardm konusu yeni bir sayfada grntlenir. Paneldeki yardm konular Help, Samples ve Getting Started olarak blme ayrlmtr. Help blm, seilen 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
Search (Arama) paneli, MSDN ktphanelerinde arama yaplan paneldir. Look for metin kutusuna, aranacak anahtar kelimeler girilir. Filtered by (Filtreleme) ile arama sonular belli konulara gre snrlanr ve istenmeyen seeneklerin gsterilmesi engellenir. Search panelinde, Search in titles only, Match related words, Search in previous results, Highlight search hits arama seenekleri bulunur: Search in titles only. Sadece konu balklarnda arama yapar; ierik ksmna bakmaz. Match related words. Kelimeleri yazld gibi arar; benzer yazml kelimeleri aramaz. Search in previous results. lk aramadan sonra aktif olan bu seenek ile kelimeler, bir nceki aramada bulunan sonular arasnda aranr. Highlight search hits. Bulunan yardm sayfalarnda, aranan kelimelerin seili olmasn salar. Bulunan sonular Search Results (Arama Sonular) panelinde gsterilir. Bu panelde; Title, konunun baln Location, MSDN ktphanelerinde hangi balk altnda bulunduunu Rank, konunun aranan kelimeye olan yaknlk derecesini ifade eder.

Index
Index (Dizin) paneli, yardm dosyalarndaki btn konular alfabetik srada dizer. Filtreleme ilevi, arama panelinde olduu gibidir. Bu panelin zellii, aranacak kelime yazlrken, bu kelime ile balayan tm konularn alfabetik srada gsterilmesidir. Bu ekilde, aranan konulara ok hzl bir ekilde ulalabilir. Eer bir konu ile ilgili birden fazla yardm dosyas varsa, Index Results (Dizin Sonular) panelinde bu seenekler gsterilir.

40

Modl 3:

Contents
Contents (erik) panelinde, tm MSDN ierii konulara gre hiyerarik yapda, kategorilere ayrlm olarak gsterilir. Bu panelde de ayn ekilde filtreleme yaplarak istenmeyen ierikler kartlabilir. Bir yardm dosyas akken, Help mensnden Sync Contents (erik senkronizasyonu) komutu seilerek o yardm dosyasnn Contents panelindeki yeri bulunabilir.

Microsoft Visual Studio Arayz

41

LAB 3.1: Help Kullanm


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

Dynamic Help
1. Help mensnden Show Start Page komutunu sein. 2. Help mensnden Dynamic Help komutunu seerek Dynamic Help panelini an. Panelde gsterilen ilk konunun ismi nedir? 3. CTRL+ALT+X tularna basarak Toolbox panelini an. Dynamic Help mensnde ne deiti? 4. Toolbox panelinde, Windows Forms sekmesindeki Button nesnesini sein. Dynamic Help panelindeki ilk konunun ismi ne olarak deiti? 5. Button seiliyken F1 tuuna basn. Alan sayfann ismi nedir?

Contents
1. Help mensnden Sync Contents komutunu sein. Button Members konulu yardm dosyas hangi konularn altnda bulunuyor? 2. Contents panelinin ilk bal olan Visual Studio .NET altnda, Getting Assistance "Using Help in Visual Studio .NET Tips for Using the Help Keyword Index konulu yardm an. File mensnden Print komutunu sein ve sayfay yazdrn.
DKKAT PUCU Sayfay yazdrmak iin bilgisayarnza bal bir yazc bulunmas gerekir. Yardm dosyalarn yazdrmak, zellikle uzun metinlerde kolay alma imkan salar.

3. Contents panelini kapatn.

Search
1. Help mensnden Search komutunu sein. Look for metin kutusuna Visual Studio .NET yazn. Search in titles only ve Match related words seeneklerini iaretleyin. Search dmesini tklayn. Ka tane konu bulundu? En st dereceli konu nedir?

42

Modl 3:

2. Search in previous results seeneini iaretleyin. MSDN kelimesini aratn. Ka konu bulundu? 3. Search in previous results seeneinin iaretini kaldrn. MSDN kelimesini tekrar arattnz zaman ka konu bulundu? Search in titles only seeneinin iaretini kaldrnca ka konu bulundu? 4. Search Results ve Search panellerini kapatn.

Index
1. Help mensnden Index komutunu sein. Look for metin kutusuna "file types" yazn. lk kan konu nedir? 2. Filtre olarak Visual Basic seeneini iaretleyin. lk olarak hangi konu gsterilir? 3. File Types konusunu tklayn. Alan sayfada Solution Files (.sln and .suo) adl blm inceleyin. 4. Project Files balnda, Visual Basic and Visual C# alt balnn altndaki File Types and File Extensions in Visual Basic and Visual C# konusunu tklayn. 5. Alan yardm dosyasn inceledikten sonra, sayfann See Also bal altndaki What's New in Projects konusunu sa tklayn. Alan menden Open Link in New Window komutunu sein. Window mensnden New Vertical Tab Group komutunu sein. Bir nceki yardm dosyasyla arasndaki benzerlikleri inceleyin. 6. Window mensnden Close All Documents seenei ile btn sayfalar kapatn ve Visual Studio ortamndan kn.

Microsoft Visual Studio Arayz

43

Modl Sonu Sorular & Altrmalar

1. Visual Basic profili iin, Object Browser paneline hangi ksayolla ulalr? 2. Visual Studio ortamnda tm sabitlenmi panelleri gizlemek iin hangi men komutu kullanlr? 3. Properties panelindeki zellikler alfabetik olarak nasl sralanr?

Modl 4: Visual Basic.NET ile Windows Tabanl Programlama

Windows tabanl uygulamalar, Windows iletim sistemi zerinde alan uygulamalardr. Windows uygulamalar Windows formlar ve kontrollerinden oluur. Visual Studio bu formlarn ve zerindeki kontrollerin tasarmn ve kodlarn yazlmasn byk lde kolaylatrarak, uygulama gelitirme srecini daha hzl ve kolay hale getirir. Bu modl tamamladktan sonra; Windows tabanl programlamada kullanlan kontrolleri tanyacak, Kontrollerin zellik, metot ve olay kavramlarn renecek, Visual Basic .NET dilinde deiken ve sabit tanmlamay renecek, Veri tiplerini tanyacak, Operatrleri kullanabileceksiniz.

48

Modl 4:

Konu 1: lk Uygulama (Hello World, The Time Is...)

Visual Basic .NET ile yazacamz Windows uygulamas ekrana, Hello World! yazsn ve o anki zaman gsteren bir bilgi mesajn kartr. 1. Visual Studio alma ortamn an. 2. File mensnden, New alt mensn ve Project komutunu sein. New Project iletiim kutusu, yazlaca dile, alaca ortama gre deien proje tiplerini listeler. 3. Proje tiplerinden Visual Basic Project ve Windows Application tipinin seili olduunu kontrol edin. 4. Name zelliine HelloWorld yazn ve OK dmesini tklayn. Alan Windows projesinde balang olarak bir adet Windows Form, tasarm grnmnde alr. 5. Toolbox panelinden Button kontroln formun zerine srkleyip brakn. Properties panelini aarak Button kontrolnn Text zelliine Hello World! yazn. 6. Eklenen Button kontroln ift tklayarak kod sayfasna gein. Button kontrol tklandnda altrlacak kodu yazn:
MsgBox("Hello World! The time is " & Now)
NOT Yazdnz kodun ne anlama geldiini belirtmek iin yorum satrlar kullanmak, kodlar okumay kolaylatrr. Yorum satrlar tek trnak ' ile balayarak yazlmaldr.

Visual Basic.NET ile Windows Tabanl Programlama

49

7. MsgBox metodunun yazld kodun stne, yaplmak isteneni belirten bir yorum satr yazn.
' MsgBox metodu ile kullancya Merhaba diyoruz. ' Now zellii ile o andaki saat ve gn ' deerlerini de kullancya gsteriyoruz.

8. F5 tuuna basarak projeyi altrn.


PUCU alma sayfalarn isimlerinin yannda yldz iaretinin gzkmesi, o sayfada deiiklik yapldn, ancak henz kaydedilmediini belirtir. Proje dosyalarnz CTRL+S tularna basarak ska kaydedin.

50

Modl 4:

Konu 2: zellikler, Metotlar ve Olaylar

.NET kontrolleri temel kavramdan oluur.

zellikler
zellikler, kontrollerin grnm, yerleimi veya davranlarna zg niteliklerdir. rnein, bir Button kontrolnn Text zellii, zerinde yazan yazya erimemizi salar. Kontrollerin zellikleri, tasarm annda Properties panelinden ulalabilecei gibi, kod tarafnda da okunup deitirilebilir. Kontrollerin birok zellii hem okunabilir, hem de deitirilebilir. Ancak baz zellikler salt okunur (ReadOnly) ve salt yazlr (WriteOnly) olabilir. Bu tip zellikler Properties panelinde gzkmezler. Kontrollerin birok ortak zellikleri vardr.
Text (Yaz). 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 Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = TextBox1.Text End Sub

Visual Basic.NET ile Windows Tabanl Programlama

51

RESM 4.1. Name (sim). Name zellii kontrollere ulamak iin kullanlan zelliktir.

Birok kontroln Text zellii ayn olabilir. Ancak her biri ayr birer nesne olduu iin, Name zelliklerinin benzersiz olmas gerekir.
TextBox2.Text = TextBox1.Text

ki TextBox kontrolnn yazlar ayn, fakat isimleri farkldr.


Size (Byklk). Kontrollerin byklk zelliidir. Height (ykseklik) ve Width (genilik) zelliklerinden oluur. Genellikle tasarm annda belirlenen bu zellik, alma annda da deitirilebilir. Label1.Height = 10 Label1.Width = 20 BackColor (Arka plan rengi). Kontrollerin arka plan renginin ayarland zelliktir. Bu zelliin deeri, Color (renk) nesnesinde tanml deerlerle belirlenir. ForeColor (nalan rengi). Kontrollerin zerindeki yazlarn rengini

belirler.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Button1.BackColor = Color.Black Button1.ForeColor = Color.White End Sub

RESM 4.2. Visible (Grnr). Kontrollerin ekranda grnp grnmediklerini belirleyen zelliktir. True ve False olmak zere iki deer alabilir. Boolean veri tiplerinden bu modlde bahsedilecektir. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

52 'Label kontroln gizle Label1.Visible = False 'Label kontroln gster Label1.Visible = True End Sub End Class

Modl 4:

Metotlar
Metotlar kontrollerin yapt ilemlerdir. Metotlar parametreyle veya parametresiz arlabilir. Parametreyle armak, metodun girilen deere gre ilem yapacan belirtir. rnein Focus (Odaklan) metodu, parametre beklemeden alr ve kontroln seilmesini salar.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' lem yapldktan sonra ' TextBox kontrolne odaklan TextBox1.Focus() End Sub

Kontrollerin baz ortak metotlar vardr.


Select (Se). Select metodu Focus ile ayndr, ama TextBox kontrol-

nn Select metodunun dierlerinden bir fark vardr. TextBox iindeki yaznn belli bir ksmn ya da tamamn, verilen parametrelere gre seer (Resim 4.3).
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "Yazlm Uzman" TextBox1.Focus() ' Sekizinci karakterden sonra, be karakter se TextBox1.Select(8, 5) End Sub

RESM 4.3. BringToFront (ne Getir). Kontrol, st ste duran kontroller arasndan en ne getirir.

Visual Basic.NET ile Windows Tabanl Programlama

53

SendToBack (Arkaya Gnder). Kontrol, st ste duran kontrollerin en arkasna gnderir. Hide (Sakla). Kontroln gzkmesini engeller. Show (Gster). Kontroln gzkmesini salar.

Olaylar
Olaylar kontrollerin bana gelen ilemlerdir. Olaylarn metotlardan fark, bu ilemlerin kontrollerin elinde olmadan gereklemesidir. rnein bir Button kontrolnn tklanmas, o kontroln istei dnda yaplmtr. Bu olayn tetiklenmesinde kontroln bir rol yoktur. Bu olaylar gerekletii zaman yaplmas gereken ilemler, ilgili olayn yordamna yazlr. Button1 isimli kontrol tkland zaman gerekletirmek istenen eylemler Button1_Click yordamna yazlr. Visual Studio ortam, kontrollerin olaylarn kolay bir ekilde semeyi salar. Kod sayfalarnda kontrollerin bulunduu listeden, istenen kontrol seilir. Kontroln olaylarnn listelendii dier listeden de istenen olay seilir (Resim 4.4).

RESM 4.4: Kontrollerin olaylarnn seilmesi. Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click MsgBox("Form zerine tkland") End Sub

Visual Studio, olaylarn yordam isimlerini Kontrolsmi_Olaysmi biiminde yazar. Kontrollerle alrken benzer olaylar kullanlr.
Click (Tklandnda). Kontrol tkland zaman tetiklenen olaydr. Windows tabanl programlamada en sk kullanlan olaylardan biridir. MouseDown (Fare dmesi basldnda). Fare, kontroln zerindey-

ken herhangi bir dmesine basld zaman gerekleen olaydr. Bu olay, Click olayndan nce alr.
MouseUp (Fare dmesi brakldnda). Fare, kontroln zerindeyken baslan dme brakld zaman alr. Enter (Girildiinde). Kontrol seildii veya zerine odaklanld za-

man gerekleen olaydr.

54

Modl 4:

Leave (kldnda). Baka bir kontrol seilmek zere kldnda, bu kontroln Leave olay tetiklenir. VisibleChanged (Grnrl deitiinde). Kontroln grnp grnmediini belirten Visible zellii deitii zaman tetiklenir.
PUCU Olaylarn alma sralarn test etmek iin tm olay yordamlarna, mesaj kutusu karan (MsgBox) kod yazn. Daha sonra projeyi altrp kontroller zerinde yaplan deiikliklere gre olaylarn alma sralarna bakn.

Visual Basic.NET ile Windows Tabanl Programlama

55

Konu 3: Visual Basic.NETe Kontrollerin Eklenmesi

Windows tabanl uygulamalar gelitirirken ska kullanacamz bir grup kontrol vardr. Form kontrol hari dier btn kontroller Toolbox panelinden seilir. Bu kontroller srklenip form zerinde istenen pozisyona braklr (Resim 4.5).

RESM 4.5: Kontrollerin eklenmesi.

Kontroller, Toolbox panelinde ift tklanarak da eklenebilir. Kontrollerin tasarm annda byklkleri ve yerleri Size ve Location zellikleri ile deitirilebilecei gibi, fare ile de istenen ekilde ayarlanabilir (Resim 4.6).

RESM 4.6: Kontrollerin ayarlanmas.

56

Modl 4:

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

RESM 4.7: Proje zelliklerinin almas.

RESM 4.8: Balang formunun deitirilmesi.

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 ezamanl olarak gnceller. rnein, bir Button kontrolnn geniliini fare ile deitirdiimiz zaman, kod sayfasnda bu kontroln Width zellii yaplan deiiklie gre gncellenir. Ayn deiiklikler Properties panelinde de grlebilir. Formlarn, dier kontrollerin zelliklerinden farkl baz zellikleri vardr.
ControlBox (Denetim kutusu). Form zerindeki simge durumuna kltme, ekran kaplama ve formu kapatma (Minimize / Maximize / Close) kutularnn grnmn ve eriilebilirliini kontrol eder.
NOT Formun ControlBox zellii False iken uygulama, Debug mensnden Stop Debugging komutu seilerek kapatlabilir.

Visual Basic.NET ile Windows Tabanl Programlama

57

StartPosition (Balang pozisyonu). Form ald zaman nerede gzkeceini belirler. CenterScreen seenei formu ekrann ortasnda gsterir.

Formlar ald zaman Load olay gerekleir. Eer form, balang formu olarak seilmise, proje balad zaman altrlmak istenen kodlar bu olayn yordamna yazlr.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Now End Sub Label1.Text = "Proje balatld. Kayt zaman: " &

Button
Bir Windows dmesini temsil eder. Button kontrol tklandnda Click olay tetiklenir. Bu olay gerekletii zaman yaplacak ilemler, Buttonsmi_Click yordamnda yazlr.
Private Sub btnRenkDegistir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRenkDegistir.Click btnRenkDegistir.ForeColor = Color.Gray End Sub

TextBox
Bir Windows metin kutusunu temsil eder. Kullanclarn deer girerek programla haberlemesini salamak amacyla kullanlr. TextBox kontrolndeki yaz deitii zaman TextChanged olay gerekleir.
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged ' TextBox iindeki yaz deitii zaman ' aadaki kod alr. MsgBox("Yaz deitirildi: " & TextBox1.Text) End Sub

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

duracan belirler (Resim 4.9).

58

Modl 4:

RESM 4.9: TextAlign zellii. Font (Yaz Tipi). Font zellii birok alt zellik tar. Bunlardan bazlar en sk kullanlan zelliklerdir (Resim 4.10). Name. Yaz tipinin ismini belirler. Varsaylan durumda Microsoft Sans Serif seilidir. Size. Karakterlerin bykln belirler. Varsaylan byklk 8,5

deerindedir.
Bold (Kaln). Yaznn kaln tipte olmasn belirler. Italic (talik). Yaznn italik tipte olmasn belirler. UnderLine (Alt izgili). Yaznn alt izgili olmasn belirler.

RESM 4.10: Font zellii.

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 panelinden Items zellii seilir. String Collection Editor penceresinde, her enin deeri tek bir satrda yazlr (Resim 4.11).

Visual Basic.NET ile Windows Tabanl Programlama

59

RESM 4.11: String Collection Editor penceresi.

alma annda e eklemek iin kod sayfasnda, kontroln Items zelliinin Add metodu kullanlr.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.Items.Add("Lise") ComboBox1.Items.Add("niversite") ComboBox1.Items.Add("Yksek Lisans") ComboBox1.Items.Add("Doktora") End Sub

RESM 4.12: ComboBox kontrolnn almas.

ListBox
Bir Windows liste kutusunu temsil eder. Kontroldeki eler sabit bir liste olarak grntlenir. ListBox kontrolne e ekleme ilemi, ComboBox kontrolndeki ilemlerle ayndr. ListBox kontrolnn ComboBox kontrolnden fark, birden fazla enin seilebilir olmasdr (Resim 4.13).
Private Sub btnBosSiniflar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBosSiniflar.Click ListBox1.Items.Add("YU6501") ListBox1.Items.Add("YM6221") ListBox1.Items.Add("YM6102") ListBox1.Items.Add("YU6412") End Sub

60

Modl 4:

RESM 4.13: ListBox kontrolnn almas.

Timer
Bir Windows sayacn temsil eder. Saya almaya balad zaman, belirli zaman aralklarnda Tick olay gerekleir. Timer kontrolnn Interval deeri, Tick olaynn ka milisaniyede bir gerekleeceini belirler. rnein, Interval deeri 2000 olan bir saya, Tick olaynda yazlan kodlar iki saniyede bir altrr. Sayac balatmak iin kontroln Start metodu, durdurmak iin ise Stop metodu kullanlr. Enabled zellii, sayacn aktif olup olmadn belirler.
Private Sub btnBasla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBasla.Click ' Saya 5 saniyede bir alacak Timer1.Interval = 5000 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick MsgBox("Saya alyor...") End Sub Private Sub btnDur_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDur.Click Timer1.Stop() End Sub

Visual Basic.NET ile Windows Tabanl Programlama

61

LAB 4.1: Kronometre Uygulamas


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

Form zerine Kontrollerin Eklenmesi, Biimlendirmelerin Yaplmas


1. Kronometre isminde yeni bir Windows projesi an. 2. Properties panelinden, Form1 nesnesinin BackColor zelliini Menu olarak sein. Font zelliini, yanndaki + simgesini tklayarak geniletin. Font zelliinin alt zellikleri listelenir.
Name zelliini Tahoma, Text zelliini Yazlm Uzmanl Kronometre Uygulamas, Size zelliini 10 olarak ayarlayn.

Form grnm zellikleri, eklenecek kontrollerin (deitirilmedikleri srece) grnmlerini de etkiler. 3. Toolbox panelinden form zerine bir Label ekleyin. zelliklerini atayn:
Text: Kronometrem Font Name: Forte, Font Size: 28 Dock: Top TextAlign: BottomCenter

4. Bir Label kontrol ekleyin. zelliklerini atayn:


Text: 0 Font Size: 30 TextAlign: MiddleCenter Name: lblSure

5. Forma bir Timer kontrol ekleyin. Name zelliini tmrKronometre olarak deitirin.
PUCU Kod tarafnda kullanacanz kontrollerin isimlerini deitirmek, daha sonra ulamak istediinizde zaman kazandracaktr.

6. Bir ComboBox ekleyin. Text zelliini Hz Sein olarak, Name zelliini de cmbInterval olarak deitirin. Items Collection iine srayla 1000, 2000, 3000, 4000 deerlerini girin.

62

Modl 4:

Bu kontrol, alma annda Timer kontrolnn Interval zelliini deitirmeyi, dolaysyla kronometrenin hzn ayarlamay salayacaktr. 7. Text zellikleri birinde Dur, dierinde Bala olan iki Button ekleyin. Kontrollerin Name zelliklerini srayla btnDur ve btnBasla olarak deitirin. 8. Bir ListBox kontrol ekleyin ve Name zelliini lbKayit olarak deitirin. Bu kontrol kronometrenin balama ve durma zamanlarn kaydetmeyi salayacaktr. 9. Bir TextBox kontrol ekleyin. Name zelliini txtSure olarak deitirin ve Text zelliinde yazan yazy silin. 10. Eklenen kontrolleri, Resim 4.14te grnen ekilde dzenleyin.

RESM 4.14: Kronometre form grnm.

Kodlarn yazlmas
1. Form zerinde sa tklayn ve View Code komutunu sein. 2. Alan kod sayfasnda, KalanSure isimli bir deiken tanmlayn.
Dim KalanSure As Integer

3. Formun tasarm grnmne dnn ve Bala isimli Button kontroln ift tklayn. btnBasla_Click yordam iine Timer kontroln ayarlayp balatan, ListBox kontrolne kaytlar giren, kalan sreyi Label kontrolnde grntleyen kodlar yazn.
Private Sub btnBasla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBasla.Click ' Balang zaman "KalanSure" deikenine atanr. KalanSure = txtSure.Text ' Kalan sre kullancya gsterilir.

Visual Basic.NET ile Windows Tabanl Programlama

63

lblSure.Text = KalanSure ' ListBox kontrolne kayt girilir. lbKayit.Items.Add("Kronometre balad: " & Now.TimeOfDay.ToString) ' ComboBox kontrolnden seilen deer, ' Timer kontrolnn alma hzn belirler. tmrKronometre.Interval = cmbInterval.Text ' Timer kontroln altrr. tmrKronometre.Start() End Sub

4. Dur isimli Button kontroln ift tklayn. btnDur_Click yordam iine Timer kontroln durduracak ve ListBox kontrolne kaytlar ekleyecek kodlar yazn.
Private Sub btnDur_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDur.Click ' Timer kontroln durdurur. tmrKronometre.Stop() ' ListBox kontrolne kayt girilir. lbKayit.Items.Add("Kronometre durduruldu: " & Now.TimeOfDay.ToString) End Sub

5. Tasarm grnmnde tmrKronometre isimli Timer kontroln ift tklayn. tmrKronometre_Tick yordam iine kalan sreyi azaltacak ve sre sfrlandnda kronometreyi durduracak kodlar yazn.
Private Sub tmrKronometre_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrKronometre.Tick ' Her saniye getiinde sure deeri 1 azalacaktr. KalanSure = KalanSure - 1 'KalanSure deeri kullancya gsterilir lblSure.Text = KalanSure ' KalanSure deeri sfra ulamsa kronometre durdurulur. If KalanSure = 0 Then tmrKronometre.Stop() lbKayit.Items.Add("Sre Doldu: " & Now.TimeOfDay.ToString)

64

Modl 4:

MsgBox("Sre doldu") End If End Sub

6. Projeyi balatn, metin kutusuna 5 deerini girin. Hz Sein alan kutusundan 1000 deerini sein ve Bala dmesini tklayn. Sre baladktan ve bittikten sonra ListBox kontrolndeki deiiklikler nelerdir? Hz 3000 olarak seildiinde balama ve biti zamanlar arasndaki sre ne kadardr?

Visual Basic.NET ile Windows Tabanl Programlama

65

Konu 4: Hazr Fonksiyonlar

Visual Basic.NET dilindeki hazr fonksiyonlar, program yazarken en ok kullanlan ilemleri programclara sunar. Bu fonksiyonlar Microsoft. VisualBasic altnda gruplanmtr. rnein, metin kutusuna girilen bir yaznn soldan ilk karakterini almak iin Microsoft.VisualBasic.Left hazr fonksiyonu kullanlr.
Label1.Text = Microsoft.VisualBasic.Left(TextBox1.Text, 3)

Farkl ilemler iin hazrlanm birok fonksiyon vardr. Dosya ilemleri: Yeni bir klasr amak:
MkDir("C:\Kayitlar")

Bulunduu yer verilen bir dosyay baka bir yere kopyalamak:


FileCopy("C:\LogDosyasi.txt ", " C:\Kayitlar\LogDosyasi.txt ")

Bir dosyann ismini deitirmek:


Rename("C:\LogDosyasi.txt", "C:\Log_Dosyasi.txt")

Bir dosyay silmek:


Kill("C:\Log_Dosyasi.txt")

66

Modl 4:

Tarih ilemleri: Verilen tarihin gnn almak:


MsgBox(Day(Now))

Verilen tarihin ayn almak:


MsgBox(Month(Now))

Verilen ay numarasnn ismini almak:


MsgBox(MonthName(7))

Verilen tarihin saatini almak:


MsgBox(Hour(Now))

Verilen tarihe, ilk parametrede belirtilen zaman cinsinden bir deer eklemek:
MsgBox(DateAdd(DateInterval.Day, 20, Now))

Gnn saat, dakika, saniyesini almak:


MsgBox(TimeOfDay)

Yaz ilemleri: Yaznn bandaki ve sonundaki boluklar atmak:


Label1.Text = Trim(" ' Sonu: BilgeAdam BilgeAdam ")

Tm yazy kk harfe evirmek:


Label1.Text = LCase("BILGEAdam") ' Sonu: bilgeadam

Tm yazy byk harfe evirmek:


Label1.Text = UCase("bilgeADAM") ' Sonu: BLGEADAM

Yaznn belirli bir blmn almak. kinci parametrede verilen pozisyondan balayarak, nc parametredeki deer kadar karakter alnr:
Label1.Text = Mid("BilgeAdam", 6, 4) ' Sonu: Adam

Yaznn parametrede belirtilen sradaki karakteri almak:

Visual Basic.NET ile Windows Tabanl Programlama

67

Label1.Text = GetChar("BilgeAdam",9) ' Sonu: m

Verilen karakter koduna karlk gelen karakteri almak:


Label1.Text = Chr(65) ' Sonu: A

Say ilemleri: Rasgele say retmek:


' Maximimum 400 deerini alan bir say retir Rnd() * 400 Rnd fonksiyonu, uygulama batan baladnda ayn deerleri retir.

Her almada farkl deer retmek iin, Rnd fonksiyonundan nce Randomize fonksiyonunun arlmas gerekir:
Randomize() Rnd() * 400

Parametrede verilen bir deerin say olup olmadn kontrol etmek. Geriye dnen deer True ya da False mantksal deeridir:
IsNumeric(TextBox1.Text)

68

Modl 4:

Konu 5: InputBox

InputBox, kullancnn veri girmesi iin alan bir mesaj kutusudur. Formlarda TextBox kontrolne ihtiya duymadan veri almay salar (Resim 4.15). InputBox("Bir say giriniz: ", "Say Girii", 1, 350, 350) InputBox metodunun ilk parametresi, mesaj kutusunun gvdesinde gzke-

cek yazdr (Prompt). Dier tm parametreler istee baldr.


Title (Balk). Mesaj kutusunun baldr DefaultResponse (Varsaylan cevap). Kullanc veri girmediinde var-

saylan deerdir.
XPos (X pozisyonu). Mesaj kutusunun sol kenarnn, ekrann sol kenarna olan uzakldr. YPos (Y pozisyonu). Mesaj kutusunun st kenarnn, ekrann st kena-

rna olan uzakldr.


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(InputBox("sim soyad giriniz:", "Bilgi Girii", "Bilinmiyor")) End Sub

RESM 4.15: InputBox.

Visual Basic.NET ile Windows Tabanl Programlama

69

Konu 6: MessageBox
MessageBox, kullancya bilgi gstermek iin alan mesaj kutusudur. Bu mesaj

kutusu drt eden oluur (Resim 4.16).


Text (Yaz). Mesaj kutusunda verilmek istenen bilgiyi tutan yazdr. Caption (Balk). Mesaj kutusunun baldr. Buttons (Dmeler). Mesaj kutusunda hangi dmelerin gsterilece-

ini belirler.
Icon (Simge). Mesaj kutusunda gsterilecek olan simgeyi ve ald zaman kartlacak sesi belirler. MessageBox.Show("Devam etmek istiyor musunuz?", "Uyar", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)

RESM 4.16: MessageBox.

Mesaj kutusu, kapanrken hangi dmenin tklandn DialogResult nesnesi ile programcya bildirir.
If MessageBox.Show("Deiiklikler kaydedilsin mi?", "Kayt", MessageBoxButtons.YesNoCancel) = DialogResult.Cancel Then ' ptal tuuna basld zaman ' buraya girilir. End If
NOT

MsgBox hazr fonksiyonu MessageBox.Show metodu ile ayn ileve sahiptir.

70

Modl 4:

Konu 7: Deiken Sabit Nedir? Deikenlerin ve Sabitlerin Tanmlanmas

Deiken Nedir, Nasl Tanmlanr?


Program yazarken, baz verilerin daha sonra kullanlmak zere bir yerde tutulmas gerekebilir. rnein, bir hesaplama yaplrken, nceden hesaplanm verilerin kullanlmas istenirse, bu verileri tekrar hesaplamak yerine hafzada tutmak performans artrr. Veya veritabanndan alnan bir kullanc isminin hafzada tutulmas, bu deer her istendiinde veritabanna balanp alnmasna tercih edilmelidir. Verilerin bu ekilde hafzada tutulmas deikenlerle salanr. Deikenler farkl trlerde verileri tuttuklar iin, farkl tiplere sahip olabilir. Bir negatif veya pozitif sayy tutan deiken ile yaz tutan bir deiken farkl tiplere sahiptir. Deikenler Dim anahtar kelimesi ile tanmlanr.
Dim sayi
NOT Dim szc, boyut anlamna gelen Dimension kelimesinin ksaltmasdr.

Bu ekilde tanmlanan deikenler Object (nesne) tipindedir, yani her trden veriyi tutabilirler. Nesne tipindeki deikenler, tanmlanmalarnn kolay olmas ve istenen tipte deer tutabilmeleri asndan avantajl olsa da, performans nemli lde drrler. Tuttuklar deerlerin tipleri biliniyorsa, deikenleri tanmlarken tiplerini belirlemek gerekir.

Visual Basic.NET ile Windows Tabanl Programlama

71

Dim sayi As Integer Dim kelime As String

Tanmlanan deikenlerin tipleri As anahtar kelimesinden sonra belirtilir. Deiken isimlerini belirlerken baz noktalara dikkat etmek gerekir: Boluk, nokta, soru iareti, noktal virgl, ift trnak, tek trnak, aritmetik operatrler, karlatrma operatrleri ve atama operatrleri ile parantezler kullanlamaz. Say ile balayamaz. Visual Basic.NET dilinde tanml anahtar kelimeler kullanlamaz.
Dim DeikenAd As VeriTipi kuralna uyulmaldr.
PUCU Deiken isimlerinde Trke karakter kullanlrsa, farkl dil seenekli iletim sistemlerinde alma annda hata retecektir.

Hatal baz deiken tanmlar:


Dim dim As Double Dim (sayi) As Short Dim 333sayisi As Integer Dim "kelime" As String Dim <isim> As String

Ayn tipteki deikenler tek bir satr iinde tanmlanabilir.


Dim sayi1, sayi2 As Integer

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

Deikenler tanmlandklar srada balang deeri alabilirler.


Dim isim As String = "Enis Gnesen"

Uygulama gelitirirken, deikenlerin tanmlanarak kullanlmas, yazm yanllarndan kaynaklanan karklklar engeller. Deikenlerin tanmlanmadan kullanlmas iin Option Explicit seeneinin kapal olmas gerekir. Option Explicit seeneini projenin zelliklerindeki Build sekmesinden deitirilebilecei gibi, kod sayfalarnn en stnde de deitirilebilir.

72

Modl 4:

RESM 4.17: Option Explicit seenei kapal. Option Explicit seeneinin On olmas, tanmlanmam deikenlerin kulla-

nlmasna izin vermez, tasarm annda hata reterek programcya bildirir. Varsaylan durumda On deeri seilidir. Deikenler program iinde, tuttuklar verilere ulamak iin kullanlr. Ancak deikenlere ulamak, tanmlandklar yerde veya alt bloklarda mmkndr. Bu kavrama deikenlerin kapsam alan (Scope) denir. Kapsam alan dndaki bir yerden deikene ulalamaz.
Namespace NameSpace1 Module Module1 Dim ModulDegiskeni As Integer Class Class1 Dim SinifDegiskeni As Integer Sub Sub1() Dim YordamDegiskeni As Integer Do Dim DonguDegiskeni As Integer Loop End Sub Sub Sub2() Dim YordamDegiskeni2 As Integer End Sub End Class End Module End Namespace

Tablo 4.1de kod bloklarndan hangi deikenlere ulalabildii grlyor.

Visual Basic.NET ile Windows Tabanl Programlama

73

TABLO 4.1. Module1 ModulDegiskeni SinifDegiskeni YordamDegiskeni YordamDegiskeni2 DonguDegiskeni


Evet

Class1
Evet Evet

Sub1
Evet Evet Evet

Sub2
Evet Evet

Loop
Evet Evet Evet

Evet

Evet Evet

Uygulamann almas deikenlerin kapsam alanlarndayken, bu deikenler bellekte tutulur. Dolaysyla deikenlerin tanmlandklar yer, kullanlaca amaca gre seilmelidir. rnein bir deiken birden fazla yordamda kullanlacaksa, bir st dzeyde (snf dzeyinde) tanmlanmalar gerekir. Ancak sadece bir yordam iinde kullanlan deikenler snf dzeyinde tanmlanrsa, bellekte fazladan yer tutar ve performans der. Snf dzeyindeki deikenler, ayn snf iindeki fonksiyonlar ile deitirilebilir ve snf rneinin yaam sresinde ilgili zelliklerine eriim salanabilir.

Sabit Nedir, Nasl Tanmlanr?


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

Sabitlerin kapsam alanlar deikenler ile ayndr.

74

Modl 4:

Veri Tipleri

Veri tipi, deikenlerin tuttuklar deerlerin trn ve bellekte tutulacak bykln tanmlar. Deikenleri veri tipleri ile tanmlarken verinin byklne gre bir veri tipi seilmelidir. Visual Basic.NET veri tipleri Tablo 4.2de listelenmitir.
TABLO 4.2: Visual Basic.NET Veri Tipleri
Veri Tipi Byklk 2 Bayt 1 Bayt 2 Bayt 8 Bayt 16 Bayt Deer

Boolean Byte Char Date Decimal

True False
0 255 Tek bir Unicode karakteri tutar 01.01.0001 tarihi 00:00:00 saati 31.12.9999 tarihi 23:59:59 saati Maksimum 29 haneli say tutar. +/-79,228,162,514,264,337,593,543,950,335 arasnda deer alr Negatif say aral: -1.79769E+308 ile -4.94065E-324 Pozitif say aral: 4.94065E-324 ile 1.79769E+308 -2,147,483,648 2,147,483,647 32,768 32,767 -9,223,372,036,854,775,808 9,223,372,036,854,775,807. Negatif say aral: -3.4028235E+38 ile -1.401298E-45 Pozitif say aral: 1.401298E-45 ile 3.4028235E+38 Maksimum 2,147,483,647 Unicode karakter tutar

Double Int32 Int16 Int64 Single String

8 Bayt 4 Bayt 2 Bayt 8 Bayt 4 Bayt

Visual Basic.NET ile Windows Tabanl Programlama

75

Double ve Single veri tiplerinin aralnda belirtilen E + say ifadesi, 10 ^ say ile arplacan belirtir. rnein 12 E-3 ifadesi, 12 * 0.001 anlamna gelir. -1.7E-5 = -0.000017 -1.7E+10 = -17000000000.0 0.7432E+2 = 74.32 7432E-3 = 7.432
NOT

Int16, Int32, Int64 .NET veri tipleridir. Visual Basic dilindeki karlklar Short, Integer, Long veri tipleridir.

Dim yazi As String = "Veri tipleri rnekleri" Dim bool As Boolean = True Dim karakter As Char = "A" Dim tarih As Date = #4/23/2005# Dim numerik As Decimal = -123456789 Dim cift As Double = -1.234E-120 Dim tek As Single = 3.32E+100 Dim bayt As Byte = 255 Dim kisaSayi As Short = -32000 Dim tamSayi As Integer = 2000000000 Dim uzunSayi As Long = -123456789123456789

Uygulamalar alrken, ou zaman veri tipleri birbirlerine otomatik olarak dntrlr. rnein InputBox geriye String tipinde bir deer dndrr. Ancak kullanc mesaj kutusuna say girerse ve biz bu deeri Integer tipinde bir deikene atarsak, veri dntrme ilemi yaplr. Buna Implicit Conversion (kapal dntrme) denir.
Dim rakam As Integer rakam = InputBox("Rakam giriniz")

Byk veri tiplerinden kk veri tiplerine dnm srasnda, deer kayplar meydana gelebilir. rnein Single tipinden Short tipine yaplacak bir dnmde virglden sonraki saylar kaybedilecektir.
Dim virgullu As Single = 1.12 Dim kisaSayi As Short = virgullu ' kisaSayi deikenin son deeri 1 olur
NOT

Option Strict seenei On olarak ayarlanrsa, Implicit Conversion ilemine


izin verilmez.

Veri dntrme ilemlerinin kapal olarak yaplmas sisteme braklmtr. Bu ilemde kodlarn tekrar okunmas srasnda dntrme ilemleri gzden

76

Modl 4:

kaabilir ve deer kayplar fark edilmez. Bu durumda dntrme ilemleri hazr fonksiyonlar ile ak olarak yaplmaldr. Buna Explicit Conversion (ak dntrme) denir.
Dim rastgeleSayi As Double = Rnd() * 30 MsgBox(rastgeleSayi) Dim rastgeleTamSayi As Integer = CInt(rastgeleSayi) MsgBox(rastgeleTamSayi)

Explicit Conversion fonksiyonlar:


CStr. Verilen deeri String tipine dntrr. CInt. Integer veri tipinin alabilecei deerler arasnda girilen saylar Integer tipine dntrr. CDbl. Double veri tipinin alabilecei deerler arasnda girilen saylar Double tipine dntrr. CDate. Doru tarih ve saat biimde yazlm herhangi bir ifadeyi Date ti-

pine dntrr.
CLng. Long veri tipinin alabilecei deerler arasnda girilen saylar Long

tipine dntrr.
CSng. Single veri tipinin alabilecei deerler arasnda girilen saylar Single tipine dntrr. CDec. Decimal veri tipinin alabilecei deerler arasnda girilen saylar Decimal tipine dntrr.

Say dntrme fonksiyonlar, True Boolean tipini -1, False Boolean tipini 0 olarak dntrrler. Ayrca tm fonksiyonlar, dzgn biimde verilmi String tipinde deikenleri de ilgili veri tipine deitirirler.
Dim say As Integer = CInt("12345abc") ' InvalidCastException hatas frlatlr.

Visual Basic.NET ile Windows Tabanl Programlama

77

Structure

Structure veri tipleri, programclarn kendilerinin tanmlad veri tipleridir. Structure, birka veri tipinin bir araya getirilmesiyle oluturulan bileik bir tiptir. Structure veri tiplerinde yordam tanmlar da yaplabilir. Structure Nokta Dim x As Integer Dim y As Integer Sub Degistir(ByVal yeniX As Integer, ByVal yeniY As Integer) x = yeniX y = yeniY End Sub End Structure Structure Ucgen Dim n1 As Nokta Dim n2 As Nokta Dim n3 As Nokta End Structure

78

Modl 4:

Dizilerle almak

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

Diziler tanmlanrken, ismi verildikten sonra parantez iinde ka eleman iereceini belirtmek gerekir. Dizilerin indisleri sfrdan balar. rnekteki isimler dizisinin String tipinde 4 tane eleman vardr. Dizilerin elemanlarna ulamak iin, istenen elemann indisinin verilmesi gerekir.
isimler(0) = "Ali" isimler(1) = "Ahmet" isimler(2) = "Mehmet" isimler(3) = "Aye" MsgBox(isimler(3))

Dizilere tek tek deer atanabildii gibi, tanmlarken de balang deerleri atanabilir.
Dim isimler() As String = {"Ali","Ahmet","Mehmet","Aye"}

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

Visual Basic.NET ile Windows Tabanl Programlama

79

' lk boyutunda 5, kinci boyutunda 6 Integer deeri olan ' 2 boyutlu dizi Dim matris(4,5) As Integer

Burada, dizinin ilk boyutunda 5 tane eleman vardr. lk boyuttaki her eleman iin kinci boyutta 6 eleman bulunur. Dolaysyla dizinin toplam 30 eleman vardr. Bu dizide bir boyut daha olsayd, o boyutun her eleman iin dier boyutlardaki 30 eleman bulunacakt. ok boyutlu dizilerin eleman saylar boyutlarndaki eleman saylar arplarak hesaplanabilir.
Dim dizi(boyut1,boyut2,boyut3,... ,boyutn) As VeriTipi ' Eleman says: ' (boyut1 + 1) * (boyut2 + 1) * ... * (boyutN + 1)

ok boyutlu dizilere balang deerleri, dizinin boyutu dikkate alnarak verilmelidir. Boyutlardaki elemanlar kme parantezleri ile gruplanmaldr.
' lk boyutunda 2, ikinci boyutunda 4 eleman olan ' 2 boyutlu dizi Dim matris(,) As Integer = {{1, 2, 3, 4}, {5, 6, 7, 8}}

ok boyutlu dizilerin elemanlarna ulamak iin, her boyut iin indis gstermek gerekir.
matris(0, 0) = 1

Dizileri tanmladktan sonra, eer boyutun bykl (eleman says) yetmiyorsa tekrar boyutlandrmaya ihtiya duyarz. Ayn ekilde boyutun bykln azaltmak iin de tekrar boyutlandrma kullanlr.
Dim dizi() As Double = {0.1, 0.2, 0.3} ReDim dizi(4) ReDim, yeniden boyutlandr anlamna gelir. Burada dizininin boyutu be eleman

alacak ekilde ayarlanr. Ancak ReDim, dizileri boyutlandrrken deerleri korumaz. Preserve anahtar kelimesi kullanlmadan tekrar boyutlandrlan diziler, ierdii verileri kaybeder.
' (3,0) boyutlu olan bir dizi, ' deerlerini koruyarak (3,1) boyutlu yaplr Dim dizi(,) As Double = {{1.0},{2.0},{3.0},{4.0}} ReDim Preserve dizi(3, 1)

Baz Dizi zellikleri ve Metotlar Diziler, .NET Framework iinde tanml Array snf ile temsil edilir. Tm diziler Array snfnda tanml zellikleri ve metotlar kullanrlar.

80

Modl 4:

Length. Dizinin btn boyutlarndaki toplam eleman saysn veren zelliktir. Dim ComboBoxDizisi(19) As ComboBox MsgBox(ComboBoxDizisi.Length) 'Sonu = 20 Dim dizi(1, 4, 4, 5, 6) As Integer MsgBox(dizi.Length()) 'Sonu = 2 * 5 * 5 * 6 * 7 = 2100 Rank. Dizinin boyut saysn veren zelliktir. MsgBox(dizi.Rank) 'Sonu = 5 GetLength. ndisi verilen boyutun ka elemanl olduunu gsterir. Burada indisin sfrdan baladna dikkat edilmelidir. Dim dizi(10, 40, 50, 80, 90) As Integer MsgBox(dizi2.GetLength(4)) 'Sonu = 91 Clear, Reverse ve IndexOf metotlar Array snfnda Shared (paylatrlm)

olarak tanml metotlardr. lemin yaplaca dizi parametre olarak verilmelidir.


Clear. Parametre olarak verilen dizinin, belirtilen indis aralndaki tm deerlerini temizler. Temizleme ileminde atanan deer, dizi elemanlarnn tiplerine gre deiir. rnein Integer tipinde tanml bir dizinin elemanlar temizlenirse 0 deerini alacaktr. Buna karn String tipindeki elemanlar (bo yaz) deerini alr. Dim dizi() As Integer = {12, 13, 14, 15} ' 1. indisten balayarak, 3 eleman temizle Array.Clear(dizi, 1, 3) MsgBox(dizi(2)) 'Sonu = 0 ' Dizinin tm elemanlarn temizler Array.Clear(dizi, 0, dizi.Length) Reverse. Parametre olarak verilen dizinin eleman srasn tersine evirir. Dizinin tm elemanlarnn veya belirli indis aralndaki elemanlarnn sras tersine evrilebilir. Dim harfler() As String = {"A", "B", "C"} Array.Reverse(harfler)

Visual Basic.NET ile Windows Tabanl Programlama

81

MsgBox(harfler(2)) 'Sonu = A Dim harfler() As String = {"A", "B", "C"} Array.Reverse(harfler, 0, 1) MsgBox(harfler(2)) 'Sonu = C IndexOf. lk parametrede verilen dizide, ikinci parametrede verilen de-

eri arar. Aranan deer dizide bulunursa indisi, bulunamazsa -1 dndrr.


Dim notlar() As Single = {78.1, 99.9, 100, 12.2} Dim maxNot As Single = 100 MsgBox(Array.IndexOf(notlar, maxNot)) ' Aranan maxNot deerinin indisi = 2

82

Modl 4:

Debug

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

RESM 4.18: Durma noktas.

Uygulama altrldnda, BreakPoint konulan kod satrna kadar durmaz. Belirtilen satra sra gelindiinde, kod sayfasnda, o an zerinde bulunan satr ok ile gsterilir. Visual Studio ile hata ayklarken, tanmlanan deikenlerin o andaki deerleri incelenerek mantksal hatalar bulunabilir.

Visual Basic.NET ile Windows Tabanl Programlama

83

RESM 4.19: Autos paneli.

Hata ayklama srasnda baz Visual Studio panelleri, deikenlerin, kontrollerin ve nesnelerin deerlerini listelemek iin kullanlabilir. Bu paneller Debug mensnde Windows alt mensnden gsterilir. Autos Paneli. almakta olan satrdaki ifade ile bir nceki ifadede bulunan deiken ve kontrollerin deerlerini listeler (Resim 4.19). Locals Paneli. inde bulunulan kapsam alanndaki tm deikenlerin deerlerini listeler. Watch Paneli. Deeri incelenmek istenen deiken veya kontroller bu panele elle yazlmaldr. Kodlar arasnda ilerlemek ve hata ayklamaya devam etmek iin drt yol vardr. Bu komutlara Debug mensnden veya Debug ara ubuundan ulalabilir. Step Into. Kod satrnda bir yordam altrlacaksa, bu yordamn iine girer. Bu yordam farkl bir yerde ise, ilgili sayfa alr ve hata ayklamaya devam edilir. Step Over. Herhangi bir yordam iine girmeden, iindeki kapsam alannda almaya devam eder. Step Out. Bulunan yordamdan karak hata ayklamaya devam eder. Continue. Birden fazla durma noktas yerletirilmise, bir sonraki noktaya kadar almaya devam eder. Hata ayklama, altrlacak hibir satr kalmadnda durur ve uygulama normal almasna devam eder. Durma noktalar kaldrlarak ya da pasif hale getirilerek uygulamann durmas engellenebilir. Btn durma noktalarn kaldrmak iin Debug mensnden Clear All BreakPoints komutu, pasif hale getirmek iin Disable All BreakPoints komutu verilmelidir. Durma noktalarn aktif hale getirmek iin tekrar ayn komut seilmelidir.

84

Modl 4:

Altrma
Bu uygulamada veri tiplerinin kullanm yerlerine ve diziler ile alma rneklerine baklacaktr. Structure Veri Tipi 1. Snf isminde bir Windows projesi an. 2. Alan form zerine sa tklayarak View Code komutunu sein. Kod sayfasnda snf dzeyinde bir Structure tanmlayn.
Structure Ogrenci Dim Isim As String Dim Soyad As String Dim Sube As Char Dim OrtalamaNotu As Single Dim DevamEdiyor As Boolean End Structure

3. Ogrenci tipindeki deerleri tutmak iin, snf dzeyinde iki elemanl bir dizi tanmlayn.
Dim ogrenciler(1) As Ogrenci

4. Formun Load olayna, uygulama alrken yeni renci ekleme kodlarn yazn.
Dim ogrenci1 As Ogrenci ogrenci1.Isim = "Ali" ogrenci1.Soyad = "Veli" ogrenci1.Sube = "C" ogrenci1.OrtalamaNotu = 67.1 ogrenci1.DevamEdiyor = True Dim ogrenci2 As Ogrenci With ogrenci2 .Isim = "Ahmet" .Soyad = "Veli" .Sube = "C" .OrtalamaNotu = 72.9 .DevamEdiyor = True End With ogrenciler(0) = ogrenci1 ogrenciler(1) = ogrenci2
PUCU

With anahtar kelimesi, belirtilen deikeni tekrar yazmadan kullanmay salar.

Visual Basic.NET ile Windows Tabanl Programlama

85

5. Forma btnOgrenciEkle isminde bir Button kontrol yerletirin. Bu kontroln Click olayna, diziye yeni bir renci kayd ekleyen kodu ekleyin.
' ogrenciler dizinde bo yer kalmad iin ' diziyi, eski deerleri kaybetmeden tekrar ' boyutlandrmak gerekir. ReDim Preserve ogrenciler(2) Dim ogrenci As Ogrenci With ogrenci .Isim = "Veli" .Soyad = "Veli" .Sube = "D" .OrtalamaNotu = 92.1 .DevamEdiyor = False End With ogrenciler(2) = ogrenci ogrenciler dizisine baka bir yordamdan nasl eriildi?

Formun Load olaynda ogrenci isimli bir deiken tanmland halde,


Button kontrolnn Click olaynda ayn isimde bir deiken nasl ta-

nmlanabiliyor? Dizi ilemleri 1. Forma bntOzellikleriGoruntule isminde bir Button kontrol ekleyin ve Click olaynda, diziden indisi verilen renciyi alan kodlar yazn.
Dim indis As Integer = InputBox("Ogrenci sras numarasn girin") Dim secilenOgrenci As Ogrenci secilenOgrenci = ogrenciler(indis) Dim bilgiler As String With secilenOgrenci bilgiler &= .Isim & " " & .Soyad & vbCrLf bilgiler &= "Notu: " & .OrtalamaNotu & vbCrLf bilgiler &= "ubesi: " & .Sube & vbCrLf bilgiler &= "Devam ediyor mu: " & .DevamEdiyor End With MsgBox(bilgiler, MsgBoxStyle.Information, "renci Bilgileri")

86
PUCU

Modl 4:

VbCrLf (Visual Basic Carriage Return-Linefeed) sabiti, String deikenlerinde yeni satra geilmesini salar.

Aritmetik ilemler 1. Forma btnOrtalamaHesapla isminde bir Button kontrol ekleyin ve Click olaynda snfn ortalamasn hesaplayan kodu yazn.
Dim not1 As Double = ogrenciler(0).OrtalamaNotu Dim not2 As Double = ogrenciler(1).OrtalamaNotu Dim not3 As Double = ogrenciler(2).OrtalamaNotu Dim ortalama As Integer = CInt((not1 + not2 + not3) / 3) MsgBox(ortalama)

2. not3 deikeninin tanmland yere BreakPoint koyun ve projeyi altrn. 3. Form aldnda btnOrtalamaHesapla dmesini tklayn. Uygulamann almas durma noktas konulan yerde duracaktr. 4. Debug | Windows | Autos komutunu sein. Autos panelinde not1 ve not2 deikenlerinin deerlerini inceleyin. 5. Debug | Windows | Watch komutunu sein. Watch panelinde Name stununa ogrenciler yazn. + simgesini tklayarak ogrenciler dizisini geniletin ve dizi elemanlarnn deerlerini inceleyin. 6. Debug mensnden Step Into komutunu sein. Bu ilemi Debug ara ubuu ile ya da F11 tuuna basarak da yapabilirsiniz. 7. Gsterilen hata mesajn inceleyin. Continue dmesini tklayarak uygulamay sonlandrn. 8. Uygulamay tekrar altrn ve nce btnOgrenciEkle dmesini daha sonra da btnOrtalamaHesapla dmesini tklayn.

Visual Basic.NET ile Windows Tabanl Programlama

87

Konu 8: Operatrler

Visual Basic .NET dilinde alrken, deikenler zerinde birok ilem yaplr. Hesaplamalarda aritmetik ilemler, kontrollerde karlatrma ilemleri veya mantksal ilemler yaplr. Bu ilemler iin Visual Basic .NET dilinde tanml operatrler kullanlr.

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

Blme
Dim bolum As Double bolum = sayi / 23

karma
Dim sonuc As Integer = bolum 100

Toplama
Dim toplam As Integer toplam += sonuc ' Bu ifade, "toplam = toplam + sonuc" ile ayn anlama gelir

88
PUCU

Modl 4: Aritmetik operatrleri, eittir ifadesi ile beraber kullanlrsa, ilem deikenin kendisi ile yaplr.

s alma
toplam ^= 2S

Mod alma
Dim kalan As Integer = toplam Mod 42 ' Sonu, toplam deikenindeki deerin 42 ile ' blmnden kalan saydr.

Karlatrma Operatrleri
Bu operatrler veri tiplerini birbirleriyle karlatrmak iin kullanlr. Bu operatrler ile yaplan ilemlerin sonucunda True ya da False deeri dner. Karlatrma operatrleri yalnzca say tipleri zerinde yaplmaz. String tipleri birbirleriyle alfabetik sraya gre karlatrlabilir. Kk
"A ile balayan yaz" < "B ile balayan yaz" ' Sonu: True

Kk Eit
Dim sayi As Double = 1.5 Dim sayi2 As Single = 1.3 sayi2 <= sayi ' Sonu: True

Byk
sayi2 > sayi1 ' Sonu: False

Byk Eit
sayi2 >= sayi1 ' Sonu: False

Eit
"Yaz" = "yaz" ' Sonu: False

Eit Deil

Visual Basic.NET ile Windows Tabanl Programlama

89

"Yaz" <> "yaz" ' Sonu: True

String Operatrleri
String tipleri zerinde gerekletirilen ilemler iin tanml operatrlerdir. String tipindeki deikenleri birbirine balama ilemi & operatr ile

gerekleir.
Dim isim As String Dim soyad As String Dim IsimSoyad As String = isim & " " & soyad Split. Belirtilen ayraca gre yazy bler, kan sonu String dizisinde

tutulur. Ayra karakterleri sonu dizisinde yer almaz.


Dim Kelime As String = "Kelime1:Kelime2:Kelime3" Dim parcalar() As String parcalar = Kelime.Split(":") ' parcalar dizisinin eleman olur: ' Kelime1 ' Kelime2 ' Kelime3 Dim parcalar2() As String parcalar2 = Kelime.Split("m") ' parcalar2 dizisinin drt eleman olur: ' Keli ' e1:Keli ' e2:Keli ' e3 ToCharArray. String deerinin belli bir blmndeki karakterleri ya da tm karakterlerini, Char dizisi olarak dndrr. Dim harfler() As Char = "Kelime".ToCharArray() ' Dizinin 1. elemanndan balayarak 4 karakter oku Dim harfler() As Char = "Kelime".ToCharArray(1,4) Insert. String tipinde bir deikenin deerine, ilk parametrede belirti-

len yerden balayarak ikinci parametredeki deeri ekler. Ancak bu deikenin deerini deitirmez. Yeni oluturulan String ifadesini dndrr.

90 Dim sayilar As String = "0123456789" Dim yeniSayilar As String yeniSayilar = sayilar.Insert(5, "--- Rakamlar ---") MsgBox(yeniSayilar) ' Sonu: 01234--- Rakamlar ---56789

Modl 4:

Remove. lk parametrede verilen deerden balayarak, ikinci parametre-

deki deer kadar karakter, deikenden karlr.


yeniSayilar = yeniSayilar.Remove(4, yeniSayilar.Length - 4) MsgBox(yeniSayilar) ' Sonu: 0123

Visual Basic.NET ile Windows Tabanl Programlama

91

Modl Sonu Sorular & Altrmalar

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

Modl 5: Algoritma ve Dump Coding

Programlamann temelinde, alma akn ve izlenecek yollar belirleyen algoritmalar vardr. Bir i yaplmaya balanmadan nce nasl planlanyorsa, kodlamaya geilmeden nce de bir alma plan belirlenmelidir. Programlar, bu planda yazlan kodlar belli bir sra ile okur ve iler. Dolaysyla algoritma yapsn ok iyi kurmak gerekir. Kurulan algoritmalar ak diyagramlar ile grsel zenginlik kazanrlar. Dump Coding yntemi algoritmalar zmenin uzun, fakat etkili bir yoludur. Bu yntem, admlar tek tek inceleyerek algoritma akn zer. Bu modl tamamlandktan sonra; Algoritma kurmay renecek, Dump Coding ile algoritmalar zmleyecek, Ak diyagramlar ile algoritmalar grsel olarak ifade edebileceksiniz.

96

Modl 5:

Konu 1: 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, programn 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 de belirtmesi gerekir. rnein, bir e-ticaret uygulamasnda rn sat algoritmas karlr. Satn alnacak rn seildikten sonra, kullancdan adet miktar bilgisi alnr. Uygulama yazlrken, bu deerin Int16 veri tipinde olacana karar verildii dnlrse; kullancnn girdii adet miktar bu deikene atanmadan nce kontrol edilmelidir. Eer Int16 veri tipinin tutamayaca bir deer girilmise, alma annda uygulamann beklenmedik ekilde durduu ya da istenmeyen sonularn retildii gzlemlenir. Ayrca sistemin verdii hata, kullancnn anlamayaca bir mesaj ierecei iin, uygulamann imajn da kt ynde etkiler. Veri girii. alma zamannda ou kez, 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,

Algoritma ve Dump Coding

97

ilemin amacna gre kontrol edilir ve sonuca gre algoritma ak istenen 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 artrr. Algoritmalar adm sras ile alr ve karar yaplar sonucunda farkl bir yere ynlendirilmedii mddete, bir sonraki adm ile ilemeye devam eder. rnek: Telefon kulbesinden telefon amak iin rnek bir algoritma 1. Telefon kulbesine git. 2. Telefon kart al. 3. Telefon srasnda ka kii olduuna bak. 4. Kii says sfrdan fazlaysa 3e dn. 5. Kap kapalysa kapy a. 6. eri gir, kapy kapat. 7. Telefon kartn telefona yerletir. 8. Ahizeyi kaldr. 9. Numaray evir. 10. Konumann bitip bitmediine bak. 11. Konuma bittiyse kart al, bitmediyse 10a dn. 12. Bir daha konuma yaplacaksa 7ye dn. 13. Kapy a, dar k. Bu algoritmann ilemesi iin, her ihtimal gzden geirilerek, algoritma ak gerekli yerlere ynlendirilir. rnein, kapnn kapal olmas durumunda kapy amak iin gerekli komutlar verilmelidir. Bu algoritmann ihtiya duyduu veriler ya kullanc tarafndan verilir ya da ilem balamadan nce belirlidir. Sradaki kii says, telefon kart gibi veriler kullanc tarafndan salanm; evrilecek numara, algoritma balamadan nce belirlenmitir.

98

Modl 5:

Konu 2: Dump Coding Nedir?

Dump Coding yntemi birok kark algoritmay zmlememizi salar. Dump Coding yntemi, algoritmann her admnda, deikenlerin tek tek deerlerini yazp ileyii takip etmektir. rnek: ki saynn OBEBini (ortak blenlerin en byn) alan algoritmalardan bir tanesi Euclid tarafndan gelitirilmitir. 1. ki say gir. Byk A, kk B. 2. A saysn B saysna bl. Tam blnyorsa, OBEB B saysdr. k. 3. A saysnn deerini, kalan saynn deeri yap. 4. A ile B saylarnn yerini deitir. kinci etaba dn. Bu algoritmann alma mant, Dump Coding yntemi ile adm adm incelenir. 1. ki say girilir. A = 12 ve B = 8. 2. A says, B saysna tam blnmyor. Algoritma dier etaptan devam eder. 3. Kalan say = 4. Dolaysyla A = 4 olur. 4. A says ile B saysnn yerleri deitirilir. A = 8 ve B = 4 olur. kinci etaba dnlr. 5. A says B saysna tam blnyor. OBEB = 4.

Algoritma ve Dump Coding

99

Konu 3: Ak Diyagramlarnda Kullanlan Semboller

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 (Resim 5.1).

RESM 5.1: Bala-Bitir sembolleri.

Veri Girii. Kullancdan ve baka bir kaynaktan alnan verilerin isimlerini tutar (Resim 5.2).

RESM 5.2: Veri girii sembol.

Karar Verme. Karar yapsn belirten semboldr. stnde koul ifadesi belirtilir (Resim 5.3).

100

Modl 5:

RESM 5.3: Karar verme sembol.

Veritaban. Veritabannda okuma veya yazma ilemi yapldn gsterir (Resim 5.4).

RESM 5.4: Veritaban sembol.

Ekran. zerinde yazlan yaznn bilgi olarak ekranda gzkeceini belirtir (Resim 5.5).

RESM 5.5: Ekran sembol.

Printer. zerinde yazlan yaznn yazcdan karlacan belirtir (Resim 5.6).

RESM 5.6: Printer sembol.

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

RESM 5.7: lem sembol.

Fonksiyon. lem sembolne yazlamayacak byklkte ilemler, alt ilem olarak bu sembolle belirtilir (Resim 5.8).

RESM 5.8: Fonksiyon sembol.

Algoritma ve Dump Coding

101

Konu 4: Algoritma Uygulamalar


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

RESM 5.9: Bilet satma algoritmas.

1. Kullancnn istedii oyun, gn ve yer bilgileri alnr. 2. Veritaban sorgulanarak, belirtilen gnde oynayan oyunun bo yerleri kartlr. 3. Bo yer says sfrsa, o gnde belirtilen oyun oynanmyordur ya da oyundaki btn yerler satlmtr. 4. Her iki durumda da bilet kesilemedii iin ekranda 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.

102

Modl 5:

ay Demleme
Bu rnekte, bir ay demleme ileminde yaplmas gereken ilemleri, kontrol edilmesi gereken olaylar ieren algoritma kurulur (Resim 5.10). 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.

RESM 5.10: ay demleme algoritmas.

Algoritma ve Dump Coding

103

niversite Eitim Notunu Hesaplama


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

RESM 5.11: niversite notu algoritmas.

1. Notu hesaplanacak rencinin numaras kullancdan alnr. 2. Veritabanndan rencinin vize ve final notlar ekilir. 3. Eer final notu 28 veya daha dkse renci kalr ve 9. etaba gidilir. Bu durumda vize notu 100 olsa dahi, sonu olarak toplanan not 50nin altnda olur. Dolaysyla rencinin kalmas kesinleir. Byle bir kontrol yaplmas, gereksiz ilemlerin yaplmasn engeller. 4. Vize deikenine, veritabanndan alnan vize notunun %30u atanr. 5. Final deikenine, veritabanndan alnan final notunun %70i atanr.

104

Modl 5:

6. Sonuc deikenine, Vize ve Final deerlerinin toplam atanr. 7. Sonuc deerinin 50den byk olup olmad kontrol edilir. 8. Sonuc 50den bykse ekrana Getiniz yazan bir mesaj kartlr. Algoritmadan klr. 9. Sonuc 50den kkse ekrana Kaldnz yazan bir mesaj kartlr.

Algoritma ve Dump Coding

105

Modl Sonu Sorular & Altrmalar

1. Algoritma kurulurken esas alnacak noktalar nelerdir? 2. Dump Coding ile algoritmann fark nedir? 3. Bir rnn bilgilerinin, veritabanndan ekilerek kullancya grntleme ileminin algoritmasn kurun. 4. Bu algoritmay ak diyagram ile gsterin.

Modl 6: Karar Yaplar ve Dngler

Karar yaplar ve dngler, algoritmalarn akn ynlendirir. If ve Select Case karar yaplar ile gerekli kontroller yaplarak, uygulama istenen ekilde ynlendirilir. Dngler ile, belli bir yol izelenerek birok kez tekrarlanacak ilemler bir defa yazlr. Bu ilem, dng sonlanana kadar gerekletirilir. Bu modl tamamlandktan sonra: If ve Select Case karar yaplarn renecek, For ve Do dnglerini tanyacak, Hangi karar yapsnn reneceksiniz. ve dngnn nerede kullanlacan

110

Modl 6:

Konu 1: Karar Yaplar

Uygulamalar altrlrken, yazlan kodlarn alma sras, satrlarn teker teker ilenmesi ile gerekleir. Ancak ou zaman, baz kodlarn sadece belli durumlarda almas istenir. rnein uygulama alrken kullanc ad ve parola sorulmas, kullanclarn seviyelerine gre eriim izinlerinin tanmlanmas gibi durumlarda kontrol ilemleri yaplmaldr. Bu kontroller de karar yaplar ile gerekletirilir. Algoritmalarn akn kontrol etmekte en byk rol, karar yaplarnndr. Visual Basic .NET dilinde farkl ekillerde kullanlan, ancak benzer grevlere sahip karar yaplar tanmldr. Bu blm tamamlandktan sonra;
If Then ElseIf karar yaplar ile ak kontrol yapabilecek,

Kontrollerde kullanlan koul operatrlerini tanyacak,


Select Case karar yapsn kullanabilecek,

Hangi karar yapsnn nerede kullanlacan reneceksiniz.

Karar Yaplar ve Dngler

111

If

If karar yaps, bir koul saland zaman yaplacak ilemleri kapsar. Kontrol

edilecek koul ifadesinin sonucu True deerini alrsa, If EndIf blou arasndaki kodlar altrlr.
If Koul Then End If

rnek: Vize ve final notunu kullancdan aldktan sonra, geme notunu hesaplayan ve notun 50den byk olmas durumunda ekrana getiniz mesajn kartan algoritma (Resim 6.1).

RESM 6.1.

112 Dim gecmeNotu As Single

Modl 6:

Dim finalNotu As Short = InputBox("Final Notunu girin:") Dim vizeNotu As Short = InputBox("Vize Notunu girin:") gecmeNotu = finalNotu * 0.7 + vizeNotu * 0.3 If gecmeNotu > 50 Then MsgBox("Getiniz tebrikler...") End If

rnek: InputBox ile ounlukla say tipinde bir deer almak istenir. InputBox metodundan dnen deer her zaman String tipinde olaca iin, bu deer Implicit Conversion ile istenen say tipine evrilir.
Dim sayi As Integer = InputBox("Sayi giriniz")

Ancak InputBox kutusunda Cancel dmesi tklandnda ya da say tipinde bir ey girilmediinde Resim 6.2de grlen hata mesaj alnr.

RESM 6.2: Hata mesaj.

Bu durumda, girilen deerin say tipinde olup olmad kontrol edilmek zorundadr.
Dim sayi As Integer Dim gecici As String = InputBox("Sayi giriniz:") If IsNumeric(gecici) Then sayi = gecici End If If yapsnda geen koul ifadelerinin sonucu Boolean tipinde bir deerdir. Kar-

latrma operatrlerinin dn tipinin Boolean olduundan Modl 4teki Karlatrma Operatrleri balkl ayrmda bahsedildi. Eer If deyimindeki bir karlatrma ifadesi kullanlmazsa, buradaki deer Implicit Conversion ile Boolean tipine evrilir.
Dim sayi As Integer = InputBox("Sayi girin:")

Karar Yaplar ve Dngler

113

If sayi Mod 2 Then MsgBox(sayi & " tek saydr.") End If sayi Mod 2 ifadesinin deeri, girilen sayya gre 1 ya da 0 olabilir. Bu deerler If kontrolnde Boolean tipine evrilir. 1 deeri True olarak evrilecei iin, giri-

len say tek ise If blounun iine girilir.


If bloklar iinde i ie If kontrolleri yaplabilir. Dim SinifKodu As String = InputBox("Alacak Snf Kodunu Girin:") If SinifKodu.Length = 6 Then ' Snf kodlarnn son 4 harfi ise say tipindedir ' ve snf numarasn belirtir Dim sinifNumarasi As String = Mid(SinifKodu, 3, 4) If IsNumeric(sinifNumarasi) Then ' Snf kodlarnn ilk iki harfi, ' snfn trn belirler Dim sinifTuru As String = Mid(SinifKodu, 1, 2) If sinifTuru = "YM" Then Label1.Text = "YM snf alyor" End If If sinifTuru = "YU" Then Label1.Text = "YU snf alyor" End If End If End If

114

Modl 6:

Koul Operatrleri

Veri tipleri ve deikenler zerinde kontrol yaplrken birden fazla koula ihtiya duyulabilir. Bu durumda, koullar birbirleriyle karlatracak operatrler kullanlr. Bu kontrollerden dnen deerler Boolean tipinde olduu iin, koul operatrleri de bu deerler zerinde ilem yaparlar. And Bu operatr, verilen koullarn kesiimini alr. Eer tm koullarn deeri True ise sonu da True olur. En az bir tane False deeri olan koul varsa, sonu False olur (Tablo 6.1).
TABLO 6.1: And Operatr
Koul 1 Koul 2 Koul 1 And Koul 2

True True False False

True False True False

True False False False

Or
Or operatr, verilen koullarn birleimini alr. Eer tm koullarn deeri False ise sonu False olur. En az bir tane True deeri varsa sonu True olur (Tablo 6.2).

Karar Yaplar ve Dngler

115

TABLO 6.2: Or Operatr


Koul 1 Koul 2 Koul 1 Or Koul 2

True True False False

True False True False

True True True False

XOr
XOr operatr, verilen koullarn farklarn kyaslar. Eer her iki data ayn ise False deerini retir. Eer iki data birbirinden farkl ise True deerini retir (Tablo 6.3). TABLO 6.3: XOr Operatr
Koul 1 Koul 2 Koul 1 XOr Koul 2

True True False False

True False True False

False True True False

Dim x As String = "1111111" Dim y As String = "1111110" MessageBox.Show(x Xor y) ' Sonu: 1 ya da True

Not Bir koulun deerini tersine evirir. Koul False ise True, True ise False olur (Tablo 6.4).
TABLO 6.4: Not Operatr
Koul

Not Koul False True

True False

AndAlso Koullardan biri False ise, dierleri kontrol edilmeden False deeri dndrlr. Bu tip bir kullanm, birok koulun kontrol edilmesi gerektiinde performans artrr.
Dim dizi() As String = {} ' Diziye eleman ekleme ilemleri ' ...

116 If dizi.Length > 0 AndAlso dizi(1).EndsWith(".") Then

Modl 6:

Label1.Text = "Cmle sonundaki kelime: " & dizi(1) End If

Bu rnekte, dizinin ilk eleman zerinde bir kontrol yaplmak isteniyor. Ancak diziye eleman eklenmemise, ilk elemana ularken hata retilecektir. Dolaysyla dizinin uzunluunu da kontrol etmek gerekir. Kontrol And ifadesi ile yaplsayd, dizi elemann noktayla bitip bitmedii ve dizinin uzunluu kontrol edilecekti. Bu durumda i ie If ifadeleri ile uzun bir kod yazlacakt. Pek ok kyaslama gerekecek ve performans decekti. Ancak burada, dizi uzunluu koulu salanmazsa, dier koula geilmeden If kontrolnden klr. OrElse Koullardan biri True ise, dierleri kontrol edilmeden True deeri dndrlr.
Dim Rol As String ' Veritabanndan, kullancnn rol alnr. ' ... ' Sadece Administrator, Moderator ve Power User rolndeki ' kullanclar dosya silme ilemi yapabilirler. If Rol = "Administrator" OrElse Rol = "Moderator" _ OrElse Rol = "Power User" Then Kill("C:\BilgeAdamVeriTabani.mdb") End If

Dosya silme ilemi iin, kullancnn rol veritabanndan alndktan sonra, kontrol ilemi yaplr. Eer bir kullancn rol Administrator, Moderator veya Power User rollerinden biriyse, dier kontrollerin yaplmas gerekmez. Bu rnekte Rol deikeni Administrator deerine eitse, dier iki koul kontrol edilmeden True ifadesi dner.

Karar Yaplar ve Dngler

117

If Then Else

Else ifadesi, If yapsndaki koulun salanmad btn durumlarda devreye

girer.
If Koul Then 'Dier kodlar Else 'Dier kodlar End If

Koul True ise If Else arasndaki kodlar, koul False ise Else End If arasndaki kodlar alr. rnek: Her 100 milisaniyede bir, formun renginin siyahken beyaz olmas, beyazken de siyah olmas iin, formun renginin kontrol yaplmas gerekiyor.
Dim Beyaz As Boolean = True Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Beyaz Then Me.BackColor = Color.Black Beyaz = False Else Me.BackColor = Color.White Beyaz = True End If End Sub

118

Modl 6:

If kontrolnde formun beyaz olup olmad Boolean tipindeki bir deikende

tutulur. Koulda eer Beyaz adl deiken True ise, formun arka plan siyah yaplr. Bu koulun salanmad durumda, yani Beyaz deikeninin False olduu durumda, Else iindeki kodlar alr ve formun arka plan beyaz yaplr. Her kontrolden sonra Beyaz deikeninin deitirilmesinin nedeni, formun bir siyah, bir beyaz olmasnn istenmesidir.

ElseIf
If deyimindeki koul salanmadysa Else deyimindeki kodlar alyordu. An-

cak baz durumlarda Else iinde de kontrol yapmak gerebilir.


If Koul Then ElseIf Koul2 Then ElseIf Koul3 Then End If

rnek: Gnn saatine gre karlama mesaj kartmak iin, saat deikeninin birok kez kontrol edilmesi gerekir. Sadece bir If kontrol yaplsayd, sadece iki karlama mesaj kartlabilirdi.
Dim karsilamaMesaji As String = " BilgeAdama hogeldiniz!" Dim saat As Byte = Hour(Now) If 9 <= saat < 12 Then karsilamaMesaji = karsilamaMesaji.Insert(0, "Gnaydn,") ElseIf 12 <= saat < 16 Then karsilamaMesaji = karsilamaMesaji.Insert(0, "yi gnler,") ElseIf 16 <= saat < 18 Then karsilamaMesaji = karsilamaMesaji.Insert(0, "yi akamlar,") End If ' Formun bal karlama mesajn ' gsterecek ekilde ayarlanr Me.Text = karsilamaMesaji

Select Case
Select deyimi ElseIf ile benzer ilevi grr, ancak okunmas daha kolaydr. Select ile seilen bir deerin kontrol edilmesi Case ifadelerinde yaplr.

Karar Yaplar ve Dngler

119

Dim dosya As String = TextBox1.Text Select Case ComboBox1.SelectedText Case "Kopyala" Dim yeniYer As String yeniYer = InputBox("Kopyalanacak yeri girin:") FileCopy(dosya, yeniYer) Case "Ad Deitir" Dim yeniAd As String yeniAd = InputBox("Dosyann yeni adn girin:") Rename(dosya, yeniAd) Case "Sil" Kill(dosya) Case Else MessageBox.Show("Hatal seim") End Select

Buradaki Select Case kullanm, ComboBox kontrolnden seilen eye gre bir ilemin gerekletirilmesini salar.. Seilen enin yazs Case ifadelerinde verilen deerlere eitse, ilgili kodlar altrlr. Case Else ise, dier koullarn salanmad tm durumlarda devreye girer.
Case ifadelerindeki kontroller, sadece bir tek deere eitlik ile snrl deildir. Select ile kontrol edilecek deerin birden fazla olmas durumunda, ayn kodlarn almas istenebilir veya deerlerin belirli aralklarda olmas gibi durumlarla da karlalabilir.

To Kullanm
To ile deerlerin belirli aralklarda olup olmad kontrol edilir. String tipindeki

deerlerin kontrol alfabetik olarak yaplr.


Dim durum As String Select Case UrunStokSayisi Case 0 durum = "rn Tkenmi" Case 1 To 10 durum = "ok Az" Case 10 To 25 durum = "Az" Case 25 To 50 durum = "Yeterli" Case 50 To 75

120 durum = "Fazla" Case Else durum = "ok Fazla" End Select

Modl 6:

Is Kullanm
Is ifadesi karlatrma operatrleri ile kullanlr. Randomize() Dim sayi As Integer = Rnd() * 1000 Select Case sayi1 Case Is < 10 MsgBox(sayi & " says tek basamakldr") Case Is < 100 MsgBox(sayi & " says iki basamakldr") Case Is < 1000 MsgBox(sayi & " says basamakldr") End Select

Burada sayi deikeninin kontrol, kktr karlatrma operatr ile yaplyor. Burada dikkat edilmesi gereken bir durum da, sayi deikenini tek basamakl olduu zamanki durumdur. rnein, say deikeni 6 deerini aldnda, Case ifadelerindeki btn koullarn saland grlr. Birden fazla Case iine girilemediinden, koulun saland ilk Case iindeki kodlar altrlr. Bu rnekte Case Is < 1000 ifadesi en baa alnsayd, girilen btn saylarn basamakl olduu gsterilirdi. Birden Fazla Koulun Kontrol Bir Case ifadesine birden fazla koul kullanlmak isteniyorsa, bu koullar virglle ayrlr. Bu koullardan herhangi biri saland zaman Case iine girilir. Dolaysyla virgl, OrElse koul operatr grevini grr.
Select Case ifade Case Koul1, Koul2, Koul3 Case Koul4, Koul5 End Select

rnek:
Select Case MsgBox("Devam etmek istiyor musunuz?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.No, MsgBoxResult.Cancel Label1.Text = "lem iptal edildi"

Karar Yaplar ve Dngler

121

Case MsgBoxResult.Yes Label1.Text = "Kayt ilemi gerekletirildi." End Select Dim UzmanlikAlani As String Select Case ProgramlamaDili Case "PHP", "ASP" UzmanlikAlani = "Web" Case "T-SQL" UzmanlikAlani = "Veri Taban" End Select

122

Modl 6:

Hangi Karar Cmlesi Nerede Kullanlr?

If ve Select karar yaplar benzer ilevler grseler de, kullanm yerlerine ve

birbirlerine gre deiik avantajlar vardr. If Else If karar yaplarnda, kontrol edilen deikenlerin ya da deerlerin her seferinde tekrar yazlmas gerekir. Bu durumda Select karar yaps, kodlarn yazln ve okunuunu kolaylatrmas asndan tercih edilmelidir. Ayrca, bir Case ifadesinde kontrol edilen koullar virglle ayrldnda OrElse ilemi yaplr. Select Case karar yapsnda And kullanm yaplamaz.
Dim sayi As Integer = 90 Select Case sayi Case Is > 20, Is < 40 MsgBox(sayi & " says, 20 ile 40 arasndadr.") Case Is > 40 MsgBox(sayi & " says, 40 tan byktr.") End Select

RESM 6.3.

Bu rnekte ilk Case ifadesindeki ilk koul gerekletii iin dier koullar gz ard edilir. Verilen saynn 20 ile 40 arasnda olmasnn kontrol, Case 20 To 40 ifadesi ile ya da If karar yaps kullanlarak yaplmas gerekir (Resim 6.3).

Karar Yaplar ve Dngler

123

If sayi > 20 And sayi < 40 Then MsgBox(sayi & " says, 20 ile 40 arasndadr.") ElseIf sayi > 40 Then MsgBox(sayi & " 40 tan byktr.") End If

Bir grup RadioButton kontrol iinden sadece bir tanesi seilebildii iin, seilen kontrol bulmak iin ElseIf yapsnn kullanm yeterli olacaktr.
If RadioButton1.Checked Then ElseIf RadioButton2.Checked Then ElseIf RadioButton3.Checked Then End If

Ancak bu kontroller, CheckBox kontrolnn kullanm yapsna uymaz. Formlarda birden fazla CheckBox kontrol seilebildii iin, seilen kontrolleri bulmak iin If EndIf bloklar kullanlmaldr.
If CheckBox1.Checked Then End If If CheckBox2.Checked Then End If If CheckBox3.Checked Then End If

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

124

Modl 6:

Algoritmann ncelenmesi
Uygulamann algoritmas balang ve rn ekleme algoritmas olarak ikiye ayrlmtr. Balang algoritmasnda rn kategorisinin, stok durumunun ve tarih filtrelerinin seilip seilmedii kontrol edilir. Herhangi biri seilmedii zaman kullancya ilgili mesaj gsterilir ve algoritmadan klr. Tm kontroller yapldktan sonra, ilgili kategorideki rnlerin listeye eklenmesi iin dier algoritma devreye girer (Resim 6.4).

RESM 6.4: Balang algoritmas.

rn ekleme algoritmas, ilk algoritmada seilen kriterlere gre, kullancya gsterilecek rn listesini doldurur. Bu algoritma balang olarak kategori numarasn alr. Bu kategorideki stokta bulunan rnleri listeye ekler. Stok durumu filtresinde Hepsi deeri seiliyse, stokta o an bulunmayan rnler de listeye eklenir. Tarih filtresinde Son kanlar deeri seiliyse, eski rnler listeden kartlr.

Karar Yaplar ve Dngler

125

RESM 6.5: rn ekleme algoritmas.

Forma Kontrollerin Eklenmesi


1. UrunYelpazesi isminde bir Visual Basic Windows projesi an. 2. Forma biri lbUrunler, dieri lbKategoriler isminde iki ListBox kontrol ekleyin. lbUrunler liste kutusu tm filtreler uygulandktan sonra kan rnleri listeler. lbKategoriler liste kutusuna kategori isimlerini ekleyin:
Video Kitap Yazlm

3. Forma biri cmbTarihSirasi, dieri cmbStokDurumu isminde iki ComboBox kontrol ekleyin. cmbTarihSirasi son rnleri; cmbStokDurumu stoktaki rnleri gsteren filtre olarak kullanlacaktr. cmbTarihSirasi elemanlarna Son kanlar ve Tm rnler deerlerini, cmbStokDurumu elemanlarna Sadece Stoktakiler ve Hepsi deerlerini ekleyin. 4. lblMesaj isminde bir Label kontrol ekleyin. Dock zelliini Buttom yapn. Bu kontrol, filtrelerin seilmedii durumda hata mesajlarn gsterecektir. 5. lblSecilenUrunler isminde bir Label kontrol ekleyin ve lbUrunler liste kutusunun stne yerletirin. Bu kontrol, seilen rnlerin hangi kategoride olduunu gsterecektir. 6. Forma btnListele isminde bir Button kontrol ekleyin.

126

Modl 6:

Kodlarn Yazlmas
Bu uygulamadaki kodlarn tamam btnListele dmesinin Click olayna yazlacaktr. Kodlar arasndaki numaralar, ak diyagramnda ilenen durumlara referans verir. Algoritma 1, balang algoritmasndaki numaralar; Algoritma 2, rn ekleme algoritmasndaki numaralar ifade eder. 1. btnListele dmesini ift tklayn ve Click olayna gelin. Dme her tklandnda liste kutusuna ard ardna eler eklenmemesi ve hata mesajlarnn temizlenmesi iin gerekli kodlar yazn.
lblMesaj.Text = "" lbUrunler.Items.Clear()

2. Kategori listesinden, stok ve tarih filtreleri iin alan kutulardan elerin seili olup olmadnn kontrol yaplr. Eer seilmemi bir deer varsa, ilgili hata mesaj lblMesaj etiketinde grntlenir.
' Algoritma 1 - 1 If cmbStokDurumu.SelectedIndex = -1 And cmbTarihSirasi.SelectedIndex = -1 Then lblMesaj.Text = "Stok Durumu ve Tarih Sras seiniz." ' Algoritma 1 - 2 ElseIf cmbStokDurumu.SelectedIndex = -1 Then lblMesaj.Text = "Stok Durumunu seiniz." ' Algoritma 1 - 3 ElseIf cmbTarihSirasi.SelectedIndex = -1 Then lblMesaj.Text = "Tarih Srasn seiniz." ' Algoritma 1 - 4 ElseIf lbKategoriler.SelectedIndex = -1 Then lblMesaj.Text = "Kategori seiniz." Else ' Algoritma 1 5

3. If ElseIf deyimlerinde tm kontroller yapldktan sonra Else ifadesine geilir. Algoritmann ak bundan sonra rn ekleme ilemiyle devam edecektir.
Select Case lbKategoriler.SelectedIndex ' Algoritma 2 - 1 Case 0 ' Sadece stokta bulunan rnler eklenir. ' Algoritma 2 - 2 lbUrunler.Items.Add("MSDN Tv Visual Basic 5") lbUrunler.Items.Add("MSDN Tv Visual Basic 4") ' Stokta bulunan veya bulunmayan rnlerin Hepsi

Karar Yaplar ve Dngler

127

' seiliyse, kalan rnler de listeye eklenir. ' Algoritma 2 - 3 If cmbStokDurumu.SelectedIndex = 1 Then ' Algoritma 2 - 4 lbUrunler.Items.Add("MSDN Tv Visual Basic") lbUrunler.Items.Add("MSDN Tv Visual Basic 2") lbUrunler.Items.Add("MSDN Tv Visual Basic 3") End If ' Eski rnlerin gsterilmesi istenmiyorsa ' listeden kartlr. ' Algoritma 2 - 5 If cmbTarihSirasi.SelectedIndex = 0 Then ' Algoritma 2 - 6 lbUrunler.Items.Remove("MSDN Tv Visual Basic") lbUrunler.Items.Remove("MSDN Tv Visual Basic 2") End If

4. Dier iki kategori iin liste ekleme ilemleri ayndr.


Case 1 lbUrunler.Items.Add("Yazlm Uzmanl 1") lbUrunler.Items.Add("Yazlm Uzmanl 2") lbUrunler.Items.Add("Yazlm Mhendislii Orta Dzey") lbUrunler.Items.Add("Yazlm Mhendislii leri Dzey") If cmbStokDurumu.SelectedIndex = 1 Then lbUrunler.Items.Add("Yazlm Mhendislii Balang Dzey") lbUrunler.Items.Add("Access Giri") End If If cmbTarihSirasi.SelectedIndex = 0 Then lbUrunler.Items.Remove("Yazlm Uzmanl 1") End If Case 2 lbUrunler.Items.Add("Visual Studio 6.0") lbUrunler.Items.Add("Visual Basic .NET Standard 2003") lbUrunler.Items.Add("Visual Basic C# Standard 2003")

If cmbStokDurumu.SelectedIndex = 1 Then lbUrunler.Items.Add("Visual Studio .NET 2005") End If If cmbTarihSirasi.SelectedIndex = 0 Then

128 lbUrunler.Items.Remove("Visual Studio 6.0") End If End Select

Modl 6:

5. Select ifadesinde tm eklemeler yapldktan sonra ikinci algoritma biter. lk algoritmann son aamas olan, kullancya hangi kategoride rn seildiini gsteren mesaj yazlr ve If karar yaps sonlanr.
' Algoritma 1 - 6 lblSecilenUrunler.Text = lbKategoriler.Text & " Kategorisindeki rnler" End If

Karar Yaplar ve Dngler

129

Konu 2: Dngler

Algoritmalarda baz ilemlerin tekrar almas iin, bu ilemlerin her seferinde yazlmas gerekir. Ancak bu zm, ok fazla tekrar iin hem yazmay, hem de okumay zorlatrr. rnein, yz elemanl bir diziye rasgele say atanmas iin ilemin yz defa yazlmas gerekir. Dngler ile ilem sadece bir defa yazlr ve tekrar saysna gre bu ileme geri dnlr (Resim 6.6).

RESM 6.6: Dng.

Bu blm tamamlandktan sonra;


For Next dngsn tanyacak, While ve Until dnglerinin farklarn ayrt edebilecek,

130 Do Loop dngsn tanyacak,

Modl 6:

ie dngler kullanabilecek, Hangi dngnn nerede kullanldn reneceksiniz.

Karar Yaplar ve Dngler

131

For Next

For dngs bir ilemin belirli sayda yaplmas iin kullanlr. Dim sayac As Byte For sayac = 0 To 10 MsgBox("Merhaba") Next

Deiken tanmlamalar, For dngsnn iinde de yaplabilir. Bu durumda, deikenin kapsam alan bu dngyle snrl kalr.
For sayac As Byte = 0 To 10 MsgBox("Merhaba") Next

Bu dngnn avantaj, sayacn tekrar says ile kontroln ve artrlmasn kendisi yapmasdr. Next ifadesi sayac deikenini varsaylan durumda bir artrr. For dngs iinde kullanlan sayac deikeni saysal bir deer olmaldr. Dnglerde kullanlan sayalar, sadece belli bir sayda ilem yapmay salamaz. Sayalarn artma veya azalma admlar belirli olduu iin, kod iinde ou zaman bu avantajdan yararlanlr.
ListBox1.Items.Add("Karakter - ASCII kod karl") Dim i As Byte For i = 0 To 255 ListBox1.Items.Add(Chr(i) & " Next - " & i)

132

Modl 6:

rnein dizi ilemlerinde, dizinin her elamanna ulamak iin saya kullanlabilir. Sayacn artma hz bir olduu iin dizi(sayac) ifadesi, srayla dizinin elemanlarna ulamay salar.
Dim i As Integer Dim dizi(10) As Integer For i = 0 To dizi.Length - 1 dizi(i) = Rnd() * 100 Next
DKKAT Dngler iinde dizi kullanlrken, saya sfrdan balamsa dngnn bitecei nokta dizi uzunluu -1 olmaldr. Deiken tanmlamalar For dngsnn iinde de yaplabilir. Bu durumda, deikenin kapsam alan bu dngyle snrl kalr.

DKKAT

Dnglerde saya deikeninin artma veya azalma admlar Step ifadesi ile belirlenir.
Dim fahr, derece As Integer For derece = 0 To 100 Step 10 fahr = derece * 1.8 + 32 Label1.Text &= fahr & " Fahrenheit= " Label1.Text &= derece & " Celcius" & vbCrLf Next

For Dnglerinin e Kullanm


ou zaman For dnglerindeki her etap iin baka bir dngnn kurulmas gerekir. rnein, bir mterinin birden fazla telefon numaras bir dizi iinde tutuluyorsa, btn mterilerin telefonlarn listelemek iin iki dng kullanlmas gerekir. lk dng tek tek mterileri almak iin, alt dng ise her mterinin telefonlarn almak iin kullanlmaldr (Resim 6.7).
Structure Musteri Dim Isim As String Dim Soyad As String Dim Telefonlari() As String End Structure Dim Musteriler() As Musteri ' Musteriler dizisi dolduruluyor ' ... Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i, j As Integer

Karar Yaplar ve Dngler

133

For i = 0 To Musteriler.Length 1 ' lk mteri seiliyor Dim m As Musteri = Musteriler(i) Label1.Text &= m.Isim & " " & m.Soyad Label1.Text &= " mterisinin telefonlar:" & vbCrLf For j = 0 To m.Telefonlari.Length - 1 Label1.Text &= m.Telefonlari(j) Label1.Text &= vbCrLf Next Next End Sub

RESM 6.7: ie dngler.

Birden fazla boyutlu dizilerde ilem yaparken de For dngs i ie kullanlabilir. rnein, iki boyutlu bir tabloda, ilk boyut iin bir For dngs, dier boyut iin de baka bir For dngs kullanlarak dizinin tm elemanlarna ulalabilir.
Randomize() Dim tablo(4, 4) As String Dim i As Byte For i = 1 To 4 tablo(0, i) = "Yazar " & i tablo(i, 0) = "Kitap " & i tablo(CInt(Rnd() * 3) + 1, CInt(Rnd() * 3) + 1) = "X" Next

134

Modl 6:

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

Daha sonra, tablonun dier elemanlarna rasgele X deerleri atanr. Bu deer hangi yazarn hangi kitab yazdn gsterir.
CInt(Rnd() * 3) + 1 ifadesi 1 ile 4 arasnda rasgele bir say retir. Bu say tablo dizisine indis olarak verildiinde, kalan hcrelerde X deeri elde edilir.
Yazar 1 Kitap 1 Kitap 2 Kitap 3 Kitap 4 X X X X Yazar 2 Yazar 3 Yazar 4

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


For j As Integer = 0 To tablo.GetLength(0) - 1 For h As Integer = 0 To tablo.GetLength(1) - 1 Label1.Text &= tablo(j, h) Next Label1.Text &= vbCrLf Next

Yazarlar ve Kitaplar tablosu hazrlandktan sonra, hangi yazarn hangi kitab yazdn bulmak iin yine tablo elemanlar iinde dolap X deerini aramak gerekir. lk For dngs ile Kitaplar satrlarnda, ikinci For dngs ile Yazarlar stunlarnda gezilir.
For j As Integer = 0 To tablo.GetLength(0) - 1 For h As Integer = 0 To tablo.GetLength(1) 1 ' Tablonun her elemannn deeri ' X deeri ile karlatrlr. If tablo(j, h) = "X" Then Label2.Text = tablo(0, h) & ", " Label2.Text &= tablo(j, 0) Label2.Text &= " kitabn yazyor" Exit For End If

Karar Yaplar ve Dngler

135

Next Label1.Text &= vbCrLf Next

Tablonun her eleman kontrol edilir ve X deeri bulunduu zaman, yazar ismi ve kitap ismi ekrana yazdrlr. Yazar isimlerine, dizinin ikinci boyutunun ilk srasnda tutulduu iin tablo(0,h) kodu ile ulalr. Kitap isimlerine ise, dizinin ilk boyutunun ilk srasnda tutulduu iin tablo(j,0) kodu ile ulalr. Buradaki h ve j deikenleri o anda kontrol edilen elemann tablodaki indisleridir.
Exit For ifadesi, o anda bulunan For dngsnden kmay salar. Bu rnekte ikinci For dngs Yazarlar stunu zerinde dnd iin, bu dngden kldnda, ilk For dngsne tekrar geilir. Bu sefer yeni bir kitap iin Yazarlar kontrol edilir. Sonuta bir kitab birden fazla yazar yazmasna ramen, grntlenecek olan sadece ilk yazardr.

136

Modl 6:

While

While dngs bir koul gerekletii srece alan dngdr. For dng-

sne gre avantaj, say dnda herhangi bir veri tipi zerinde karlatrma yaplabilir olmasdr. Ancak For dngsnde otomatik yaplan sayalarn artrlmas ve kontrol edilmesi ilemleri bu dngde yaplmaz. Bunun iin kod yazlmas gerekir.
While Koullar End While While dngsnde koul kontrolleri dngnn iinde yaplr ve gerektiinde Exit While ifadesi ile dngden klr.

Birden ona kadar olan saylarn toplamn hesaplamak iin, bir ve on arasndaki saylar tek tek yazlp toplanabilir. Bu, iyi bir yntem olmasa da sonu verir. Ancak kullancnn girdii bir sayya kadar toplam almak iin bir dng gerekir.
Dim toplam As Integer = 0 Dim sayac As Short = InputBox("Bir say girin") While sayac > 0 toplam += sayac sayac -= 1 End While

Karar Yaplar ve Dngler

137

Burada kullancnn girdii saydan itibaren sfra kadar giden bir dng kurulur. Dng sayacn sfrdan byk olduu her durum iin alr. Saya sfrlandnda ise dngden klr.
While koul1 and koul2 or koul3 End while

138

Modl 6:

Do Loop

Do ifadesi ile balayan dnglerin sz dizimi Loop ifadesi ile sonlanacak e-

kilde yazlr. Loop anahtar kelimesinin grevi, Do ifadesine geri dnmektir. Dolaysyla koul kontrol yaplmayan bir Do Loop dngs sonsuza kadar alr.
Do Label1.Text = "Bu dngden klamaz." Loop Do Loop dngsnde koul kontrolleri dngnn iinde yaplr ve gerektiinde Exit Do ifadesi ile dngden klr. Do Dim kullanici, parola As String kullanici = InputBox("Kullanc Ad: ") parola = InputBox("Parola: ") If LCase(kullanici) = "ogrenci" And parola = "bilgeadam" Then Exit Do End If MsgBox("Hatal giri!", MsgBoxStyle.Exclamation) Loop Label1.Text = "Giri baarl." & vbCrLf

Karar Yaplar ve Dngler

139

Exit Do ifadesi ile karlald zaman dngden klaca iin, If iinde kontrol edilen koul doru ise mesaj kutusunun gsterildii kod blmne geilmez.

Do While
Koullar, Do Loop dngsnn iinde kontrol edilebildii gibi, dngye girmeden de kontrol edilebilir.
Dim i As Integer = 0 Do While i < 10 i += 1 Loop

Dngnn bu ekilde kullanmnn While - End While dngsnden fark yoktur. Ancak Do While dngsnn yaps daha esnektir ve kontrol Loop ifadesinde de yaplabilir.
Dim yanit As String Do MsgBox("lem yaplyor...") yanit = InputBox("Devam etmek istiyor musunuz?") Loop While (yanit = "e" Or yanit = "E")

Buradaki fark, dng iinde tanmlanan ilem bir defa yapldktan sonra koulun kontrol edilmesidir. Yani en az bir defa yaplmas istenen bir ilem Do Loop While yaps iersinde kullanlabilir.

Do Until
Do Loop dngsnn, kontrol edilen koul gerekleene kadar devam etmesi

isteniyorsa, Do Until yaps kullanlr. Do While dngs, koul True olduu srece devam ederken; Do Until dngs, koul True olduu zaman sonlanr.
Dim dizi(9) As Integer Dim i As Integer = 0 Do Until i = 10 dizi(i) = i * i i += 1 Loop Do While ile yazlan bir dngy Do Until ifadesine evirmek iin, While

kontrolndeki koulun tersinin alnmas gerekir.

140 Dim yanit As String Do MsgBox("lem yaplyor...") yanit = InputBox("Devam etmek istiyor musunuz?") Loop Until Not (yanit = "e" Or yanit = "E") Do MsgBox("lem yaplyor...") yanit = InputBox("Devam etmek istiyor musunuz?") Loop Until (yanit <> "e" And yanit <> "E")

Modl 6:

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

Sadece sayacn kontrol edilmedii durumlar deil, koullarn yazlmalarndaki mantk hatalar da sonsuz dngye sebebiyet verir.
Dim i As Short = 0 While i < 10 Or i > 5 Label1.Text = "Sonsuz dngye girildi" i += 1 End While For dngsnde sayacn deeri Step ifadesindeki deerden fazla bir sayda azaltlrsa yine sonsuz dngye girilir. Bu dngnn almas, Integer veri tipinin alabilecei minimum deere ulanca hata ile sonlanr. For i As Integer = 0 To 9 Step 3 MsgBox("j") i -= 4 Next

Karar Yaplar ve Dngler

141

Hangi Dng Nerede Kullanlr?

Visual Basic .NET dilinde While ve Until dngleri, koul kontrollerine izin verdii iin For dngsne gre daha esnek yapdadr. For dngsnde sayacn belli bir deere ulam olup olmad kontrol edilir. Bu kontrol dngnn iinde otomatik olarak yapld iin yazlmas daha kolaydr. rnein, istenen bir ilemin sadece belli sayda yaplmas ise, sayalar ile uramamak iin For dngs tercih edilmelidir.
Dim i As Integer = 0 While i <= TekrarSayisi ' TekrarSayisi + 1 kadar ilem yaplr. i += 1 End While For i As Integer = 0 To TekrarSayisi ' TekrarSayisi + 1 kadar ilem yaplr. Next

Dnglerin belli koullar saland srece ya da salanana kadar almas, karar yaplarnn kullanlmasn gerektirir. For dngsnde koul kontrolleri If veya Select karar yaplar ile yaplr. Ancak bu tip durumlarda While ve Until dnglerinin kullanlmas kodun yazlmn kolaylatrr.
For i As Integer = 0 To 0 ' Yaplacak ilemler

142 Dim cevap As String

Modl 6:

cevap = InputBox("Durmak iin Cancel dmesine basn") If cevap <> "" Then i -= 1 End If Next

Do ' Yaplacak ilemler Loop Until InputBox("Durmak iin Cancel dmesine basn") = ""

Karar Yaplar ve Dngler

143

Uygulama
Bu uygulamada, bir satran tahtas zerindeki bir filin hareket alan hesaplanr. Satran tahtas rasgele talarla doldurulur. Verilen bir koordinatta bulunan filin apraz hareketlerine gre nereye ilerleyebilecei bulunur. Eer filin nnde bir ta varsa, bu tan bulunduu yere ve daha gerisine ilerleyemeyecektir. Filin drt bir yanna apraz olarak hareket edebilecei gz nnde bulundurulmaldr. Tahtann Doldurulmas 1. Satranc isminde bir Windows projesi an. 2. Form zerine lbHareketAlani isminde bir ListBox, btnGoster isminde bir Button ekleyin. 3. btnGoster dmesinin Click olayna 8 x 8 boyutunda bir dizi tanmlayp dolduran kodlar yazn. Bu dizi Boolean tipinde deerler tar. Verilen indisteki elemann deeri True olmas, o koordinatta bir tan bulunduunu belirtir.
Randomize() Dim tahta(7, 7) As Boolean For a As Integer = 0 To 7 For b As Integer = 0 To 7 tahta(a, b) = CInt(Rnd()) Mod 2 Next Next

Hareket Alan Tahta zerindeki bir fil, drt apraz yne doru ilerleyebilir. Dizide apraz olarak ilerlemek x ve y koordinatlarnn eit oranda artmas ve azalmas demektir. Dizide ilerlerken x ve y koordinatlarnn sfrdan kk ve dizinin boyutundan byk olmamasna dikkat edilmelidir. Drt farkl yne gre, koordinatlar artacak ya da azalacaktr. 1. Fili tahta zerine yerletirmek iin kullancdan koordinatlar aln.
Dim x As Byte = InputBox("Filin x koordinat:") Dim y As Byte = InputBox("Filin y koordinat:")

2. 0, 0 ynne doru olan yoldaki talarn kontroln yapn. Filin x ve y koordinatlarn birer drerek, koordinatlarda ta olup olmad kontrol edilir. Eer ta yoksa bu kareye ilerlenebildii, lbHareketAlani liste kutusuna koordinat eklenerek gsterilir. Yol zerinde bir ta varsa, daha fazla ilerlenemeyecei iin While dngsnden klr.

144 Dim i As Integer = 1 While x - i >= 0 And y - i >= 0 If Not tahta(x - i, y - i) Then

Modl 6:

lbHareketAlani.Items.Add(x - i & " - " & y - i) i += 1 Else Exit While End If End While

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


i = 1 Do While x + i < tahta.GetLength(0) And y - i >= 0 If Not tahta(x + i, y - i) Then lbHareketAlani.Items.Add(x + i & " - " & y - i) i += 1 Else Exit Do End If Loop

4. 7, 7 ynne doru kontrol yaplr.


i = 1 Do Until x + i >= tahta.GetLength(0) Or y + i >= tahta.GetLength(1) If Not tahta(x + i, y + i) Then lbHareketAlani.Items.Add(x + i & " - " & y + i) i += 1 Else Exit Do End If Loop

5. 0, 7 ynne doru talar kontrol edilir.


i = 1 Do While x - i >= 0 And y + i < tahta.GetLength(1) If Not tahta(x - i, y + i) Then lbHareketAlani.Items.Add(x - i & " - " & y + i) i += 1 Else Exit Do End If Loop

Karar Yaplar ve Dngler

145

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

146

Modl 6:

Konu 3: Hata Yakalama

Bir uygulama gelitiricisi program yazarken ok eitli hatalarla karlaabilir. Visual Basic .NET, ortaya kan hata durumlarnda uygulama gelitiricisine ok detayl hata mesajlar verir. Bu hata mesajlar, hatalarn nerede ve nasl yapldn ok detayl bir ekilde gsterir. Hatalarn en ince ayrntsna kadar ilenmesi, uygulama gelitirmede byk kolaylk salar. Visual Basic .NET hata mesajlar, alma zaman (Run Time) ve tasarm zaman (Design Time) hatalar olarak ayrlabilir. Tasarm zaman hatalar, kodlarn yazlmas srasnda derleyici tarafndan bulunan ve Task List panelinde gsterilen hatalardr (Resim 6.8). Task List panelinde hatann aklamas, hatann projenin hangi dosyasnda ve dosyann kanc satrnda bulunduu gsterilir (Resim 6.9). Tasarm zaman hatalar; Sz dizimi yanl kullanldnda,
Option Explicit On durumunda, tanmlanmayan bir deiken

kullanldnda,
Option Strict On durumunda, deiken tiplerini Implicit Conversion

ile evirirken meydana gelir. alma zaman hatalar, uygulama alrken yaplmas imkansz bir ilemin gerekletirilmesi srasnda meydana gelir (Resim 6.10). rnein InputBox metodu ile bir saynn alnmas srasnda, kullanc String tipinde bir deer girerse alma zamannda bir hata oluur.

Karar Yaplar ve Dngler

147

RESM 6.8: Tasarm zaman hatalar.

RESM 6.9: Task List paneli. Dim dizi(10) As Integer For i As Integer = 0 To dizi.Length Label1.Text &= dizi(i) Next

RESM 6.10: alma zaman hatas.

Resim 6.10daki hata mesaj, dizinin byklnn dnda bir indis verildiini belirtir. Visual Basic .NET dilinde uygulama gelitirirken oluabilecek tm hatalar .NET Framework altndaki Exception snflar halinde tanmlanr. rnein dizinin byklnden farkl bir indis verildiinde IndexOutOfRangeException hatas ortaya kar. Tm hatalar gibi bu hata da Exception taban snfndan tretilmitir.

148

Modl 6:

Try Catch Finally

alma zamannda ortaya kan hatalar uygulamann beklenmedik bir ekilde sonlanmasna neden olur. Uygulamann devam etmesi iin bu hatalarn yakalanp ilenmesi gerekir. Try Catch Finally bloklar iinde, alma zaman hatalar meydana geldii durumlarda almas istenen kodlar yazlr. Try blou iine, alrken hata retebilecek kodlar yazlrken, Catch blou iine, hata olutuunda yaplmas gereken ilemler yazlr.
Dim sayi As Byte Dim sonuc As Integer Try sayi = Rnd() * 3 sonuc = 100 / sayi MsgBox("Blme ilemi baarl, sonu: " & sonuc) Catch ex As Exception MsgBox("Blme ilemi baarsz. Hata Mesaj: " & ex.Message) End Try

Bu rnekte retilen rasgele bir say ile blme ilemi yaplyor. Say sfr deerini aldnda, blme ilemi hata retir. Dolaysyla bu ilem Try blou iine yazlmaldr. Catch blounda, ilemin baarsz olduunu belirten bir mesaj yazlr. Exception nesnesinin Message zellii, hatann olutuu zaman retilen mesaj tutar. Exception nesnesinin zellikleri Catch iinde kullanlmayacaksa, tanmlanmasna gerek yoktur.

Karar Yaplar ve Dngler

149

Try Catch Label1.Text = "Exception kullanlmyor." End Try Finally blounda, Try Catch iinde yaplan tm ilemlerden sonra altrla-

cak kodlar yazlr. Finally blounda yazlan kodlar hata meydana gelse de, gelmese de altrlacaktr.
' Dosyay amak iin kullanlan dosya numaras Dim dosya As Integer = FreeFile() Try Dim kayit As String = "Kayt Zaman: " & Now kayit &= vbCrLf & "Uygulama kaytlar..." FileOpen(dosya, "C:\Log.txt", OpenMode.Binary, OpenAccess.Write) FilePut(dosya, kayit) Catch ex As Exception MsgBox(ex.Message) Finally FileClose(dosya) End Try MsgBox("Uygulama ak buradan devam edecek") Finally blounda genellikle, kullanlan kaynaklar serbest braklr. rnekte, bir

dosya alr. Dosya ama veya dosyaya veri yazma ilemlerinde bir hata meydana geldiinde, Catch ifadesinde bu hata yakalanp ilgili mesaj kullancya gsterilir. Finally blou her durumda alaca iin, dosya kapatma ilemi burada yaplr. Uygulama End Try ifadesinden sonra ilemeye devam eder.
Try ve Catch iinde uygulamadan klmas belirtilse dahi Finally blou

iinde yazlan kodlar altrlr. Ancak End Try ifadesinden sonra uygulama sonlanr.
Try Dim kayit As String = "Kayt Zaman: " & Now kayit &= vbCrLf & "Uygulama kaytlar..." FileOpen(dosya, "C:\Log.txt", OpenMode.Binary, OpenAccess.Write) FilePut(dosya, kayit) Exit Sub Catch ex As Exception

150 MsgBox(ex.Message) Exit Sub Finally FileClose(dosya) MsgBox("Finally her durumda alr") End Try MsgBox("Uygulama ak buraya gelmeyecek.")

Modl 6:

Karar Yaplar ve Dngler

151

Lab 1: ifreleme Algoritmas


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

ifreleme
Verilen yaznn ifrelenmesi etaptan oluur: 1. Yaznn karakterleri ASCII kodlarna evrilir. 2. Kodlar, gerekiyorsa balarna 0 konarak, 4 haneli yaplr ve sral halde bir String deikeninde tutulur. 3. Sral ekilde yazlan kodlar, bir batan, bir sondan karakter alnarak tekrar dzenlenir. rnek: acf kelimesinin ifrelenmesi: 1. a c f karakterleri ASCII kodlarna evrilir. a = 97 c = 99 f = 102 2. Kodlar balarna sfr konarak 4 haneli yaplr. 0097 0099 0102 Sral halde bir String deikenine yazlr. 009700990102 3. Saynn ortasna kadar, nce batan, daha sonra sondan rakam alnarak tekrar yazlr. Siyah olarak gsterilen rakamlar, dizinin sonundan alnmtr. 0 02 020 0200 02009 020091 0200917 02009170

152

Modl 6:

020091700 0200917009 02009170090 0 2 0 0 9 1 7 0 0 9 0 9 = ifre Projenin Almas 1. Visual Studio ortamnda, Sifreleme isminde bir Windows projesi an. 2. Alan forma lblSifre isminde bir Label kontrol, btnSifrele isminde bir Button kontrol ekleyin. Bu kontroller kullancdan alnan yaznn ifrelenip grntlenmesini salayacaktr. 3. Alan forma
lblDesifre

isminde

bir

Label

kontrol

ve

btnSifreyiCoz isminde bir Button kontrol ekleyin. Bu kontroller ifre-

lenmi yaznn lblSifre kontrolnden grntlenmesini salayacaktr.


DKKAT

alnarak,

ifrelenip

ifreleme algoritmasnn tm kodlar btnSifrele kontrolnn Click olayna yazlacaktr.

ASCII Kodlarna evirme

RESM 6.11: ASCII kodlarna evirme algoritmas.

1. ifrelenecek yaznn girilmesi iin gerekli kodu yazn. Bir yaz girilene kadar kullancdan yaz istemek iin Do Loop Until dngsn kullann.

Karar Yaplar ve Dngler

153

Dim yazi As String ' Algoritma 1 - 1 Do yazi = InputBox("ifrelenecek Kelimeyi girin") Loop Until yazi.Length > 0

2. Girilen yaznn karakterlerini bir dizide toplamak iin String deikeninin ToCharArray() metodunu kullann.
' Algoritma 1 - 2 Dim karakterler() As Char = yazi.ToCharArray()

3. Karakterlerin ASCII kodu karln tutmak iin kodlar isminde bir dizi yaratn. Karakterler dizisindeki tm elemanlar zerinde ilem yapmak iin bir dng kurun. Karakterler dizisindeki her karakteri Asc hazr fonksiyonu ile ASCII koduna evirin.
Dim uzunluk As Short = karakterler.Length - 1 Dim kodlar(uzunluk) As String Dim i As Integer ' kelimedeki her karakterin ASCII kodu alnr For i = 0 To uzunluk ' Algoritma 1 - 3 kodlar(i) = Asc(karakterler(i)) Next

4. Bu algoritma sonunda elde edilen kodlar dizisi, ifrelenecek olan yaznn her karakterinin ASCII kodunu tutar. Bu dizi dier algoritmann giri deeri olarak kullanlacaktr. Sral Kodlara evirme ASCII karakter kodlar 0 ile 255 arasnda bir deer alr. Dolaysyla, her kod maksimum haneli olacaktr. ifre oluturulurken yaplan son dzenlemede kolaylk salamak iin, bu kodlar 4 haneli yaplr. Daha sonra bu kodlar diziden ekilerek SiraliKodlar adl bir String deikenine yazlr. 1. Dizideki kodlar sral bir ekilde tutmak iin SiraliKodlar adl bir deiken tanmlayn. lk algoritmadan alnan ASCII kodlarn tutan kodlar dizisi zerinde bir dng kurun.
Dim SiraliKodlar As String Dim j As Short = 0 While j <= kodlar.Length 1 j += 1 End While

154

Modl 6:

RESM 6.12: Sral kodlara evirme algoritmas.


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

Bu dngde kullanlacak ASCII kodunu bir deikene atan kodu yazn.


' Alogritma 2 - 1 Dim AsciiKodu As String = kodlar(j)

2. AsciiKodu deikeninde tutulan kodun 4 haneli hale getirilmesi iin ka tane sfr eklenmesi gerektiini bulun. Eklenecek sfrlarn says, 4 AsciiKodu deikeninin uzunluu kadardr. rnein 192 kodlu bir deikene eklenmesi gerenken sfr says 4 3 = 1 tanedir.
Dim eklenecek As Byte = 4 - AsciiKodu.Length

3. Eklenecek say kadar alacak bir dng iinde, sfr ekleme ilemini yapn.
For i = 0 To eklenecek - 1 ' Alogritma 2 - 3 AsciiKodu = AsciiKodu.Insert(0, 0) Next

4. Dzenlenmi AsciiKodu deerini SralKodlar deikenine yazn ve sayac bir artrarak dier ASCII koduna gein.

Karar Yaplar ve Dngler

155

' Alogritma 2 - 4 SiraliKodlar &= AsciiKodu j += 1

Algoritma sonunda ortaya kan deer, karakterlerin 4 haneli ASCII kodlarn tutan bir String deikenidir. Bu deiken, dier algoritmada tekrar dzenlenmek zere kullanlacaktr. ifrenin Oluturulmas Bir nceki algoritmada elde edilen SralKodlar deikeni halen istenen ifreli yaz deildir. nk 4 haneli kodlar sral bir ekilde durur ve kolayca zlebilir. ifrenin ilk bakta anlalmasn daha da zorlatrmak iin, sralanm kodlar biraz daha kartrlr.

RESM 6.13: ifrenin oluturulmas.

1. Dngde kullanlacak j sayacn sfrlayn ve ifrenin tutulaca deikeni tanmlayn.


'Algoritma 3 - 1 j = 0 Dim Sifre As String

2. SralKodlar deikeni zerinde yaplacak ilem says, bir batan, bir sondan ilerlendii iin, deikenin uzunluunun yars kadardr. Sayacn bu uzunlua kadar tanml olan bir dng oluturun.
'Algoritma 3 - 2 Do While j < SiraliKodlar.Length / 2 j += 1 Loop

156
DKKAT

Modl 6: 3 4 etaplarnda yazlacak tm kodlar Do While dngsnn iine yazlacaktr.

3. ifreye, SralKodlarn j indisli karakterini ekleyin.


'Algoritma 3 - 3 Sifre &= Mid(SiraliKodlar, j + 1, 1)

4. ifreye, SralKodlarn uzunluk j indisli karakterini ekleyin.


'Algoritma 3 - 4 Sifre &= Mid(SiraliKodlar, SiraliKodlar.Length - j, 1)

5. Sonu olarak kan ifre, girilen yaznn ASCII kodlarnn kark dzende tutulmas ile oluturulur.
lblSifre.Text = "Girilen yaznn ifrelenmi hali: " & Sifre

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

Sral kodlara evrim:


Srann ilk yars 0 00 009 0097 00970 009700 Srann son yars 2 02 102 0102 90102 990102

Sonu olarak elde edilen sral ASCII kodlar, srann ilk yars ve son yarsnn birleimi olur: 0097 0099 0102

Karar Yaplar ve Dngler DKKAT

157

Srann ilk yars oluturulurken, rakamlar sona eklenir. Ancak srann son yars oluturulurken rakamlar baa eklenir.

Bu 4 haneli kodlar String deerinden Integer deerine evrilir ve bu deerlerin karl olan karakterler yazlr.
0097 0099 0102 97 99 102 a c f

Elde edilen karakterler birletirildiinde ifre zlm olur: acf


DKKAT Deifre algoritmasnn tm kodlar btnSifreyiCoz kontrolnn Click olayna yazlacaktr.

ifreyi Sral Kodlara Dntrmek Bu algoritma verilen ifreyi sral ASCII kodlarna dntrr.

RESM 6.14: ifrenin sral kodlara dntrlmesi.

1. ifreyi lblSifre etiketinden aln ve sral kodlarn oluturulmas iin gereken deikenleri tanmlayn.
' Algoritma 1 - 1 Dim Sifre As String = lblSifre.Text Dim SiraliKodlar As String Dim i As Short ' Baa ve sona rakam eklenecei iin ' deikenlere balang deerleri verilir Dim ilkYarisi As String = "" Dim sonYarisi As String = ""

158

Modl 6:

2. ifrenin tm elemanlar zerinde bir dng kurarak, sral kodlarn ilk ve son yarsn oluturun. Kodlarn ilk yars, ifrenin tek haneli rakamlar ile; kodlarn son yars, ifrenin ift haneli rakamlar ile oluturulur. Dolaysyla dngnn sayac ikier ikier artmaldr. ifrenin i indisli rakamn srann ilk yarsna, yanndaki rakam (i + 1 indisli rakam) srann son yarsna ekleyen kodlar yazn.
For i = 1 To Sifre.Length Step 2 ' Algoritma 1 - 2 ' Srann ilk yarsnn sonuna rakam eklenir. ilkYarisi &= Mid(Sifre, i, 1) ' Algoritma 1 - 3 ' Srann son yarsnn bana rakam eklenir. sonYarisi = sonYarisi.Insert(0, Mid(Sifre, i + 1, 1)) Next

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

Sral Kodlarn Okunmas lk algoritmada elde edilen sral ASCII kodlar, bu algoritmada okunarak karakterlere evrilir ve ifre zlm olur. 1. ifre zld zamanki deerinin tutulaca deikeni tanmlayn ve sral kodlar zerinde bir dng kurun. Sral kodlar 4 haneli kodlardan olutuu iin, dngde bir seferde 4 rakam alnacaktr. Bunun iin dngnn sayac 4 artrlmaldr.
i = 0 Dim yazi As String = "" Do While i < SiraliKodlar.Length i += 4 Loop
DKKAT 2 3 etaplarnda yazlacak tm kodlar Do While dngsnn iine yazlacaktr.

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

Karar Yaplar ve Dngler

159

RESM 6.15: Sral kodlarn okunmas. Dim AsciiKodu As Integer ' Algoritma 2 - 1 AsciiKodu = CInt(Mid(SiraliKodlar, i + 1, 4))

3. Alnan ASCII kodunun karakter karl bulunur ve yazi deikenine eklenir.


' Algoritma 2 - 2 yazi &= Chr(AsciiKodu)

4. Dng sonunda elde edilen deer lblDesifre etiketine yazlr.


' Algoritma 2 - 3 lblDesifre.Text = yazi

160

Modl 6:

Lab 2: Sralama Algoritmas


Bu algoritma, bir dizinin elemanlarn kkten bye sralar.

Dizinin Doldurulmas
1. Siralama isimli bir Windows projesi an. 2. Form zerine biri lbSirasiz, dieri lbSirali isimli iki ListBox ekleyin. Bu kontroller dizinin srasz ve sral halini listeler. 3. btnListele ve btnSirala isimli iki Button ekleyin. 4. Formun kod tarafna gein ve bir dizi tanmlayn. Bu dizi bir ok yordamn iinde kullanlaca iin global olarak tanmlanr.
Dim dizi(4) As String

5. btnListele dmesinin Click olayna, diziyi kark bir ekilde isimlerle dolduran kodlar yazn:
dizi(0) = "Enis" dizi(1) = "Engin" dizi(2) = "Tamer" dizi(3) = "Kadir" dizi(4) = "Fulya" Dim i As Integer For i = 0 To dizi.Length - 1 lbSirasiz.Items.Add(dizi(i)) Next

Dizinin Sralanmas
Sralama algoritmas, dizi zerinde bir dng kurar ve srayla dizinin bir eleman seilir. Bu eleman iin bir baka dng kurulur ve seilen elemann indisine kadar olan tm elemanlarla bir karlatrma yaplr. Kk olan srann bana konmak iin byk olan ile yer deitirilir. rnek 1. Dizinin 2. eleman seilir: "Engin" Dizinin 2. indisine kadar olan elemanlarla karlatrlr. "Engin" deeri alfabetik srada "Enis" deerinden kk olduu iin, bu iki deer yer deitirilir. Sra, Engin Enis Tamer Kadir Fulya olur. 2. Dizinin 3. eleman seilir: "Tamer"

Karar Yaplar ve Dngler

161

Dizinin 3. indisine kadar olan elemanlarla karlatrlr. "Tamer" deeri, "Enis" ve "Engin" deerlerinden byk olduu iin sralama deimez. 3. Dizinin 4. eleman seilir: "Kadir" Dizinin 4. indisine kadar olan elemanlarla karlatrlr. "Kadir" < "Tamer" olduu iin bu iki deer yer deitirilir. Sra, Engin Enis Kadir Tamer Fulya olur. "Kadir" deeri, "Enis" ve "Engin" deerlerinden byk olduu iin sralama deimez. 4. Dizinin 5. eleman seilir: "Fulya" Dizinin 5. indisine kadar olan elemanlarla karlatrlr. "Fulya" < "Tamer" olduu iin bu iki deer yer deitirilir. Sra, Engin Enis Kadir Fulya Tamer olur. "Fulya" < "Kadir" olduu iin bu iki deer yer deitirilir. Sra, Engin Enis Fulya Kadir Tamer olur. Dizideki tm deerler kontrol edildii iin algoritmadan klr.

RESM 6.16: Sralama algoritmas.

1. btnSirala dmesinin Click olayna, dizi zerinde bir dng tanmlayn. Bu dng dizinin (1 indisli) ikinci elemanndan balayarak dizi sonuna kadar devam edecektir. Daha sonra bu dng iine baka bir dng daha yazn. Bu dng, ilk dngnn sayacndan balar ve sfr

162

Modl 6:

olana kadar devam eder. kinci dngnn amac, ilk dngde seilen eleman, dizinin bana kadar olan elemanlarla karlatrmaktr.
Dim i As Integer For i = 1 To dizi.Length - 1 Dim j As Integer = i While j AndAlso dizi(j) < dizi(j - 1) ' Yer deitirme Algoritmas j -= 1 End While Next While dngs, j deeri sfr olana kadar ve dizinin kontrol edilen deeri bir nceki deerden kk olana kadar devam eder. Burada, dizi elemanlarnn kontrolnn sadece bir defa (bir nceki eleman ile) yapld dnlebilir. Ancak kk eleman yer deitirildiinde j deeri bir drlr. Dng tekrar alt zaman, ayn eleman bu sefer dizinin kalan elemanlaryla karlatrlr. AndAlso operatr, j deerinin sfr olmas durumunda dier kontroln

yaplmamas iin kullanlr. Dier kontrolde dizi(j 1) ifadesi, negatif indisli deere ulalmak istendii iin hata mesaj verir. 2. Yer deitirme algoritmas, bir deikenin deerinin geici bir yerde tutulmas ile gerekletirilir.

RESM 6.17: Yer deitirme algoritmas.

Sralama algoritmasnda dizinin j ve j - 1 indisli deerleri yer deitirilir. While dngs iinde Yer deitirme Algoritmas yazan yorum satrn kaldrn ve yerine algoritma kodlarn yazn.

Karar Yaplar ve Dngler

163

' Yer deitirme Dim temp As String = dizi(j - 1) dizi(j - 1) = dizi(j) dizi(j) = temp

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


For t As Integer = 0 To dizi.Length - 1 lbSirali.Items.Add(dizi(t)) Next

164

Modl 6:

Lab 3: Arama Algoritmas


Arama algoritmalar, sral bir liste zerinde bir deerin aranmas iin kullanlr. Kark srada olan bir listede yaplan arama, ancak listenin bandan sonuna kadar tm elemanlarnn kontrol edilmesi ile gerekleir. Bu yntem byk dizilerde performans drr. Belirli bir srada olan dizilerde ise daha hzl arama yntemleri kullanlmaldr. Bu labda ikili arama yntemi (Binary Search) incelenecektir.
DKKAT kili arama yntemi sadece sral bir dizi zerinde uygulanabilir. Ya da eldeki dizi ncelikle sralanr. kili arama ynteminde byk-kk kyaslamas yapldndan, dizinin sral olmas gerekir.

NOT

Dizinin Sralanmas
Arama algoritmas sral bir dizi zerinde alaca iin, dizi oluturulduktan sonra sralanmas gerekir. 1. IkiliArama isminde bir Windows projesi an. 2. Forma btnAra isimli bir Button ve lbDizi adl bir ListBox ekleyin. 3. Kod sayfasna gein ve global bir dizi tanmlayn.
Dim dizi(10) As Integer

4. Formun Load olayna diziyi rasgele saylarla doldurmak iin gereken kodlar yazn.
For i As Integer = 0 To 10 dizi(i) = Rnd() * 1000 Next

5. Diziyi sralayn ve deerlerini lbDizi adl listeye ekleyin.


Array.Sort(array) For i As Integer = 0 To 10 lbDizi.Items.Add(dizi(i)) Next

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

Karar Yaplar ve Dngler

165

rnek Kkten bye sral dizi zerinde 9 deeri aranacaktr.


Dizi: 1 2 4 7 9 10 12 18

1. Son, Ba ve Orta deikenleri tanmlanr: Son deeri dizinin son elemannn indisini, Ba deeri dizinin ilk elemannn indisini, Orta deeri ise Son + Ba / 2 deerini alr. Orta deeri virgll bir deer alrsa tamsayya evrilir. 2. Balang olarak Ba -1, son dizi uzunluu deerini alr.
Ba = -1 Son = 8 Orta = (8 1) / 2 = 3

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

RESM 6.18: Arama algoritmas.

166

Modl 6:

4. Aranan 9 deeri, 7den byk olduu iin, dizinin son yarsnda aranr. Ba deikenine Orta deeri verilirse, dizinin balang indisi deitirilir, bylece aramalar dizinin son yarsnda gereklemi olur.
Dizi: 9 10 12 18 Ba = 3 Son = 8 Orta = (8 + 3) / 2 = 5

5. Dizinin Orta indisli deeri alnr. Dizi(5) = 10 6. 9 deeri, 10dan kk olduu iin, kalan dizinin ilk yarsnda aranr.
Dizi: 9 10 Ba = 3 Son = 5 Orta = (5 + 3) / 2 = 4

7. Dizinin ortasndaki deer alnr: 9 8. Bylece 9 deerinin indisi Orta deeri olur. Kodlar Arama algoritmasnn kodlar btnAra dmesinin Click olayna yazlacaktr. 1. Algoritma iin gerekli bas, son ve orta deikenlerini tanmlayn ve balang deerlerini verin. Aranan deerin indisini tutmak iin de bir deiken tanmlayn.
Dim son As Integer = dizi.Length Dim bas As Integer = -1 Dim orta As Integer Dim indis As Integer

2. Kullancdan aranacak deeri girmesini isteyin.


Dim hedef As Integer = InputBox("Aranan deeri girin:")

3. Dizide aranacak deer kalmad zaman kan bir dng kurun. son ve bas deerleri arasndaki fark 1e dtnde, dizide aranacak deer kalmamtr.
While son - bas > 1 End While

4. While dngs iine, dizinin orta indisli deerini alan ve bu deeri aranan deerle karlatran kodlar yazn.

Karar Yaplar ve Dngler

167

orta = (son + bas) / 2 If dizi(orta) > hedef Then son = orta ElseIf dizi(orta) < hedef Then bas = orta Else indis = orta MsgBox("ndis: " & indis) Exit Sub End If

Eer dizinin ortasndaki deer aranan deerse, indis bulunmu demektir. orta deikeni kontroln yapld deerin indisini tuttuu iin, sonu orta deeri olur ve yordamdan klr. 5. Eer istenen deer bulunamadan dngden klrsa, indis -1 deerini alr. End While ifadesinden sonra, aranan deerin bulunamadn belirten kodu yazn.
indis = -1 MsgBox("ndis: " & indis & " Aranan deer bulunamad")

168

Modl 6:

Modl Sonu Sorular & Altrmalar

1. If ifadesi hangi veri tipini kontrol eder? 2. If - Select karar yaplarnn farklar nelerdir? 3. True Or False And False (True Or False) And False ifadeleri hangi deerleri dndrr? 4. For Next dngsnn Do dnglerine gre avantaj nedir? 5. While ve Until arasndaki fark nedir? 6. 4 boyutlu bir dizinin tm elemanlarn doldurmak iin, dizi zerinde ka tane dng kurulmaldr? 7. Uygulamalar derledikten sonra hatalar hangi yollarla grlebilir? 8. Finally bloundaki kodlar ne zaman alr? 9. Sral arama ynteminde (Linear Search) dizinin elemanlarnn sral olmas gerekli midir? 10. Sral arama yntemini bir dizi zerinde uygulayn.

Modl 7: Fonksiyonlar ve Yordamlar

Uygulama gelitirirken, bir ilemin birok yerde kullanld zamanlar olur. Bu gibi durumlarda bir kere yazlan kodlar, farkl yerlerde tekrar yazlr. Uygulama zerinde bir deiiklik yaplmak istenirse, tekrar yazlan kodlarn tek tek bulunup deitirilmesi gerekir. Bylece hem uygulamann yazm zorlar, hem de deiik yapmak giderek imkansz hale gelir. Bu problemler, birok yerde yaplmas istenen ilemlerin fonksiyonlar ve yordamlar iinde yazlmas ile zlr. Sadece fonksiyon ve yordamlarn isimleri kullanlarak, istenen yerlerde kodlar altrlr. Yaplan ilemin sonucunda oluan deer isteniyorsa fonksiyonlar kullanlr. rnein, veritabanna yeni bir kullanc ekledikten sonra, kullancnn ID numaras isteniyorsa fonksiyon kullanlmaldr. Eer yaplan ilemlerin sonunda bir deer dndrlmyorsa yordamlar kullanlr. rnein bir ComboBox kontrolne e ekleme ilemi yordam iine yazlabilir. .NET atsndaki nesnelerin birok fonksiyon ve yordamlar vardr. Tm fonksiyon ve yordamlarn ka parametre ald, geriye dn deerinin ne olduu, hangi nesneye ait olduklar ezberlenemez. Dolaysyla Visual Studio yardmnn kullanlmas kanlmazdr. Bu modl tamamlandktan sonra; Yordam ve fonksiyon kullanarak kodlarnzn ynetilebilirliini ve esnekliini artracak, Fonksiyon ve yordamlarn farklarn ayrt edebilecek, .NET atsndaki tarih ve zaman, matematik, String fonksiyonlarn tanyacak, Offline ve Online yardm etkin bir ekilde kullanabileceksiniz.

172

Modl 7:

Konu 1: Sub

Sub yordamlar dn deeri olmayan kod bloklardr. Bu kodlar Sub ve End Sub ifadeleri arasna yazlr. Sub YordamIsmi() End Sub

Uygulama iinde birok yerde alacak olan kodlar Sub yordam iinde yazlr. Bu kodlar, iine yazldklar yordamn ismi ile arlarak, istenen yerde tekrar altrlabilir. rnein, bir uygulama balarken form zerindeki kontrollerin temizlenmesi gerekiyorsa, bu kodlar bir daha yazmamak iin yordam kullanlabilir.
Sub Temizle() Label1.Text = "" ListBox1.Items.Clear() End Sub

Yordam tanmlarken parantezler iine, alabilecei parametreler yazlr. Eer yordam parametre almyorsa parantezlerin ii bo braklr.
Sub YazilimUrunleriEkle() ComboBox1.Items.Add("Yazlm Uzmanl") ComboBox1.Items.Add("Yazlm Mhendislii") Label1.Text = "Yazlm paketleri eklendi..." End Sub

Fonksiyonlar ve Yordamlar

173

Yordamlar, tanmlandktan sonra baka bir yordam veya fonksiyon iinde kullanlr. Yordam kullanmak iin, gerekli yere isminin yazlmas yeterlidir. Ayrca Call ifadesi de tercihe bal olarak kullanlabilir.
Sub DersleriListele() Select Case ComboBox1.SelectedIndex Case 0 Call Temizle() ListBox1.Items.Add("Access - likisel Veritabanlar") Algoritma") ListBox1.Items.Add("Programlamaya Giri Ve ListBox1.Items.Add(".NET Framework") ListBox1.Items.Add("VB.NET ile Windows Tabanl Programlama") ListBox1.Items.Add("ASP.NET ile Web Tabanl Programlama") Label1.Text = "Yazlm Uzmanl dersleri yklendi." Case 1 Call Temizle() ListBox1.Items.Add("SQL Server Veritaban Ynetimi") ListBox1.Items.Add("Visual Studio .NET ile Uygulama Gelitirme") ListBox1.Items.Add("ADO.NET ile Veri Ynetimi ve XML") ListBox1.Items.Add("XML Web Services, .NET Remoting ve COM+") ListBox1.Items.Add("Proje Ynetimi") Label1.Text = "Yazlm Mhendislii dersleri yklendi." Case Else Temizle() Label1.Text = "Yazlm paketi seiniz." End Select End Sub

Burada ComboBox kontrolnden seilen deerin kontroln indisi zerinden yaplmas, YazilimUrunleriEkle yordamnda eklenen elemanlarn sras deiirse problem yaratr. Liste kutusuna eklenen dersler yanl paketlerde gzkr. Ancak ComboBox kontrolnn seili metni zerinden kontrol yaplrsa da, eklenen isimler deitii zaman bir problem ortaya kar. Bu durumda iki

174

Modl 7:

yordamn birbirine bamll grlr. Bu rnekte, bir yordamda deiiklik yapld zaman dier yordamn alma ekli de kontrol edilmelidir.
Label ve ListBox kontrollerini temizleyen kodlar sadece iki satr olduu iin Temizle yordamnda yazlmayabilirdi. Ancak bu kodlar DersleriListele yor-

damnda defa kullanld iin, her deiiklikte kodun yazld yer bulunup gerekli dzeltmeler yaplacakt. rnein, temizleme ilemi, liste kutusunda Dersler metni gzkecek ekilde deitirebilir. Bu durumda, deiiklii sadece Temizle yordamnda yapmak yeterli olur.
Sub Temizle() Label1.Text = "" ListBox1.Items.Clear() ListBox1.Items.Add("Dersler: ") End Sub

Fonksiyonlar ve Yordamlar

175

Parametre Kullanm

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

rnein, uygulamann birok yerinde kullancya bilgi vermek amal mesaj kutular kullanlr. Eer bu mesajlar bir yordam iine yazlrsa, daha sonra mesajlar bir Label zerinde gsterilecek ekilde kodu deitirmek kolay olacaktr. Yordamn gsterecei mesajlarn parametre olarak verilmesi gerekir.
Sub MesajGoster(ByVal mesaj As String) Label1.Text = mesaj End Sub Sub Yordam1() '... MesajGoster("1. Yordam iinden alr.") End Sub Sub Yordam2() '...

176 MesajGoster("2. Yordam iinden alr.") End Sub Sub Yordam3() '... MesajGoster("3. Yordam iinden alr.") End Sub

Modl 7:

Yordamlar arrken tm parametrelerin belirtilen veri tipinde verilmesi gerekir. Farkl tipte verilen parametreler Implicit Conversion ile ilgili veri tipine evrilir. Yordamlar tanmlarken parametrelerin isimleri ve veri tipleri belirtilmelidir. Ayrca parametrelerin deer tipi olarak m, yoksa referans tipi olarak m geilecei belirtilmelidir. ByVal olarak geilen parametrelerin deerleri kullanlabilir, ancak deitirilemez. ByRef, parametrelerin hafzadaki adreslerine ulamay salar. Dolaysyla parametrelerin deerleri deitirilebilir. ByVal ve ByRef arasndaki farklar Modl 8de detayl olarak incelenecektir. Yordamlar arldklarnda, kodlar End Sub ifadesi grlene kadar altrlr. Yordamn normal akndan klmak istenirse Exit Sub veya Return ifadeleri kullanlr.
Sub MusteriBilgisi(ByVal MusteriId As Integer) If Not MusteriId > 0 Then Return End If ' MusteriId deerine gre ' mteri bilgileri veritabanndan ekilir. End Sub Return ifadesi Exit Sub ile ayn ilevi grr. Sub MusteriBilgisi(ByVal MusteriId As Integer) If Not MusteriId > 0 Then Exit Sub End If End Sub

Parametre olarak diziler kullanldnda bu dizilerin byklkleri verilmez. Fakat parantezler kullanlarak, verilen parametrenin dizi olduu belirtilmelidir.
Sub MatrisTopla(ByVal matris1(,) As Integer, ByVal matris2(,) As Integer) Dim x As Integer = matris1.GetLength(0) Dim y As Integer = matris1.GetLength(1) If x <> matris2.GetLength(0) OrElse _

Fonksiyonlar ve Yordamlar

177

y <> matris2.GetLength(1) Then MsgBox("Matris boyutlarnn byklkleri birbiriyle ayn olmaldr.") Exit Sub End If Dim sonuc(x - 1, y - 1) As Integer For i As Integer = 0 To x - 1 For j As Integer = 0 To y - 1 sonuc(i, j) = matris1(i, j) + matris2(i, j) Next Next End Sub

Diziler yordamlara parametre olarak geilirken, sadece isimleri verilir.


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim m1(,) As Integer = {{1, 3, 5}, {7, 9, 11}} Dim m2(,) As Integer = {{0, 2, 4}, {6, 8, 10}} MatrisTopla(m1, m2) End Sub

Opsiyonel Parametreler
Yordamlara parametre verilmesi opsiyonel olabilir. Parametre tanmlarken Optional anahtar kelimesi kullanlrsa, yordam arldnda bu parametrenin girilmesi zorunlu olmaz. Opsiyonel parametreler tanmlanrken balang deerleri verilmelidir, nk bu alan bo brakld zaman hangi deerin ilenecei bilinmelidir. rnein, MsgBox kullanmnda baz parametrelerin istee bal girilebildii grlr. Girilmeyen parametreler iin varsaylan deerler kullanlr.
MsgBox("Mesaj") MsgBox("Mesaj", MsgBoxStyle.YesNoCancel) MsgBox("Mesaj", MsgBoxStyle.MsgBoxRight, "Uyar") MsgBox("Mesaj", , ) MsgBox("Mesaj", , "Dikkat")

rnek:
Sub Yaz(ByVal mesaj As String, Optional ByVal SatirSayisi As Integer = 1) Label1.Text &= mesaj ' Verilen satr says kadar satr ba yaplr.

178 For i As Integer = 0 To SatirSayisi - 1 Label1.Text &= vbCrLf Next End Sub

Modl 7:

Sub DiziYazdir(ByVal Dizi1() As String, ByVal Dizi2() As String, Optional ByVal Format As String = "Bitiik") If Dizi1.Length <> Dizi2.Length Then Yaz("Dizi uzunluklar eit olmal") Exit Sub End If If Format.ToLower() = "bitiik" Then For i As Integer = 0 To Dizi1.Length - 1 Yaz(Dizi1(i) & Dizi2(i)) Next ElseIf Format.ToLower() = "altalta" Then For i As Integer = 0 To Dizi1.Length - 1 Yaz(Dizi1(i), 2) Yaz(Dizi2(i), 2) Next End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim isimler() As String = {"Enis", "Kadir", "Ebru"} Dim Soyadlar() As String = {"Gnesen", "Smerkent", "Gl"} DiziYazdir(isimler, Soyadlar) DiziYazdir(isimler, Soyadlar, "AltALTA") End Sub

Opsiyonel parametreler, yordamlarn son argmanlar olmaldr (Resim 7.1). Bir opsiyonel parametreden sonra ancak baka bir opsiyonel parametre gelebilir.

RESM 7.1: Opsiyonel parametre.

Fonksiyonlar ve Yordamlar

179

Bir yordamda veya fonksiyonda birok opsiyonel parametre kullanlyorsa, istenen parametreler bo braklabilir. Bo braklan parametrelerin sras nemli deildir, ancak virgller ile ayrlarak yerleri belirtilmelidir.
Sub Yordam(Optional ByVal param1 As String = "Merhaba", _ Optional ByVal param2 As Date = #1/1/2005#, _ Optional ByVal param3 As Boolean = True) ' alacak kodlar... End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Yordam("Hogeldiniz", , ) Yordam(, , ) Yordam(, Now, ) End Sub

ParamArray
Yordamlar ve fonksiyonlar arrken parametrelerin mutlaka girilmesi gerekir. Ancak baz durumlarda yordamlara ve fonksiyonlara girilecek parametrelerin says tasarm zamannda belli olmaz. ParamArray anahtar kelimesi ile yordamlara, ayn veri tipinde bir parametre dizisi verilebilir. ParamArray ile verilen dizi, yordamn son parametresi olarak tanmlanmaldr.
Sub YasOrtalamasi(ByVal sinif As String, ByVal ParamArray Yaslar() As Byte) Dim toplam As Integer = 0 Dim ortalama As Double = 0.0 Dim i As Integer For i = 0 To Yaslar.Length - 1 toplam += Yaslar(i) Next ' Parametre verilmezse i = 0 olur If i > 0 Then ortalama = toplam / i End If MsgBox(sinif & " snfnn ya ortalamas: " ortalama) End Sub

Ya ortalamasn hesaplayan bu yordamn ilk parametresi verilmek zorundadr. ParamArray ile tanml olan dizi, yordam arlrken girilen tm parametreleri tutar. Fakat girilen bu parametrelerin veri tipleri ayn olmak zorundadr. Bu rnekte girilecek yalar Byte tipinde olacaktr.

180

Modl 7:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' lk parametre verildikten sonra, ' istenen sayda parametre verilebilir YasOrtalamasi("YU6112", 45, 14, 25, 28) ' Yalar parametre olarak verilmeyebilir YasOrtalamasi("YU6112") End Sub

Parametrelerin snrl olmamas, dizilere eleman ekleme ilemini kolaylatrr. rnein, bir diziye birok eleman eklemek iin, bu elemanlarn bir dizi iinde parametre olarak verilmesi gerekir.
Dim Raf() As String Sub KitapEkle(ByVal Kitap() As String) ' Raf dizisine, kitaplar dizisinin ' elemanlar eklenir. End Sub

Bu yordamn kullanm iin, eklenecek deerlerin nce bir diziye aktarlmas gerekir. Yordamn yazlmas kolay, ancak kullanm zordur. Bu yordam kullanacak olan programcnn ii ParamArray ile kolaylatrlr.
Sub Mesaj(ByVal msg As String) Label1.Text &= msg & vbCrLf End Sub Dim Raf() As String = {} Sub KitapEkle(ByVal Kitap As String, Optional ByVal Genisletme As Byte = 1) If Genisletme = 0 Then Mesaj("Dizi boyutu geniletilemedi...") Return End If ' Geniletme faktr kullancya brakld iin ' dizide bo alanlar olabilir. lk bo alan bulunup ' veri buraya aktarlr. Dim i As Integer While i < Raf.Length If Raf(i) = "" Then Raf(i) = Kitap Exit Sub End If

Fonksiyonlar ve Yordamlar

181

i += 1 End While ' Dizide bo yer yoksa yeniden boyutlandrlr. ReDim Preserve Raf(i + Genisletme) Raf(i + 1) = Kitap End Sub

nce, diziye bir tek eleman ekleyen yordam yazlr. Dizinin tm alanlar doluysa, geniletme parametresinde verilen deer kadar tekrar boyutlandrlr. Geniletme deikeni Byte veri tipinde tanml olduu iin negatif deer alamaz. Dolaysyla, dizinin boyutunun kltlmesi engellenmi olur. Bu yordam tek bana kullanlabildii gibi, diziye birok eleman ekleyecek yordama yardmc olarak da kullanlabilir.
Sub Ekle(ByVal ParamArray Kitaplar() As String) For i As Integer = 0 To Kitaplar.Length - 1 ' Geniletme faktr 5 ile tek tek kitap eklenir. KitapEkle(Kitaplar(i), 5) Next Mesaj(Kitaplar.Length & " kitap rafa eklendi.") End Sub

Bu yordam ise snrsz parametre alarak, dizi ilemlerinde programcya kolaylk salar.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Ekle("Kitap1", "Kitap2", "Kitap3") End Sub

182

Modl 7:

Sub Main

Yeni bir yordam tanmlarken Main yordam hari istenen isim verilebilir. Main yordam btn uygulamalarn giri noktasdr. Windows uygulamalarnda formlar yklenmeden nce o form iinde tanml Main yordam altrlr. Bu Main yordamnda Application snf balang formunu Run metodu ile ykler. Application snf, .NET Frameworkte, uygulamalar balatmak, ynetmek ve sonlandrmak iin kullanlr. Projenin zelliklerinden balang nesnesi Sub Main olarak ayarlanrsa, uygulama alt zaman tm projede Main yordamn arar. Windows uygulamalar gelitirilirken Main yordam yazlrsa balang formunun da bu yordam iinde belirtilmesi gerekir. Bu yordam bir modln iinde tanmlanabilir.
Module Module1 Sub Main() Application.Run(New Form1) End Sub End Module Application snfnn Run metodu, parametre olarak balang formunu ister.

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

Fonksiyonlar ve Yordamlar

183

RESM 7.2: Run metodu.

Balang formu olarak seilen bir Windows formunda Main yordam tanmlanrsa, bu yordam Shared olarak tanmlanmaldr. Shared metotlar uygulama genelinde paylatrlan sabit metotlardr.
Shared Sub Main() MsgBox("Balang formlar kod ile yklenmelidir.") End Sub

Balang formu olarak ayarlanm bir formun iine bu Main yordam tanmlanrsa, formu yklemek iin herhangi bir kod yazlmad iin uygulama sadece mesaj kutusunu gsterecektir.

184

Modl 7:

Konu 2: Function

Fonksiyonlar bir ilem yaptktan sonra geriye deer dndrrler. rnein, bir arpma fonksiyonunun dn deeri, parametre olarak verilen iki saynn arpm olacaktr. Fonksiyonlarn tanmlar deikenler gibidir.
Function Fonksiyon(ByVal Param1 As VeriTipi, ...) As DnVeriTipi End Function

Fonksiyonlarn geriye dn deerleri Return ifadesi ile ya da fonksiyonun ismi verilerek yaplr.
Function KontrolOk() As Boolean If TextBox1.Text.Length > 0 _ And ComboBox1.SelectedIndex > -1 Then Return False End If Return True End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not KontrolOk() Then MsgBox("Seiminizi yaptktan sonra devam edebilirsiniz.") Exit Sub

Fonksiyonlar ve Yordamlar

185

End If ' Kontrol tamamlandktan sonra yaplacak ilemler End Sub

Bu fonksiyonun almas Return ifadesinden sonra yazlan deerin dndrlmesiyle sonlanr. Burada dikkat edilmesi gereken nokta, fonksiyon deer dndrdkten sonra sonland iin Return ifadesinden sonra gelen hibir kodun altrlmamasdr. Eer dn deerini belirledikten sonra baka bir ilemin yaplmas isteniyorsa, fonksiyonun ismi kullanlr. Fonksiyonun ismi bir deiken gibi gzkse de, temsil ettii deer fonksiyonun dn deeridir.
Function GunlukKur(ByVal Cinsi As String) As Single Select Case Cinsi Case "d", "D" Return 1.43 Case "e", "E" Return 1.81 Case "s", "S" Return 2.91 End Select End Function Function KurHesapla(ByVal Miktar As Single, Optional ByVal Cinsi As String = "d") As Double KurHesapla = Miktar * GunlukKur(Cinsi) If KurHesapla < 0 Then ' Pozitife evrilir. KurHesapla = 0 - KurHesapla MsgBox("Miktar negatif girilmi.") End If End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = KurHesapla(-1000) End Sub

Bu rnekte, fonksiyonun ismi bir deiken olarak kullanlr ve hesaplanan deer bu deikene atanr. Daha sonra bu deikenin deeri, yani fonksiyonun dn deeri zerinde ilem yaplabilir. Eer Return ifadesi kullanlsayd, kontrol yaplan kodlar altrlmadan fonksiyondan klacakt.

186

Modl 7:

Function KurHesapla(ByVal Miktar As Single, Optional ByVal Cinsi As String = "d") As Double Return Miktar * GunlukKur(Cinsi) ' Bu satrdan sonra yazlan kodlar ilenmez. End Function

rnek: Snf geme notunun hesaplanmas ileminin, geriye bir sonu dndrlecei iin fonksiyon ile yazlmas gereklidir. Parametre olarak final ve vize notlar alnr ve bu deerlerle hesaplanan geme notu sonu olarak dndrlr. Vize notlarnn girilmesi zorunlu deildir, dolaysyla bu deerler ParamArray olarak verilebilir.
Function NotHesapla(ByVal Final As Integer, ByVal VizeKatSayisi As Single, ByVal ParamArray vizeler() As Integer) As Integer Dim vizeToplam As Integer = 0 Dim vizeOrtalama As Double = 0.0 Dim i As Integer For i = 0 To vizeler.Length - 1 vizeToplam += vizeler(i) Next If i > 0 Then vizeOrtalama = vizeToplam / i End If Dim finalKatSayisi As Single = 1 - VizeKatSayisi Return finalKatSayisi * Final + VizeKatSayisi * vizeOrtalama End Function

Fonksiyonun ilk parametresi final notudur. Final notu bir tane olaca iin girilmesi zorunludur. Daha sonra vize notlarnn ortalamas hesaplanarak final notu ile toplanr. Parametre olarak verilen vize katsays, vize notlarnn ortalamadaki arlklarn belirler.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim gecmeNotu As Integer gecmeNotu = NotHesapla(70, 0.6, 90, 80, 86, 75, 90) MsgBox(gecmeNotu) End Sub

Fonksiyonlar ve Yordamlar

187

Fonksiyonlarn ve Yordamlarn Ar Yklenmesi

Fonksiyon ve yordamlar kullanrken, ayn isimde birden fazla kez tanmlanabildikleri grlr. Buna Ar Ykleme (OverLoad) denir. Bir yordamn ve fonksiyonun ar yklenmesi kullanmn kolaylatrr. Ayn isimde farkl seenekler sunmas, metotlarn kullanlln artrr.
Sub UrunAra(ByVal UrunId As Integer) ' rn numarasna gre arama yaplr. End Sub Function UrunAra(ByVal UrunIsmi As String) As Integer ' rn ismine gre arama yaplr. ' Bulunan rnn numaras dndrlr. End Function Function UrunAra(ByVal UrunIsmi As String, ByVal UretimTarihi As Date) As Integer ' rn ismine ve retim tarihine gre arama yaplr. ' Bulunan rnn numaras dndrlr. End Function Function UrunAra(ByVal UretimTarihi As Date) As Integer ' retim tarihine gre arama yaplr. ' Bulunan rnn numaras dndrlr. End Function

188

Modl 7:

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

RESM 7.3: Hatal tanmlama.

Metotlar ar yklerken dikkat edilmesi gereken baz noktalar vardr. mzalar ayn olan metotlar tanmlanamaz. Fonksiyonlar yordamlarla, yordamlar da fonksiyonlarla ar yklenebilir. Fonksiyonlar dn tiplerine gre ar yklenemez.

Fonksiyonlar ve Yordamlar

189

Konu 3: String Fonksiyonlar

String fonksiyonlar, kullanld String deeri stnde verilen parametrelere gre deien ilemler yaparlar. Sonu olarak geriye dndrdkleri deerler, fonksiyonun ileyi amacna gre deiir. CompareTo. Bu fonksiyon, ilemin yaplaca deeri parametre olarak verilen deerle karlatrr. ki deer bir birine eitse 0, parametredeki deer alfabetik olarak nde ise 1, deilse -1 deeri dndrlr. Dim yazi1 As String = "BilgeAdam" Dim yazi2 As String = InputBox("Yaz giriniz.") Select Case yazi1.CompareTo(yazi2) Case 0 MsgBox("Yazlar birbirine eit") Case 1 MsgBox(yazi1 & ", " & yazi2 & " kelimesinden sonra geliyor") Case -1 MsgBox(yazi1 & ", " & yazi2 & " kelimesinden nce geliyor") End Select Concat. String deerlerini birletirmek iin kullanlr. Parametre tipi ParamArray olduu iin, snrsz String deikeni birletirilebilir.

190 Dim kurum As String = "BilgeAdam"

Modl 7:

Label1.Text = String.Concat("Kurum: ", kurum, "ubeler: ", vbCrLf, "Fatih", "Bakrky", "Kadky", "Beikta", "Town Center") CopyTo. Bu fonksiyon ile bir String deikenin belli bir ksm, bir karakter dizisine kopyalanr. Ayrca kopyalanacak dizinin hangi indisten itibaren balanaca da belirtilir. Dim yazi As String = "BilgeAdam" Dim Karakterler(10) As Char ' Yaznn 5. karakterinden itibaren alnan 4 karakter, ' karakterler dizisinin 3. indisinden balanarak ' diziye kopyalanr. yazi.CopyTo(5, Karakterler, 3, 4) ' Karakterler dizisinin son hali: ' _ _ _ A d a m _ _ _ _

Burada dikkat edilmesi gereken nokta, karakterlerin kopyalanaca dizinin byklnn yeterli olup olmaddr. Dizinin kopyalanmaya balanacak indisi ile kopyalanacak karakterlerin uzunluunun toplam, dizi byklnden kk olmaldr
EndsWith & StartsWith. Bu fonksiyonlar, String deikeninin, parametrede verilen String deeriyle baladn ya da bittiini gsterir. Geriye dn deeri Boolean tipindedir. degisken.EndsWith(deger As String) As Boolean degisken.StartsWith(deger As String) As Boolean Dim HtmlTag As String = "<table>" If HtmlTag.StartsWith("<") And HtmlTag.EndsWith(">") Then MsgBox("Yazm doru") End If ToUpper & ToLower. ToUpper, String deikenin iindeki kk karakterleri bye; ToLower, byk karakterleri ke evirir. Dim yazi As String = "bilgeADAM" MsgBox(yazi.ToUpper()) ' Sonu: BLGEADAM MsgBox(yazi.ToLower) ' Sonu: bilgeadam

Fonksiyonlar ve Yordamlar

191

Join. Bir String dizisindeki elemanlar, parametre olarak verilen ayra karakteri ile birletirerek tek bir String deikeni dndrr. Dim yazi() As String = {"sim", "Soyad", "Adres", "Email", "Telefon"} MsgBox(String.Join(";", yazi)) ' Sonu: sim;Soyad;Adres;Email;Telefon SubString. Verilen bir String deerinin, bir blmn String olarak dndren fonksiyondur. stenen karakterlerin hangi indisten balayaca parametre olarak geilir. Bu durumda, balang karakterinden sona kadar okunur. Ancak fonksiyonun, ka karakter okunacan belirten bir parametre kabul eden ar yklemesi de vardr. Dim yazi As String = "BilgeAdam" MsgBox(yazi.Substring(5)) ' Sonu : Adam MsgBox(yazi.Substring(5, 2)) ' Sonu : Ad Trim, TrimEnd, TrimStart. Trim fonksiyonu, parametre olarak verilen

bir karakteri, String deikeninin bandan ve sonundan kaldrr.


TrimEnd fonksiyonu parametrede verilen karakteri String deikeninin

sadece sonundan, TrimStart ise sadece bandan kaldrr.


Dim yazi As String = "--------Merhaba-------MsgBox(yazi.Trim("-")) ' Sonu: Merhaba MsgBox(yazi.TrimEnd("-")) ' Sonu: --------Merhaba MsgBox(yazi.TrimStart("-")) ' Sonu: Merhaba--------

192

Modl 7:

Konu 4: Matematiksel Fonksiyonlar

Uygulamalarda ou zaman matematiksel hesaplamalara ihtiya duyulur. Bu hesaplamalar kolaylatran hazr matematik fonksiyonlar vardr. Bu fonksiyonlar .NET Frameworkte System.Math ad uzaynn (namespace) iinde tanmlanmtr.
Abs. Verilen bir saynn mutlak deerini dndrr. Dnen deer her du-

rumda pozitif olacaktr.


Math.Abs(-123) ' Sonu: 123 Ceiling & Floor. Ceiling fonksiyonu, Double veri tipinde verilen bir

saydan byk, en kk tamsayy verir. Floor fonksiyonu verilen saydan kk, en byk tamsayy verir.
Math.Ceiling(-12.231231) ' Sonu: -12 Math.Ceiling(12.231231) ' Sonu: 13 Math.Floor(-12.231231) ' Sonu: -13 Math.Floor(12.231231) ' Sonu: 12

Fonksiyonlar ve Yordamlar

193

Cos, Sin, Tan. Bu fonksiyonlar temel trigonometrik ilemleri gerekleti-

rir. Cos fonksiyonu verilen derecenin kosinsn, Sin saynn sinsn ve Tan saynn tanjantn hesaplar. Parametre olarak verilen derece radyan (360 derece) deeri olarak kabul edilir.
Dim Derece As Double =90

Math.Cos(Math.PI * Derece / 180) Math.Sin(Math.PI * Derece / 180) Math.Tan(Math.PI * Derece / 180) Exp. Bu fonksiyon, e sabitinin deerinin (yaklak 2,718281 deerinin), parametrede verilen say ile ssn alr. Math.Exp(4) ' Sonu yaklak: 54,59815 Log. Logaritmik hesaplamalar iin kullanlan bir fonksiyondur. Taban parametresi verilmezse saynn e tabannda logaritmasn alr. Math.Log(1000, 10) ' Sonu: 3 Math.Log(Math.E) ' Sonu: 1 Max & Min. Max fonksiyonu verilen iki sayy karlatrarak byk olan, Min fonksiyonu ise saylardan kk olan dndrr. Math.Max(100, 200) ' Sonu: 200 Math.Min(100, 200) ' Sonu: 100 Pow. lk parametrede verilen bir saynn, ikinci parametredeki deer kadar

ssn alr.
Math.Pow(10,3) ' Sonu: 1000 Sqrt. Verilen saynn karekkn hesaplar. Math.Sqrt(441) ' Sonu: 21

194

Modl 7:

Konu 5: Tarih ve Zaman Fonksiyonlar

Tarih ve zaman fonksiyonlar Date veri tipi zerinde hesaplamalar yapan fonksiyonlardr. Bu fonksiyonlar System.DateTime ad uzaynda tanmldr. Ayrca Microsoft.VisualBasic altnda tanml DateAdd ve DateDiff fonksiyonlar da vardr.
DateAdd. Bu fonksiyon verilen bir zamana belli bir tarih veya zaman

aral eklemek iin kullanlr. Dn deeri, hesaplanan Date tipinde bir deer olacaktr.
Function DateAdd(ByVal Aralik As DateInterval, _ ByVal Sayi As Double, _ ByVal Zaman As DateTime _ ) As DateTime

Fonksiyonun ald ilk parametre DateInterval tipinde bir zaman araldr. Bu deerler aadaki tiplerde olabilir:
Day. Gn (1 31) DayOfYear. Gn (1 366) Hour. Saat (1 24) Minute. Dakika (1 60) Month. Ay (1 12) Quarter. eyrek yl (1 4) Second. Saniye (1 60) WeekDay. Gn (1 7)

Fonksiyonlar ve Yordamlar

195

WeekOfYear. Hafta (1 53) Year. Yl Zaman parametresine ilem yaplacak tarih, Sayi parametresine de

eklenecek deer girilir.


Do Dim baslangic As Date = Now Dim tahmin As Integer tahmin = InputBox("3 saniye iinde bir say girin") If Now > DateAdd(DateInterval.Second, 3, baslangic) Then MsgBox("Sreniz Doldu") Exit Do End If ' Oyun kodlar... Loop DateDiff. Bu fonksiyon verilen iki tarihin arasndaki kalan sreyi hesaplar. Bu sre DateInterval tipinde parametre olarak verilir. Function DateDiff( _ ByVal Aralik As DateInterval, _ ByVal Zaman1 As DateTime, _ ByVal Zaman2 As DateTime ) As Long

Zaman aralnn hesaplanmas, ikinci zaman deerinden ilkinin karlmas ile gerekleir: Zaman2 Zaman1
Sub DogumGununeKalan(ByVal dogumGunu As Date, Optional ByVal aralik As DateInterval = DateInterval.Day) ' Verilen doum gnnn senesi, ' iinde bulunan sene ile deitirilir. dogumGunu = DateAdd(DateInterval.Year, Now.Year dogumGunu.Year, dogumGunu) Dim kalan As Long kalan = DateDiff(aralik, dogumGunu, Now.Date) Dim mesaj As String = "Doumgnnz " & Math.Abs(kalan) & " " & aralik.ToString() If kalan > 0 Then mesaj &= " gemi"

196 ElseIf kalan < 0 Then mesaj &= " sonra" Else mesaj = "Doumgnnz bu " & aralik.ToString() & " iinde" End If MsgBox(mesaj) End Sub

Modl 7:

Bu rnek, verilen bir doum gnne kalan zaman araln hesaplar. Zaman aral varsaylan deeri Day olan opsiyonel bir parametre olarak verilir. DateDiff fonksiyonu iki tarih arasndaki zaman araln hesaplar. Bu rnekte istenen, doum gnne kalan zamandr. Dolaysyla doum gnnn yl nemli deildir. Bu deer iinde bulunan yl deeri ile deitirildiinde, bu sene iinde kalan gn hesaplanabilir.
CompareTo. String ifadelerinde olduu gibi, tarih ve zaman deerleri zerinde de karlatrma yaplabilir. CompareTo fonksiyonu, ilem yaplan tarih ile parametre olarak verilen tarihi karlatrr. Parametredeki tarih kkse 1, bykse -1 veya eitse 0 dndrr. Dim d As Date = #03/23/2002# MsgBox(d.CompareTo(Now)) DaysInMonth. lk parametrede verilen yln, ikinci parametrede verilen

aynda ka gn olduunu dndrr.


Date.DaysInMonth(2002, 2) ' Sonu: 28 IsLeapYear. Verilen bir yln artk yl olup olmadn hesaplar. Dn deeri True ya da False olabilir. Date.IsLeapYear(1200)) ' Sonu: True Parse. Parametrede verilen String bir ifadeden Date veri tipine evrim ilemini yapar. String ifadesinde verilen ifadenin doru bir tarih ve zaman tipinde olmas gerekir. Date.Parse("23.04.2005 20:20:00") Date.Parse("22 July 2005 02:00 PM") Date.Parse("18 Haziran 1980")

Fonksiyonlar ve Yordamlar

197

ngilizceden farkl bir dilde girilen ay isimlerinin tarih tipine evrilmesi iin, uygulamann kltrnn o dilde ayarlanmas gerekir. ' Uygulama kltr Franszca yaplr. Application.CurrentCulture = New Globalization.CultureInfo("fr-FR") ' temps deikeninin deeri 23/05/2005 olacaktr. Dim temps As Date = Date.Parse("23 Mai 2005") ' Bu kod hata verecektir. Dim zaman As Date = Date.Parse("23 Mays 2005")

ToLongDateString & ToLongTimeString. Verilen tarihi uzun tarih ve

zaman formatnda gsteren fonksiyonlardr.


Dim d As Date = #1/29/2005 12:59:22 PM# d.ToLongDateString() ' Sonu: 29 Ocak 2005 Cumartesi d.ToLongTimeString() ' Sonu: 12:59:22 ToShortDateString & ToShortTimeString. Verilen tarihi ksa tarih ve zaman formatnda gsteren fonksiyonlardr. Dim d As Date = #1/29/2005 12:59:22 PM# d.ToShortateString() ' Sonu: 29 Ocak 2005 d.ToShortTimeString() ' Sonu: 12:59

198

Modl 7:

Konu 6: Offline ve Online Yardmn Etkin Kullanm


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

Fonksiyonlar ve Yordamlar

199

Offline Yardm

Uygulama gelitirirken, kodlarn yazlmasnda IntelliSense aracndan byk lde faydalanr. IntelliSense, bir kodun yazlmas srasnda ald zaman, yazlan kodlarla balayan tm metot, zellik ve nesneleri programcya sunar. O anda zerinde bulunulan enin aklamas, ald parametreler gibi bilgileri de gsterir.

RESM 7.4: IntelliSense.

Visual Studio iinde MSDN ktphanelerinde istenen konularn aranmas iin Index, Search, Contents ve Dynamic Help panelleri kullanlr. Sonu bulunduu zaman yeni bir alma sayfasnda gsterilir. Bu sayfada aranan kavram ile ilgili detayl bilgiler ve rnekler mevcuttur. rnek:
String

veri

tiplerinin

deiik

formatlarda

yazdrlmas

iin

String.Format fonksiyonu kullanlr.

200

Modl 7:

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

4. Kod sayfanza gein ve String.Format fonksiyona bir rnek yazn.


Dim ocak As Integer = 1000 Dim subat As Integer = 1100 MsgBox(String.Format("Ocak ay maa {0:C} -- ubat ay maa: {1:c}", ocak, subat))

5. Formatlama ilemleri hakknda daha fazla bilgi almak iin, fonksiyonun yardm sayfasna gelin ve Remarks blmnde Formatting Types

Fonksiyonlar ve Yordamlar

201

balantsn tklayn ya da Index panelinde Formatting Types yazn ve yardm sayfasn an. kan sayfada her veri tipi iin kullanlan formatlama seenekleri vardr. Numeric Format Strings balantsn tkladktan sonra alan sayfada NumberFormatInfo balantsn tklayn. Format Character tablosunda deiik formatlama seeneklerini inceleyin ve kodunuzda deneyin. 6. Web ara ubuundan Geri dmesini tklayarak veya ALT+Sola Ok ksayolu ile String.Format Method balkl ilk atnz sayfaya dnn. 7. Parametre olarak IFormatProvider, String ve ParamArray Object alan fonksiyon tanmn tklayn. Fonksiyonun kullanmn inceledikten sonra bu kullanma bir rnek yazn.
MsgBox(String.Format(New Globalization.CultureInfo("it-IT"), "Bugn: {0:dddd MM yyyy}", Now))

8. Bu rnekte uygulamann kltr ayarlar deitirilmeden, tarihin istenen kltr ayar ile gsterilmitir. Kltr ayarlarnn tanmlanmasn incelemek iin Index yardm panelinde CultureInfo yazn ve About CultureInfo Class indeksini sein. kan Index Result penceresinde CultureInfo Class indeksini sein. 9. Bu sayfada kan kltr isimlerini rneinizde kullanarak deiik sonular inceleyin.
NOT Trke dil ailesi iin Globalization.CultureInfo("TR-tr") kullanlr

202

Modl 7:

Online Yardm

MSDN ktphanelerinden offline olarak yardm almak hzl ve etkili bir yntemdir. Ancak bu yardm dosyalarnn gncellenmesi iin MSDN srmnn yenilenmesi gerekir. Online yardm, MSDN ktphanelerinin Internet ortamnda yaynlanmasdr. Yeni rnekler, makaleler ve dzeltmelerle gncellenen bu yardm dosyalarna http://msdn.microsoft.com adresinden ulalabilecei gibi, Visual Studio ortamndan da bu dosyalar iinde arama yaplabilir. rnek: Windows uygulamasnda kullanlan bir metin kutusunda Geri Al (Undo) ilemi yaplmak isteniyor, fakat fazladan kod yazlmak istenmiyor. Bunun iin .NET Frameworkte hazr bir metodun olup olmad kontrol edilmesi gerekir. Online yardm ile gerekli arama yapldktan sonra kan sonular yorumlanr. 1. Balang sayfasn (Start Page) an ve Online Resources sekmesine gelin. 2. Sol paneldeki menden Search Online mensne gelin ve Search For altndaki metin kutusuna TextBox Undo yazn. Sonularn MSDN Online iinde hangi duruma gre filtrelenebildiini gsteren balantlar kar. Sonular; Tm MSDN iinde, MSDN kod ve kardan yklemelerde, MSDN teknik makalelerinde, Microsoft bilgi veri kaynanda, Microsoft.com genelinde filtrelenebilir.

Fonksiyonlar ve Yordamlar

203

3. Search results for All of MSDN balantsn tklayn ve kan sonular inceleyin. Aranan kaynan .NET Framework iinde kullanlabilmesi istendii iin TextBoxBase.Undo Method (.NET Framework) yardm konusunu tklayn. 4. MSDN Online ktphanelerinin sayfa dzeni ve ierii offline yardm ile ayndr. TextBoxBase taban snfnn Undo metodunu inceleyen bu yardm sayfasnda, metot tanmlamas, Remarks, Examples, Requirements ve See Also blmleri grlr. Examples blmnde Visual Basic kodlarnn altnda Undo metodunun kullanmn inceleyin. 5. Undo yapldktan sonra silinen kelimelerin bir listede tutulmas ve listeye ekleme ileminin kolay bir ekilde yaplmas isteniyor. Bunun iin Sol panelde bulunan menlerin stndeki Search For metin kutusuna ArrayList yazn ve kan sonulardaki ilk balanty tklayn. 6. ArrayList snfnn Count ve Item zelliklerini ve Add metodunu inceleyin Uygulamanz tamamlamak iin bu zellikleri kodunuzda kullann.
Dim silinenler As New ArrayList Sub GeriAl() ' Metin kutusunda geri alnacak bir veri varsa If TextBox1.CanUndo Then ' Eski deerler listeye eklenir. silinenler.Add(TextBox1.Text) TextBox1.Undo() GeriAlinanKelimeler() End If End Sub ' Listeleme ilemini yapan yordam Sub GeriAlinanKelimeler() ListBox1.Items.Clear() For i As Integer = 0 To silinenler.Count - 1 ' i indisli Item, liste kutusuna eklenir. ListBox1.Items.Add(silinenler.Item(i)) Next End Sub

204

Modl 7:

Lab 1: Kelime Oyunu


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

Projenin Almas
1. KelimeOyunu isminde bir Window projesi an ve forma listedeki kontrolleri ekleyin.
btnBasla ve btnGiris isminde iki Button txtKelime isminde bir TextBox lblMesaj isminde bir Label tmrSure isminde bir Timer

2. Projenizin kod sayfasna gein ve uygulama boyunca kullanlacak global deikenleri tanmlayn.
' Kontrol edilecek kelime Dim kelime As String ' Oyunun seviyesi Dim OyunSeviyesi As Byte = 1 ' Timer kontrolnde kullanlacak sre Dim kalanSure As Integer = 5 ' Bilinen kelime says Dim tekrar As Integer = 0

3. Uygulamaya giri Sub Main yordamndan yaplr. Bu yordamda kullancdan, formun balnda grntlenecek bir kullanc ad istenir. Eer kullanc ad bo girilirse form yklenmeden uygulamadan klr.
' Uygulamann giri noktas Shared Sub Main() Dim KullaniciAdi As String KullaniciAdi = InputBox("Kullanc Ad girin:") If KullaniciAdi = "" Then Exit Sub

Fonksiyonlar ve Yordamlar

205

End If ' Form ykleniyor Dim oyun As New Form1 oyun.Text = KullaniciAdi & " yaryor" oyun.ShowDialog() End Sub

Yardmc Yordam ve Fonksiyonlar


Uygulamann tamamnda kullanlacak kodlar yordam ve fonksiyonlar halinde yazlarak hem ynetilmesi hem de kullanlabilirlii artrlr. Uygulamada kullanlacak yordam ve fonksiyonlar Tablo 7.1de listelenmitir.
TABLO 7.1: Kelime Oyunu Uygulamas Yordam ve Fonksiyonlar
sim Parametreler lev Zaman sfrlar ve TextBox kontrolne Focus verir Balang kelimesi alnarak

Temizle OyunuBaslat OyunuBitir Optional String neden String mesaj

Timer balatlr.
Sreyi durdurur, puan ve biti nedeni kullancya gsterir.

Bilgi SonrakiKelimeBilgi

Label kontrolnde mesaj


grntlenir. Girilecek kelimenin hangi harflerle balayacan gsterir.

SeviyeAtla Kontrol

Byte seviye String kelime1, String kelime2 Byte seviye, Short tekrar

Oyunun seviyesini artrr. kinci kelimenin, ilk kelimenin harfleriyle baladnn kontrol yaplr. Tekrar deerinin, seviye kadar ss alnr.

PuanHesapla

1. Yordamlar ve fonksiyonlar yazn.


Temizle yordam Sub Temizle() kalanSure = 5 txtKelime.Text = "" txtKelime.Focus() End Sub

206 OyunuBaslat yordam Sub OyunuBaslat() Temizle()

Modl 7:

kelime = InputBox("Oyunun balang kelimesini girin") tmrSure.Start() SonrakiKelimeBilgi() End Sub OyunuBitir yordam Sub OyunuBitir(Optional ByVal neden As String = "") tmrSure.Stop() Bilgi(neden) Temizle() Dim puan As Integer puan = PuanHesapla(OyunSeviyesi, tekrar) MsgBox("Puannz: " & puan) End Sub Bilgi yordam Sub Bilgi(ByVal kelime As String) lblMesaj.Text = kelime End Sub SonrakiKelimeBilgi yordam Sub SonrakiKelimeBilgi() Dim mesaj As String mesaj &= Microsoft.VisualBasic.Right(kelime, OyunSeviyesi) mesaj &= " ile balayan bir kelime girin" Bilgi(mesaj) End Sub SeviyeAtla yordam Sub SeviyeAtla(ByVal seviye As Byte) OyunSeviyesi = seviye OyunuBitir(seviye & ". seviyeye geildi")

Fonksiyonlar ve Yordamlar

207

SonrakiKelimeBilgi() End Sub Kontrol fonksiyonu Function Kontrol(ByVal kelime1 As String, ByVal kelime2 As String) As Boolean ' kinci kelimenin banda oyun seviyesi kadar ' karakter alnr. Dim bas As String = kelime2.Substring(0, OyunSeviyesi) ' kinci kelime, ilk kelimenin sonu ile balyorsa ' doru girilmitir. True deeri dner. Return kelime1.EndsWith(bas) End Function PuanHesapla yordam Function PuanHesapla(ByVal seviye As Byte, ByVal tekrar As Short) As Integer Return Math.Pow(tekrar, seviye) End Function

Olaylarn Yazlmas
1. tmrSure kontrolnn Tick olayna kalan sreyi kontrol eden kodlar yazn.
Private Sub tmrSure_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrSure.Tick If kalanSure <= 0 Then OyunuBitir("Sreniz doldu") Else kalanSure -= 1 End If End Sub

2. btnBasla dmesinin Click olayna, oyunu balatan yordam yazn


Private Sub btnBasla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBasla.Click OyunuBaslat() End Sub

3. btnGiris dmesinin Click olayna, girilen kelimeyi alp kontrolleri yapan kodu yazn. Burada dikkat edilmesi gereken nokta, tekrar saysnn seviye ile doru orantl olmasdr.

208

Modl 7:

Private Sub btnGiris_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGiris.Click Dim girilen As String = txtKelime.Text If Not Kontrol(kelime, girilen) Then Dim neden As String neden = "Girilen kelime, ilk kelimenin son " neden &= OyunSeviyesi & " harfi ile balamyor" OyunuBitir(neden) ElseIf tekrar > 5 * OyunSeviyesi Then SeviyeAtla(OyunSeviyesi + 1) Else tekrar += 1 kelime = girilen SonrakiKelimeBilgi() Temizle() End If End Sub

Fonksiyonlar ve Yordamlar

209

Modl Sonu Sorular & Altrmalar

1. Sub ile Function arasndaki fark nedir? 2. Main yordam formlarn ve modllerin iinde nasl tanmlanr? Kendi Main yordamnz yazn. 3. Yordam ve fonksiyonlar uygulamalarda kod tekrarn nasl nler? 4. Yordam ve fonksiyonlarn snrsz parametre almasn salayan ParamArrays neden sonda tanmlanr? 5. Farkl kltrlerde tarih, zaman, metin deerlerini gstermek iin gerekli olan snflar ve fonksiyonlar nelerdir? 6. Yordam ya da fonksiyon iinden yordam ya da fonksiyonlar arlabilir mi? Uygulamasn yazn. 7. Bir yordam ya da fonksiyon kendisini (Recursive) arabilir mi? Uygulamasn yazn.

Modl 8: Veri Tipleri zerine leri Bak

.NET iinde tanmlanabilen veri tipleri temel (primitive) veri tipleri ya da kullancnn tanmlad veri tipleridir. Temel veri tipleri .NET iinde tanmlanm ve baz nemli zellikleri olan tiplerdir. rnein 32 bitlik bir sayy temsil eden Int32 deer tipi temel bir tiptir. Bu temel tipin zerinde aritmetik ilemler yaplabilir. Structure olarak tanmlanan kullanc veri tipleri zerinde aritmetik ilemler yaplamaz. Temel ve kullanc tanml veri tipleri, deer tipi ve referans tipi olarak ikiye ayrlr. Structure bir deer tipi, Class ise bir referans tipidir. Deer tipleri bellein stack blgesinde, referans tipleri heap blgesinde depolanr. Deer tiplerinin oluturulmas ve silinmesi, sadece deerleri zerinde ilem yapld iin kolaydr. Deer tipinin mr bittii zaman stack yapsndan hemen kaldrlr. Referans tiplerinin oluturulmas ve yok edilmesi ekstra bir performans gerektirir. Ancak iki veri tipinin de birbirlerine gre avantajlar vardr. Bu modl tamamlandktan sonra; Temel ve kullanc tanml deer tiplerini tanyacak, Temel ve kullanc tanml referans tiplerini tanyacak, Veri tiplerinin bellei kullanm renecek,
ByVal ile ByRef arasndaki fark renecek,

Referans ve deer tiplerinin nerede kullanlacan reneceksiniz.

214

Modl 8:

Konu 1: Deer Tipleri

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

Built-In Deer Tipleri


Built-In deer tipleri olarak bahsedilecek temel tipler, .NET iinde tanml olan veri tipleridir. Bu deer tipleri saylar, ondalk saylar, Boolean deerlerini, tarih ve zaman deerlerini ve karakterleri temsil eden yaplardr. Bu tipler, tm .NET dilleri tarafndan kullanlabilir ekilde tanmlanr. Ancak Visual Basic dilinde bu deer tiplerine belirli isimlerle ulalr (Tablo 8.1).
Tablo 8.1: Built-In Deer Tipleri
Visual Basic .NET Framework Deer

Boolean Byte Char Date Decimal Double Integer

System.Boolean System.Byte System.Char System.DateTime System.Decimal System.Double System.Int32

True / False
8 bit uzunluunda say 16 bit uzunluunda Unicode karakter 64 bit uzunluunda tarih zaman deeri 128 bit uzunluunda say 64 bit uzunluunda kayan tipte say 32 bit uzunluunda say

Veri Tipleri zerine leri Bak

215

Tablo 8.1: Built-In Deer Tipleri


Visual Basic .NET Framework Deer 64 bit uzunluunda say 16 bit uzunluunda say 32 bit uzunluunda kayan tipte say

Long Short Single

System.Int64 System.Int16 System.Single

' Visual Basic tanm deer tipi Dim sayi As Short = 10 ' .NET Framework tanm deer tipi Dim sayi2 As Int32 = 10

Kullanc Tanml Deer Tipleri


Uygulamalarda ou zaman Built-in deer tiplerinin salamad zel veri tiplerine ihtiya duyulur. rnein bir gen tipi, kenarlar temsil eden tane say tutan bir deer tipi olarak oluturulabilir. Kullanc tanml deer tipleri Visual Basic .NET dilinde Structure ile oluturulur.
Structure Ucgen Dim kenar1 As Integer Dim kenar2 As Integer Dim kenar3 As Integer Public Sub New(ByVal kenar_1 As Integer, ByVal kenar_2 As Integer, ByVal kenar_3 As Integer) Me.kenar1 = kenar_1 Me.kenar2 = kenar_2 Me.kenar3 = kenar_3 End Sub End Structure Structure tiplerinde en az bir veri tipi tanml olmas gerekir. Structure tiplerinde bo parametreli constructor tanmlanamaz. Deer

tipleri tanmlandklarnda bu constructor ile oluturulur. Ancak bir veya daha fazla parametre alan constructor metotlar kullanlabilir.
Structure veri tipleri Class yapsna benzer, ancak deer tipi olduklar iin oluturulmas ve yok edilmesi daha kolaydr.

216

Modl 8:

Konu 2: Referans Tipleri

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

Built-In Referans Tipleri


.NET iinde tanml olan Class ve Array yaplar Object snfndan tretilmitir. Object snf .NET iinde tanml bir Built-In referans tipidir. Deikenler tanmlandklar srada tipleri belirtilmezse Object tipinde oluturulur. Kullanc tarafndan oluturulan diziler, bir Array snfndan tretilir. Bu snf, diziler zerinde ilemleri kolaylatracak birok zellik ve metot tanmlar. rnein Length zellii, dizinin toplam eleman saysn verir, Sort metodu ise dizideki elemanlarn sralanmas ilemini yapar. Dolaysyla Array snf, diziler iin Built-In referans tipi salar.
' Parametre olarak verilen dizinin balang adresidir. ' Dolaysyla, bu adres blgesinde tanml ' deerlere ulalabilir.

Veri Tipleri zerine leri Bak

217

Sub Goruntule(ByVal dizi() As Integer) For i As Integer = 0 To dizi.Length - 1 Label1.Text &= dizi(i) Next End Sub

Kullanc Tanml Referans Tipleri


.NET iinde tanml snflar kullanlabildii gibi, birok nesne ynelimli programlama dilinde kullanclar kendi snflarn da oluturabilirler. .NET Frameworkte, kullanclarn oluturduu bu snflar Object snfndan tretilir. Dolaysyla bu snflar kullanc tanml referans tipleridir.
' Kullanc tanml referans tipi Public Class Class1 Public Deger As Integer End Class Sub Test() Dim sinif As New Class1 sinif.Deger = 10 Dim sinif2 As Class1 ' Sinif deikeninin tuttuu adres bilgisi ' dier deikene aktarlr. Dolaysyla Sinif2 ' deikeni de bellekte ayn yeri temsil eder. sinif2 = sinif ' Sinif deikenin tuttuu adres blgesindeki ' deer deitirilir. sinif.Deger = 15 ' Sinif2 deikeni de ayn adresi gsterdii iin ' sonu 15 olur. MsgBox(sinif2.Deger) End Sub

218

Modl 8:

Konu 3: Organizasyon Yapsn nceleme

Structure ve Class nesnelerini olutururken, bu nesnelerin bilgilerini tutmak in bellek alannda yer alr. Alan yer iin, Structure veya Class iindeki veri tiplerinin boyutu kadar kaynak gerekir. Structure bir veri tipi olduu iin, tanmland anda veya parametre geilirken bellein stack alannda oluturulur. Buna karn, Class nesnesi referans tipi olduu iin, ancak New anahtar kelimesi ile tanmland zaman bellein heap alannda oluturulur. Bu iki yapnn, deiik kullanm alanlarnda birbirlerine gre avantajlar vardr.

Veri Tipleri zerine leri Bak

219

Structure Organizasyon Yaps ve Bellein ncelenmesi

Structure veri tipi, deer tipi olduu iin, tanmland anda bellekte stack

blmnde oluturulur. Bellekte ayrlan yer, Structure iinde tanml olan Built-In veri tiplerinin toplam boyutu kadardr. Visual Basic .NET dilinde Structure veri tipleri New anahtar kelimesiyle de oluturulabilir. Ancak bu durumda constructor metotlar parametre alacak ekilde tanmlanmaldr. Varsaylan parametresiz constructor metotlar CLR tarafndan ilenir. Dikkat edilmesi gereken bir durum da, New ile oluturulan deikenlerin yine bir deer tipi olmas ve stack alannda tutulmasdr.
NOT Snflardan nesne olutururken New anahtar kelimesi kullanlr, ancak bu nesneler heap alannda tutulur.

Public Structure Ogrenci Public adi As String Public soyadi As String Public Sub New(ByVal isim As String, ByVal soyisim As String) Me.adi = isim Me.soyadi = soyisim End Sub End Structure Sub Test()

220 ' 1 - renci deeri tanmland srada ' stack alannda yer ayrlr Dim Ali As Ogrenci ' 2 - New ile tanmlanan deikenler de stack ' alannda oluturulur.

Modl 8:

' Fark, bu deikenin balang deeri almasdr. Dim Veli As New Ogrenci("Veli", "Mehmet") ' 3 - Parametre olarak sipari nesnesinin ' adresi verilir Goruntule(Veli) End Sub Sub Goruntule(ByVal ogr As Ogrenci) MsgBox(ogr.adi & " " & ogr.soyadi) End Sub

1. Ali deikeni tanmlanrken Stack yaps

Deiken Ali.soyadi Deer = "" Deiken Ali.adi Deer = ""

Ali Ogrenci

Veri Tipleri zerine leri Bak

221

2. Veli deikeni tanmlanrken Stack yaps

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

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

Ali Ogrenci

Bu deikenler oluturulduktan sonra, bir yordama parametre olarak verildiklerinde, tm deerleri kopyalanr. Deer tipindeki deikenler, atama ilemlerinde olduklar gibi kopyalanr. 3. Goruntule yordam arld zaman Stack yaps

Deiken ogr.soyadi Deer = "Mehmet" Deiken ogr.adi Deer = "Veli"

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

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

Ali Ogrenci Test isimli yordamdan klnca, bu deikenler oluturulduklar srayla stack

yapsndan kaldrlr.

222

Modl 8:

Class Organizasyon Yaps ve Bellein ncelenmesi

Classlardan (Snf) nesneler oluturulduklar zaman bu nesnelerin deerleri heap blgesinde tutulur. Ancak bu nesneleri gsteren bir adres tutucusu oluturulur ve bu adresin deeri de stack alannda depolanr. Public Class Siparis Public Tarih As Date Public AliciIsmi As String Public Urun As String Public Sub New() End Sub Public Sub New(ByVal Tarih As Date, ByVal Isim As String, ByVal Urun As String) Me.Tarih = Tarih Me.AliciIsmi = Isim Me.Urun = Urun End Sub End Class

Sub Test() ' 1 - Sipari referans oluturulur

Veri Tipleri zerine leri Bak

223

Dim ilkSiparis As Siparis ' 2 - Yeni bir nesne oluturulup,adresi ' bu referansa aktarlr ilkSiparis = New Siparis(Now, "Enis Gnesen", "Visual Studio.NET 2003") ' 3 - Yeni bir nesne daha oluturulur ve adresi ' deikene aktarlr ilkSiparis = New Siparis(Now.AddYears(-1), "Enis Gnesen", "Visual Studio.NET 2002") ' 4 - Yeni bir referans ve nesne oluturulur Dim ikinciSiparis As New Siparis ' 5 - ki deikenin ayn bellek alann gstermesi ' salanr ilkSiparis = ikinciSiparis ' 6 - Bu alandaki rn ismi deitirilir ilkSiparis.Urun = "BilgeAdam Yazlm Uzmanl" ' 7 - Parametre olarak sipari nesnesinin ' adresi verilir Goruntule(ikinciSiparis) End Sub Sub Goruntule(ByVal parametreSiparis As Siparis) MsgBox(parametreSiparis.Urun) End Sub

1. ilkSiparis tanmlanrken Stack alan

Deer = 0x00000000 (Bellekte bo bir alan gsterir)

lkSiparis

Heap alan
Nesne Adres Bilgisi

224

Modl 8:

2. ilkSiparis oluturulurken Stack alan

Deer = 0x00000012

ilkSiparis

Heap alan
Nesne Adres Bilgisi

Siparis
Tarih = 10.05.2005 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2003

0x00000012

3. ilkSiparis referansna baka bir nesne verilirken Stack alan

Deer = 0x00000056 (Gsterdii adres deeri deiir)

ilkSiparis

Heap alan
Nesne Adres Bilgisi

Siparis
Tarih = 10.05.2004 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2002

0x00000056

Siparis
Tarih = 10.05.2005 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2003

0x00000012
(Bu adres alanna artk hibir referans ulamyor)

Veri Tipleri zerine leri Bak

225

4. ikinciSiparis oluturulurken Stack alan

Deer = 0x00000088

ikinciSiparis
Deer = 0x00000056

ilkSiparis

Heap alan
Nesne Adres Bilgisi

Siparis
Tarih = AliciIsmi = Urun =

0x00000088

Siparis
Tarih = 10.05.2004 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2002

0x00000056

Siparis
Tarih = 10.05.2005 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2003

0x00000012

5. ikinciSiparisin adres bilgisi ilkSiparise atanrken Stack alan

Deer = 0x00000088

ikinciSiparis
Deer = 0x00000088 (Gsterdii adres ikinci sipari referans ile ayn olur)

ilkSiparis

226

Modl 8:

Heap alan
Nesne Adres Bilgisi

Siparis
Tarih = AliciIsmi = Urun =

0x00000088

Siparis
Tarih = 10.05.2004 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2002 Siparis Tarih = 10.05.2005 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2003

0x00000056
(Bu nesneyi gsteren referans kalmamtr)

0x00000012

6. ilkSiparisin gsterdii nesnenin rn ismi deitirilirken Stack alan

Deer = 0x00000088

ikinciSiparis
Deer = 0x00000088

ilkSiparis

Veri Tipleri zerine leri Bak

227

Heap alan
Nesne Adres Bilgisi

Siparis
Tarih = AliciIsmi = Urun = BilgeAdam Yazlm

0x00000088

Uzmanl Siparis
Tarih = 10.05.2004 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2002

0x00000056
(Garbage Collector, referanslarn kaybetmi nesneleri bellekten siler)

Siparis
Tarih = 10.05.2005 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2003

0x00000012
(Garbage Collector, referanslarn kaybetmi nesneleri bellekten siler)

7. ikinciSiparisin gsterdii deer Goruntule yordam ile gsterilirken Stack alan

Deer = 0x00000088

parametreSiparis
Deer = 0x00000088

ikinciSiparis
Deer = 0x00000088

ilkSiparis

Heap alan
Nesne Adres Bilgisi

Siparis
Tarih = AliciIsmi = Urun = BilgeAdam Yazlm

0x00000088

Uzmanl

228

Modl 8:

Sonu olarak gsterilen deer, heap alannda 0x00000088 adres numaral nesnenin rn ismi olur. Parametre olarak verilen nesneler heap alannda tekrar oluturulmazlar. Referans olarak geen deikenler aslnda deer tipleridir. Ancak nesnenin tm deil, sadece adres deerinin kopyas oluturulur.

Veri Tipleri zerine leri Bak

229

ByVal ve ByRef ncelemesi

Fonksiyon ve yordamlara parametre verilirken, varsaylan durumda deikenlerin deerleri verilir. Parametre olarak verilen deikenler zerinde deiiklik yaplmas iin, bu parametrelerin bulunduu adres bilgilerine ihtiya vardr. Referans tipindeki deerler parametre olarak geildiklerinde, referanslar verilir. Ancak deer tipleri parametre olarak verildiklerinde bu deerler kopyalanr ve asl deikenin tuttuu deere ulalamaz. Bu karklklar zmek iin, yordamlarda parametreler ByVal ve ByRef olarak belirtilir.
ByVal, parametre olarak verilecek deikenin deeri ile ilem yaplacan

belirtir. Dolaysyla bu parametrenin deeri deitirilemez.


' Deiecek olan kelime ByVal olarak verilmitir Sub Ekle(ByVal Kelime As String, ByVal eklenecek As String) Kelime = Kelime.Insert(0, eklenecek) End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mesaj As String = "Hello" Ekle(mesaj, " World") MsgBox(mesaj) End Sub

230

Modl 8:

mesaj deikenin deeri, yordama deer olarak verilmitir. Dolaysyla yordamn zerinde alt deer, mesajn bir kopyasdr. Bellek alannda fiziksel olarak farkl yerlerde dururular. Yani deiiklik yaplan deer, sadece bir kopyadr. Yordam sonlandnda kopya olarak oluturulan deer silinecek ve asl deer deimemi olarak kalacaktr. Bu durumda parametre olarak mesaj deikeninin adresi verilmelidir. Dolaysyla yordamdaki parametrenin ByRef olarak tanmlanmas gerekir. Sub Ekle(ByRef Kelime As String, ByVal eklenecek As String) Kelime = Kelime.Insert(0, eklenecek) End Sub

Parametre olarak referans tipinde bir deiken verilirse ByVal veya ByRef arasnda bir fark olmaz. Referans tipleri, nesnelerin bulunduu heap alanlarnn adresini tutar. Dolaysyla ByVal olarak tanmlanan parametreye referans tipinin deeri (adres bilgisi) kopyalanr. Bu kopya zerinden ayn adres alannda deiiklik yaplr.
' Parametre ByVal ile tanml olsa dahi, deitirir ' dizinin belirtilen index'teki deeri, ' adres olarak eriilir. Sub ElemanDegistir(ByVal dizi() As Integer, ByVal index As Integer, ByVal yeniDeger As Integer) dizi(index) = yeniDeger End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sayilar(2) As Integer sayilar(0) = 111 sayilar(1) = 222 sayilar(2) = 333 ElemanDegistir(sayilar, 1, 1000000) MsgBox(sayilar(1)) ' Sonu = 1000000 End Sub

Veri Tipleri zerine leri Bak

231

Modl Sonu Sorular & Altrmalar

1. Deer deikenleri ve referans deikenleri arasndaki fark aklayn. Her iki deiken tipinin de yer ald parametreleri ieren bir yordam yazn. Deikenlerin verilerinin deiip deimediinin gzlemleyin. 2. Structure yapsn aklayn. Kompleks bir veri tipini Stucture yapsnda kodlayn. Yazlan veri tipinin uzunluunu hesaplayn.

Modl 9: Windows Programlama

Visual Basic.NET ile Windows Tabanl Programlama adl Modl 4te Windows formlarna ve kontrollerine giri yaplmt. .NET Frameworkte, Windows uygulamalarnn grnm ve kullanm zenginliini artrmak iin birok kontrol vardr. Visual Studio ile varsaylan durumda gelen kontrollerin dnda birok kontrol de Windows uygulamalarna eklenebilir. Bu modl tamamlandktan sonra;
ListBox, TreeView ve ComboBox gibi listeleme kontrollerini tanyacak, PictureBox ve ImageList gibi resim kontrollerini tanyacak, TabControl, Panel, HScrollBar ve VScrollBar gibi dzenleme kont-

rollerini tanyacak,
DateTimePicker ve MonthCalendar gibi zaman ve tarih kontrollerini

tanyacak, alma annda forma yeni kontroller oluturup ekleyebileceksiniz.

236

Modl 9:

Konu 1: Formlar ve Windows Forms Kontrolleri

Windows uygulamalarnn temelini Windows Form nesneleri oluturur. Windows kontrolleri, kullancya zengin uygulamalar gelitirmek iin kolaylk salar. Bu kontroller, bir uygulamann tm ihtiyacn karlayacak ekilde tasarlanmtr. Listeleme kontrolleri, kullancya bir dizi eyi deiik biimlerde listelemeyi salar. Resim ve dzenleme kontrollerinin, forma grsel zenginlik salayan birok zellii vardr. Zaman ve tarih kontrollerinin yaps, zaman ve tarih seme ilemlerini kolaylatrr. Bu Windows kontrolleri, tasarm annda eklenebilecei gibi, alma annda da eklenebilir.

Windows Programlama

237

Form Nesnesi

Windows uygulamalar, kullanc ile iletiimi Form nesneleri ile salar. Formlar, grnm zellikleri, pencere stili deitirilerek ve zerine kontroller eklenerek zelletirilir. Ayrca birden ok Form nesnesi kullanlarak, uygulamalar zenginletirilir.

Birden Fazla Form Oluturmak


Windows uygulamalar birden fazla Form nesnesinden olutuu iin, projelere form eklemek her zaman gereklidir. Bir Windows projesine yeni bir form eklemek iin aadaki admlar izleyin: 1. Solution Explorer panelinden projeyi sa tklayarak ya da Project mensnden Add Windows Form komutunu sein. 2. Alan menden Windows Form esinin seili olduunu kontrol edin ve bir isim vererek formu ekleyin. Balang formlarnn ayarlanmasnn yan sra, uygulamada bir formdan baka bir formun almas ve ayarlanmas sk karlalan bir durumdur. Form nesneleri, System.Windows.Forms ad uzay iinde bulunan Form snfndan tretilmi snflardr. Dolaysyla yeni bir form oluturmak iin, istenen Form snfndan bir nesne oluturulmas yeterlidir.
Dim yeniForm As New frmYeni

Yeni oluturulan formlarn gsterilmesi, formun Show ve ShowDialog metotlar ile yaplr. ShowDialog metodu, form gsterildikten sonra, kapanana kadar di-

238

Modl 9:

er formlara eriimi engeller. ShowDialog metodundan sonra yazlan kodlar, form kapandktan sonra altrlr.
Dim yeniForm As New frmYeni yeniForm.ShowDialog() ' Bu kodlar yeniForm kapandktan sonra altrlr MsgBox("Form kapand...") ShowDialog ile gsterilen formlar, hangi durum ile kapandklarn belirten bir DialogResult sonucu dndrrler. Bu kullanm MsgBox hazr fonksiyonu ile

ayndr.
Dim frm As New frmSatis If frm.ShowDialog = DialogResult.Yes Then ' Verileri kaydet End If

Formun hangi diyalog sonucu ile dneceini, zerindeki Button kontrollerinin DialogResult zellii ile belirlenir. Eer dmenin bu zellii Yes olarak ayarlanmsa, bu dme tklanp form kapatld zaman, DialogResult.Yes deerini dndrr. Windows uygulamalarnn balang nesnesi Sub Main olarak seilebilir. Bu durumda, uyguluma yklenirken herhangi bir form yerine Main yordam aranr. Bu yordam ayr bir modl iine yazlabilir, ancak bu modldeki Main yordam sonland zaman uygulama da sonlanr. Dolaysyla, bu yordamdan alan formlarn ShowDialog metodu ile almas gerekir. rnein, bir Windows uygulamasnn kullancnn girdii verilere gre deiik formlar amas iin, balang nesnesinin Sub Main olarak ayarlanmas gerekir. Bu yordamda, kullancnn istedii form dinamik olarak yklenir.
Module Giris Sub Main() Dim grup, parola As String grup = InputBox("Kullanc grubu:") parola = InputBox(grup & " grubuna giri iin parola girin:") ' Gruplarn parolas kontrol edilir ' ve ilgili grubun formu alr. ' Eer parola veya grup ismi yanl girilirse ' hata formu yklenir. Select Case grup.ToUpper Case "SATI" If parola.ToUpper <> "SATS_PAROLA" Then

Windows Programlama

239 HataFormuYukle("Sat departman

parolas yanl!") Else Dim satisDepartmani As New frmSatis satisDepartmani.ShowDialog() End If Case "YNETM" If parola.ToUpper <> "YONETM_PAROLA" Then HataFormuYukle("Ynetim departman parolas yanl!") Else Dim yonetimDepartmani As New frmYonetim yonetimDepartmani.ShowDialog() End If Case Else HataFormuYukle(grup & " isminde bir grup bulunamad") End Select End Sub ' Hata formu, verilen parametredeki mesaj ' gsterecek ekilde ayarlanr ve yklenir. Sub HataFormuYukle(ByVal mesaj As String) Dim hataFormu As New frmHata hataFormu.lblHataMesaji.Text = mesaj hataFormu.ShowDialog() End Sub End Module

Formlarn zerlerindeki kontroller, form snflarnn birer yesi olduklar ve Friend eriim seviyesinde tanmlandklar iin, ayn projeden ulalabilirler. Bylece, ayn Windows projesi iinde alan formlar almadan nce kontrollerinin zellikleri deitirilebilir. rnein, hata formu gsterilmeden nce, zerindeki Label kontrolnn Text zellii ilgili hata mesajn gsterecek ekilde ayarlanabilir.

240

Modl 9:

Form zellikleri
TABLO 9.1: Form zellikleri
zellik Deer Tipi Aklama Form zerinde Enter tuuna basld zaman tklanacak

AcceptButton

Button

Button kontrol CancelButton Button


Form zerinde Esc tuuna basld zaman tklanacak Button kontrol

Opacity MaximizeBox MinimizeBox ControlBox

Double Boolean Boolean Boolean

Formun effaflk oran (0 -1 aras) Maximize dmesinin grnrl Minimize dmesinin grnrl Close, Maximize ve Minimize dmelerinin tmnn grnrl Form ald zaman, ekran zerindeki konumu Formun tm pencerelerin zerinde gzkmesi Formun kenar stili Formun alabilecei maksimum byklk Formun alabilecei minimum byklk

StartPosition TopMost FormBorderStyle MaximumSize MinimumSize

FormStartPosition Boolean FormBorderStyle Size Size

Form Olaylar
TABLO 9.2: Form Olaylar
Olay Aklama Form zerine tkland zaman gerekleir Form kapanmadan hemen nce gerekleir Form kapandktan sonra gerekleir Form yklenirken gerekleir Form zerindeyken bir tuun baslmas ile gerekleir Baslan tuun kaldrlmas ile gerekleir

Click Closing Closed Load KeyDown KeyUp

Windows Programlama

241

Form Metotlar
TABLO 9.3: Form Metotlar
Metot Aklama

Hide Close Show ShowDialog

Visible zelliini False yaparak formu gizler


Formu kapatr. Eer form balang formuysa uygulama sonlanr Formu gsterir. Hide ile gizlenmise, Visible zellii True yaplr. Formu iletiim kutusu olarak gsterir.

rnek: Bir Windows formunun kapanmasn ynetmek iin, o formun Closing olayna ve Close metoduna ihtiya vardr. Kapanmasn yavalatmak iin bir Timer kontrol kullanlr ve formun effafl yavaa azaltlr.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "Hogeldiniz... " & TimeOfDay End Sub Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing ' Kapanma olay gereklemeden nce iptal edilir e.Cancel = True Timer1.Start() End Sub Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown ' Shift+Ctrl+F3 tularna basldnda uygulama kapanr If e.Shift And e.Control And e.KeyCode = Keys.F3 Then Me.Close() End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' Form grnmez hale gelince uygulama kapanr If Me.Opacity = 0 Then Application.Exit() Else Me.Opacity -= 0.1 End If End Sub

242

Modl 9:

Label

Label kontrol form zerinde kullancya bilgi vermek amacyla kullanlan

etikettir.

Label zellikleri
TABLO 9.4: Label zellikleri
zellik Deer Tipi Aklama Yaznn etiket zerindeki pozisyonu belirler. Kontroln kenar stilidir. FixedSingle deeri, kontroln kenar izgilerini gsterir. Fixed3D deeri, kenarlarn boyutlu olmasn salar.

TextAlign BorderStyle

ContentAlignment BorderStyle

Image ImageAlign RightToLeft

Drawing.Image ContentAlignment RightToLeft

Etiket zerinde grntlenmek istenen resmi tutar. Etiket zerindeki resmin nerede duracan belirler. Etiket zerindeki yaznn ynn belirler. Eer Yes deerini alrsa, yazlar sadan sola gsterilir

Label1.BorderStyle = BorderStyle.Fixed3D ' Visual Studio klasr altndaki simgeler kullanlabilir Label1.Image = Image.FromFile("C:\Program Files\ _

Windows Programlama

243

Microsoft Visual Studio .NET 2003\Common7\Graphics\icons\Flags\FLGTURK.ICO") Label1.ImageAlign = ContentAlignment.MiddleRight Label1.RightToLeft = RightToLeft.Yes Label1.Text = "Trke"

RESM 9.1: Label kontrol rnei.


NOT Resmin bulunduu yer kontroln sa tarafnda bulunacak ekilde ayarlanmasna ramen, sol tarafta gzkr. Bu durum, RightToLeft zelliinin Yes olarak atanmasndan kaynaklanr.

244

Modl 9:

TextBox

Metin kutular, kullancdan bilgi almak iin kullanlr.

TextBox zellikleri
TABLO 9.4: TextBox zellikleri
zellik Deer Tipi Aklama Metin kutusuna birden fazla satrda deer girilebilmesini salar. False durumunda ise, metin kutusunun ykseklii deitirilemez

MultiLine

Boolean

ScrollBars

ScrollBars

Metin kutusunda kaydrma ubuklarnn grnmesini kontrol eder. Varsaylan durumda kaydrma ubuu grntlenmez, ancak Horizontal, Vertical kaydrma ubuklar ya da ikisi birden gsterilebilir.

PasswordChar

Char

Metin kutusuna parola girilecekse, girilen karakterlerin hangi karakter olarak grneceini belirler. Metin kutusuna girilen deerlerin, satr sonlandnda bir alt satra gemesini belirtir. Eer MultiLine zellii False ise, alt satrlar tanml olmayaca iin bu zelliin bir etkisi grlmez.

WordWrap

Boolean

MaxLength

Integer

Metin kutusunun alabilecei maksimum karakter saysn belirtir.

Windows Programlama

245

TABLO 9.4: TextBox zellikleri


zellik Deer Tipi Aklama Metin kutusunun yazmaya kar korumal olduunu belirtir. Metin kutusuna karakterler girilirken byk veya kk harfe evrilmesini salar. Upper deeri byk, Lower deeri kk harfe evrimi salar.

ReadOnly CharacterCasing

Boolean CharacterCasing

TextBox Olaylar
TABLO 9.5: TextBox Olaylar
Olay Aklama Metin kutusundaki yaz deitii zaman gerekleir.

TextChanged

TextBox Metotlar
TABLO 9.6: TextBox Metotlar
Metot Aklama Seilen karakterleri siler, ancak hafzada tutar. Seilen karakterleri kopyalar. Hafzaya alnan karakterleri metin kutusuna yaptrr. Metin kutundaki yazlar temizler. Metin kutusundaki tm yazy seer.

Cut Copy Paste Clear SelectAll

rnek: Form zerinde girilen deerlere gre tek saylarn hesaplanmas ve grntlenmesi ilemi iin TextBox kontrolnn birok olayndan ve zelliinden yararlanlr.

RESM 9.2: TextBox kontrol rnei.

246

Modl 9:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Form yklenirken kontrollerin ayarlanmas: txtAltSayi.MaxLength = 2 txtUstSayi.MaxLength = 4 txtSayilar.Multiline = True txtSayilar.ScrollBars = ScrollBars.Vertical txtClipBoard.ReadOnly = True txtClipBoard.Multiline = True End Sub ' Bu olay hem txtUstSayi hem de txtAltSayi kontrolnn ' TextChanged olaynda gerekleir. ' Handles ifadesinden sonra kontroller virglle ayrlmtr Private Sub txtUstSayi_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtUstSayi.TextChanged, txtAltSayi.TextChanged TekSayiYazdir() End Sub Function Kontrol() As Boolean ' Metin kutularna say girildiyse If IsNumeric(txtUstSayi.Text) And IsNumeric(txtAltSayi.Text) Then ' ve alt limit 0'dan byk, ve st limitten kkse Dim ust As Integer = txtUstSayi.Text Dim alt As Integer = txtAltSayi.Text If ust > alt And alt > 0 Then ' giri doru yaplmtr Return True End If End If ' Kod buraya gelirse, giri yanl yaplmtr Return False End Function Sub TekSayiYazdir() If Not Kontrol() Then Exit Sub txtSayilar.Clear() Dim alt As Integer = txtAltSayi.Text Dim ust As Integer = txtUstSayi.Text

Windows Programlama

247

' Saylar metin kutusuna, tek saylarn yazdrlmas For i As Integer = alt To ust If i Mod 2 = 1 Then txtSayilar.Text &= i & vbCrLf End If Next End Sub ' Saylarn txtClipboard isimli metin kutusuna kaydedilmesi: Private Sub btnKaydet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKaydet.Click txtClipBoard.Text = txtSayilar.Text ' Saylarn kopyalanmas iin, nce seilmesi gerekir txtSayilar.SelectAll() txtSayilar.Cut() End Sub ' Cut yordam arldktan sonra veriler kopyalanr. ' Paste ile bu kopyalanan veriler geri yazdrlr. Private Sub btnYukle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnYukle.Click txtSayilar.Clear() txtSayilar.Paste() End Sub

248

Modl 9:

Button

Windows uygulamalarnda, form zerinde komut dmeleri olarak kullanlr.

Button zellikleri
TABLO 9.7: Button zellikleri
zellik Deer Tipi Aklama Ait olduu form ShowDialog metodu ile arld zaman, dn deerini belirler Dme tklandnda ve dmenin zerine gelindiinde grnen format belirler

DialogResult FlatStyle

DialogResult FlatStyle

Button Olaylar
TABLO 9.8: Button Olaylar
Olay Aklama Dme zerine tkland zaman gerekleir

Click

rnek: Bir formun zerindeki dmelerin DialogResult zellikleri deitirilerek, zel bir mesaj kutusu tasarlanabilir.

Windows Programlama

249

RESM 9.3: Button kontrol rnei. Private Sub btnIslemYap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIslemYap.Click Dim onay As New OnayFormu With onay.btnHayir .DialogResult = DialogResult.No .FlatStyle = FlatStyle.Flat End With With onay.btnEvet .DialogResult = DialogResult.Yes .FlatStyle = FlatStyle.Flat End With If onay.ShowDialog = DialogResult.Yes Then ' Kayt ilemleri... End If End Sub

250

Modl 9:

CheckBox

Kullancnn birok seenei birden semesi iin kullanlr.

CheckBox zellikleri
TABLO 9.9: CheckBox zellikleri
zellik Deer Tipi Aklama Kontroln seili olup olmadn belirler. Seme kutusunun ve zerinde yazan metnin birbirlerine gre konumlarn belirler. Kontroln seme kutusu ya da dme eklinde olmasn belirler. Seili olup olmamas dnda,

Checked CheckAlign

Boolean ContentAlignment

Appearance ThreeState

Appearance Boolean

Intermediate durumu da eklenir.


Eer kontrol Intermediate durumundaysa Checked zellii True olur.

AutoChecked

Boolean

Kontroln tkland zaman seili duruma geileceini belirtir. Eer bu zellik False ise, kontroln durumunu deitirmek iin, Click olaynda,

Checked zelliini gncellemek gerekir.

Windows Programlama

251

CheckBox Olaylar
TABLO 9.10: CheckBox Olaylar
Olay Aklama Seme kutusunun durumu deitii zaman gerekleir.

CheckChanged

rnek: Bir GSM ebekesinden fatural hat alnda toplam tutar hesaplanrken, baz seenekler CheckBox kontrolleri ile sunulabilir.

RESM 9.4: CheckBox kontrol rnei. ' Form zerindeki tm seme kutularnn durumu ' deitii zaman, toplam fiyat tekrar hesaplanr Private Sub txtAcilisTutari_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAcilisTutari.TextChanged, cbKDV.CheckedChanged, cbOzelIletisim.CheckedChanged, cbOzelIletisimIlkFatura.CheckedChanged Dim toplam As Double = txtAcilisTutari.Text ' lk faturada 22 YTL al bedeli eklenir If cbOzelIletisimIlkFatura.Checked Then toplam += 22 End If ' KDV eklenir If cbKDV.Checked Then toplam *= 1.18 End If ' zel letiim vergisi eklenir If cbOzelIletisim.Checked Then toplam *= 1.25 End If txtToplam.Text = toplam End Sub

252

Modl 9:

RadioButton

RadioButton kontrolleri, kullancya sunulan seeneklerden sadece bir tanesi-

nin seilmesine izin verir. Form zerinde birden fazla RadioButton konulduunda, bu kontrollerin sadece bir tanesi seili olabilir. Fakat baz durumlarda, farkl seenek gruplar kullanlarak kullancnn birden fazla seim yapmas istenebilir. Bu durumda, baz seenekler GroupBox kontrol ile gruplanmaldr. Bu kontroln zellikleri ve olaylar CheckBox kontrol ile ayndr. Sadece bir seenek iaretlenebildii iin, kontrollerin yaplmas CheckBox kontrolne gre daha kolaydr.

GroupBox
Bu kontrol, kontrollerin mantksal bir dzende gruplanmas iin kullanlr. inde bulunan kontrollerin ileyilerinde bir farkllk grnmez. Bir grup RadioButton kontrolnn, dier RadioButton kontrollerinden etkilenmemesi iin kullanlr.

Panel
GroupBox kontrol gibi, kontrollerin belli bir dzende gzkmesini salamak

iin kullanlr. GroupBox kontrolnden fark olarak yatay ve dey kaydrma ubuklar bulunur, ancak panel zerinde balk yazs bulunmaz.

Windows Programlama

253

Panel zellikleri
TABLO 9. 11: Panel zellikleri
zellik Deer Tipi Aklama Panelde kaydrma ubuklarnn grnrln belirler

AutoScroll

Boolean

Paneller, seeneklere gre bir grup kontroln gizlenmesi veya grntlenmesi aamasnda etkili bir rol oynar. rnek: RadioButton, GroupBox ve Panel kontrolleri, BilgeAdam eitim anketi formunun tasarmnda kullanlabilir. Anket, bir eitimin rnleri hakknda yaplr. Anket bilgileri eitim ara gereleri ve eitim ierii zerinde ok iyiden ok ktye kadar bir deer verilmesiyle oluturulur. Sonu olarak elde edilen anket bilgileri kullancya gsterilerek onaylamas beklenir.

RESM 9.5: GroupBox, Panel ve RadioButton kontrolleri rnei.

Global deikenlerin oluturulmas:


' Ozet bilgilerinin tutulduu deiken Private AnketOzet As String ' Onaylama dmesinin aktif hale gelmesi iin ' tm oylamalarn yaplm olmas gerekir Private IcerikOyuSecildi, AracOyuSecildi As Boolean

254

Modl 9:

Formun yklenmesi srasnda kontroller zerinde yaplan ayarlar:


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Sistem ve yazlm seeneklerini tutan ' GroupBox kontrolleri gizlenir: grpSistem.Visible = False grpYazilim.Visible = False ' Anketleri tutan Panel kontrol gizlenir pnlAnket.Visible = False ' Onayla dmesi oylamadan nce pasif haldedir btnOnayla.Enabled = False End Sub

Eitimler seildiinde, ilgili alt seeneklerin grntlenmesi salanr. Alt seenekler, ayr GroupBox kontrollerinde tutulur.
Private Sub rbYazilim_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbYazilim.CheckedChanged, rbSistem.CheckedChanged ' GroupBox kontrollerini grnmleri, eitimlerin ' seili olmasyla doru orantldr. grpYazilim.Visible = rbYazilim.Checked grpSistem.Visible = rbSistem.Checked UrunTemizle() pnlAnket.Visible = False End Sub ' rnler balang deerlerine evrilir Sub UrunTemizle() rbMCSD.Checked = False rbMCSE.Checked = False rbSistemUzmanligi.Checked = False rbYazilimUzmanligi.Checked = False End Sub

Alt rnler seildiinde, anket paneli grntlenir ve panelin karlama mesajnda ilgili rnn ismi gsterilir.
Private Sub rbSistemUzmanligi_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSistemUzmanligi.CheckedChanged, rbYazilimUzmanligi.CheckedChanged, rbMCSD.CheckedChanged, rbMCSE.CheckedChanged

Windows Programlama

255

Dim panelMesaji As String ' Bu olay tetikleyen RadioButton kontrol alnr Dim basilan As RadioButton = sender lblKarsilamaMesaji.Text = basilan.Text & " iin anket girii:" pnlAnket.Visible = True End Sub

Anketlerde, ilgili konularda oylama yapld zaman, oylama dmesi aktif hale getirilir ve anket mesaj oluturulur.
' Eitim ierii iin verilen oy Private Sub rbCokIyi_Icerik_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbCokIyi_Icerik.CheckedChanged, rbCokKotu_Icerik.CheckedChanged, rbIyi_Icerik.CheckedChanged, rbYeterli_Icerik.CheckedChanged, rbKotu_Icerik.CheckedChanged IcerikOyuSecildi = True Dim basilan As RadioButton = sender AnketOzetiCikar("Eitim ierii: " & basilan.Text) End Sub ' Eitim ara gereleri iin verilen oy Private Sub rbCokIyi_Arac_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbCokIyi_Arac.CheckedChanged, rbCokKotu_Arac.CheckedChanged, rbIyi_Arac.CheckedChanged, rbYeterli_Arac.CheckedChanged, rbKotu_Arac.CheckedChanged AracOyuSecildi = True Dim basilan As RadioButton = sender AnketOzetiCikar("Eitim ara gereleri: " & basilan.Text) End Sub Sub AnketOzetiCikar(ByVal ozet As String) AnketOzet &= ozet & vbCrLf If IcerikOyuSecildi And AracOyuSecildi Then btnOnayla.Enabled = True

256 End If End Sub

Modl 9:

Anket bilgileri oluturulduktan sonra, onay dmesi aktif hale gelir. Bu dme tkland zaman kullancya girdii bilgiler mesaj kutusu ile gsterilir. Kullanc onayladktan sonra kayt ilemleri gerekleir.
Private Sub btnOnayla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOnayla.Click Dim mesaj As String mesaj = "Yaplan anket sonucu: " & vbCrLf & AnketOzet & vbCrLf mesaj &= "Bilgileriniz kaydedilecektir. Devam etmek istiyor musunuz?" If MsgBox(mesaj, MsgBoxStyle.YesNo, "Anket Sonucu") = MsgBoxResult.No Then Exit Sub Else ' Anket kayt ilemleri... End If End Sub

Windows Programlama

257

ListBox

Kullancya sunulan seeneklerin bir liste halinde grnmesini salar. Liste kutusundan istenen sayda e seilebilir.

ListBox zellikleri
TABLO 9.12: ListBox zellikleri
zellik Deer Tipi Aklama Liste kutusuna eklenen elerin tutulduu koleksiyon nesnesidir. Liste kutusundan seilen eyi alr. Liste kutusundan seilen eleri alr. Seilen eler dinamik bir dizide tutulur. Liste kutusundan seilen enin indisini alr. Liste kutusundan seilen elerin indislerini bir koleksiyon nesnesinde tutar. Listenin elerinin tutulduu veri kaynadr. Veri kayna bo geilirse

Items

ListBox.ObjectCollection

SelectedItem SelectedItems

Object SelectedObjectCollection

SelectedIndex SelectedIndices

Integer SelectedIndexCollection

DataSource

Object

Items koleksiyonuna eklenen eler grntlenir.

258 TABLO 9.12: ListBox zellikleri


zellik Deer Tipi Aklama

Modl 9:

DisplayMember

String

Veri kaynandan gelen elerin, kullancya gsterilecek zelliidir. Veri kaynandan gelen elerin, dn deerini belirleyen zelliidir. Seilen enin, liste kutusunun ValueMember ile belirtilen zelliidir.

ValueMember

String

SelectedValue

Object

SelectionMode

SelectionMode

Liste kutusundan ka tane e seilebileceini belirtir. None deeri 0, One deeri 1, MultiSimple ve MultiExtended deerleri birden fazla enin seilebileceini belirtir.

MultiColumn

Boolean

Liste kutusundaki elerin biden fazla kolonda grntlenmesini belirler.

ListBox Olaylar
TABLO 9.13: ListBox Olaylar
Olay Aklama Liste kutusunda bir e seildii zaman gerekleir.

SelectedIndexChanged

ListBox Metotlar
TABLO 9.14: ListBox Metotlar
Metot Aklama Parametre olarak verilen nesnenin liste kutusunda gsterilen yazsn dndrr. Parametre olarak verilen indisteki enin seili olup olmadn dndrr. Parametredeki String ifadesini liste kutusunda arayarak, bulduu ilk enin indisini dndrr

GetItemText GetSelected FindString

rnek: Tedarikiden alnacak ve stokta bulunan rnleri listelemek ve alm satm ilemi yapmak iin ListBox kontrolleri kullanlabilir.

Windows Programlama

259

RESM 9.6: ListBox kontrol rnei.

rnlerin tutulmas iin bir Structure oluturulur. Bu rn yapsnn ToString metodu tekrar yazlmtr. Bunun nedeni, ListBox kontrolnde listelenen nesnelerin grntlendii deerin ToString metodu arlarak belirlenmesidir. Dolaysyla liste kutularnda istenen formatta deerin gzkmesini salamak iin ToString metodunun tekrar yazlmas gerekir.
Structure Urun Public Ismi As String Public Fiyat As Double Public Sub New(ByVal UrunIsim As String, ByVal UrunFiyat As Double) Ismi = UrunIsim Fiyat = UrunFiyat End Sub Public Overrides Function ToString() As String Return String.Format("{0} - {1:C}", Ismi, Fiyat) End Function End Structure

Liste kutularnn zellikleri ayarlanr ve iine eleman doldurulur.


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load lbTedarikci.SelectionMode = SelectionMode.MultiExtended lbStok.SelectionMode = SelectionMode.MultiExtended UrunEkle() End Sub

260 Sub UrunEkle() Dim u As Urun u = New Urun("Kalem", 1.49) lbTedarikci.Items.Add(u) u = New Urun("Silgi", 0.39) lbTedarikci.Items.Add(u) u = New Urun("Defter", 4.99) lbTedarikci.Items.Add(u) u = New Urun("Cetvel", 1.99) lbTedarikci.Items.Add(u) u = New Urun("Pergel", 2.99) lbTedarikci.Items.Add(u) u = New Urun("Not Defteri", 3.79) lbTedarikci.Items.Add(u) End Sub

Modl 9:

Tedariki liste kutusundan, stok liste kutusuna e aktarlmas iin, seilen deerler nce liste kutusuna eklenir. Daha sonra bu seilen deerler, dier listede olmayaca iin tek tek kartlr.
Private Sub btnEkle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEkle.Click ' Tedarikiden alnan rnler stok listesine eklenir For Each item As Object In lbTedarikci.SelectedItems lbStok.Items.Add(item) Next ' Stok listesine eklenen tm rnler ' tedariki listesinden kartlr For Each item As Object In lbStok.Items lbTedarikci.Items.Remove(item) Next btnCikar.Enabled = True btnHesapla.Enabled = True End Sub

Stok listesinden e karmak iin, ekleme ilemine benzer kodlar altrlr.


Private Sub btnCikar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCikar.Click ' Tedarikiden alnan rnler stok listesine eklenir For Each item As Object In lbStok.SelectedItems

Windows Programlama

261

lbTedarikci.Items.Add(item) Next ' Stok listesine eklenen tm rnler ' tedariki listesinden kartlr For Each item As Object In lbTedarikci.Items lbStok.Items.Remove(item) Next If lbStok.Items.Count = 0 Then btnCikar.Enabled = False btnHesapla.Enabled = False End If End Sub

Stoktaki toplam fiyatn hesaplanmas ilemi, rnlerin fiyatlarnn alnp toplanmas ile gerekleir.
Private Sub btnHesapla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHesapla.Click Dim toplam As Double For i As Integer = 0 To lbStok.Items.Count - 1 Dim urun As Urun = lbStok.Items(i) toplam += urun.Fiyat Next lblToplam.Text = toplam End Sub

Stok listesindeki bir enin seildii durumda, bu enin fiyat grntlenir.


Private Sub lbStok_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbStok.SelectedIndexChanged Dim secilen As Urun secilen = lbStok.SelectedItem lblUrunFiyat.Text = String.Format("{0:C}", secilen.Fiyat) End Sub

262

Modl 9:

CheckedListBox

Liste kutusunun tm zellik, metot ve olaylarn alr ve listedeki elerin iaret kutusu ile gsterilmesini salar.

CheckedListBox zellikleri
TABLO 9.15: CheckedListBox zellikleri
zellik Deer Tipi Aklama Liste kutusunda iaretlenmi eleri tutar. Liste kutusunda iaretlenmi elerin indislerini tutar. Liste kutusunda e tkland zaman iaretlenmesini belirler.

CheckedItems CheckedIndices CheckOnClick

CheckedItemCollection CheckedIndexCollection Boolean

False ise ilk tklamada e


seilir, ikinci tklamada seme kutusu iaretlenir.

CheckedListBox Metotlar
TABLO 9.16: CheckedListBox Metotlar
Metot Aklama Parametre olarak verilen indisteki enin seili olup olmadn dndrr. lk parametrede verilen indisteki elemann seili olup olmadn, ikinci parametrede verilen Boolean deeri ile belirler.

GetItemSelected SetItemSelected

Windows Programlama

263

rnek: Kategori bana stoktaki toplam rnlerin gsterildii bir uygulamada, listelenen kategorileri semek iin bu kontrol uygun olur.

RESM 9.7: CheckedListBox kontrol rnei.

Listede bir e seildii zaman, seilen tm kategorilerin rn stok durumu alnr ve toplam rn says kullancya gsterilir.
Private Sub chlistKategoriler_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chlistKategoriler.SelectedIndexChanged Dim toplam As Integer ' Listedeki seilen elerin rn adeti toplanr. For i As Integer = 0 To chlistKategoriler.Items.Count 1 If chlistKategoriler.GetItemChecked(i) Then Dim secilen As Object secilen = chlistKategoriler.Items(i) ' Stok durumunu gsteren fonksiyon arlr toplam += StokDurumu(secilen.ToString) End If Next lblToplamUrun.Text = "Seilen kategorilerdeki toplam rn: " & toplam End Sub

' Kategoriye gre, stoktaki rnlerin belirlenmesi Function StokDurumu(ByVal kategori As String) As Integer Select Case kategori Case "Film" Return 1100

264 Case "Mzik" Return 982 Case "Bilgisayar" Return 302 Case "Kitap" Return 1222 Case Else Return 10 End Select End Function ' Ekleme ilemi Private Sub btnKategoriEkle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKategoriEkle.Click chlistKategoriler.Items.Add(txtKategoriAdi.Text) End Sub

Modl 9:

Windows Programlama

265

ComboBox

Liste kutusu ile ayn zelliklere sahiptir, ancak listelenen eler alan bir kutuda grntlenir ve listeden en fazla bir tane e seilebilir. Liste kutusuna gre bir baka farkll ise, istee bal olarak, kullancnn alan kutu zerinde deer girebilmesidir. Dolaysyla bir TextBox kontrol gibi de davranabilir.

ComboBox zellikleri
TABLO 9.17: ComboBox zellikleri
zellik Deer Tipi Aklama Kontroln listeleme stilini belirler.

DropDownStyle

ComboBoxStyle

Simple stili, listedeki sadece bir eyi grntler. DropDown stili, listenin tm
elemanlarn grntleyerek seilmelerini ve kullancnn deer girmesini saar. DropDownList kullancnn deer girmesini engeller.

DropDownWidth MaxDropDownItems MaxLength SelectedText

Integer Integer Integer String

ComboBox kontrolnn alan listesinin


geniliini belirler. Kontrole eklenebilecek maksimum e saysn belirler. Kullancnn girebilecei maksimum karakter saysn belirler. Seilen enin grntlenen yazsn belirler.

266

Modl 9:

rnek: Tarih ve say formatlarn, kullancnn seimine brakarak bir say veya tarih yazdrma ilemi ComboBox kontrolleri ile yaplabilir.

RESM 9.8: ComboBox kontrol rnei. ComboBox kontrollerinin zelliklerinin ayarlanmas ve format tiplerine

e eklenmesi.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cmbFormat.DropDownStyle = ComboBoxStyle.DropDownList cmbFormatString.DropDownStyle = ComboBoxStyle.DropDownList cmbFormat.Items.Add("Tarih Format") cmbFormat.Items.Add("Say Format") End Sub

Tarih ya da say formatlarndan biri seildii zaman, ikinci ComboBox kontrolne deiik format seenekleri eklenir.
Private Sub cmbFormat_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbFormat.SelectedIndexChanged cmbFormatString.Items.Clear() Select Case cmbFormat.SelectedIndex Case 0 cmbFormatString.Items.Add("dd - MM - yyyy") cmbFormatString.Items.Add("yyyy*MM*dd hh:mm") cmbFormatString.Items.Add("dddd dd.MM.yy hh:mm:ss") Case 1 cmbFormatString.Items.Add("C") cmbFormatString.Items.Add("P") cmbFormatString.Items.Add("N") End Select End Sub

Windows Programlama

267

Format seildikten sonra metin kutusuna girilen deer alnr ve ilgili formatta gsterilir.
Private Sub btnGoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGoster.Click Select Case cmbFormat.SelectedIndex Case 0 Dim d As Date = txtYazi.Text lblSonuc.Text = d.ToString(cmbFormatString.Text) Case 1 Dim i As Integer = txtYazi.Text lblSonuc.Text = i.ToString(cmbFormatString.Text) End Select End Sub

268

Modl 9:

NumericUpDown

Bu kontrol kullancnn, saysal bir deeri girmesini veya yukar aa oklar ile semesini salar.

NumericUpDown zellikleri
TABLO 9.18: NumericUpDown zellikleri
zellik Deer Tipi Aklama Saylarn onaltlk tabanda grntlenmesini belirler. Aa yukar oklar kullanldnda, saylarn artma ve azalma admlarn belirler. Kontrolde gsterilen saylarn alabilecei maksimum deeri belirler. Kontrolde gsterilen saylarn alabilecei minimum deeri belirler. Saylarn basamak ayracnn gsterilmesini belirler. Kontroln gsterdii say deerini belirler.

HexaDecimal Increment Maximum Minimum ThousandSeparators Value ReadOnly

Boolean Decimal Decimal Decimal Boolean Decimal Boolean

True deerini alrsa kullancnn giri yapmasn engeller.

Windows Programlama

269

NumericUpDown Olaylar
TABLO 9.19: NumericUpDown Olaylar
Olay Aklama Kontroln say deeri deitii zaman gerekleir

ValueChanged

NumericUpDown Metotlar
TABLO 9.20: NumericUpDown Olaylar
Metot Aklama Aa dmesine basar ve say deerini drr. Yukar dmesine basar ve say deerini artrr.

DownButton UpButton

rnek:

Alarm

kurarken,

tarih

ve

zaman

deerlerinin

ayarlanmas

NumericUpDown kontrol ile yaplabilir.

RESM 9.9: NumericUpDown kontrol rnei.

Tarih ve zaman deerlerinin alabilecei maksimum ve minimum deerler ayarlanr.


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load nYil.Minimum = 1 nAy.Minimum = 1 nGun.Minimum = 1 nYil.Maximum = 2099 nAy.Maximum = 12 nGun.Maximum = 31 nSaat.Minimum = 0 nDakika.Minimum = 0 nSaat.Maximum = 23 nDakika.Maximum = 59

270

Modl 9:

nYil.Value = Now.Year nAy.Value = Now.Month nGun.Value = Now.Day nSaat.Value = Now.Hour nDakika.Value = Now.Minute End Sub

Bu deerlerden herhangi biri deitii zaman, doru tarih ve zaman deerinin girilmesi kontrol edilir.
Private Sub nGun_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nGun.ValueChanged, nAy.ValueChanged, nYil.ValueChanged, nSaat.ValueChanged, nDakika.ValueChanged Dim tarih As String tarih = nGun.Value & "." & nAy.Value & "." & nYil.Value If Not IsDate(tarih) Then MsgBox(tarih) End If Dim zaman As String zaman = nSaat.Value & ":" & nDakika.Value If Not IsDate(zaman) Then MsgBox(zaman) End If End Sub

DomainUpDown
NumericUpDown kontrol ile ayn yapdadr, ancak saysal deerler yerine Object tipinde deerler tutar. Bu deerler kontroln Items koleksiyonunda tutulur. Kontrol, bu zellii ile liste kutusuna benzer.

DomainUpDown zellikleri
TABLO 9.21: DomainUpDown zellikleri
zellik Deer Tipi Aklama Kontroln elerinin tutulduu dinamik bir listedir. Kontrolde seilen eyi tutar.

Items

DomainUpDownItemCollection

SelectedItem

Object

Windows Programlama

271

TABLO 9.21: DomainUpDown zellikleri


zellik Deer Tipi Aklama Liste sonuna gelindiinde bataki veya sondaki eye geri dnlmesini belirler.

Wrap

Boolean

DomainUpDown Olaylar
TABLO 9.22: DomainUpDown Olaylar
Olay Aklama Kontrolde seilen e deitii zaman gerekleir.

SelectedItemChanged

rnek: Metin kutularnn deitirilmek istenen yaz tipleri DomainUpDown kontrolnde tutulabilir.

RESM 9.10: DomainUpDown kontrol rnei. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 0 To 10 dFont.Items.Add(System.Drawing.FontFamily.Families(i).Name) Next dFont.Wrap = True End Sub Private Sub dFont_SelectedItemChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dFont.SelectedItemChanged If dFont.SelectedIndex >= 0 Then TextBox1.Font = New Font(dFont.SelectedItem.ToString, 15) End If End Sub

272

Modl 9:

HScrollBar / VScrollBar

Horizontal Vertical ScrollBar kontrolleri, saysal bir deer tayan kaydrma ubuklardr. Tuttuklar deerlerin saysal olmas bakmndan NumericUpDown kontrolne benzerler. Bu kontroller, zerlerinde kaydrma ubuklar olmayan kontroller zerinde kullanlabilir. rnein ListBox ve Panel gibi kontrollerin kendi ScrollBar kontrolleri vardr. TextBox kontrolnn de ilgili zellikleri ayarlanarak yatay ve dey ScrollBar kontrolleri gsterilebilir.

ScrollBar zellikleri
TABLO 9.23: ScrollBar zellikleri
zellik Deer Tipi Aklama Kaydrma ubuunun pozisyonuna gre alnan deeri tutar. Kontrol, stndeki oklar ile kaydrld zaman eklenecek ya da kartlacak deeri tutar. Kontrol, kaydrma ubuundaki bolua tklanarak kaydrldnda zaman eklenecek ya da kartlacak deeri tutar.

Value SmallChange LargeChange

Integer Integer Integer

Minimum Maximum

Integer Integer

Value zelliinin alabilecei maksimum deeri


tutar.

Value zelliinin alabilecei minimum deeri tutar.

Windows Programlama

273

ScrollBar Olaylar
TABLO 9.24: ScrollBar Olaylar
Olay Aklama ubuklar kaydrldklar zaman gerekleir. Kod ile ya da ubuklar kaydrlnca Value zellii deitii zaman gerekleir.

Scroll ValueChanged

rnek: Bir ComboBox kontrolnn elerini listelemek iin, aaya doru bir kaydrma ubuu grntlenir. Ancak listedeki baz elemanlar kontrole smyorsa, alma annda bu kontroln genilii artrlabilir.

RESM 9.11: ScrollBar kontrol rnei. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load hsGenislik.Maximum = ComboBox1.Width * 2 hsGenislik.Value = ComboBox1.Width End Sub Private Sub hsGenislik_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles hsGenislik.Scroll ComboBox1.Width = hsGenislik.Value End Sub

274

Modl 9:

TrackBar

Bu kontrol, ScrollBar kontrollerine benzer yapdadr, ancak kontrol, bir cetvel biiminde olduu iin, zerinde durulan pozisyon grsel olarak takip edilebilir. Kontroln kaydrma ubuklarndan bir fark da zerine odaklanlabilir olmasdr. Dolaysyla, kontroln Value deeri klavyede bulunan yukar, aa, saa, sola oklar ve PageUp, PageDown tular ile deitirilebilir.

TrackBar zellikleri
TrackBar kontrolnn birok zellii ScrollBar kontrollerinin zellikleriyle ayndr. Fakat kontrol daha esnek hale getiren birka zellii vardr. TABLO 9.25: TrackBar zellikleri
zellik Deer Tipi Aklama Kontroln deerini gsteren izgilerin pozisyonunu belirler. izgiler arasnda kalan deerlerin saysn belirler. Kontroln ynnn yatay veya dey olmasn salar.

TickStyle TickFrequency Orientation

TickStyle Integer Orientation

Windows Programlama

275

TabControl

TabControl nesnesi, iinde sekme sayfalar tutan yapdr. Bu sayfalar, TabPage nesneleri olarak oluturulup yaplandrldktan sonra TabControl nes-

nesinin TabPages koleksiyonuna eklenir. Ekleme ilemi, Properties paneli ile tasarm annda da yaplabilir.

TabControl zellikleri
TABLO 9.26: TabControl zellikleri
zellik Deer Tipi Aklama Fare ile sekme sayfalarnn zerine gelindiinde, isimlerinin grsel olarak deimesini belirler. Sekme sayfalarnn bykln belirler. Eklenen sekmelerin birden fazla satrda st ste gzkmesini belirler. Fare sekme sayfalarnn zerindeyken bilgi mesajnn gsterilmesini belirler. Seilen sekme sayfasn belirler. Seilen sekme sayfasnn indisini belirler. Sekme saysn belirler. Kontroln iinde bulunduu sekme sayfalarnn koleksiyonudur.

HotTrack

Boolean

ItemSize Multiline ShowToolTips SelectedTab SelectedIndex TabCount TabPages

Size True Boolean TabPage Integer Integer TabPageCollection

276

Modl 9:

TabControl nesnesine TabPage sayfalar eklemek iin tasarm annda TabPage Collection Editor penceresinden yararlanlabilir (Resim 9.12).

RESM 9.12: TabPage Collection Editor penceresi.

RESM 9.13: TabPage eklemek.

TabPage zellikleri
Sekme sayfalar, normal form tasarmlar gibi kontroller eklenerek yaplr. TabPage kontrol Panel kontrolnden tretilir ve Panel kontrolnn tm zelliklerini alr.
TABLO 9.27: TabPage zellikleri
zellik Deer Tipi Aklama Bu zelliin deeri, fare sayfann zerindeyken, bilgi mesaj olarak gsterilir. Ait olduu

ToolTipText

String

TabControl nesnesinin ShowToolTip zellii True olmaldr.

rnek: Bir kullanc kaydnn tek bir formda grntlenmesi isteniyorsa, bu form TabControl ile kk sayfalara blnebilir.

Windows Programlama

277

RESM 9.14: TabControl rnei.

278

Modl 9:

DateTimePicker

Bir alan kutudan zaman deeri semeyi salar. Seilen deer Date tipinde olur.

DateTimePicker zellikleri
TABLO 9.28: DateTimePicker zellikleri
zellik Deer Tipi Aklama Bir nceki ve bir sonraki ayn gnlerinin grntlenme rengidir. Takvim balnn n plan rengidir. Takvim balnn arka plan rengidir. Takvim arka plan rengidir. Takvimdeki yazlarn n plan rengidir. Takvimin gsterilecei yaz tipi ayarlardr. Tarih deerinin yannda seme kutusunun gsterilmesi. Seme kutusu grntlendii zaman, tarihin seili olup olmadn gsterir

CalendarTrailing ForeColor CalendarTitle ForeColor CalendarTitle BackColor CalendarMonth Background CalendarForeColor CalendarFont ShowCheckBox Checked

Color Color Color Color Color Font Boolean Boolean

Windows Programlama

279

TABLO 9.28: DateTimePicker zellikleri


zellik Deer Tipi Aklama Kontroln grntlenecei format belirler. Long, Short deerleri uzun ve ksa tarih formatn, Time sadece zaman gsterir. Custom deeri, CustomFormat zelliine girilen formatta gsterileceini belirler.

Format

DateTime PickerFormat

CustomFormat Value MaxDate MinDate ShowUpDown

String Date Date Date Boolean

Tarihin hangi formatta gsterileceini belirler. Seilen tarih deerini belirler. Kontroln alabilecei maksimum tarih deeridir. Kontroln alabilecei minimum tarih deeridir. Kontroln formunu alan kutu ya da yukar aa oklar formatnda gsterir. Bu zellik True olduunda, kontroln format,

NumericUpDown kontrolnn
formatnda olur.

rnek: Veritabanndan bir kaydn belli tarih aralklar ile sorgulanmas srasnda, kullancnn balang ve biti tarihlerini semesi iin bu kontrol kullanlabilir.

RESM 9. 15: DateTimePicker kontrol rnei. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TarihAyarla(dtBaslangic) TarihAyarla(dtBitis) End Sub

280 ' Tarih kontrollerinin ayarlanmas Sub TarihAyarla(ByVal dtTarih As DateTimePicker) dtTarih.Format = DateTimePickerFormat.Custom dtTarih.CustomFormat = "dd - MM - yyyy" dtTarih.MaxDate = Now.AddYears(2) dtTarih.MinDate = Now.AddYears(-2) End Sub ' Gerekli kontroller yapldktan sonra ' Sql cmlesi seilen tarihlere gre oluturulur

Modl 9:

Private Sub btnAra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAra.Click Dim basTarih, sonTarih As Date basTarih = dtBaslangic.Value sonTarih = dtBitis.Value If Date.Compare(basTarih, sonTarih) = 1 Then Exit Sub Dim Sql As String Sql = "Select * From Siparisler Where SiparisTarih Between " Sql &= basTarih & " And " & sonTarih ' Sql komutunu altr End Sub

Windows Programlama

281

MonthCalendar

DateTimePicker kontrolnn alan takvimi biimindedir. Bu kontrol kullan-

cya, tarih alanlar zerinde daha esnek alma olana salar.

MonthCalendar zellikleri
DateTimePicker kontrolnn birok zelliini almasna ramen, baz zellikle-

rinde deiiklikler grlr. rnein Value zellii bu kontrolde yoktur. Bu kontrolden seilen deerler, bir tarih araldr. Dolaysyla tek bir Date tipini tutan bir zellik yoktur.
TABLO 9.29: MonthCalendar zellikleri
zellik Deer Tipi Aklama Bir seferde maksimum ka gn seileceini belirler. Balang ve biti tarihlerinden oluan bir seim aral nesnesidir. Seilen tarih aralnn hangi tarihten itibaren baladn belirler. Seilen tarih aralnn hangi tarihte bittiini belirler. leri geri dmeleri tkland zaman ka ay atlanacan belirler. Takvimde hangi gnlerin kaln yaz tipinde gsterileceini belirler. aretlenen gnler, her ay iin kaln gsterilir.

MaxSelectionCount SelectionRange SelectionBegin SelectionEnd ScrollChange MonthlyBoldedDates

Integer SelectionRange Date Date Integer Date()

282 TABLO 9.29: MonthCalendar zellikleri


zellik Deer Tipi Aklama

Modl 9:

ShowToday

Boolean

Takvimin alt ksmnda, sistem takvimine gre hangi gnde olduunu gsterir. Takvimde, o gnn seili olmasn belirler. Takvimin sol tarafnda, yln hafta numaralarn gsterir.

ShowTodayCircle ShowWeekNumbers

Boolean Boolean

MonthCalendar Olaylar
TABLO 9.30: MonthCalendar Olaylar
Olay Aklama Seilen tarihten farkl bir tarih seildiinde gerekleir. Yeni bir tarih seildii zaman gerekleir. DateChanged olay gerekletikten hemen sonra bu olay gerekleir.

DateChanged DateSelected

rnek: Yaplacak grevlerin tutulduu bir Windows uygulamasnda, grevin balang ve biti tarihleri tek bir MonthCalendar kontrolnden kolaylkla seilebilir.

RESM 9.16: MonthCalendar kontrol rnei.

Grevlerin tanmlanmas iin bir Gorev snf oluturulur.


Public Class Gorev Public GorevIsmi As String Public BaslangicTarihi As Date Public BitisTarihi As Date

Windows Programlama

283

' Liste kontrollerinde grevin isminin grntlenmesi ' iin, ToString metodunu tekrar yazmak gerekir. Public Overrides Function ToString() As String Return GorevIsmi End Function Public Sub New(ByVal Isim As String, ByVal basTarihi As Date, ByVal bitTarihi As Date) Me.GorevIsmi = Isim Me.BaslangicTarihi = basTarihi Me.BitisTarihi = bitTarihi End Sub End Class

Grevler eklenecei zaman, yeni bir Gorev nesnesi oluturulur ve grevin balang-biti tarihleri ayarlanr.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Maksimum iki hafta seilsin MonthCalendar1.MaxSelectionCount = 14 End Sub Private Sub btnEkle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEkle.Click Dim baslangicTarihi As Date = MonthCalendar1.SelectionStart Dim bitisTarihi As Date = MonthCalendar1.SelectionEnd Dim gorevIsmi As String = txtYeniGorev.Text Dim yeniGorev As New Gorev(gorevIsmi, baslangicTarihi, bitisTarihi) ListBox1.Items.Add(yeniGorev) End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged Dim secilen As Gorev secilen = ListBox1.SelectedItem MonthCalendar1.SelectionStart = secilen.BaslangicTarihi MonthCalendar1.SelectionEnd = secilen.BitisTarihi txtYeniGorev.Text = secilen.GorevIsmi End Sub

284

Modl 9:

Timer

Windows uygulamalarnda saya grevini grr.

Timer zellikleri
TABLO 9.31: Timer zellikleri
zellik Deer Tipi Aklama Kontroln aktif olup olmadn belirler. Sayacn hangi zaman aralnda bir almas gerektiini belirler. Milisaniye cinsindedir.

Enabled Interval

Boolean Integer

Timer Olaylar
TABLO 9.32: Timer Olaylar
Olay Aklama

Tick

Interval zelliinde belirtilen zaman deeri getiinde gerekleir.

Timer Metotlar
TABLO 9.33: Timer Metotlar
Metot Aklama Sayac balatr Sayac durdurur

Start Stop

Windows Programlama

285

ProgressBar

ProgressBar, belli bir andaki deerin, alabilecei deer aralna gre yzdesini gsterir. Yaplan bir ilemin ilerleyiini gstermesi asndan olduka kullanl bir kontroldr.

ProgressBar zellikleri
TABLO 9.34: ProgressBar zellikleri
zellik Deer Tipi Aklama Kontroln alabilecei minimum deeri belirler. Kontroln alabilecei minimum deeri belirler. Kontroln verilen deer aralndaki pozisyonunu belirler.

Minimum Maximum Value

Integer Integer Integer

rnek: ProgressBar bir saym ileminde kalan durumu gstermek iin kullanlabilir.
ProgressBar ile durumun gsterilecei ayr bir form eklenir. Burada

sayma ileminin hz iin bir Timer bulunur. Saya her ilediinde yeni deer ProgressBar kontrolnde gsterilir.
Dim kalan As Integer Private Sub Durum_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load kalan = ProgressBar1.Maximum

286 Timer1.Start() End Sub

Modl 9:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If kalan = 0 Then Timer1.Stop() Me.Close() End If Dim aralik As Integer aralik = ProgressBar1.Maximum - ProgressBar1.Minimum ' Kalan saym ileminin yzdesi hesaplanr Dim oran As Integer = (aralik - kalan) / aralik * 100 Label1.Text = oran & "% tamamland" ProgressBar1.Value = ProgressBar1.Maximum - kalan kalan -= 1 End Sub

RESM 9.17: ProgressBar kontrol rnei.

Oluturulan bu form, balang formundan arlarak durum gsterilir.


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CheckBox1.Checked = True End Sub Private Sub btnBaslat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBaslat.Click Dim frmDurum As New Durum frmDurum.Timer1.Interval = TextBox1.Text

Windows Programlama

287

If CheckBox1.Checked Then frmDurum.ShowDialog() End If End Sub

288

Modl 9:

ErrorProvider

Form zerindeki kontrollerin yannda hata mesajlar gsterilmesini salar.

ErrorProvider zellikleri
TABLO 9.35: ErrorProvider zellikleri
zellik Deer Tipi Aklama Hata simgesinin ka milisaniyede bir yanp sneceini belirler. Hata simgesinin yanp snme stilini belirler.

BlinkRate BlinkStyle

Integer ErrorBlinkSytle

AlwaysBlink, her zaman, BlinkIfDifferentError farkl bir hata


meydana geldiinde yanp sneceini belirler. NeverBlink ise simgenin yanp snmeden grntleneceini belirler.

Icon

Icon

Hata mesajlarnn gsterilmesi srasnda kan simgeyi belirler.

ErrorProvider Metotlar
TABLO 9.36: ErrorProvider Metotlar
Metot Aklama Kontrollerin hata mesajlarnn belirlenmesi iin kullanlr.

SetError

Windows Programlama

289

ErrorProvider kontrol forma eklendii zaman, Properties panelinde, kont-

rollerin ekstra zellikleri grnr. Bu zellikler, forma eklenen her ErrorProvider iin oluturulur.
TABLO9.37: ErrorProvider Ekstra zellikleri
zellik Aklama Hata simgesinin, kontroln zerinde nerde bulunacan belirler. Hata simgesinin, kontrolden ka piksel uzakta duracan belirler. Varsaylan hata mesajn belirler

IconAlignment On ErrorProviderIsmi IconPadding On ErrorProviderIsmi Error On ErrorProviderIsmi

rnek: Kayt ilemlerinin yapld srada, isim soyad ve TC kimlik numaralarnn girileri ErrorProvider kontrol ile denetlenebilir.

RESM 9.18: ErrorProvider kontrol rnei.

Metin kutularnn Validating olaynda, girilen verilerin kontrolleri yaplr ve gerektii durumlarda ErrorProvider ile hata mesajlar gsterilir.
Private Sub txtIsim_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtIsim.Validating If txtIsim.Text = "" Then ErrorProvider1.SetError(txtIsim, "sim alan bo girilemez") ' Bu komut olayn gereklemesini engeller ' Dolaysyla veri girilmeden bu alandan klamaz e.Cancel = True Else ' Eer beri doru girilmise, Error simgesini ' gizlemek iin, hata mesaj bo girilir ErrorProvider1.SetError(txtIsim, "") End If End Sub

290

Modl 9:

Private Sub txtSoyad_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtSoyad.Validating If txtSoyad.Text = "" Then ErrorProvider1.SetError(txtSoyad, "Soyad alan bo girilemez") e.Cancel = True Else ErrorProvider1.SetError(txtSoyad, "") End If End Sub Private Sub txtTCKimlik_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtTCKimlik.Validating If Not IsNumeric(txtTCKimlik.Text) Then ErrorProvider1.SetError(txtTCKimlik, "Kimlik numaras yanl girildi") e.Cancel = True Else ErrorProvider1.SetError(txtTCKimlik, "") End If End Sub

Windows Programlama

291

PictureBox

Form zerinde bir resim grntlemek iin kullanlr.

PictureBox zellikleri
TABLO 9.38: PictureBox zellikleri
zellik Deer Tipi Aklama Kontroln resim kaynan belirler. Kontroln, resmi nasl grntleyeceini belirler. AutoSize deeri, kontroln bykln resmin byklne gre ayarlar.

Image SizeMode

Image PictureBoxSizeMode

CenterImage deeri, resmi kontroln ortasna gelecek ekilde ayarlar.

Normal deeri, kontroln sol st kesine gre konumlandrr.

StretchImage deeri, resmi kontroln byklne gre boyutlandrr ve resmin tam grnmesini salar.

rnek: Form zerinde bir resmin deiik boyutlarda gsterilmesi iin PictureBox kontrol tercih edilir.

292

Modl 9:

RESM 9.19: PictureBox kontrol rnei. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.Items.Add("Normal") ComboBox1.Items.Add("Ortala") ComboBox1.Items.Add("Sdr") ComboBox1.Items.Add("Otomatik Boyutlandr") End Sub ' ComboBox kontrolnden resmin grntlenme modu seilir Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Select Case ComboBox1.SelectedIndex Case 0 PictureBox1.SizeMode = PictureBoxSizeMode.Normal Case 1 PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage Case 2 PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage Case 3 PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize End Select End Sub Private Sub btnGoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGoster.Click PictureBox1.Image = Image.FromFile(txtResimYeri.Text) End Sub

Windows Programlama

293

ImageList

ImageList kontrol, form kontrolleri ve iinde bulunan eleri iin arka plan resmi salayan bir listesi grevini grr.

ImageList zellikleri
TABLO 9.39: ImageList zellikleri
zellik Deer Tipi Aklama Kontroln iinde bulunan resimlerin listelendii dinamik bir koleksiyondur. Bu zellik bir koleksiyon olduu iin, dier liste kontrollerinin elerinin resmini belirleme ilemi byk lde kolaylar. Kontroln tuttuu resimlerin bykln belirler Listedeki resimlerin bu zellikte belirtilen renkteki blgeleri saydam olur.

Images

ImageCollection

ImageSize TransparentColor

Size Color

Windows uygulamalarnda ImageList kontrolnn kullanm, dier kontrollerin ImageList zellii olarak belirlendikten sonra gerekleir. Bu kontrollerin listeledii elerin arka plan resimleri ImageList kontrol ile belirlenir. rnek: ImageList kontrolnde tutulan resimler bir say oyununda rasgele resim gstermek iin kullanlabilir.

294

Modl 9:

RESM 9.20: ImageList kontrol rnei. Private Sub btnYerlestir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnYerlestir.Click Dim max As Integer = ImageList1.Images.Count - 1 Randomize() PictureBox1.Image = ImageList1.Images(Rnd() * max) PictureBox2.Image = ImageList1.Images(Rnd() * max) PictureBox3.Image = ImageList1.Images(Rnd() * max) PictureBox4.Image = ImageList1.Images(Rnd() * max) End Sub

Windows Programlama

295

LinkLabel

Bu kontrol, nesnelere balant kurmak iin kullanlr. Text zelliinde birden fazla nesneye balant kurulabilir. Bu durumda, kontrol tkland zaman hangi balantnn ilenecei Click olaynda belirlenir.

LinkLabel zellikleri
TABLO 9.40: LinkLabel zellikleri
zellik Deer Tipi Aklama Balantnn hangi karakterler arasnda aktif olacan belirler. Balantnn yazsnda bulunan izginin ne zaman gsterileceini belirler.

LinkArea LinkBehavior

LinkArea LinkBehavior

HoverUnderline deeri fare zerinde


durduu zaman, AlwaysUnderline deeri her zaman alt izili olduunu belirler.

NeverUnderline deeri ise balant


yazsnn altnn izilmeyeceini belirler.

LinkColor LinkVisited VisitedLink Color Links

Color Boolean Color LinkLabel. LinkCollection

Balantnn LinkVisited zellii False olduu zaman gsterilecek rengini belirler. Balantnn en az bir kere tklandn belirler. Balantnn LinkVisited zellii True olduu zaman gsterilecek rengini belirler. Kontroln Text zelliinde bulunan balantlar tutar.

296

Modl 9:

LinkLabel Olaylar
TABLO 9.41: LinkLabel Olaylar
Olay Aklama Kontroln zerine tkland zaman gerekleir. Dier kontrollerin tklama olayndan farkl olarak, LinkLabel zerinde hangi balantnn tkland anlalr.

Click

rnek: letiim bilgi formunda e-posta ve Internet adresleri gibi balantlar gstermek iin LinkLabel kullanlr.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim bilgi As String bilgi = "BilgeAdam web sitesi: http://www.bilgeadam.com" bilgi &= vbCrLf & "Mail ile ulamak iin tklayn" LinkLabel1.Text = bilgi ' nternet adresinin balad karakterden ' itibaren link eklenir LinkLabel1.Links.Add(22, 24, "http://www.bilgeadam.com") ' Mail adresinin balad karakterden ' itibaren link eklenir LinkLabel1.Links.Add(72, 8, "mailto:postakutusu@bilgeadam.com") End Sub Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked Dim tiklanan As Integer tiklanan = LinkLabel1.Links.IndexOf(e.Link) 'Tklanan linkin ziyaret edildii belirtilir LinkLabel1.Links(tiklanan).Visited = True ' Linki altrmak iin ilgili ilem gerekletirilir System.Diagnostics.Process.Start(e.Link.LinkData) End Sub

Windows Programlama

297

TreeView

Bu kontrol, iinde bulunan eleri hiyerarik bir yapda grntler. Her eklenen e bir dm temsil eder. Dmler birleerek aa yapsn olutururlar. Dmler, kk ve alt dm olarak ikiye ayrlr. Kk dmler, kontroln ilk srasnda yer alr ve ayn seviyededir. Alt dmler, kk dmlerin ve dier alt dmlerin altna eklenebilir.

TreeNode Nesnesi
TreeView kontrolnde gsterilen eler, zelliklerini TreeNode snfndan alr. Kk ve alt dmlerin tm TreeNode tipindedir. Her dmn bir Nodes zellii vardr. Bu zellik, dmn alt dmlerinin tutulduu koleksiyondur. Alt dmler oluturulup bu zellie eklenebilir. TreeNode dmleri oluturulup, zellikleri atandktan sonra TreeView kontro-

lnde gsterilmesi iin, TreeView nesnesinin Nodes koleksiyonuna eklenmesi gerekir.

TreeNode zellikleri
TABLO 9.42: TreeNode zellikleri
zellik Deer Tipi Aklama Dmn stnde gsterilen yazy belirler. Dmn alt dmlerini tutan koleksiyondur.

Text Nodes

String TreeNodeCollection

298 TABLO 9.42: TreeNode zellikleri


zellik Deer Tipi Aklama

Modl 9:

Checked

Boolean

TreeView kontrolnde seim kutular gsteriliyorsa, dmn iaretli olup olmadn belirler.

NextNode PrevNode LastNode FirstNode NodeFont FullPath Parent

TreeNode TreeNode TreeNode TreeNode Font String TreeNode

Ayn seviyedeki bir sonraki dm gsterir. Ayn seviyedeki bir nceki dm gsterir. Alt dmlerinin en sonuncusunu gsterir. Alt dmlerinin ilkini gsterir. Dmn yaz tipini belirler. Dmn, kkten kendisine kadar olan tm dmlerin Text zelliklerini sralar. Dmn ait olduu TreeNode nesnesini belirtir.

TreeNode Metotlar
TABLO 9.43: TreeNode Metotlar
Metot Aklama Dmn ilk seviyedeki alt dmlerini gizler. Eksi iaretinin tklanmas ile ayn grevi grr. Dmn ilk seviyedeki alt dmlerini gsterir. Art iaretinin tklanmas ile ayn grevi grr. Dmn alt dmlerini son seviyeye kadar gsterir. Dmn durumunu aksa kapal, kapalysa ak duruma getirir. Verilen parametre True ise tm alt dmlerin, False ise sadece ilk seviyedeki dmlerin saysn verir.

Collapse Expand ExpandAll Toggle GetNodeCount

TreeView zellikleri
TABLO 9.44: TreeView zellikleri
zellik Deer Tipi Aklama Dmlerin yannda iaret kutularnn gsterilmesini belirler. Kontroln tm eleri iin varsaylan resmin

CheckBoxes ImageIndex

Boolean Integer

ImageList iindeki indisini belirler. Bu


zelliin kullanlmas iin, kontroln

ImageList zelliinin belirlenmesi gerekir.

Windows Programlama

299

TABLO 9.44: TreeView zellikleri


zellik Deer Tipi Aklama enin zerine gelip seildiinde gsterilecek resmin ImageList iindeki indisini belirler.

SelectedImageIndex

Integer

SelectedNode TopNode ShowLines ShowPlusMinus

TreeNode TreeNode Boolean Boolean

Seilen dm belirler. Kontroln ilk kk dmn gsterir. Dmler arasnda izgilerin gzkmesini belirler. Alt dmleri gsterip gizlemek iin kullanlan art-eksi iaretlerinin gzkmesini belirler. Kk dmlerinin izgilerinin ve art-eksi iaretlerinin gzkmesini belirler. Bir dmn FullPath zelliinde gsterilen dmleri ayran karakterleri belirler.

ShowRootLines PathSeparator

Boolean String

TreeView kontrolne kod ile dm eklenebildii gibi, tasarm annda Visual

Studio TreeNode Editor penceresi kullanlarak da dm eklenebilir.

RESM 9.21: Properties panelinde dm eklemek.

TreeView Metotlar
TABLO 9.45: TreeView Metotlar
Metot Aklama Kontroln tm dmlerini gizler. Kontroln tm dmlerini gsterir.

CollapseAll ExpandAll

TreeView Olaylar
TABLO 9.46: TreeView Olaylar
Olay Aklama Dm seilmeden nce gerekleir. Dm seildikten sonra gerekleir.

BeforeSelect AfterSelect

300 TABLO 9.46: TreeView Olaylar


Olay Aklama Dm kapanmadan nce gerekleir. Dm kapandktan sonra gerekleir. Dm almadan nce gerekleir. Dm aldktan sonra gerekleir.

Modl 9:

BeforeCollapse AfterCollapse BeforeExpand AfterExpand

RESM 9.22: TreeNode Editor penceresi.

rnek: rn kategorileri, genelde tek kategori olarak ele alnsa da, aslnda hiyerarik bir yapda incelenmeleri gerekir. Her kategorinin sonsuz sayda alt kategorisi olabilir. Bu tip kategoriler, en iyi ekilde TreeView kontrol ile grntlenebilir. Yeni kategori ekleme ilemi kk dm ve alt dm olarak yaplabilir. Eer RadioButton kontrollerinde kk dm seilmise ana kategori; alt dm seilmise, seilen kategorinin altna bir alt kategori eklenir.
Private Sub btnYeniKategoriEkle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnYeniKategoriEkle.Click Dim secilen As TreeNode secilen = TreeView1.SelectedNode If RadioButton1.Checked Then ' Kk dm eklenir

Windows Programlama

301

TreeView1.Nodes.Add(txtYeniKategori.Text) ElseIf RadioButton2.Checked Then ' Seilen kategoriye alt kategori eklenir secilen.Nodes.Add(txtYeniKategori.Text) End If End Sub

RESM 9.23: TreeView kontrol rnei.

Seilen bir kategorinin silinmesi ilemi iin, o dmn hangi ana dme ait olduu bulunmaldr.
Private Sub btnSil_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSil.Click Dim secilen As TreeNode = TreeView1.SelectedNode If Not secilen.Parent Is Nothing Then ' Seilen dm, Parent dmnn Nodes ' koleksiyonundan kartlr. secilen.Parent.Nodes.Remove(secilen) Else ' Eer Parent yok ise Kk dmdr. TreeView1.Nodes.Remove(secilen) End If End Sub

Tm dmlerin gsterilmesi ve seilen dmn hiyerarik yapsnn gsterilmesi:


Private Sub btnGoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGoster.Click

302 TreeView1.ExpandAll() End Sub Private Sub btnKategoriGoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKategoriGoster.Click Dim secilen As TreeNode = TreeView1.SelectedNode MsgBox(secilen.FullPath) End Sub

Modl 9:

Windows Programlama

303

ListView

Kullancya deiik listeleme seenekleri sunan bir kontroldr. inde bulunan eler, tek bir nesne olarak veya detaylar ile gsterilebilir. Dolaysyla eler ListViewItem nesnesi, detaylar ise ListViewSubItem nesnesi olarak tanmlanr.

ListView zellikleri
TABLO 9.47: ListView zellikleri
zellik Deer Tipi Aklama Listenin grnmn belirler.

View

View

LargeIcons deeri listedeki elerin


byk resimle, SmallIcons kk resimle grnmesini salar. List deeri, elerin kk resimle, fakat alt alta grnmesini salar. Details deeri, alt elerin kolonlar altnda grntlendii detay grnm salar.

AllowColumn Reorder

Boolean

Detay grnmnde, kolonlarn kullanc tarafndan dzenlenebilmesini belirler.

304 TABLO 9.47: ListView zellikleri


zellik Deer Tipi Aklama

Modl 9:

Activation

ItemActivation

elerin ne zaman etkinletirileceini belirler. OneClick deeri, enin tek tklamayla, Standard deeri, enin ift tklamayla aktif hale geleceini belirler. TwoClick deeri seiliyken, ilk tklandnda e seilir, daha sonra ikinci defa tklandnda ise e aktif hale gelir.

CheckBoxes Columns

Boolean ColumnHeader Collection Boolean Boolean Boolean

elerin yannda seme kutularnn bulunmasn belirler. Detay grnmndeyken, elerin alt elerinin gsterilecei kolonlar tutan koleksiyondur. Detay grnmde, enin tm detay satrnn seilmesini belirler. Kolonlar ve satrlar arasnda ayrc izgilerin gzkmesini belirler. alma annda, kullancn, liste elerinin yazsn deitirmesini belirler. Bu zelliin kullanlmas iin, Activation zelliinin Standard olmas gerekir.

FullRowSelect GridLines LabelEdit

ListView Olaylar
TABLO 9.48: ListView Olaylar
Olay Aklama enin yazs deitikten sonra gerekleir enin yazs deimeden nce gerekleir

AfterLabelEdit BeforeLabelEdit

rnek: Windows Explorer ile dosya grnmleri, ListView ile gerekletirilir.

RESM 9.24: ListView kontrol rnei.

Windows Programlama

305

Form yklenirken ListView kontrolne kolon ve eler eklenir. Ayrca


ComboBox kontrolne grnm seenekleri eklenir. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.Items.Add("Detay") ComboBox1.Items.Add("Byk Simgeler") ComboBox1.Items.Add("Kk Simgeler") ComboBox1.Items.Add("Liste") ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList ListView1.Columns.Add("Ad", 100, HorizontalAlignment.Left) ListView1.Columns.Add("Boyut", 50, HorizontalAlignment.Left) ListView1.Columns.Add("Tr", 170, HorizontalAlignment.Left) ListView1.View = View.Details Dim oge As New ListViewItem("bin") oge.SubItems.Add("") oge.SubItems.Add("Dosya Klasr") oge.ImageIndex = 0 ListView1.Items.Add(oge) oge = New ListViewItem("Form1.vb") oge.SubItems.Add("11 KB") oge.SubItems.Add("Visual Basic Source") oge.ImageIndex = 2 ListView1.Items.Add(oge) oge = New ListViewItem("WindowsApplication1.sln") oge.SubItems.Add("1 KB") oge.SubItems.Add("Microsoft Visual Studio Solution Object") oge.ImageIndex = 1 ListView1.Items.Add(oge) End Sub ComboBox kontrolnde seilen deer deitii zaman, ListView gr-

nm deiir.
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Select Case ComboBox1.SelectedIndex

306 Case 0 ListView1.View = View.Details Case 1 ListView1.View = View.LargeIcon Case 2 ListView1.View = View.SmallIcon Case 3 ListView1.View = View.List End Select End Sub

Modl 9:

Windows Programlama

307

Dinamik Kontroller

Kontroller tasarm annda eklenip ayarlanabildii gibi, alma annda da oluturulup forma eklenebilir. Kontrollerin, Properties panelinde gzken tm zelliklerine kod tarafndan ulalabildii iin, alma annda nceden oluturulmu bir kontroln zellii deitirilebilir. Bununla birlikte, yeni bir form oluturup gsterme ilemi gibi, alma annda yeni bir kontrol oluturulup zellikleri atanarak form zerinde gsterilebilir. Yeni eklenen kontrollerin olaylarna erimek iin AddHandler anahtar kelimesi kullanlr. Kontroln olay gerekletii zaman altrlacak kodlar ise AddressOf anahtar kelimesi ile belirtilmelidir.
AddHandler b.Click, AddressOf ButonaBasildi

Bu ekilde tanmlanan yordamlarn, kontroln olay tanmlaycs ile ayn parametrelere sahip olmaldr.
Private Sub ButonaBasildi(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub

rnek: Form zerinde srekli dme eklenen ve dmelerin tklandklarnda yok edildii bir oyunun yazlmas iin, bu dmelerin dinamik bir ekilde oluturulmas gerekir.

308

Modl 9:

RESM 9.25: Dinamik kontrol rnei.

Form zerindeki bir Timer kontrol, iki saniyede bir dme oluturup forma ekler.
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' Yeni bir dme oluturulur. Dim b As New Button b.Height = 30 b.Width = 30 b.Text = "X" Dim maxLocation_Y, maxLocation_X As Integer ' Yeni dmenin yeri form dnda bir yerde olamaz maxLocation_X = Me.Width - b.Width maxLocation_Y = Me.Height - b.Height Randomize() ' Dmenin bulunaca yer rasgele ayarlanr. b.Location = New Point(Rnd() * maxLocation_X, Rnd() * maxLocation_Y) AddHandler b.Click, AddressOf ButonaBasildi ' Oluturulan kontrol, Formun kontroller ' listesine eklenmelidir. Me.Controls.Add(b) End Sub

Oluturulan kontroller tkland zaman altrlacak yordam yazlr.


Private Sub ButonaBasildi(ByVal sender As System.Object, ByVal e As System.EventArgs) ' Kontroln, zerine basld zaman yok edilmesi

Windows Programlama

309

sender.Dispose() End Sub

Form yklendii zaman Timer nesnesi almaya balar.


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Interval = 500 Timer1.Start() End Sub

310

Modl 9:

Lab 1: Internet Taraycs


Bu labda, Windows altnda bulunan Microsoft Web Taraycs kontrol projeye eklenerek Internet taraycs gerekletirilir. Bu labda kullanlan kontroller ve teknikler:
LinkLabel. Ana sayfaya balant salar. RadioButton. Balantlarn yeni ya da ayn pencerede almas seeneini sunar. GroupBox. RadioButton kontrollerini gruplamak iin kullanlr. TabControl. Tarayclarn farkl pencerelerde gzkmesini salar.

Microsoft Web Taraycs. Internet sitelerinin grntlenmesini salar.


Dispose metodu. TabPage sayfalarnn silinmesi iin kullanlr. For Each. Sayfalarn tmnn kapanmas iin kullanlr.

Dinamik kontroller. Balantlar yeni bir sayfada ald zaman, yeni bir TabPage oluturulur. Bu sayfann iine yeni bir tarayc kontrol oluturulup eklenir. Daha sonra bu sayfa TabControl nesnesine eklenir.

Kontrollerin Eklenmesi
Yeni bir Windows projesi an ve Toolbox paneline Microsoft Web Taraycsn ekleyin.
NOT Toolbox paneline kontrol ekleme ilemleri iin Modl 3e bakn

RESM 9.26: Microsoft Web Taraycs kontrolnn eklenmesi.

Form zerine Tablo 9.49daki kontrolleri ekleyin ve belirtilen zellikleri ayarlayn.

Windows Programlama

311

TABLO 9.49: Eklenecek Kontroller


Kontrol Kontrol smi zellik Deer

TextBox txtAdres RadioButton - rbAyniSayfa RadioButton - rbYeniSayfa GroupBox GroupBox1 LinkLabel LinkLabel1 Button btnSayfaKapat Button btnTumunuKapat TabControl TabControl1 TabPage TabPage1
Tarayc AxWebBrowser1

Text Checked Text Text Text Text TabPages Dock Text Dock

http:// True

Ana Sayfa Sayfay Kapat Tm Sayfalar Kapat Yeni bir sayfa ekleyin Bottom Sayfa 1 Fill

RESM 9.27: Internet taraycsnn tasarm.

Kodlarn Yazlmas
1. Form yklenirken LinkLabel kontrolnn gsterecei balanty ve formun AcceptButton zelliini ayarlayn.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load LinkLabel1.Links.Add(0, 9, "http://www.bilgeadam.com") Me.AcceptButton = btnGit End Sub

312

Modl 9:

2. Yazlan Internet adresine gitmek iin kullanc, ayn sayfay veya yeni alacak bir sayfay kullanabilir. Seilen duruma gre ayn sayfada ya da farkl sayfada Internet sitesini grntleyen kodlar yazn.
Private Sub btnGit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGit.Click ' Girilen balantnn banda http ifadesi ' bulunmuyorsa bu ifade eklenir If Not txtAdres.Text.StartsWith("http://") Then txtAdres.Text = txtAdres.Text.Insert(0, "http://") End If ' TabControl nesnesinde sayfa yoksa ya da Yeni Sayfa ' seenei seilmise, adres yeni sayfada gsterilir. If rbYeniSayfa.Checked OrElse TabControl1.TabPages.Count = 0 Then YeniSayfa(txtAdres.Text) Else AyniSayfa(txtAdres.Text) End If End Sub Sub YeniSayfa(ByVal link As String) ' Dinamik kontroller oluturulur. Dim sayfa As New TabPage(link) Dim tarayici As New AxSHDocVw.AxWebBrowser tarayici.Dock = DockStyle.Fill ' Tarayc TabPage kontrolne eklenir sayfa.Controls.Add(tarayici) ' Oluturulan sayfa TabControl nesnesine eklenir. TabControl1.TabPages.Add(sayfa) ' Yeni alan sayfa seili olarak gsterilir TabControl1.SelectedTab = sayfa ' Tarayc, verilen balanty grntler tarayici.Navigate(link) End Sub

Sub AyniSayfa(ByVal link As String) ' Internet sitesi, seilen sayfada gsterilir. Dim sayfa As TabPage

Windows Programlama

313

sayfa = TabControl1.SelectedTab Dim tarayici As AxSHDocVw.AxWebBrowser ' Tarayc, sayfann kontrolleri iinde bulunur. ' Sayfada baka kontrol bulunmad iin, ilk ' kontrol taraycdr. tarayici = sayfa.Controls(0) sayfa.Text = link tarayici.Navigate(link) End Sub

3. Ana sayfa balants tkland zaman, BilgeAdam Internet sitesinin yeni bir sayfada almasn salayan kodlar yazn.
Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked YeniSayfa(e.Link.LinkData) End Sub

4. Seilen sayfay ve tm sayfalar kapatan kodlar yazn.


Private Sub btnSayfaKapat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSayfaKapat.Click Dim sayfa As TabPage sayfa = TabControl1.SelectedTab If Not sayfa Is Nothing Then sayfa.Dispose() End If End Sub Private Sub btnTumunuKapat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTumunuKapat.Click For Each sayfa As TabPage In TabControl1.TabPages sayfa.Dispose() Next End Sub

314

Modl 9:

Lab 2: Drt Haneli Say Bulma Oyunu


Bu labda, MasterMind oyunundan uyarlanm 4 haneli say bulma oyunu programlanacaktr. Oyunun ileyii rakamlar farkl ya da ayn olarak tutulan 4 haneli saynn tahmin edilmesidir. Tahmin edilen sayyla ilgili ipular verilir. Yerini tutan rakamlar + ile, yerini tutmayan, ancak say iinde geen rakamlar ile belirtilir. rnek: Tutulan say: 1980 Tahmin 1: 4952 pucu: +1 (Sadece 9 rakam yerini tuttu) Tahmin 2: 9820 pucu: +1 -2 (0 yerini tuttu, 9 ve 8 bulundu, ancak yeri tutturulamad) Bu labda kullanlan kontroller ve teknikler:
ListBox. Yaplan tahminleri tutmay salar. DomainUpDown. Oyunun zorluk derecesinin seilmesini salar. ErrorProvider. Kullancnn, tahminleri dzgn formatta girip girmediini kontrol eder.

e Dngler. Farkl rakamlar olan saylar retmek ve tahminleri kontrol etmek iin kullanlr.

Kontrollerin Eklenmesi
Form zerine Tablo 9.50deki kontrolleri ekleyin ve belirtilen zellikleri ayarlayn.
TABLO 9.50: Eklenecek Kontroller Kontrol Kontrol smi zellik Deer

TextBox txtTahmin ListBox ListBox1 DomainUpDown DomainUpDown1 Items Text Button btnTahminEt Button btnYeniOyun Label lblMesaj Text Text Farkl Saylar Tekrarl Saylar Zorluk Sein Tahmin Et Yeni Oyun

Windows Programlama

315

RESM 9.28: Drt haneli say bulma oyunu tasarm.

Kodlarn Yazlmas
Sistem tarafndan tutulacak saylar, DomainUpDown kontrolnde yaplan seime gre farkl ya da ayn rakamlara sahip olacaktr.
Function SayiUret() As Integer Dim sayi As Integer = DortHaneliSayi() ' Saydaki rakamlar tekrar edilebilirse If DomainUpDown1.SelectedIndex = 1 Then Return sayi End If ' Saynn rakamlar birbirinden farkl ' olana kadar say retilir While Not SayiKontrol(sayi) sayi = DortHaneliSayi() End While Return sayi End Function

Rakamlar birbirinden farkl drt haneli say retir.


Function DortHaneliSayi() As Integer Randomize() Dim sayi As Integer = Rnd() * 10000 ' Say 4 haneli olana kadar tekrar retilir While sayi < 1000 sayi = Rnd() * 10000 End While Return sayi End Function

316

Modl 9:

Saynn rakamlarnn birbirinden farkl olmasn kontrol eder.


Function SayiKontrol(ByVal sayi As Integer) As Boolean Dim rakamlar() As Char = CStr(sayi).ToCharArray ' Rakamlar tek tek bir birleriyle kontrol edilir ' Tekrarlanan rakam varsa False dner For i As Integer = 0 To rakamlar.Length - 2 For j As Integer = i + 1 To rakamlar.Length - 1 If rakamlar(i) = rakamlar(j) Then Return False End If Next Next Return True End Function

Yeni oyun dmesine tkland zaman say retilir ve oyun balar.


Private Sub btnYeniOyun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnYeniOyun.Click BulunacakSayi = SayiUret() lblMesaj.Text = "Yeni Oyun! Say retildi..." End Sub

Metin kutusunun Validating olaynda, girilen deerler kontrol edilir.


Private Sub txtTahmin_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtTahmin.Validating If txtTahmin.Text.Length = 4 And IsNumeric(txtTahmin.Text) Then ErrorProvider1.SetError(txtTahmin, "") Else ErrorProvider1.SetError(txtTahmin, "Say yanl girildi") e.Cancel = True End If End Sub

Tahmin edilen saynn hangi rakamlarnn tutuu kontrol edilir.


Public Function TahminKontrol(ByVal sayi As Integer) As String Dim sonuc As String ' Sonu kmesindeki art ve eksi says Dim arti As Byte = 0

Windows Programlama

317

Dim eksi As Byte = 0 Dim i, j As Byte Dim sdizi() As Char sdizi = CStr(sayi).ToCharArray Dim sBulunacak() As Char sBulunacak = CStr(BulunacakSayi).ToCharArray ' Yerleri tutan saylar bulunur For i = 0 To 3 If sdizi(i) = sBulunacak(i) Then arti += 1 End If Next ' Yerleri tutmayan saylarn kontrol For i = 0 To 3 For j = 0 To 3 If i <> j Then If sdizi(i) = sBulunacak(j) Then eksi += 1 Exit For End If End If Next Next If arti = 0 And eksi = 0 Then sonuc = "0" ElseIf arti = 4 Then sonuc = "Tebrikler!" ElseIf arti <> 0 AndAlso eksi <> 0 Then sonuc = "+" & arti & " -" & eksi ElseIf arti = 0 Then sonuc = "-" & eksi End If Return sonuc End Function Private Sub btnTahmin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTahmin.Click ListBox1.Items.Add(TahminKontrol(txtTahmin.Text)) End Sub

318

Modl 9:

Lab 3: Hafza Oyunu


Hafza oyunu, belli sayda kart iinden ayn resme sahip olanlarn bulunmasna dayaldr. Bu labda, form zerine seilen seviye kadar kart ekleme ilemi yaplr. Kontroller alma annda eklenecei iin dinamik olarak oluturulmaldr. Bu labda kullanlan kontroller ve teknikler:
ComboBox. Seviyenin seilmesi iin kullanlr. ImageList. Eklenen kartlarn resimlerini tutar.

Dinamik kontroller. Kullancnn setii seviye kadar kart ekleme ilemi iin kullanlr.
Tag. Kontrollerin Tag zellii, o kontrole ait bilgi tutmak iin kullanlr. Bu labda, yeni eklenen kartlarn hangi resmi tayaca kontrol Tag zelliinde tutulur.

Kontrollerin Eklenmesi
Form zerine Tablo 9.51deki kontrolleri ekleyin ve belirtilen zellikleri ayarlayn.
TABLO 9.51: Eklenecek Kontroller
Kontrol Kontrol smi zellik Deer

ComboBox ComboBox1

Items

4 Kart 8 Kart 16 Kart

ImageList ImageList1

Images

8 tane resim ekleyin

RESM 9.29: Image Collection Editor.

Windows Programlama

319

Kodlarn Yazlmas
1. ComboBox kontrolnden seviye seildii zaman, form zerinde varolan tm dmelerin silinip, seilen seviye kadar dme eklenmesi gerekir. Bu ilem oyunu batan balatr.
Sub KartYerlestir(ByVal kartSayisi As Integer) DugmeleriSil() Dim x As Integer = 10 Dim y As Integer = 50 For i As Integer = 1 To kartSayisi ' Dinamik bir dme oluturulur ve zellikleri ' ayarlanr Dim kart As New Button kart.Height = 30 kart.Width = 30 kart.Location = New Point(x, y) ' Dme tkland zaman gerekeecek olay AddHandler kart.Click, AddressOf ButonaTiklandi Me.Controls.Add(kart) ' Bir sonraki eklenecek olan dme ' ilk kontroln 70 piksel sanda olacaktr x += 70 ' Dmenin Form snrlar iinde olmas gerekir. If x > Me.Width Then x = 10 y += 50 End If Next KartResimYukle() End Sub

2. Dmeleri silme ilemi, form zerindeki tm dmelerin bir listeye atlp daha sonra formun kontrollerinden kaldrlarak yaplr.
Sub DugmeleriSil() Dim silinecek As New ArrayList ' Form iindeki Button kontrolleri bir listede tutulur For Each c As Control In Me.Controls

320 If TypeOf c Is Button Then silinecek.Add(c) End If Next For i As Integer = 0 To silinecek.Count - 1 Me.Controls.Remove(silinecek(i)) Next End Sub

Modl 9:

3. Kartlara resim yklerken, her resmin iki karta yklenmesi gerekir.


Sub KartResimYukle() ' Dmeler bir listeye alnr. Dim dugmeler As New ArrayList For Each c As Control In Me.Controls If TypeOf c Is Button Then dugmeler.Add(c) End If Next Randomize() Dim i As Integer = 0 ' Kartlar ikier ikier ele alnr. ki karta da ' ayn resim atanr. Ve bu iki kart dmeler ' listesinden kartlr. While dugmeler.Count > 0 Dim kart1, kart2 As Button kart1 = dugmeler(Rnd() * (dugmeler.Count - 1)) kart1.Tag = i dugmeler.Remove(kart1) kart2 = dugmeler(Rnd() * (dugmeler.Count - 1)) kart2.Tag = i dugmeler.Remove(kart2) i += 1 End While End Sub

4. Eklenen kartlar tkland zaman, ilk seferde bir kart alr ve resmi gsterilir. kinci kart ald zaman bu iki kartn resmi aynysa kart formdan kaldrlr.

Windows Programlama

321

Private AcikKart As Button Private acik As Boolean = False Private Sub ButonaTiklandi(ByVal sender As Object, ByVal e As EventArgs) Dim kart As Button = sender ' Eer ilk kart alyorsa If Not acik Then ' Kart grntle kart.BackgroundImage = ImageList1.Images(kart.Tag) AcikKart = kart acik = True 'Eer ikinci kart alyorsa Else ' Alm kartn resmi, yeni alan kartn ' resmi ile aynysa, bu kartlar silinir If kart.Tag = AcikKart.Tag Then Me.Controls.Remove(kart) Me.Controls.Remove(AcikKart) Else AcikKart.BackgroundImage = Nothing End If acik = False End If End Sub

RESM 9.30: Hafza oyunu.

322

Modl 9:

Lab 4: Hesap Makinesi


Bu labda, bir hesap gerekletirilecektir. makinesinde kullanlan genel fonksiyonlar

Bu labda kullanlan kontroller ve teknikler:


Button. Hesap makinesindeki her ilem ve say iin bir dme kullan-

lr.
Try Catch Finally. Hesaplamalar yaplrken, kullancn yanl bir deer girmesi durumunda kacak hatalar yakalamak iin kullanlr.

Kontrollerin Eklenmesi
Form zerine Tablo 9.52deki kontrolleri ekleyin ve belirtilen zellikleri ayarlayn.
TABLO 9.52: Eklenecek Kontroller
Kontrol Kontrol smi zellik Deer Temsil ettikleri saylar

Button 0 9 aras, her say iin Button(Sayi)


isminde bir dme ekleyin. rnek: 5 says iin

Text

Button5 Button Her ilem iin


bir dme ekleyin: arpma, blme, toplama karma, eitlik, temizleme

Text

Temsil ettikleri ilemler.

* + / - = C

RESM 9. 31: Hesap makinesi.

Kodlarn Yazlmas
1. lemin trn ve seildiini belirleyen, girilen bir nceki sayy tutan global deikenleri yazn.
Private IslemSecildi As Boolean = False Private Sayi As Double Private Islem As String

Windows Programlama

323

2. Say dmelerinden herhangi biri tkland zaman, metin kutusunun grnmn deitiren ilemi yazn.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button0.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click If Not IslemSecildi Then txtSayi.Text &= sender.Text Else txtSayi.Text = sender.Text IslemSecildi = False End If End Sub

3. lem seildii zaman, bir nceki girilen sayy tutan kodlar yazn.
Private Sub btnCarp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarp.Click, btnBol.Click, btnCikar.Click, btnTopla.Click Islem = sender.Text Try Sayi = txtSayi.Text IslemSecildi = True Catch ex As Exception MsgBox("Say dzgn formatta girilmedi") Finally txtSayi.Text = "" txtSayi.Focus() End Try End Sub

4. Eittir dmesi tkland zaman aritmetik operasyonu yapan kodlar yazn.


Private Sub btnEsit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEsit.Click Select Case Islem Case "*" Sayi *= txtSayi.Text Case "/" Sayi /= txtSayi.Text Case "-" Sayi -= txtSayi.Text Case "+" Sayi += txtSayi.Text

324 End Select txtSayi.Text = Sayi End Sub

Modl 9:

5. C (temizle) dmesi tkland zaman, metin kutusunu temizleyen ve global deikenleri balang deerlerine getiren kodlar yazn.
Private Sub btnTemizle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTemizle.Click Sayi = 0 IslemSecildi = False txtSayi.Text = "" txtSayi.Focus() End Sub

Windows Programlama

325

Modl Sonu Sorular & Altrmalar

1. Formun kapanmasn, effafln yavaa azaltarak salamak iin, formun hangi olay, zellik ve metotlarndan faydalanr? Uygulamasn yazn. 2. Fiziksel olarak bulunduklar yerler bir dizide tutulan resimlerin, slayt gsterisi eklinde gsterilmesi hangi kontroller ile salanr? Uygulamasn yazn. 3. Kurumsal bir irketin elemanlarnn bal olduklar departmanlar ve mdrler hiyerarik olarak hangi kontrol ile gsterilebilir? Her mdr ve departman baka bir mdr ve departmana baldr. Uygulamasn Structure yapsn kullanarak ve ilgili kontrollerle birlikte yazn. 4. Microsoft Excel ile oluturulan sayfalar, ayn pencerede tutulur. Bir Windows uygulamasnda snrsz sayda sayfann ayn form zerinde tutulmasn hangi kontrol salar? Bu sayfalar alma annda oluturulmak istenirse, kontroln hangi zelliklerinden faydalanlr?

Modl 10: Men Tasarm ve MDI Formlar

330

Modl 10:

Konu 1: Men Tasarm


Windows uygulamalarnda en ok kullanlan tasarm aralar menlerdir. Dosya, Dzen, Grnm gibi menler neredeyse tm Windows uygulamalarnda, belli bal ilerin yaplmasnda kullancya kolay eriim salar. Uygulamalarda, menlerde tanmlanan ilemlere grsel ksayollar sunulur. Bu ilem ara kutular ile salanr. Bu blm tamamlandktan sonra:
MainMenu ve ContextMenu kontrolleri ile men tanm yapabilecek, ToolBar kontrol ile tasarmda ara ubuklarn kullanabilecek, ToolTip kontrol ile men aralarnn kullanm hakknda bilgi salaya-

cak,
StatusBar ve NotifyIcon kontrolleri ile uygulamalarn tasarmn zen-

ginletireceksiniz.

Menler
Windows uygulamalarnda kullanlan iki tip men vardr. MainMenu, formlarn banda duran sabit mendr. ContextMenu, fare ile sa tklandnda kan mendr.

MainMenu

Windows uygulamasna bir men eklemek iin, Toolbox panelinden bir MainMenu kontroln forma srkleyin. Eklenen men bir bileen olarak formun alt blmnde gzkecektir. Ancak stne gelindiinde formun balnn hemen altnda belirir. Men esi eklemek veya ismini deitirmek iin stne

Men Tasarm ve MDI Formlar

331

gelinir ve balk yazs yazlr. Properties panelinde bu mennn MenuItem olarak eklendii grlr (Resim 10.1).

RESM 10.1: MenuItem.

Menye MenuItem eklendiinde hemen altnda ve yannda, men eklemek iin bir yer alr. Bu alan yere de men ismi girilip, alt men eleri oluturulabilir. Men eleri tkland zaman bir ilemin gereklemesi iin, kontrol ift tklanarak bu enin Click olayna geilir. altrlmak istenen kodlar buraya yazlr.
Private Sub menuYeni_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuYeni.Click End Sub

Men elerine isim verirken & iareti kullanlarak, kullancn klavyenin ALT tuuyla bu eyi altrmas salanabilir. & iareti hangi karakter ile kullanlrsa, ksayol olarak o karakter kullanlr (Resim 10.2).

RESM 10.2: Ksayol tuunun belirlenmesi.

332

Modl 10:

MenuItem zellikleri
TABLO 10.1: MenuItem zellikleri
zellik Deer Tipi Aklama Men esinin yannda seili olduuna dair bir iaretin gzkmesini salar. Men esinin aktif durumda olup olmadn belirler. enin seilme stilinin RadioButton dmesi olarak gzkmesini salar. Menye ulam iin bir ksayol tanmlar. Mennn ksayolunun, isminin yannda gzkmesini belirler. Alt menlerin tutulduu koleksiyondur.

Checked Enabled RadioCheck ShortCut ShowShortCut MenuItems

Boolean Boolean Boolean ShortCut Boolean MenuItemCollection

rnek:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dosya As New MenuItem("D&osya") ' Yeni ileminin yaplmas iin bir men eklenir. Dim yeni As New MenuItem("&Yeni") yeni.Shortcut = Shortcut.CtrlN yeni.ShowShortcut = True AddHandler yeni.Select, AddressOf YeniClick dosya.MenuItems.Add(yeni) ' Ama ileminin yaplmas iin bir men eklenir. Dim ac As New MenuItem("&A") ac.Shortcut = Shortcut.CtrlO ac.ShowShortcut = False AddHandler ac.Select, AddressOf AcClick dosya.MenuItems.Add(ac) MainMenu1.MenuItems.Add(dosya) End Sub Private Sub AcClick(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub YeniClick(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub

Men Tasarm ve MDI Formlar

333

RESM 10.3: Men rnei.

334

Modl 10:

ContextMenu

ContextMenu, bir kontrol sa tkland zaman alan mendr. Bu men uygulamaya eklendii zaman Properties panelinde, kontrollerin ContextMenu zellii olarak bu men atanabilir (Resim 10.4).

RESM 10. 4: ContextMenu zellii.

RESM 10.5: ContextMenu rnei.

Men Tasarm ve MDI Formlar

335

ToolBar

ToolBar kontrol menlerin altnda kullancya ksayollar ve kullanm kolayl sunan bir kontroldr. Kontroldeki eler ou zaman ImageList kontrolnn salad resimlerle gsterilir. Resim yerine yaz da gsterilebilir, ancak yaz ile ilemlerin listelenmesi menlerle salanr. ToolBar kontrolnde yaplacak ilemler bir ToolBarButton olarak gsterilir.

ToolBar zellikleri
TABLO 10.2: ToolBar zellikleri
zellik Deer Tipi Aklama Kontroln dmelerinin tutulduu koleksiyon Kontroldeki dmelerin bykln belirler. Dmelerin byklkleri ayr ayr belirlenemez. Stili DropDownButton olarak seilmi

Buttons ButtonSize

ToolBarButtonCollection Size

DropDownArrows

Boolean

ToolBarButton dmelerinin alt mensnn grnmesini belirler.

ToolBar kontrolne ToolBarButton dmeleri eklemek iin kontroln Buttons zelliinden faydalanlr. Tasarm annda Properties panelinden Buttons zellii tkland zaman alan pencerede, kontrole dme eklenir (Resim 10.6).

336

Modl 10:

RESM 10.6: ToolBarButton Collection Editor penceresi.

ToolBarButton zellikleri
TABLO 10.3: ToolBarButton zellikleri
zellik Deer Tipi Aklama Dmenin grnm stilini belirler.

Style

ToolBarButtonStyle

PushButton deeri standart bir dmeyi, ToggleButton tkland zaman basl kalan bir dmeyi,

Separator deeri dmeler arasnda


bir ayrac temsil eder.

DropDownButton deeri dmenin


yannda bir mennn alacan belirler.

DropDownMenu

Menu

Kontroln stili DropDownButton olarak seilmise, yannda kacak meny belirler. Bu men sadece

ContextMenu cinsinden olabilir. Pushed Text ImageIndex Boolean String Integer


Dmenin basl olup olmadn belirler. Dmenin zerinde yazan yazy belirler.

ToolBar kontrolne bir ImageList


balanmsa, bu zellik dmenin hangi resmi gstereceini belirler.

ToolTipText

String

Dmenin zerinde durulduu zaman gsterilecek ipucunu belirler.

Men Tasarm ve MDI Formlar

337

Dmeler tkland zaman almas istenen kodlar, ToolBar kontrolnn ButtonClick olayna yazlr. Ancak burada hangi dmenin tklandnn kod yazarak bulunmas gerekir.

RESM 10.7: ToolBar rnei. Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick Select Case ToolBar1.Buttons.IndexOf(e.Button) ' Ayralar da bir ToolBarButton olduu iin ' indisler kontrol edilirken buna dikkat edilmelidir Case 0 ' Kopyala Case 1 ' Kes Case 2 ' Yaptr Case 4 ' Geri Al Case 6 ' Yardm End Select End Sub

338

Modl 10:

ToolTip

Bu kontrol, form zerindeki kontrollerin zerine gelindii zaman ipucu gstermek iin kullanlr (Resim 10.9). ToolTip forma eklendii zaman, kontrollerin zelliklerinde ToolTip on [ToolTip kontrolnn ismi] eklinde bir zellik belirir. Bu zellie verilen yazlar, alma annda kontrollerin ipucunu belirler (Resim 10.8). ToolTip zellikleri
TABLO 10.4: ToolTip zellikleri
zellik Deer Tipi Aklama Kontroln aktif olup olmadn belirler. False deerini alrsa, form zerinde ipular grntlenmez.

Active

Boolean

AutomaticDelay

Integer

AutoPopDelay, InitialDelay, ReshowDelay deerleri iin otomatik sreleri


ayarlar. pucunun grntlenme sresini belirler. pucunun gzkmesi iin, fare imlecinin kontrol zerinde durmas gereken sreyi belirler Yeni bir kontroln zerine gelindii zaman, bu kontrole ait ipucunun gsterilmesi iin gereken sreyi belirler. Seilen kontrol aktif olmad zamanlarda dahi ipucunun gsterilmesini salar.

AutoPopDelay InitialDelay ReshowDelay

Integer Integer Integer

ShowAlways

Boolean

Men Tasarm ve MDI Formlar

339

RESM 10.8: ToolTip zellikleri.

RESM 10.9: ToolTip kontrol rnei.

340

Modl 10:

StatusBar

Bu kontrol, Windows uygulamalarnda formlarn altnda bulunan durum ubuunu temsil eder. Durum ubuklarnda sadece bir yaz grntlenebildii gibi, iindeki paneller ile birden fazla durum yazs grntlenebilir. StatusBar zellikleri
TABLO 10.5: StatusBar zellikleri
zellik Deer Tipi Aklama Kontroln iinde birden fazla yaz grntlemek iin kullanlan panelleri tutar. Birden fazla panelin gzkmesini belirler.

Panels ShowPanels SizingGrip

StatusBarPanel Collection Boolean Boolean

StatusBar kontrolnn yannda, formun


bykln deitirmek iin kullanlan simgenin gzkmesini belirler.

Text

String

StatusBar zerinde yazan yazy belirler. Eer ShowPanels zellii True ise, bu
zellikte yazlan yaz gzkmez.

StatusBar kontrolne panel eklemek iin kontroln Panels zelliinden

yararlanlr.

Men Tasarm ve MDI Formlar

341

RESM 10.10: StatusBarPanel Collection Editor penceresi.

Panel zellikleri
TABLO 10.6: Panel zellikleri
zellik Deer Tipi Aklama Panelin baz durumlara gre otomatik boyutlandrmasn salar. None deeri, panelin byklnn deimeyeceini,

AutoSize

StatusBarPanel AutoSize

Contents deeri, panelin ierdii yazya gre deieceini belirler. Spring deeri,
durum ubuundaki bo alanlarn paylalmasn salar.

BorderStyle

StatusBarPanel BorderStyle

Panelin kenarlk stilidir. Raised deeri, panelin bir dme gibi gzkmesini,

Sunken deeri, panelin bask gzkmesini salar. None deeri, kenarlarn gzkmesini engeller.

Alignment Text Width MinWidth Style

Horizontal Alignment String Integer Integer StatusBar PanelStyle

Panelin yazsnn hizalanmasnn belirler. Panel zerinde yazan yazy belirler. Panelin geniliini belirler. Panel byklnn minimum deerini belirler. Panelin zerindeki yazlarn stilini belirler.

Text deeri, normal yaz gzkmesini salar. OwnerDraw, deiik font ve renklerde yazlarn grntlenmesini salar. Panel zerinde grntlenen simgeyi belirler.

Icon

Icon

342

Modl 10:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim p As New StatusBarPanel p.MinWidth = 100 p.AutoSize = StatusBarPanelAutoSize.Contents p.Alignment = HorizontalAlignment.Left p.BorderStyle = StatusBarPanelBorderStyle.Raised p.Style = StatusBarPanelStyle.Text StatusBar1.Panels.Add(p) Timer1.Interval = 1000 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim panel As New StatusBarPanel panel = StatusBar1.Panels(0) panel.Text = Now End Sub

RESM 10.11: StatusBar kontrol rnei.

Men Tasarm ve MDI Formlar

343

NotifyIcon

Windows uygulamalarnn Windows grev ubuunda grntlenen simgesini belirler.

RESM 10.12: NotifyIcon kontrol rnei.

NotifyIcon zellikleri
TABLO 10.7: NotifyIcon zellikleri
zellik Deer Tipi Aklama Grev ubuunda gzkecek simgeyi belirler. Simge sa tkland zaman alacak meny belirler. Simge zerine gelindiinde grntlenecek yazy belirler.

Icon ContextMenu Text

Icon Menu String

344

Modl 10:

RichTextBox

Normal bir metin kutusundan daha gelimi zelliklere sahip bir kontroldr. TextBox kontrolnde yaznn yaz tipi, bykl gibi ayarlar yaplabilir. Ancak sadece seilen yaznn rengi, yaz tipi, satr ba genilii ve madde iaretleri kullanm gibi ayarlar yapmak mmkn deildir. RichTextBox kontrol, bu tip zengin zelliklerin kullanlmasn salar (Resim 10.12).

RESM 10.12: RichTextBox kontrol rnei.

RichTextBox zellikleri
RichTextBox kontrol kullancya birok seenek sunar; dolaysyla tasarm ve

alma srasnda eriilebilen birok zellii bulunur. Tasarm srasnda ulalabilen zellikler:

Men Tasarm ve MDI Formlar

345

TABLO 10.8: RichTextBox Tasarm Srasnda Ulalabilen zellikler


zellik Deer Tipi Aklama Metnin bykln belirler. 1 64 aras bir deer alr. Uzun yazlarn bir sonraki satra geerek grntlenmesini salar. Balant olarak girilen yazlarn

ZoomFactor WordWrap DetectUrls

Single Boolean Boolean

LinkLabel eklinde alglanmasn belirler.

Lines BulletIntend AcceptsTab

String() Integer Boolean

Satrlar String dizisi olarak tutar. Satrlarn madde iaretinden ka piksel akta duracan belirler. Tab tuunun bir karakter olarak alglanmasn, dolaysyla bu tua basldnda kontrolden klmasnn engellenmesini belirler. Satr bandaki boluun gsterilmesini belirler. Satrlarn maksimum uzunluunu piksel cinsinden belirler.

ShowSelectionMargin RightMargin

Boolean Integer

alma srasnda ulalabilen zellikler:


TABLO 10.9: RichTextBox alma Srasnda Ulalabilen zellikler
zellik Deer Tipi Aklama Kontrol iine yaz yazarken farenin gizlenmesini belirler. En son yaplabilecek Undo ileminin tipini tutar. Undo ilemi yapldktan sonra, en son yaplabilecek Redo ileminin ismini tutar. Seilen metni belirler. Seilen satrn madde iaretli olarak grntlenmesini belirler. Seilen satrn hizalanmasn belirler. Seilen metnin rengini belirler. Seilen metnin yaz tipini belirler. Seilen satrn, sol kenara olan uzakln belirler. Seilen metnin uzunluunu belirler.

Capture UndoActionName RedoActionName SelectedText SelectionBullet SelectionAlignment SelectionColor SelectionFont SelectionIntend SelectionLength

Boolean String String String Boolean Boolean Color Font Integer Integer

346

Modl 10:

RichTextBox Metotlar
TABLO 10.10: RichTextBox Metotlar
Metot Aklama Metin kutusu iinde, parametre olarak verilen bir yazy arar. Yazy ilk grd yerin indisini dndrr. Bir dosyadan alnan metni ykler. Parametre olarak verilen konumdaki dosyaya, metni yazar. Dosyann

Find LoadFile SaveFile

*.rtf veya *.doc uzantlarnda kaydedilmesi, zengin ieriin


grntlenmesi asndan nemlidir.

Undo Redo

Yaplan ilem geriye alnr. Geri alnan ilem tekrar yaplr.

RichTextBox Olaylar
TABLO 10.11: RichTextBox Olaylar
Olay Aklama Metin kutusundaki yaz deitii zaman gerekleir. Metin iindeki bir balantya tkland zaman gerekleir.

TextChanged LinkClicked

Men Tasarm ve MDI Formlar

347

Lab 1: Notepad Uygulamas


Bu labda, RichTextBox kontrolnn salad kolaylklarla bir metin editr uygulamas gelitirilecektir. Bu uygulamann kullanmn kolaylatrmak iin menler, ara ubuu ve durum ubuundan faydalanlr.

RESM 10.13: Notepad uygulamas.

Bu labda kullanlan kontroller ve teknikler:


MainMenu. Dosya, dzen, grnm ve yardm ilemleri iin kullanlr. ContextMenu. Ara ubuunu gizlemek ve kopyala, yaptr, kes gibi metin ilemleri iin kullanlr. RichTextBox. Yazlan metnin tutulmas iin kullanlr. NotifyIcon. Uygulamann simgesinin grev ubuunda gzkmesini

salar.
ToolBar. Kaydetme, dosya ama, hizalama gibi ilemlere ksayollar

salamak iin kullanlr.


ImageList. Ara ubuundaki dmeleri resimlerini belirlemek iin

kullanlr.
SaveFileDialog. Dosyalarn kaydedilmesi srasnda kullanlr. OpenFileDialog. Dosyalar amak iin kullanlr. FontDialog. Yaz tipini deitirmek iin kullanlr. StatusBar. Dosyalar ald zaman isimlerini ve kayt durumlarn g-

rntlemek iin kullanlr.

Kontrollerin Eklenmesi
Form zerine Tablo 10.12deki kontrolleri ekleyin ve belirtilen zellikleri ayarlayn.

348 TABLO 10.12: Eklenecek Kontroller


Kontrol Kontrol smi zellik Deer

Modl 10:

ContextMenu ContextMenu1 ContextMenu ContextMenu2 ToolBar ToolBar1 Buttons

Geri Al, Kes, Kopyala, Yaptr, Sil, Tmn Se deerlerini ieren men eleri ekleyin. Gizle deerini ieren bir men esi ekleyin. Kaydet, A, Kopyala, Kes, Yaptr, Undo, Redo, Madde aretle, Sola Hizala, Saa Hizala, Ortala komutlar iin dmeler ekleyin. Her dmenin ImageIndex zelliine,

ImageList iinde bulunan resimlerden uygun olann indisini atayn.

ImageList ImageList1 OpenFileDialog OpenFileDialog1 SaveFileDialog SaveFileDialog1 FontDialog FontDialog1 StatusBar StatusBar1

Images

Ara ubuundaki eleri temsil eden resimler ekleyin.

ShowPanels Panels

True
ki tane panel ekleyin. lk panelin AutoSize zelliini Contents olarak belirleyin. Uygulamanz iin bir simge sein "Notepad Uygulamas"

NotifyIcon NotifyIcon1 RichTextBox RichTextBox1

Icon Text Dock

True

Uygulamaya son olarak bir MainMenu ve ilgili alanlara MenuItem elerini ekleyin. Parantez iinde belirtilen tular, men elerine erimek iin kullanlacak ksayollardr. Bu deerleri, men elerinin ShortCut zelliine ekleyin. Dosya Yeni (Ctrl+ N) A (Ctrl+O) Kaydet (Ctrl+ S) Farkl Kaydet k

Men Tasarm ve MDI Formlar

349

Dzen Geri Al (Ctrl+ Z) Kes (Ctrl+X) Kopyala (Ctrl+C) Yaptr (Ctrl+V) Sil Bul Yaz Tipi Tmn Se Grnm Sola Hizala Saa Hizala Ortala Madde aretle Ara ubuunu gizle Yardm Hakknda Uygulamaya frmBul isminde yeni bir form ekleyin. Bu form, metin kutusunda aranan deeri bulmak iin kullanlacaktr. Forma, arama ilemleri iin gereken kontrolleri ekleyin.
TABLO 10.13: Eklenecek Kontroller
Kontrol Kontrol smi zellik Deer

Button Button1 Button Button2 CheckBox cbTumKelimeyiSec TextBox txtAranan

DialogResult Text Text Text Checked

DialogResult.OK
"Bul" "ptal" "Bulduktan sonra tm

kelimeyi se" True

Kontrolleri ekledikten sonra Button1 ve Button2 dmelerinin Click olayna, formu kapatan kodlar yazn:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click Me.Close() End Sub

350

Modl 10:

RESM 10.14: Notepad Bul ilemi.

Uygulamaya frmHakkinda isminde yeni bir form ekleyin. Bu form, uygulama bilgilerini ierir.

RESM 10.15: Notepad Hakknda penceresi.

Kodlarn Yazlmas
Dosya ismini ve dosyann kaydedilip edilmediini tutan deikenleri tanmlayn.
Private Kaydedildi As Boolean = True Private DosyaIsmi As String

Men elerine kod eklemeden nce, yaplacak ilemler yordamlar iine yazlr. Bylece kodun karmakl azalr ve deiiklik yapmak kolaylar. Durum ubuunda deiiklik yapma ilemlerini yazn. Durum ubuu, dosya ama kaydetme gibi ilemler sonunda deiecektir.
Sub DurumDegistir() ' lk panele dosya ismi yazlr StatusBar1.Panels(0).Text = DosyaIsmi ' kinci panele kayt durumu yazlr If Kaydedildi Then StatusBar1.Panels(1).Text = "Kaydedildi" Else

Men Tasarm ve MDI Formlar

351

StatusBar1.Panels(1).Text = "Kaydedilmedi" End If End Sub

Dosyaya kaydetme ve farkl kaydetme ilemlerini yazn.


' Kaydetme ilemi Sub Kaydet() If DosyaIsmi = "" Then FarkliKaydet() Else RichTextBox1.SaveFile(DosyaIsmi) Kaydedildi = True End If DurumDegistir() End Sub ' Farkl kaydetme ilemi Sub FarkliKaydet() Dim dosya As String ' Kaydedilecek yeri semek iin ' SaveFileDialog kutusu gsterilir ' Dosya yoksa otomatik olarak oluturulmas salanr SaveFileDialog1.CreatePrompt = True If SaveFileDialog1.ShowDialog = DialogResult.OK Then dosya = SaveFileDialog1.FileName() RichTextBox1.SaveFile(dosya) DosyaIsmi = dosya Kaydedildi = True End If DurumDegistir() End Sub

Yeni bir dosya veya var olan bir dosyay ama ilemlerini tanmlayn.
Sub DosyaAc(ByVal yeniDosya As Boolean) If Not Kaydedildi Then Select Case MsgBox("Dosya kaydedilsin mi?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.OK ' Kaydetme ilemi yaplr Kaydet() Case MsgBoxResult.Cancel

352 ' lem iptal edildi Exit Sub End Select End If If Not yeniDosya Then ' Varolan bir dosya alr. Dim dosya As String

Modl 10:

If OpenFileDialog1.ShowDialog = DialogResult.OK Then dosya = OpenFileDialog1.FileName RichTextBox1.LoadFile(dosya) DosyaIsmi = dosya End If Else ' Yeni bir dosya alr RichTextBox1.Clear() DosyaIsmi = "" End If Kaydedildi = True DurumDegistir() End Sub

Bulma ilemlerini gerekletiren kodlar yazn. Burada yeni bir form alp, orda girilen deerlere gre arama ilemi yaplr.
Sub Bul() ' Bulma formu grntlenir, iptal tuuna basldysa klr Dim bul As New frmBul Sub If Not bul.ShowDialog = DialogResult.OK Then Exit

Dim aranan As String = bul.txtAranan.Text If aranan = "" Then Exit Sub ' Bulduktan sonra kelimenin tmn iaretlenmesi bilgisi alnr Dim TumKelimeyiSec As Boolean = bul.cbTumKelimeyiSec.Checked ' Bulunan ilk indis alnr. Dim start As Integer = RichTextBox1.Find(aranan)

Men Tasarm ve MDI Formlar

353

If Not TumKelimeyiSec Then ' Sadece aranan kelime seilir. RichTextBox1.Select(start, aranan.Length) Else Dim son As Integer = start Dim bas As Integer = start While son < RichTextBox1.Text.Length - 1 AndAlso RichTextBox1.Text.Substring(son, 1) <> " " son += 1 End While While bas > -1 AndAlso RichTextBox1.Text.Substring(bas, 1) <> " " bas -= 1 End While RichTextBox1.Select(bas + 1, son - bas - 1) End If End Sub ToolBar dmeleri tkland zaman gerekleecek kodlar yazn.
DKKAT Bu kodda belirtilen indis numaralar, uygulamanzda ToolBar kontrolne eklediiniz dmelerin indis numaralar ile farkllk gsterebilir. Yaplan ilemler yorum satr olarak geilmitir. Bu ilemleri, dmelerin indislerine gre tekrar dzenleyin. Dmelerin indislerini renmek iin ToolBar kontrolnn Buttons zelliine bakn.

Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick ' Baslan dmenin indisine gre ilem yaplr. Select Case ToolBar1.Buttons.IndexOf(e.Button) Case 0 'Kaydet Kaydet() Case 1 ' Ac DosyaAc(False) Case 3 ' Kopyala RichTextBox1.Copy() Case 4 ' Kes RichTextBox1.Cut() Case 5

354 ' Yaptr RichTextBox1.Paste() Case 7 ' Geri Al RichTextBox1.Undo() Case 8 ' Tekrarla RichTextBox1.Redo() Case 10 ' Madde iaretle RichTextBox1.SelectionBullet = Not RichTextBox1.SelectionBullet Case 11 ' Sola Hizala RichTextBox1.SelectionAlignment = HorizontalAlignment.Left Case 12 ' Ortala RichTextBox1.SelectionAlignment = HorizontalAlignment.Center Case 13 ' Saa Hizala RichTextBox1.SelectionAlignment = HorizontalAlignment.Right End Select End Sub

Modl 10:

Dosya iinde bulunan bir balant tkland zaman, bu balanty ilgili taraycda aan kodlar yazn.
' Linke git Private Sub RichTextBox1_LinkClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.LinkClickedEventArgs) Handles RichTextBox1.LinkClicked System.Diagnostics.Process.Start(e.LinkText) End Sub

Dosya iine yazlan yaz deitii zaman gereken kodlar yazn.


Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged Kaydedildi = False DurumDegistir() End Sub

Men Tasarm ve MDI Formlar

355

Uygulama kapanrken dosyann kaydedilip kaydedilmeyeceini soran kodlar yazn.


' Kapanrken dosyann kaydedilmesi kontrol edilir. Private Sub Form3_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing If Not Kaydedildi Then Select Case MsgBox("Dosya kaydedilsin mi?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.OK ' Kaydetme ilemi yaplr Kaydet() Case MsgBoxResult.Cancel ' lem iptal edildi e.Cancel = True End Select End If End Sub

Her men esinin altna, ilgili ilemleri yazn. Burada dikkat edilmesi gereken nokta, baz ContextMenu elerinin ve MainMenu elerinin ayn ilemi yaptdr. rnein Geri Al komutu, her iki mende de vardr. Bu kodlar farkl yordamlar yerine, ayn yordamn iine yazarak Handles ifadesine iki men esinin Click olay yazlr. rnek:
Private Sub MenuItem19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem19.Click, MenuItem5.Click RichTextBox1.Undo() End Sub
DKKAT Bu kodda belirtilen men isimleri, uygulamanzda MainMenu veya ContextMenu kontrolne eklediiniz menlerin isimleri ile farkllk gsterebilir. Yaplan ilemler yorum satr olarak geilmitir. lgili men esini ift tklayarak Click olaynda, burada belirtilen ilemleri yazn.

' Yeni Dosya a Private Sub MenuItem13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem13.Click DosyaAc(True) End Sub ' Dosya A

356 Private Sub MenuItem14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem14.Click DosyaAc(False) End Sub ' Kaydet Private Sub MenuItem15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem15.Click Kaydet() End Sub ' Farkl Kaydet Private Sub MenuItem16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem16.Click FarkliKaydet() End Sub ' k Private Sub MenuItem18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem18.Click Application.Exit() End Sub ' Geri al Private Sub MenuItem19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem19.Click, MenuItem5.Click RichTextBox1.Undo() End Sub ' Kes Private Sub MenuItem21_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem21.Click, MenuItem7.Click RichTextBox1.Cut() End Sub ' Kopyala Private Sub MenuItem22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem22.Click, MenuItem8.Click RichTextBox1.Copy() End Sub

Modl 10:

Men Tasarm ve MDI Formlar

357

' Yaptr Private Sub MenuItem23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem23.Click, MenuItem9.Click RichTextBox1.Paste() End Sub ' Yaz sil Private Sub MenuItem24_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem24.Click, MenuItem10.Click ' silinecek kelime RichTextBox kontrolnde seilen kelimedir Dim silinecek As String = RichTextBox1.SelectedText ' secilen kelimenin indisi bulunur Dim i As Integer = RichTextBox1.SelectionStart RichTextBox1.Text = RichTextBox1.Text.Remove(i, silinecek.Length) End Sub ' Tm yazy se Private Sub MenuItem28_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem28.Click, MenuItem12.Click RichTextBox1.SelectAll() End Sub ' Yaz tipini se Private Sub MenuItem36_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem36.Click ' Font seerken, renklerin de grnmesi salanr. FontDialog1.ShowColor = True If FontDialog1.ShowDialog = DialogResult.OK Then RichTextBox1.SelectionFont = FontDialog1.Font End If End Sub ' Sola Hizala Private Sub MenuItem29_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem29.Click RichTextBox1.SelectionAlignment = HorizontalAlignment.Left End Sub

358 ' Saa Hizala Private Sub MenuItem30_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem30.Click RichTextBox1.SelectionAlignment = HorizontalAlignment.Right End Sub ' Ortala Private Sub MenuItem31_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem31.Click RichTextBox1.SelectionAlignment = HorizontalAlignment.Center End Sub ' Madde iaretle Private Sub MenuItem33_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem33.Click RichTextBox1.SelectionBullet = Not RichTextBox1.SelectionBullet End Sub ' Hakknda formunun gsterilmesi Private Sub MenuItem34_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem34.Click Dim hakkinda As New frmHakkinda hakkinda.ShowDialog() End Sub ' Ara ubuunun gizlenmesi, MainMenu ve Toolbar kontrolne ' atanan ContextMenu yaplr. Private Sub MenuItem37_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem37.Click, MenuItem38.Click ToolBar1.Visible = MenuItem37.Checked MenuItem37.Checked = Not MenuItem37.Checked End Sub ' Dosya bulunmas Private Sub MenuItem26_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem26.Click Bul() End Sub End Class

Modl 10:

Men Tasarm ve MDI Formlar

359

MDI Formlar

Multiple Document Interface formlar, iinde birden fazla form barndran formlardr. MDIChild olarak eklenen bu formlar birbirinden tamamen bamszdr. rnein bir Excel dosyas iinde birden fazla sayfa olabilir. Bu sayfalar ana forma baldr. Ana form kapand zaman bu sayfalar da kapanr. MDIParent olarak nitelendirilen bu ana formlarn, MDIChild formlarn amak ve ynetmek iin menlere ihtiyalar vardr. Formlar MDI olarak tanmlamak iin IsMdiContainer zelliinin True olarak ayarlanmas gerekir (Resim 10.16).

RESM 10.16: isMDIcontainer zellii.

MDI formlara alt formlar eklemek iin, form oluturma ilemleri bilinen ekilde yaplr. Ancak formun MDIParent zellii belirlenmelidir.
Dim f As New AltForm ' Oluturulan form, ana forma balanr. f.MdiParent = Me f.Show()

360

Modl 10:

Bir formun sahip olduu alt formlara ulamak iin, MDIChildren zelliinden yararlanlr. Bu zellik tek boyutlu bir form dizisidir.
' Tm formlar kapatr. ' Alt formlar kapand zaman, dizi otomatik olarak ' yeniden boyutlandrlr. While Me.MdiChildren.Length > 0 Me.MdiChildren(0).Close() End While ' Tm formlar Minimize eder For i As Integer = 0 To Me.MdiChildren.Length - 1 Me.MdiChildren(i).WindowState = FormWindowState.Minimized Next

RESM 10.17: MDI formlar.

Alt formlar geniletildiklerinde, form zerinde yazan balk ana forma tanr. Alt formda tanml bir men, ana formun mens ile birleir. Bu men birleim ilemine Merge denir. Men eleri, varsaylan durumda ana formdaki menlerin yanna eklenir. Ancak men elerinin MergeType zellii ile varsaylan deer deitirilebilir.
MergeType.Add. Varsaylan deerdir. Bu deeri alan men eleri, birleme sonucunda menye eklenir. MergeType.MergeItem. Bu deeri alan menler, sonu mensnde ayn MergeOrder deerindeki menlerle birleir. MergeType.Replace. Birleme sonucunda bu men, ayn MergeOrder

deerinde olan e ile deitirilir.


MergeType.Remove. Birleme sonucunda bu men kartlr.

RESM 10.18: Ana formdaki men.

Men Tasarm ve MDI Formlar

361

RESM 10.19: Alt formdaki men.

RESM 10.20: Birletirilmi men.

Alt formlar, ana forma basamak eklinde eklenir. Birok alt form ile allyorsa, bu formlarn dzenlenmesine ihtiya duyulur. Alt formlar dzenlemek iin formun LayoutMdi metodu kullanlr.
Me.LayoutMdi(MdiLayout.TileHorizontal) Me.LayoutMdi(MdiLayout.TileVertical) Me.LayoutMdi(MdiLayout.Cascade) Me.LayoutMdi(MdiLayout.ArrangeIcons)

MDI Form iindeki alt formlardan seili olana ulamak iin, formun ActiveMdiChild zellii kullanlr.
If Not Me.ActiveMdiChild Is Nothing Then Me.Text = Me.ActiveMdiChild.Text End If

362

Modl 10:

Fare Olaylar

Fare olaylar, formlar zerinde farenin bir tuunun tklanmas ya da bir kontroln zerine gelinmesi gibi olaylardr. Bu olayla ilgili parametreler, olay gerekletii zaman MouseEventArgs nesnesi ile kullancya bildirilir.
MouseEventArgs zellikleri: Button. Hangi fare dmesinin tklandn gsterir. Click. Olay gerekleene kadar, dmeye ka defa tklandn belir-

ler. rnein fareye ift tklanmsa 2 deerini alacaktr.


Delta. Farenin ortadaki dmesinin dnme orann gsterir. X. Kontrole gre, farenin tkland pozisyonun x koordinatn gsterir. Y. Kontrole gre, farenin tkland pozisyonun y koordinatn gsterir.
NOT Fare olaylar MDI formlar zerinde gereklemez.

MouseDown olay
Farenin herhangi bir dmesine basld zaman gerekleir. Kontroln Click olayndan nce alr.

MouseUp olay
Farenin baslan dmesi kaldrld zaman gerekleir.

MouseMove olay
Farenin, kontrol zerinde hareket etmesi ile gerekleir.

Men Tasarm ve MDI Formlar

363

Lab 2: File Browser


Bu labda, verilen bir konumdaki klasrlerin listelenmesi ve seilen klasrn bilgilerinin alt formlarda grnmesi uygulamas gerekletirilecektir.

RESM 10.21: File Browser uygulamas.

Bu labda kullanlan kontroller ve teknikler:


MainMenu. Klasrlerin grntlenecei konumu belirlemek, yeni klasr eklemek ve klasr silmek gibi ilemler iin kullanlr. ContextMenu. Seilen klasrn alt klasrlerini listelemek ve klasr liste-

den kaldrmak iin kullanlr.


TreeView. Belirtilen konumdaki klasrleri ve alt klasrleri listelemeyi sa-

lar.
StatusBar. Seilen dosyalarn konumlarn grntlemeyi salar. ListBox. Alt klasrlerin listelenmesi iin kullanlr.

Kontrollerin Eklenmesi
Form zerine Tablo 10.14teki kontrolleri ekleyin ve belirtilen zellikleri ayarlayn.
TABLO 10.14: Eklenecek Kontroller
Kontrol Kontrol smi zellik Deer

Form ContextMenu ContextMenu1

isMDIContainer

True
Alt Klasrler ve Kaldr deerlerini ieren men elerini ekleyin.

364 TABLO 10.14: Eklenecek Kontroller


Kontrol Kontrol smi zellik Deer

Modl 10:

MainMenu MainMenu1

Yeni Konum ve Dosya Bilgileri deerlerini ieren men elerini ekleyin.

StatusBar StatusBar1 TreeView TreeView1

Uygulamaya DosyaBilgileri isminde yeni bir form ekleyin. Form iine Tablo 10.15teki kontrolleri ekleyin ve zelliklerini ayarlayn.
TABLO 10.15: Eklenecek Kontroller
Kontrol Kontrol smi zellik Deer Yeni, Sil ve Kapat deerlerini ieren men elerini ekleyin.

MainMenu MainMenu1 ListBox ListBox1 Dock

Fill

Kodlarn Yazlmas
Ana Form Belirtilen konumdaki klasrleri listeleyen kodlar yazn.
Function KlasorleriAl(ByVal konum As String) As String() Dim klasorler() As String = System.IO.Directory.GetDirectories(konum & "\") For i As Integer = 0 To klasorler.Length - 1 klasorler(i) = klasorler(i).Remove(0, konum.Length + 1) Next Return klasorler End Function

Form zerinde grntlenecek klasrlerin bulunduu yeri tutan deikeni ve yeni formun almasn yazn.
Private YeniKonum As String Sub FormBilgileri() Dim f As New DosyaBilgileri f.MdiParent = Me f.Text = YeniKonum & TreeView1.SelectedNode.FullPath

Men Tasarm ve MDI Formlar

365

f.KlasorleriListele() f.Show() End Sub

Yeni konumu seen men altna, TreeView kontrolnde alt klasrleri listeleyen kodlar yazn.
' Yeni konumun seilmesi Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click "C:\") YeniKonum = InputBox("Konum girin:", "Yeni Konum",

Dim klasorler() As String = KlasorleriAl(YeniKonum) For i As Integer = 0 To klasorler.Length - 1 TreeView1.Nodes.Add(klasorler(i)) Next TreeView1.SelectedNode = TreeView1.Nodes(0) End Sub TreeView kontrolnde bir klasr seildii zaman durum ubuunda klasrn ismini grntleyen kodlar yazn. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect StatusBar1.Text = YeniKonum & TreeView1.SelectedNode.FullPath End Sub ContextMenu iinde tanmlanan ilemleri yazn.

Alt klasrlerin listelenmesi.


' Alt klasrler Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click Dim secilen As TreeNode = TreeView1.SelectedNode secilen.Nodes.Clear() Dim konum As String = YeniKonum & secilen.FullPath Dim altKlasorler() As String = KlasorleriAl(konum)

366

Modl 10:

For i As Integer = 0 To altKlasorler.Length - 1 secilen.Nodes.Add(altKlasorler(i)) Next End Sub

Klasrn kaldrlma ilemi.


' Seilen klasrn listeden kaldrlma ilemi Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click Dim secilen As TreeNode = TreeView1.SelectedNode If secilen Is Nothing Then Exit Sub If secilen.Parent Is Nothing Then TreeView1.Nodes.Remove(secilen) Else secilen.Parent.Nodes.Remove(secilen) End If End Sub

Dosya bilgilerini grntleyen kodlar yazn.


' Dosya bilgileri MainMenu esine tklandnda Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem5.Click FormBilgileri() End Sub ' Dosya bilgileri TreeView esine ift tklandnda Private Sub TreeView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TreeView1.MouseDown If e.Clicks = 2 Then FormBilgileri() End If End Sub

Farenin ortadaki tekerleinin dndrlmesi ileminde, TreeView iinde seilen eden bir nceki veya bir sonraki eye gidilmesi iin gereken kodlar yazn.
Private Sub TreeView1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TreeView1.MouseWheel If TreeView1.SelectedNode Is Nothing Then Exit Sub

Men Tasarm ve MDI Formlar

367

If e.Delta < 0 Then Dim sonraki As TreeNode = TreeView1.SelectedNode.NextNode If Not sonraki Is Nothing Then TreeView1.SelectedNode = sonraki End If Else Dim onceki As TreeNode = TreeView1.SelectedNode.PrevNode If Not onceki Is Nothing Then TreeView1.SelectedNode = onceki End If End If End Sub DosyaBilgileri formunda yazlacak kodlar:

Alt klasrlerin listelendii kodlar yazn.


Sub KlasorleriListele() ListBox1.Items.Clear() Dim klasorler() As String = System.IO.Directory.GetDirectories(Me.Text & "\") For i As Integer = 0 To klasorler.Length - 1 ListBox1.Items.Add(klasorler(i)) Next End Sub

Yeni klasrn eklenmesi iin gereken kodlar yazn.


Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click Dim yeniKlasor As String = InputBox("Yeni klasr ismi girin:") yeniKlasor = yeniKlasor.Insert(0, Me.Text & "\") System.IO.Directory.CreateDirectory(yeniKlasor) KlasorleriListele() End Sub

Seilen klasrn silinmesini salayan kodlar yazn.


Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click Dim silinecek As String

368 silinecek = ListBox1.SelectedItem System.IO.Directory.Delete(silinecek, True) KlasorleriListele() End Sub

Modl 10:

Men Tasarm ve MDI Formlar

369

Modl Sonu Sorular & Altrmalar


1. MainMenu ve ContextMenu nesnelerini ve kullanm alanlarn aklayn. Kontrolleri ieren bir uygulama gelitirin. 2. ImageList kontrolnn kullanm amacn ve nasl kullanldn aklayn. Kontrol ieren bir uygulama gelitirin. 3. SDI ve MDI form yaplarn aklaynz ve her iki tr iin birer rnek uygulama gelitirin.

Modl 11: Veri Yaplar

Birok irket, kurum ve kaytlarn tutan yaplar iin verilerin nemi ok byktr. Verilerin kat zerinde tutulmas, hem aramalarn yaplmas, hem de kayt dzeni asndan ok zor bir yntemdir. Bilgisayarlarn i yaamnda kullanlmaya balanmas ile verilen ynetimi daha da kolaylat. Ancak bu teknoloji ilerledike kullanlmas zorlamaya balad. Verilerin tutulmas metin dosyalarndan tablolara aktarld. Gnmzde veri ve tablo yaplarnn ynetimi artk veritaban yneticilerin eline braklm durumdadr. Windows ve Web uygulamalarn ou veri zerine younlar. Uygulamalarda veriye hzl bir ekilde ulamak ve veriyi ynetmek iin tablo yaplarnn iyi bir ekilde modellenmesi gerekir. Bu modlde Microsoft Access veritaban zerinde veri yaplarnn kullanlmas ilenecektir. Bu modl tamamladktan sonra; Microsoft Access ortamn tanyacak, Veritabanlarnda kullanlan deiik veri tiplerini tanyacak, Veri modelleme tekniklerini reneceksiniz.

374

Modl 11:

Konu 1: Access e Giri

Access Microsoftun ilikisel veritaban uygulamasdr. indeki birok sihirbaz yardm ile kullanm kolayl ve tablo tasarmlarnn hzl bir ekilde yaplabilmesini salar. Access tasarm grnmlerinde, tablolarn yapsn analiz etmek iin kullanlan sorgularn kolay bir ekilde oluturmas salanr. Karmak bir dosya yaps olmamas, veritabannn tanabilirliini kolaylatrr ve her platformda alabilmesini salar.

Veri Yaplar

375

Access Ortam

Access ortam, veritaban gelitirirken kullancya birok kolaylk sunar. Access ald zaman sa panelde Grev Blmesi kar (Resim 11.1). Bu panel birok ileme ksayol salar. Balang. Access Office Online balang sayfasdr. Microsoft haber sitelerine balantlar ve en son alan veritabanlarn listeler. Yardm. Online yardm seeneklerini sunar. Arama sonular. Online yardmda bulunan sonular listeler. Dosya arama. Belirtilen yerde, belli tipte dosyalar aramay salar. Yeni dosya. Yeni bir veritaban dosyas veya veri eriim dosyas amak iin kullanlr.

RESM 11.1: Grev Blmesi.

376

Modl 11:

Bo veritaban ama komutu verildii zaman, Yeni Veritaban Dosyas iletiim kutusunda dosya ismi girilip yeni veritaban oluturulur. Oluturulan veritaban dosyalarnn uzants *.mdb olur. Daha nceden oluturulmu bir veritabann amak iin Dosya mensnden A komutu verilir. Ctrl+O ksayolu da dosyalar amak iin kullanlabilir. Veritaban ald zaman, veritaban zerinde yaplabilecek tm ilemleri sunan bir pencere kar (Resim 11.2). Veritaban nesnelerini ynetilmesi bu pencere ile yaplr. Sol panelde bulunan Nesneler sekmesinde, veritabannda bulunabilecek tm nesneler listelenir. Bir nesne tipi seildiinde, veritabannda bulunan bu tipteki tm eler grntlenir. rnein, Tablolar sekmesine gelindiinde veritaban zerindeki tablolar grntlenir, yeni tablo oluturmak iin seenekler sunulur.

RESM 11.2: Veritaban penceresi.

Veritaban Nesnesi Oluturmak


Veritaban penceresinde nesneleri oluturmak iin farkl ksayollar bulunur. Tablolar oluturmak iin bu ksayollardan yararlanlabilir. Tasarm grnmnde tablo olutur. Bu seenek ile tablodaki verilerin tasarm tamamen kullancya braklmtr. Kullanc alan adlarn kendisi girip, ilgili veri tipini ve gerekli ayarlar seebilir (Resim 11.3). Sihirbaz kullanarak tablo olutur. Access iinde ok sk karlalan, kullancya byk hz salayan sihirbaz yardm ile tablo oluturulur. Sihirbaz, hangi tipte tablo oluturulacan, nceden hazrlanm zengin ablonlar kullancya sunarak belirler (Resim 11.4). Veriler girerek tablo olutur. Bu seenek ile tablolar veri girii ile oluturulur (Resim 11.5). Access kullancnn girdii verilere gre alan saysn ve tiplerini belirler. Ancak alan adlar daha sonradan deitirilmelidir (Resim 11.6).

Veri Yaplar

377

RESM 11.3: Tasarm grnmnde tablo oluturmak.

RESM 11.4: Sihirbaz ile tablo oluturmak.

RESM 11.5: Veri girerek tablo oluturmak.

Oluturulan tablolar tasarm ve veri sayfas grnmlerinde incelenebilir. Veri sayfas grnm, veri giriinde kullancya byk kolaylk salar. rnein, Evet/Hayr veri tipindeki bir alana veri girilmesi iin bir CheckBox grntlenir. Ayrca tablonun ilikide olduu tablolar bulunur ve alt tablo olarak kullancya sunulur (Resim 11.7).

378

Modl 11:

RESM 11.6: Alan adlarnn deitirilmesi.

RESM 11.7: Veri sayfasnda ilikili tablolarn grntlenmesi.

Tablolar oluturulduktan sonra, aralarndaki ilikilerin kurulmas ve grntlenmesi iin ara ubuundaki likiler dmesi kullanlr (Resim 11.8).

RESM 11.8: likiler dmesi.

Veri Yaplar

379

Konu 2: Veri Yaplarna Giri

Veritabanlarnda tm veriler ayn tipte tutulmaz. Bu durum, kk veriler iin fazla yer alanlar amay engelledii gibi, deiik formatlardaki verilerin ynetilebilirliini de artrr. rnein kategori tablosunda tutulan verilerin says genellikle azdr ve ok fazla artmaz. Dolaysyla bu verilerin tekil alannda tutulan saynn ok byk veri tipinde olmas gerekmez. Ancak makalelerin tutulduu bir alann kapasitesinin ok byk olmas gerekir.

380

Modl 11:

Metin Veri Tipleri


Metin (Text). Metin bilgilerini tutmak iin tanmlanan veri tipidir. Bu deere girilebilecek maksimum karakter says 255tir. Bir alana belirtilen uzunluktan kk bir deer girildiinde, kalan bo yerler iin kaynak ayrlmaz. Metin veri tipi saysal deerler de ierebilir. Not (Memo). Maksimum 65535 karakter tutar. Byk metinsel veriler iin tercih edilmelidir.

Saysal Veri Tipleri


Say veri tipinin birden fazla alan bykl vardr. Bayt (Byte). 0 ile 255 arasnda bir say. Tamsay (Integer). 32,768 ile 32,767 arasnda bir say. Uzun Tamsay (Long Integer). 2,147,483,648 ile 2,147,483,647 arasnda bir say. Tek (Single). Negatif say aral: 3.402823E+38 ile 1.401298E45 Pozitif say aral: 1.401298E45 ile 3.402823E38. ift (Double). Negatif say aral: 1.79769313486231E+308 ile 4.94065645841247E324. Pozitif say aral: 1.94065645841247E 324 ile 1.79769313486231E+308. Ondalk (Decimal). 10^381 ile 10^381 arasnda say. Otomatik Say (AutoNumber) veri tipi, alana veri girildii zaman otomatik olarak belirlenen saylar ifade eder. Saylar rasgele ya da birden balayarak girilir.

Tarih Veri Tipi


Tarih alanlar iin deiik byklklerde depolama seenekleri sunar. Genel Tarih. Ksa Tarih ve Uzun Saat birleimi bir grnmdr. Uzun Tarih. 12 Aralk 2004 Pazar formatnda grnr. Orta Uzunlukta Tarih. 12 Ara 2004 formatnda grnr. Ksa Tarih. 12.12.2004 formatnda grnr. Uzun Saat. 15:11:19 formatnda grnr. Ksa Saat. 15:11 formatnda grnr

Evet/Hayr Veri Tipi


Bir bit deerinde, Evet ve Hayr deerlerini alan veri tipidir. Veri sayfalarnda veya sorgu sonucunda bir CheckBox ile ifade edilir. Eer seili ise bu alann deeri -1, deilse 0 olur. Bu alan sorgulanrken -1 ve 0 deerleri kontrol edilmelidir.

Veri Yaplar

381

OLE Veri Tipi


Alana bir nesne eklemek veya balamak iin kullanlan veri tipidir. Resimler, Excel dosyalar veya bir dosyadan seebileceiniz herhangi bir nesne balanabilir.

382

Modl 11:

Konu 3: Veri Modelleme Gereksinimleri

Verileri tablolarda tutarken baz modellemelere gereksinim duyulur. rnein, yazlan bir verinin tekrarlamamas nemlidir. rnler tablosunda kategori isim olarak tutulursa, ayn kategorideki rnler iin bu ismin tekrar yazlmas gerekecektir. Bu durum, hem tabloya veri giriini zorlatrr, hem de deiiklik yaplmak istenirse, her rnn kategorisini deitirmek gerekir. Bu tip sorunlar, normalizasyon kurallarn ortaya karmtr. Normalizasyon, yer alanndan kazanma, veri tutarll ve leklenebilirlik amacyla tablolardan gereksiz verilerin kartlmas ilemleridir. Bu ilemler, tablolarn etapta normal formlara getirilmesi ile gerekleir.

Veri Yaplar

383

Birinci Normal Form

Bu ilem, yatay dzeyde gereksiz veya tekrarlanan verilerin kartlmasdr. Satrlarda en az dzeyde veri tutulmas ve bir bilginin sadece bir kolonda bulunmas salanr. rnek: Bu rnekte bir eitmen grubunun yapt projeler bir veritabannda tutulur. Verilerin tek bir tabloda tutulmas baz problemlere yol aar.
Eitmen1 Ali Ali Eitmen2 Veli Veli Proje Uzmanlk Kitab Mhendislik Kitab Konu Windows Windows, Web Saat 300 350 Kurum BilgeAdam BilgeAdam

Bu rnekte, projelerin eitmenleri iki ayr alanda tutulmutur. Bu durum 1NF (birinci normal form) kuraln ihlal etmitir. Yani bir satrda, bir verinin tekrar etmesi sz konusudur. Bu tabloda projeler iki eitmenle snrlanm durumdadr. Ancak bir kitab birok eitmenin yazd durumlar da olabilir. Ayrca, proje konularnda birden fazla bilgi tutulur. Mhendislik Kitab projesinin Windows ve Web olmak zere iki tane konusu bulunur. Belli bir konuya gre arama yapmak zorlar. Eitmenler tek bir alanda toplanp, konular kitaplara gre tekrar dzenlenebilir.
Eitmen Ali Veli Ali Veli Proje Uzmanlk Kitab Uzmanlk Kitab Mhendislik Kitab Mhendislik Kitab Konu Windows Windows Web Web Saat 300 300 350 350 Kurum BilgeAdam BilgeAdam BilgeAdam BilgeAdam

384

Modl 11:

Yeniden dzenlenen bu tabloda ise bir kitap projesi iin iki tane satr oluuyor. Ayrca Mhendislik kitabnn sadece Web konusunda olduu grlyor. Dier konu iin de ayrca iki satr eklenmesi gerekir.
Eitmen Ali Veli Ali Veli Ali Veli Proje Uzmanlk Kitab Uzmanlk Kitab Mhendislik Kitab Mhendislik Kitab Mhendislik Kitab Mhendislik Kitab Konu Windows Windows Web Web Windows Windows Saat 300 300 350 350 350 350 Kurum BilgeAdam BilgeAdam BilgeAdam BilgeAdam BilgeAdam BilgeAdam

Ancak bu ekilde, verilerin gereksiz yere tekrarland grlr. Veriler bu ekilde tekrar yazldklar zaman hata olasl artar. Dolaysyla, veri btnl bozulur. rnein Mhendislik Kitab yerine Muhendis Kitapi gibi bir veri girildii zaman, alnacak raporlarda elikiler ortaya kar. Dolaysyla tekrarlanan bu verilerin ayr bir tabloda tutulmas gerekir.
Eitmen No 1 2 Konu No 500 501 Proje No 100 101 Eitmen Ali Veli Konu Windows Web Proje Uzmanlk Kitab Mhendislik Kitab Saat 300 350 Kurum BilgeAdam BilgeAdam

Eitmenler ve konular tablosundaki verilerin birer numaras vardr. Bu verilere erimek iin konu veya eitmenin ismiyle deil, numara kullanlr. Dolaysyla, tablolarda onlarca karakterin tekrarlanmas yerine, verileri temsil eden numaralar tekrarlanacaktr. Bu durum, hem veritabannn bymesini engeller, hem de tablo zerinde kayt aramalarn hzlandrr. Tablolar birbirinden ayrldktan sonra, projelerin hangi eitmenler tarafndan yapld ve hangi konularda olduu bilgileri kaybedilmitir. Bu bilgilerin elde edilmesi iin tablolar arasnda ilikiler kurmak gereklidir. likilerin kurulmas iin, tablolarn birbirlerine referans vermesi gerekir. Yani bir tablodan dierine ulamak iin bir bilgi gerekir. rnein, bir projenin hangi konuda olduunu belirlemek iin konu numarasna ihtiya vardr. Bu numara, projenin hangi konuda olduunu belirleyecektir. Tablolar arasnda ilikileri kurmak iin bu numaralarn doru biimde kullanlmas gerekir. Bu numaralar davranlarna gre ikiye ayrlr.

Veri Yaplar

385

Birincil Anahtar

Tablonun bir ya da birden fazla alan, tek bir veriyi temsil etmesi iin Birincil Anahtar (Primary Key) yaplr. Bu anahtar verinin bir daha tekrarlanmamasn salar ve ilikiler kurulurken ana tabloyu belirler. rnekteki Birincil Anahtar olan alanlar Eitmen No, Proje No ve Konu No alanlardr. Birden fazla alann Birincil Anahtar olarak tanmlanmas, alanlarn tuttuu verinin birleik olarak tekliini salar. rnein, sipari detaylar tablosunda, sipari numaras ile rn numarasnn beraber tekrarlanmamas gerekir. Aksi halde, bir sipariteki rnn iki farkl adet, indirim vs. bilgileri olacaktr.
Sipari No 100 100 102 100 rn No 680 679 680 680 Adet 1 2 1 2 ndirim 0 10 15 5

Bu tabloda sipari ve rn numaras beraber Birincil Anahtar yaplmtr. Dolaysyla, bu alanlarn herhangi birisinde bir veri tekrar olabilir. nemli olan, bu iki alann beraber ayn veriyi tutmamasdr. rnekte, 100 numaral siparite 680 numaral rn kayd iki defa gemitir. Yaplacak sorgularda, bu rnn siparite 1 adet olduu ve 0 YTL indirim yapld, ayn zamanda 2 adet olduu ve indirimin 5 YTL olduu grlr. Bu da verinin tutarlln bozar. Access ile tablolarda Birincil Anahtar oluturmak iin, istenen alanlar seilerek ara ubuundaki Birincil Anahtar dmesi tklanr (Resim 11.9).

386

Modl 11:

RESM 11.9: Birincil Anahtar dmesi.

Veri Yaplar

387

Yabanc Anahtar

Bir tablo iinde baka bir tabloya referans vermek iin, o tablonun numaras kullanlr. Yani o tablonun Birincil Anahtar alanna gnderme yaplr. Bu ilemin yaplmas iin, referans gnderen tabloda bu verinin tutulmas gerekir. Farkl bir tablonun birincil anahtarn tutan alana Yabanc Anahtar (Foreign Key) denir. rnein, ark listesinin tutulduu bir tabloda albm numaras, albmler tablosundaki Birincil Anahtar olan alana referans verir.

RESM 11.10: Yabanc Anahtar.

Bu anahtarlarn kullanm, ilikilerin tanmlanmasnda byk neme sahiptir. Tablolarn normalizasyonunun salanmas iin birbirleriyle ilikilendirilmeleri gerekir. eit iliki vardr. 1. Bire bir iliki (One to One) 2. Bire sonsuz iliki (One to Many) 3. Sonsuza sonsuz iliki (Many to Many)

388

Modl 11:

Access ile, tablolar arasndaki ilikiler, bir alann srklenip dier tablodaki bir alann zerine braklmas ile kurulur (Resim 11.11). Access bu alanlarn Birincil Anahtar olup olmadna bakarak ilikinin cinsini belirler.

RESM 11.11: liki oluturmak.

liki tanmlanrken alan likileri Dzenle penceresinde, tablolardaki hangi alanlar zerinde iliki kurulaca gsterilir. Buradan, ilikinin tr ve davran hakknda zel ayarlamalar yaplr (Resim 11.12). Bilgi tutarllna zorla. Bir tablodaki verinin dier tabloda varolup olmadn kontrol eder. likili alanlar ardarda gncelle (Cascade Update). Birincil Anahtar zerinde bir deiiklik yaplmsa, ilikide olduu tablolardaki Yabanc Anahtar alanlar da deitirir. likili kaytlar ardarda sil (Cascade Delete). Tabloda bir kayt silindii zaman, ilikide olduu tablolardaki veriler de silinir.

RESM 11.12: likileri Dzenle penceresi.

Veri Yaplar

389

Tekil Kst (Unique Constraint)

Baz durumlarda, Birincil Anahtar olmayan alanlarn bazlarnn da tabloda birden fazla kez gemesi istenmez. rnein, renci tablosundaki bir numara baka bir renci iin geerli deildir. Ya da sicil tablosundaki bir TC kimlik numaras tekrarlanmaz. Bu alanlarn Tekil olarak tanmlanmas gerekir. Access ile tablo tasarlarken, alanlarn Tekil olarak tanmlanmas, indekslemeyi gerektirir. Bir alann indekslenmesi, tabloda aramalarn o alan zerinden daha hzl yaplmasn salar. Ancak her alan zerinde indeks kullanlmamaldr. Bu durum, sorgularn performansn artrmak yerine drr. zerinde ska sorgu altrlan alanlar indekslenebilir (Resim 11.13).

RESM 11.13: Tekil tanmlamas.

Bire Bir liki


Bir tablodaki bir kayt, dier tablodaki bir veri iin ancak bir kez kullanlabilir. rnein Sicil tablosu, bir kiinin ismini, soyadn ve kimlik numarasn tutuyor olsun. renci tablosu ise rencinin okul numaras, snf gibi kayt bilgilerini

390

Modl 11:

tutuyor olsun. renci ile Sicil arasnda bire bir iliki vardr. renci tablosundaki bir veri, Sicil tablosunda sadece bir veriyi referans gsterebilir. Sicil tablosundaki bir veri de, renci tablosundaki bir veri iin kullanlabilir. Dolaysyla, bir rencinin bir sicili olabilir, bir sicil ise sadece bir renciye ait olabilir (Resim 11.14). Tablolar arasndaki bu ilikiler iki Birincil Anahtar zerinden yaplr.

RESM 11.14: Bire bir iliki.

Bire Sonsuz liki


Tablodaki bir verinin, ilikide olduu tabloda birden fazla kez kullanlabilmesidir. rnein, bir araba ve model tablolar arasnda bire sonsuz bir iliki vardr. Araba tablosundaki bir veri, model tablosundaki bir veriyi bir kez kullanabilir. Ancak model tablosundaki bir veri, araba tablosunda birden fazla veri tarafndan kullanlabilir. Yani, bir arabann sadece bir modeli olur ve bir model birden fazla arabann modeli olabilir (Resim 11.15). Tablolar arasnda bire sonsuz bir iliki oluturmak iin, birden fazla veride geecek olan tabloda Birincil Anahtar, bu deerin bir kere tutulaca tabloda Yabanc Anahtar olmak zorundadr.

RESM 11.15: Bire sonsuz iliki.

Sonsuza Sonsuz liki


ki tablo arasnda sonsuza sonsuz bir ilikiyi temsil eder. Tablolardaki her veri dieri iin birden fazla kullanlyorsa, iki tarafl sonsuz bir iliki vardr. rnein, bir film ve oyuncu tablolar arasndaki iliki sonsuza sonsuzdur. Film tablosundaki bir veri, oyuncular tablosunda birden fazla veri iin kullanlabilir. Ayn ekilde, oyuncu tablosundaki bir veri, filmler tablosunda birden fazla veri iin kullanlabilir. liki u ekilde tanmlanabilir: Bir oyuncu birden fazla filmde oynayabilir. Bir filmde birden fazla oyuncu bulunabilir. Tablolar arasnda sonsuza sonsuz bir iliki kurmak iin, ara tabloya ihtiya duyulur. Bunun nedeni, her iki tablodaki verilerin birden fazla einin bulunabilmesidir. Yaplan ara tabloya, iki tablodan alnan Birincil Anahtar alan-

Veri Yaplar

391

lar konur. Bu alanlar ikili Birincil Anahtar yaplarak veri btnl salanm olur (Resim 11.16).

RESM 11.16: Sonsuza sonsuz iliki.

Tablolarn birinci normal forma getirilmesi iin ilikilerin kurulmas gerekir. Bu durumda, ayrlan tablolarn birbirleri ile ilikilerinin saptanmas ve bunun sonucunda Yabanc Anahtar alanlarnn eklenmesi veya ara tablolarn oluturulmas gerekir. rnein, Proje ile Konular arasnda bir sonsuza sonsuz iliki vardr. Bir projenin birden fazla konusu olabilir ve bir konuda birden fazla proje yaplabilir. Bunun iin ara tablonun kurulmas gerekir.
Konu No 500 501 Konu Windows Web

Proje No 100 101

Proje Uzmanlk Kitab Mhendislik Kitab

Saat 300 350

Kurum BilgeAdam BilgeAdam

Proje No 100 101 101

Konu No 500 500 501

Bu tablo ile 100 numaral Uzmanlk Kitab projesinin 500 numaral Windows konusunda olduu grlr. Bu tablo biimi, belli konulardaki projelerin sorgulanmasn da destekler. Eitmenler ile projeler arasnda da sonsuza sonsuz bir iliki vardr. Bir eitmen birden fazla projede bulunabilir. Bir projeyi birden fazla eitmen yrtebilir. Dolaysyla, bu iliki iin de bir ara tablo yaplmas gerekir.
Eitmen No 1 2 1 2 Proje No 101 101 100 100

392

Modl 11:

kinci Normal Form

Birinci normal form satr baznda gereksiz verilerin kartlmasyd. kinci normal form ise kolon baznda veri tekrarn kontrol eder. Eer bir kolonda bir veri birden fazla kez kullanlyorsa, bu verilerin ayr bir tabloda tutulmas gerekir. rnekte kurum ismi olan BilgeAdam, tm satrlar iin yazlmtr. Dolaysyla bu kolonda veri tekrar yaplmtr. Bu kurum ismi ayr bir tabloda tutulup, ana tabloda numaras ile referans gsterilmelidir.
Kurum No 221214 Kurum smi BilgeAdam ehir stanbul Adres Barbaros Bulvar Beikta

Bu durumda, projeler ve kurum tablosu arasnda bire sonsuz bir iliki olduu iin, projeler tablosuna hangi kuruma ait olduunu belirtmek zere bir Yabanc Anahtar eklenir.
Proje No 100 101 Proje Uzmanlk Kitab Mhendislik Kitab Saat 300 350 Kurum No 221214 221214

Veri Yaplar

393

nc Normal Form

nc normal formda, tablonun Birincil Anahtar ile direk ilikisi bulunmayan, ancak dier alanlara bal alanlar bulunur. rnein, kurumlar tablosunda ehir ismi alannn kurum ile dorudan balants yoktur. Adres alan ile daha ok balantldr. Bu alanlarn ayr bir tabloya alnmas, nc derece normalizasyondur. Tablolar ayrldktan sonra aralarndaki ilikiler belirlenmelidir. Bu rnekte bir kurumun birden fazla adresi olabilir. Ancak bir adres, sadece bir kuruma aittir.
Kurum No 221214 Kurum smi BilgeAdam

Adres No 17982

ehir stanbul

Adres Barbaros Bulvar Beikta

Kurum No 221214

nc normal forma getirilen tablolarn, dier formlarn da kstlarn salamas gerekir. Adres tablosundaki ehirler alan, her adres iin tekrarlanacaktr. Bu da ikinci normal form kuralnn ihlali demek olur. Dolaysyla ehir alann ayr bir tablo olarak ayrmak gerekir.
ehir No 34 ehir smi stanbul

Adres No 17982

ehir No 34

Adres Barbaros Bulvar Beikta

Kurum No 221214

394

Modl 11:

RESM 11.17: rnekteki ilikiler.

Veri Yaplar

395

Uygulama: Alveri Modeli


Bir e-ticaret internet sitesinin hedefi, rnlerin byk kitlelere satn gerekletirmektir. nternet kullanclar bu hedef kitleyi oluturur. Satlan rnler, bu kullanclara eitli hizmetler sunularak pazarlanmaldr. Veritabannda rnlerin tutulmas, stok durumlarnn ve siparilerin gzlenmesi kadar, kullanc kaytlarnn tutulmas, yeni kampanyalarn almas, rnler hakkndaki yorumlarn tutulmas gibi kavramlar da nemlidir. Veritabannn tasarlanmasnda bu kavramlar tek tek ele alnp incelenmelidir.

Kaynak Ynetimi Modl


E-ticaret firmasnn rnlerinin ynetimi, stok, sipari ve firma bilgilerinden oluur. rnlerin stoklardaki durumlar takip edilmeli ve gerektii zaman firmalardan tedarik edilmelidir. Dolaysyla rnler, firmalar, sipariler ve stoklar bu modlde ilenmelidir. rnler. Bu tablo, rnlerin detayl bilgilerini tutar. rnn ismi, birim fiyat, eklenme tarihi, zellikleri, retimde olup olmad, incelenme says gibi bilgilerin tutulur (Resim 11.18). rnlerin hangi kategoride olduklar ve salayc firma bilgileri de tutulmaldr. Ancak kategori ismi kolon baznda birok defa tekrarlanaca iin, ikinci normalizasyon kuralna gre ayr bir tabloya alnmaldr. Salayc firma bilgileri de ayn ekilde ayr bir tabloda tutulmaldr. Bu durumda bire sonsuz bir iliki oluur. Yani bir firma birden fazla rn salar, ancak bir rn sadece bir firma tarafndan salanr. Dolaysyla bu iki alan Yabanc Anahtar olarak tanmlanmaldr.

RESM 11.18: rnler tablosu.

Firmalar. Firma bilgileri ayr bir tablo olarak tutulur. Bilgi olarak adres, mteri temsilcisi ismi, e-posta ve Web sayfas adresleri tutulur (Resim 11.19).

396

Modl 11:

RESM 11.19: Firmalar tablosu.

Sipariler. rnler satn alndktan sonra, sipari bilgisi olarak kayda geer. Siparilerin nakliye creti, sipari verilme ve gnderilme tarihi, havale ile deme durumlarnda son deme tarihi, gnderilecek adres, denip denmedii ve sipariin iptal edilip edilmedii gibi bilgileri tutulur. Ayrca siparii hangi kaytl kullancnn verdiini de tutmak gerekir. Bir siparii sadece bir kullanc verebilir ve bir kullanc birden fazla sipari verebilir. Dolaysyla bire sonsuz bir iliki oluturmak iin kullanc numaras Yabanc Anahtar olarak tanmlanmaldr (Resim 11.20).

RESM 11.20: Sipariler tablosu.

Sipariler ile rnler arasnda sonsuza sonsuz bir iliki vardr. Yani bir siparite birden fazla rn bulunabilir. Bir kullanc ayn anda birden fazla rn almak isteyebilir. Ayn ekilde bir rn birden fazla siparite bulunabilir. Yani bir rn birden fazla kullancya satlabilir. Bu durumda Sipariler ile rnler arasnda ayr bir tablo yaplmas gerekir. Bu ara tablo, bir sipariteki bir rn bilgisini tutacaktr. Dolaysyla bu tablo daha etkin bir ekilde kullanlabilir. rnein belli bir siparite bir rnden ka tane alnd ancak bu tabloda tutulabilir. Ayrca, bu rn,

Veri Yaplar

397

yaplan bir kampanyadan alnyor olabilir. Bylece, bu kaytta kampanya bilgilerinin de tutulmas gerekir (Resim 11.21).

RESM 11.21: SipariDetaylar tablosu.

StokMerkezleri. rnlerin belirli ehirlerde veya belirli merkezlerdeki stoklar tutulmas gerekir. Sipariin verildii yere en yakn stoktan rn gndermek iin bu stok blgelerinin tutulmas gerekir. Bu stokun adres, e-posta, merkez olup olmad bilgileri tutulmaldr (Resim 11.22).

RESM 11.22: StokMerkezleri tablosu.

StokMerkezleri ile rnler arasnda sonsuza sonsuz bir iliki vardr. Yani bir stok merkezinde birden fazla rn bulunabilir ve bir rn birden fazla stok merkezinde bulunabilir. Bu iliki iin ara bir tablo yaplmaldr (Resim 11.23).

Mteri Ynetim Modl


Kaynak planlamalar yapldktan sonra, bu kaynaklarn mteriye ne ekilde sunulacana karar verilmelidir. Kullanclar Internet sitesini kullanrken kendilerine bir hesap aabilirler ve siparilerini bu hesap ile yaptklarnda, kendilerine ait istatistikleri kolayca elde edebilirler. rnein bir kullanc, en ok hangi kategoride rnleri satn aldn sorgulayabilir. Kullanclar, siparilerini vermeden nce rnlerle ilgili bilgi almak isteyebilir. Bu rnleri daha nce alan

398

Modl 11:

kullanclarn yazdklar yorumlardan faydalanmalar iin, rn yorumlarnn da tutulmas gerekir. Ayrca, kullancya deiik tarihlerde alan, belli sreli kampanyalarn sunulmas, e-ticaret sitesinin kullanmn artracaktr. Kullanclar rnleri incelerken, satn almadan nce sepetlere ekleyebilirler. Bylece siteyi tekrar ziyaret edince, daha nceden inceledikleri ve sepete ekledikleri rnleri grebilirler.

RESM 11.23: StokDurumu tablosu.

Kullanclar. Bu tabloda kullanc hakknda bilgiler tutulur. sim, soyad, e-posta, kayt tarihi gibi bilgilerin yan sra siteye giri yapmak iin kullanc ad ve parolann da tutulmas gerekir. Bu parolann deiiklii durumda gvenlik sorusu ve cevab da ayrca tutulmaldr (Resim 11.24).

RESM 11.24: Kullanicilar tablosu.

Yorumlar. Kullanclarn yaptklar yorumlarn bir tabloda tutulmas gerekir. Ancak burada dikkat edilmesi gereken nokta, bir kullancnn yorum yazmas iin sisteme giri yapmasnn gerekmemesidir. Dolaysyla, burada Kullanclar tablosuna bir referans gstermeye gerek yoktur. Yorumlar yazan kiileri takma adlar, yazd yorumlar, tarih ve verdikleri puan tutulmaldr (Resim 11.25). Ayrca, yorumun hangi rn hakknda yapldn belirten ve rnler tablosuna referans gsteren bir Yabanc Anahtar alannn tutulmas gerekir.

Veri Yaplar

399

RESM 11.25: Yorumlar tablosu.

Sepetim. Kullanclarn rnleri inceledikten sonra sepetlerinde saklamas iin oluturulan bir tablodur. Bu tabloda rn numaras ve kullanc numarasna referans gsterilmelidir. Bu rnlerin eklenme tarihi ve adeti de tabloda tutulmaldr. Kullanclar, rnleri srekli sepete ekleyip kartabilir. kartma ileminde, verinin tablodan silinmesi gerekir. Ancak bir kaydn srekli eklenip silinmesi performans drr. Dolaysyla rnn sepetten kartldn belirleyen bir Evet/Hayr veri tipinde alan belirlenebilir. Bu alann deeri Evet ise rn sepettedir ve kullancya gsterilir. rnn tekrar ekleme ileminde ise sadece bu alan gncellenir (Resim 11.26).

RESM 11.26: Sepetim tablosu.

Kampanyalar. Kullancya sunulan kampanyalar e-ticaret kavramnda nemli bir yer alr. Bu kampanyalar bir ya da birden fazla rnn toplam fiyatnda belli tarihler arasnda belli bir indirim yaplmasyla gerekleir. Kampanya tablosunda kampanyann balang biti tarihleri, devam edip etmedii ve yaplan indirim birer alan olarak tutulmaldr (Resim 11.27). Bu durumda, bir kampanyada birden fazla rn olabilir. Bir rn ise birden fazla kampanya dahilinde olabilir. Dolaysyla ara tablo eklenerek sonsuza sonsuz bir iliki kurulmaldr (Resim 11.28).

400

Modl 11:

RESM 11.27: Kampanyalar tablosu.

RESM 11.28: KampanyaUrunler tablosu.

RESM 11.29: Uygulamadaki ilikiler.0

Veri Yaplar

401

Modl Sonu Sorular & Altrmalar

1. Veritaban ynetim sistemi kavramn ve bu sistemlere neden ihtiya duyulduunu aklayn. 2. Microsoft Access platformunun avantajlarn aklayn. 3. Microsoft Access'te yer alan veri trlerini ve kullanm alanlarn aklayn. 4. Birincil Anahtar ve Yabanc Anahtar yaplarn ve kullanm alanlarn aklayn. rnek bir veritaban gelitirin.

Modl 12: SQLe Giri

SQL (Structured Query Language) dili, veritabanlar zerinde sorgu yapmak iin kullanlan bir dildir. Sorgular, analiz aamalarnda, veri eklerken, gncellerken ve silerken kullanlr. Sorgular tek bir tablo zerinde yaplabilecei gibi, birok tablodan veri okunmasn da salar. Sorgular zerinde konan kriterler, detayl veri analizi yapmak iin kullanlr. Bu modl tamamladktan sonra;
SELECT cmleleri ile tablo sorgulayabilecek,

Kriterler ve hesaplama ekillendirebilecek,

fonksiyonlar

kullanarak

sorgular

UPDATE sorgusu ile tablolar gncelleyebilecek, INSERT sorgusu ile tablolara veri ekleyebilecek, DELETE sorgusu ile tablolardan veri silebilecek, JOIN ile birden fazla tabloyu birletirip sorgu altrabileceksiniz.

406

Modl 12:

Konu 1: Access ile Sorgu Oluturmak

Access ile sorgular grntlemek ve oluturmak iin, veritaban penceresinden Sorgular sekmesi seilir. Sorgular iki ekilde oluturulabilir. Tasarm grnmnde sorgu. Sorgular, istenen tablolar ve gerekli alanlar eklenerek oluturulur. Burada sorgunun farkl grnm ekli vardr. Tasarm grnm, SQL grnm ve Veri sayfas grnm (Resim 12.1).

RESM 12.1: Sorgu grnm seenekleri.

Tasarm grnmnde sorgular, tablolarn grsel olarak eklenip, alanlarnn seilmesi ile oluturulur. Tablolar balama ilemleri, kriterler ve alan isimlerinin SQL diline evrilmesi Access tarafndan yaplr (Resim 12.2).

SQLe Giri

407

RESM 12.2: Tasarm grnm.

SQL grnmnde sorgular, SQL cmlesi kullanc tarafndan yazlarak oluturulur. Bu modldeki sorgular bu grnmde oluturulacaktr (Resim 12.3).

RESM 12.3: SQL grnm.

Veri sayfas grnm, SQL sorgusu altrldktan sonra verilerin grnmdr. SQL sorgular altrldktan sonra bu grnme geilir (Resim 12.4).

RESM 12.4: altr dmesi.

Sihirbaz ile sorgu. Access sihirbaz, tablolar zerinde yaplacak sorgularn kolay ve hzl bir ekilde oluturulmasn salar.

408

Modl 12:

RESM 12.5: Sihirbaz ile sorgu oluturmak.

SQLe Giri

409

SELECT FROM WHERE

SELECT sorgusu tablolardan veri kmesi ekmek iin kullanlan sorgudur.

Sorgunun yaps SELECT Alanlar FROM Tablo smi WHERE Kriterler eklindedir. Bu cmlede SELECT kelimesinden sonra gelen alanlar, tablolar oluturulan kolonlardr. Sonu kmesinde, tablonun hangi alanlarnn olacan gsterir. Burada yaplan, kolon baznda filtrelemedir.
FROM ifadesi, sorgunun hangi tablo veya tablolar zerinde yaplacan gsterir. WHERE ifadesinden sonra, sorgu kmesinde, verilen kritere uyan satrlar

grntlenir. Burada yaplan, satr baznda filtrelemedir.


SELECT * FROM Urunler

Buradaki yldz ifadesi, tm alanlarn listelenecei anlamna gelir.


SELECT Urunler.Isim, Urunler.BirimFiyat, Urunler.EklenmeTarihi FROM Urunler

410

Modl 12:

SELECT ifadesinde alanlarn ismi verilirken, hangi tabloya ait olduu da yazlr. Ancak bu durum tek tablo zerinden yaplan ilemler iin gerekli deildir. Birka tablo zerinde sorgu yapld zaman, alanlar tablo ismiyle belirtmek gerekir. SELECT Isim, BirimFiyat, EklenmeTarihi FROM Urunler

RESM 12.6: Sorgu sonucu. WHERE ifadesinden sonra yazlan kriterler mantksal karlatrmalardr. Bu

karlatrmalar alanlardaki deerler zerinde yaplr. Karlatrmalar aritmetik olabildii gibi metinsel de olabilir. Byk. Alandaki deerin verilen bir deerden veya baka bir alandan byk olup olmadn kontrol eder.
SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi > 100

Byk Eit. Verilen bir alann veya deerin, kontrol edilen alandan byk veya alana eit olup olmadn kontrol eder.
SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi >= 100

Kk. Alandaki deerin verilen bir deerden veya baka bir alandan byk olup olmadn kontrol eder.
SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi < 100

Kk Eit. Verilen bir alann veya deerin, kontrol edilen alandan kk veya alana eit olup olmadn kontrol eder.

SQLe Giri

411

SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi <= 100 BETWEEN AND. Alandaki deerin iki deer arasnda olup olmadn kontrol eder. Deerlere eit olduklar durumlar da sonu kmesine dahil edilir. SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi BETWEEN 100 AND 200 NOT. Verilen kritere uymayan kaytlar dndrr. SELECT Urunler.* FROM Urunler WHERE NOT Urunler.IncelenmeSayisi = 0 LIKE. Alandaki deerin belirli bir metin biimde olup olmadn kontrol eder. SELECT Alanlar FROM Tablo WHERE AlanIsmi LIKE 'Pattern' 'Pattern' ifadesinde yazlan karakterler, alanlarn iinde kesin olarak

geecek karakterlerdir. rnein Isim LIKE 'Enis'. Ancak baz zel karakterler farkl anlam ifade ederler. rnein, * karakteri sfr veya daha fazla karakteri temsil eder. Isim LIKE '*ni*' ifadesi sfr veya daha fazla karakter ile balayan, ni ile devam eden ve yine sfr veya daha fazla karakter ile biten kelimeleri kontrol eder. rnein Deniz, Nil, Seni, Ni deerleri bu biime uyacaktr Tablo 12.1de baz kural ve rnekler verilmitir.
TABLO 12.1: zel Karakter rnekleri Pattern
Sfr veya birden fazla karakter * zel karakterlerin kullanm Tek karakter ? Tek Say # Karakter Aral Aralk D rnek

True deeri dndren rnek

False deeri
dndren rnek

Nu* Be [*] ?n Versiyon # [a-z] [!0-9]

Nuray, Nuri Be * an, in Versiyon 5, Versiyon 1 a, b, c a, b, c

Banu Beikta ban, anak Versiyon 10, Versiyon 43, 2 1, 2, 3

rnek: Microsoft Studio rnlerin listelenmesi (Resim 12.7).

412 SELECT Urunler.Isim FROM Urunler WHERE Urunler.Isim LIKE '*Studio*'

Modl 12:

RESM 12.7: Sorgu sonucu. Is NULL. Baz alanlarn deerleri bo braklm olabilir. Bo braklan

alanlarn deerleri NULL olarak geer. Sorgularda bo alanlarn kontrol Is NULL ifadesi ile yaplr.
SELECT Urunler.* FROM Urunler WHERE Urunler.Ozellikler Is NULL

Bir sorguda birden fazla kriter kullanlabilir. Ancak bu kriterlerin AND veya OR ifadeleri ile ayrlmalar gerekir. AND ifadesi ile ayrlan kriterlerin hepsinin saland satrlar sonuca dahil edilir. OR ifadesi ile ayrlan kriterlerin herhangi biri saland satrlar sonuca dahil edilir. rnek: 12.12.2002den sonra kaydolmu, ismi E ile balayan kullanclar:
SELECT * FROM Kullanicilar WHERE Kullanicilar.KayitTarihi > #12/12/2002# AND Kullanicilar.Isim Like 'E*';

E-posta adresi veya Web adresi olan firmalar:


SELECT Firmalar.Isim, Firmalar.Email, Firmalar.WebSayfasi FROM Firmalar WHERE ((Not (Firmalar.Email) Is Null)) OR ((Not (Firmalar.WebSayfasi) Is Null));

SQLe Giri

413

Hesaplama Fonksiyonlar

Alanlar zerinde sayma, toplama, ortalama alma gibi aritmetik ilemlerin yan sra minimum ve maksimum deerlerin alnmas gibi ilemler de yaplabilir. Bu ilemlerin sonucunda saysal bir sonu ortaya kar. Bu say, sonu tablosunda gsterilirken herhangi bir alan ismi ifade etmez. Dolaysyla, sonu tablosunda saysal deerler gsterilirken mantksal bir isim verilmesi gerekir. Bu ifade ise AS anahtar kelimesi ile belirtilir.
Sum. Kriterlerin saland alanlar zerinde toplama ilemi yapar. SELECT Sum(IncelenmeSayisi) AS [Toplam Incelenme Sayisi] FROM Urunler WHERE Uretiliyormu = -1;

RESM 12.8: Toplama ileminin sonucu. Avg. Kriterlerin saland alanlarn ortalama deerini alr. SELECT Avg(Urunler.BirimFiyat) AS [Ortalama Fiyat] FROM Urunler WHERE Uretiliyormu = -1; Max. Kriterlerin saland alanlarn maksimum deerini alr. Metinsel deerlerde alfabetik olarak sralama yapar.

414 SELECT Max(Isim) AS [En son geen kullanc] FROM Kullanicilar;

Modl 12:

SELECT Max(KayitTarihi) AS [En son kaydolan kullanc] FROM Kullanicilar;

RESM 12.9: Ortalama ileminin sonucu.

RESM 12.10: Maksimum deerin alnmas. Min. Kriterlerin saland alanlarn minimum deerini alr. SELECT Min(Isim) AS [En bata geen kullanc] FROM Kullanicilar; SELECT Min(KayitTarihi) AS [lk kaydolan kullanc] FROM Kullanicilar;

RESM 12.11: Minimum deerin alnmas. Count. Deeri NULL olmayan satrlarn ka tane olduunu verir. Genellikle tablolardaki satr says istendiinde bu fonksiyon kullanlr. Ancak bu tip bir sorguda, saylan alann bo bir deer almamas gerekir. Birincil Anahtar alannn zerinden bir saym yaplabilir. SELECT Count(KullaniciId) AS [Toplam Kullanc Says] FROM Kullanicilar;

RESM 12.12: Sayma ileminin sonucu.

SQLe Giri

415

INSERT

INSERT sorgular tablolara kayt eklemek iin kullanlr. Bu kaytlar eklenirken tablo isimi, alan ad ve hangi deerlerin eklenecei belirtilmelidir. INSERT sorgularnda, gerekli olan (NULL kabul etmeyen) alanlara deer eklenmesi unutulmamaldr.

Szdizimi:
INSERT INTO Tablo (Alan1, Alan2,...) VALUES (Deer1, Deer2...) VALUES ifadesinde verilen deerlerin, tablonun yazlan alanlaryla ayn srada

olmas gerekir.
INSERT INTO Siparisler ( KullaniciId, NakliyeUcreti, SiparisTarihi, SonOdemeTarihi, Adres ) VALUES (1, 3, '20.05.2005', '25.05.2005', 'Beikta Istanbul')

Bu tip INSERT sorgularnda sadece tek bir deer girilebilir. Ancak baz durumlarda birden fazla verinin girilmesi istenebilir. Bu durumda, girilecek deerler SELECT cmlesiyle baka bir tablodan alnr. rnek: denen siparilerin tutulduu ayr bir tablo oluturulur. Sipari tablosundan bu tabloya tm denen kaytlarn aktarlmas ilemi INSERT SELECT cmlesi ile yaplr.
INSERT INTO OdenenSiparisler ( SiparisId, KullaniciId, NakliyeUcreti, SiparisTarihi, GonderilmeTarihi, Adres)

416

Modl 12:

SELECT SiparisId, KullaniciId, NakliyeUcreti, SiparisTarihi, GonderilmeTarihi, Adres FROM Siparisler WHERE Odendi = -1;

SQLe Giri

417

UPDATE

UPDATE sorgular tablolarda varolan kaytlarn belirli alanlarnn gncellenmesi ilemini yapar. Bu sorguda da tablo, alan ve yeni deerlerin belirtilmesi gerekir.

Szdizimi:
UPDATE Tablo SET Alan1 = Deer1, Alan2 = Deer2, ...

Bu sorguda dikkat edilmesi gereken en nemli nokta, belli kaytlarda gncelleme ilemi yaplyorsa WHERE kriterinin unutulmamasdr. Aksi halde tablodaki tm kaytlar, sorguda belirlenen deerleri alacaktr. rnek:
UPDATE Kullanicilar SET ParolaSorusu = 'Yeni Soru', ParolaCevabi = 'Yeni Cevap' WHERE KullaniciId = 23

418

Modl 12:

DELETE

Tablodan veri silmek iin kullanlr. Bu sorguda alan isimleri belirtilmez, ancak WHERE kriterinin unutulmamas gerekir. Szdizimi:
DELETE FROM Tablo smi

rnek:
DELETE FROM Sepetim Where KullaniciId = 12

SQLe Giri

419

Konu 2: INNER JOIN ile Tablo Birletirmek

Birden fazla tablodan kayt ekilmek istendiinde, bu tablolarn Birincil Anahtar ve Yabanc Anahtar alanlar zerinden birletirilmeleri gerekir. Tablolar birletirmek, birok bilgiyi sonu kmesinde tek bir tablo olarak gstermeyi salar. rnein, bir rnn hangi kategoride olduu bilgisi rnler tablosunda vardr. Ancak bu deer o kategori numarasn belirttii iin, son kullancya bir ey ifade etmez. Kategori ismi ise, Kategoriler tablosunda durur. Sonu kmesinden kategori ismini grntlemek iin bu tablolarn birletirilmesi gerekir. Szdizimi:
SELECT Alanlar FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2 ON isim1.Alan = isim2.Alan

Burada tablo isimlerine birer takma isim verilmitir. Bu isimler alanlarn seiminde yazm kolayl salar. Baz alanlar birbirleriyle ayn isimde olduklar iin bu alann hangi tabloya ait olduu belirtilmelidir.
SELECT isim1Alan1, isim1.Alan2, ..., isim2.Alan1, isim2.Alan2 FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2 ON isim1.Alan = isim2.Alan

ki tablonun birletirme ilemi, ON ifadesinden sonra belirtilen alanlar zerinden yaplr. Burada, iki tablo arasnda iliki kurulan alanlar belirtilmelidir. rnek: rnlerin stoklardaki miktarn renmek iin StokDurumu ve rnler tablolarn birletirmek gerekir.

420 SELECT StokDurumu.Adet, Urunler.Isim FROM Urunler INNER JOIN StokDurumu ON Urunler.UrunId = StokDurumu.UrunId;

Modl 12:

kiden fazla tablodan bilgi ekmek iin, nce iki tablo birletirilir. Sonu olarak kan tablo ile de dier tablolar tek tek birletirilir. Birletirme ilemi ((Tablo1 + Tablo2) + Tablo3) + Tablo4... eklindedir. INNER JOIN kullanlrken parantezlerin unutulmamas gerekir. rnek: Bir kullancnn sepetindeki rnlerin birim fiyatlar sorgulanmak istendii zaman, Kullanclar, Sepetim ve rnler tablolar ilikide olduklar alanlar zerinden birletirilmelidir.
SELECT k.Isim, k.Soyad, s.Adet, u.BirimFiyat FROM (Urunler u INNER JOIN Sepetim AS s ON u.UrunId = s.UrunId) INNER JOIN Kullanicilar AS k ON k.KullaniciId = s.KullaniciId WHERE k.KullaniciId = 1

SQLe Giri

421

Konu 3: GROUP BY

Hesaplama fonksiyonlarnn kullanld sorgularda SELECT ifadesinden sonra sadece hesaplanan alan sonu kmesine eklenmiti. Ancak ou zaman, hesaplanan alanlarla birlikte dier alanlarn da sonu kmesinde olmas istenir. rnein, belli bir kategoride ka tane rnn bulunduu, kategori numaras sonu kmesinde olacak ekilde isteniyor. Bu durumda, rnler tablosundaki kaytlarn sayma ileminin gerekletirilmesi iin nce kategori numarasna gre gruplanmas gerekir.
SELECT k.KategoriId, COUNT(UrunId) AS [rn Says] FROM Urunler u INNER JOIN Kategoriler k ON u.KategoriId = k.KategoriId GROUP BY k.KategoriId

Tablodan kategori numaras dnda baka herhangi bir alan daha isteniyorsa, bu alan GROUP BY ifadesine ya da bir hesaplama fonksiyonunun iine alnmaldr.
SELECT k.Isim, k.KategoriId, Sum(u.BirimFiyat) AS [Toplam Fiyat], COUNT(UrunId) AS [rn Says]

422 FROM Urunler u INNER JOIN Kategoriler k ON u.KategoriId = k.KategoriId GROUP BY k.KategoriId, k.Isim

Modl 12:

RESM 12.12: GROUP BY kullanm.

SQLe Giri

423

Konu 4: Aritmetiksel lemler

Sorgular srasnda, alanlar zerinde toplama, karma, arpma, blme gibi aritmetiksel ilemler yaplabilir. Bu ilemler sabit deerler ile yaplabildii gibi baka alanlardaki deerler ile de yaplabilir. rnek: Birim fiyatlarnn KDV eklenmi halini gsteren sorgu.
SELECT Urunler.Isim, BirimFiyat * 1.18 AS [KDV Dahil Fiyat] FROM Urunler SELECT Sum(BirimFiyat) * 1.18 AS [Toplam rnler Fiyat KDV Dahil] FROM Urunler

rnek: Stoklarda rezerve edilmemi toplam rn says.


SELECT Urunler.Isim, Sum(StokDurumu.Adet StokDurumu.Rezerve) AS [Ak rn Says - Tm Stoklar] FROM Urunler INNER JOIN StokDurumu ON Urunler.UrunId = StokDurumu.UrunId GROUP BY Urunler.Isim;

Toplama ilemi, saylar zerinde yaplabildii gibi metinsel deerler zerinde de birletirme grevi grr. rnek: Kullanclarn isim ve soyadlarnn beraber grntlenmesi

424 SELECT

Modl 12:

Kullanicilar.Isim + ' ' + Kullanicilar.Soyad AS [sim Soyad] FROM Kullanicilar

SQLe Giri

425

Modl Sonu Sorular & Altrmalar

1. SELECT ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin. 2. INSERT ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin. 3. UPDATE ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin. 4. DELETE ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin. 5. DELETE ve UPDATE ifadelerini kullanrken dikkat etmemiz gereken noktalar aklayn. 6. CASCADE DELETE ve CASCADE UPDATE ifadelerini ieren bir veritaban uygulamas gelitirin ve silme durumunu gzlemleyin.

You might also like