Professional Documents
Culture Documents
C Yazilim Uzmani Bilge Adam 670 Sayfa
C Yazilim Uzmani Bilge Adam 670 Sayfa
Hedefler
Program nedir? Programc kimdir? Programlama Dilleri Programlama Dillerinin Tarihesi Programn Derlenmesi
Bu modlde, bir programcnn bilmesi gerek temel programlama kavramlarna giri yaplacaktr. Bir program oluturan eler, alma sreci tamamlanana kadar getii aamalar ayr ayr ilenecektir. Bu kavramlar programcnn ve programlama dillerinin tanmlanmasna yardmc olacaktr. Bu modln sonunda: Bir programn alma prensibini aklayabilecek, Programc kavramn tanmlayabilecek, Deiik programlama dillerinin geliimini aklayabilecek, Derleme ilemini tanmlayabileceksiniz.
Gnmzde bilgisayarlarn kullanm alanlar byk lde artmtr. Dolaysyla ilerimizi daha hzl ve dzenli bir ekilde yapmamz, bilgisayarlar ne kadar iyi kullandmza baldr. Bunun iin ise, eitli amalara gre yazlan programlar kullanrz. Program, bilgisayarn belli bir ii yapmas iin tasarlanan komutlarn tmdr. Kullanm amalar ve yerlerine gre birok deiik program tr vardr: Sistem programlar Her program, bir iletim sistemi zerinde alr. letim sistemi, dier programlarn almas iin gerekli olan kaynaklar ve ortam salar. Srcler (Driver) letim sistemi ile donanm aygtlar arasnda iletiim salayan programlardr. Klavye ile yazlan yazlarn alglanmas iin, klavyenin src program kullanlr. Uygulamalar letim sistemi zerinde alan, kullanclarn ihtiya duyduu ilevleri salayan programlardr.
Konu: 1
Bir internet sitesini gezmek istediimizde, Internet Explorer taraycs kullanlabilir. Bu uygulama, iletim sistemine sitenin istenilen sayfadaki yaz ve resimleri almasn ister. letim sistemi, a kartyla (Ethernet) src program sayesinde internet sitesinin sunucusuna istei gnderir.
Programlarn kullanlmasndaki ama, girilen bilgilerin ilenip istenilen ekilde sonularn retilmesidir. Veri girii Program, kullanclarn veri girmesi ile balar. Girilen veriler daha sonra ilenmek zere hafzada saklanr. lem Veriler, programn yazlma ekline gre bir dizi ilemden geirilir. Sonu lenen veriler kullancya aktarlr. Programlar, belli kurallar erevesinde yazlr. Bu yazm kurallar sayesinde bilgisayar, programn ileyiini anlar ve gerekli sonular kartr. Yazlan programlar, belirtilen yazm kurallar kontrol edilerek derlenir. Bu derleme ilemi
sonunda, yazlan kaynak kodlar bilgisayarn anlayaca tek dile evrilir. Makine dili denilen bu dil, sadece 1 ve 0 saylarndan olumaktadr. rnek: 1. 2. 3. 4. 5. 6. 7. ATM makinesinden para ekmek Kullanc ATM makinesine kartn yerletirir ifresini girer. ATM cihaznda alan uygulama kartta yazan bilgileri okur ifre kontrol ilemi yaplr. ifre doru girilmise kullanc ekmek istedii miktar girer. Bankadaki hesap kontrol edilir. Uygunsa kullancya deme yapar.
Belirli ilevlere sahip programlar gelitirir Kullanlan teknolojiyi, platformu iyi tanmas gerekir Programc trleri
Mimar Gelitirici Test Mhendisi
Programc, belirli ilevlere sahip programlar gelitirebilen uzmanlardr. Bir programcnn, zerinde alt platformu, kulland teknolojileri iyi tanmas ve bilgisayarn anlayaca mantksal dilde dnebilmesi gerekmektedir. Programclarn ou genellikle ayn ii gerekletirse de, stlendikleri grevlere gre gruba ayrlabilir: Mimar Programlarn yazlmas iin gerekli teknolojileri belirleyen, gerekli durumlarda programn daha kolay ynetilmesi iin kk paralara ayran programcdr.
Konu: 1
Gelitirici Program yazan kiidir. Test mhendisi Programn gelitirilmesi aamasnda, gelitiricilere raporlayan programcdr.
hatann
kaynaklarn
bulan
ve
Programc ile bilgisayarn haberlemesini salar Programlar 1 ve 0 saylarndan oluan makine diline evrildikten sonra altrlr Programlama Dilinin zellikleri:
Szdizimi (Syntax) Gramer Semantik
Dnyada konuulan her dilin amac iletiim salamaktr. Farkl kltrlerden insanlarn anlaabilmesi iin ortak konutuklar bir dil gerekir. Programla dillerinin amac da bilgisayar ile programcnn haberlemesidir. Programc, bilgisayara hangi komutlarn altrmas gerektiini bilgisayarn anlayaca dilden konuarak syler. Bilgisayarda, programlar makine diline evrildikten sonra alr. 1 ve 0 saylarndan oluan bu makine dili, en alt seviye dildir. Dolaysyla programlarn bu dilde yazlmas olduka zordur. Programclar konuma diline daha yakn, kolay anlalabilecek diller kullanmaktadr. Bu dillere yksek seviye programla dilleri denir. Programlama dillerinin seviyeleri makine diline yakn olup olmamas ile llr.
Bir programlama dili u unsurlardan oluur: Sz dizimi (Syntax) Bir dil, kendine ait kelimeler ile konuulur. Programlama dillerinin de benzer bir davran vardr. Programlama dillerindeki bu kelimeler, programlama dilinin anahtar kelimeleridir - komutlardr. Gramer Programlama dillerini kullanmak iin sadece kelimeleri bilmek yeterli deildir. Eer anlaml bir ekilde bir araya getirilemiyorsa, bu kelimeler hibir anlam ifade etmez. Semantik (anlamsal) Bir dili, kelimeleri doru bir gramer kullanm ile bir araya getirerek kullanabiliriz. Ancak konuulan kelimelerin ne iin kullanld da nemlidir. Bir programlama dilinin zelliklerinin nasl ve ne iin kullanld da, bu dilin semantiidir. rnein bir finans program, Yeni Trk Liras cinsinden bir miktar dolara evirecektir. Yaplacak ilem o andaki parite deerini merkez bankasndan ektikten sonra, girilen miktar bu deerle arpp kullancya gstermektir. Kullanlan programlama dili ARP, GSTER, ETLE komutlar ile bu ilemi gerekletirecektir. ARP ETLE GSTER miktar parite sonu Bu ekilde yazlan program sz dizimi asndan dorudur. Girilen veriler ve komutlar dnda, programlama dilinin anlamayaca bir kelime kullanlmamtr. Ancak komutlar yanl srada kullanlmtr. ARP komutu hangi saylar arpmas gerektiini bilemeyecektir. parite ETLE sonu ARP miktar GSTER parite Komutlar ve deikenleri, programlama dilinin gramerine gre doru yerlerde kullanmamz gerekir. Bu ekilde kullanlan komutlar doru bir ekilde alr. Fakat GSTER komutunun ne iin kullanld yani semantii de nemlidir. stenilen, miktar ile pariteyi arpmak, sonuca eitlemek ve sonucu gstermektir. sonu ETLE miktar ARP parite GSTER sonu (Ref: http://www.cs.sfu.ca/~cameron/Teaching/383/syn-sem-prag-meta.html) u ana kadar 2500den fazla programlama dili yazlmtr. http://www.oreilly.com/pub/a/oreilly/news/languageposter_0504.html) (Ref:
Konu: 1
Bunlardan bazlar Pascal, Basic, C, C++, Java, Javascript, Cobol, Perl, Python, Ada, Fortran, Visual Basic .NET, Microsoft Visual C# programlama dilleridir. Yksek seviye programlama dillerine Visual Basic .NET, Microsoft Visual C++ dillerini rnek verebiliriz. C ile iletim sistemi yazlabilindiinden daha alt seviye bir dil olarak deerlendirilir. Programlama Dillerinin Tarihesi
Makine dili 10110110, 11011110 Yordamlarn (Subroutine) ve Ktphanelerin (Library) olumas 1957 FORTRAN 1959 COBOL 1968 Pascal 1972 C Nesneye Ynelik Programlama Dilleri:
C++, JAVA
2000 .NET
Visual Basic .NET, Visual C#
Bilgisayarlar, icat edilmeleriyle birlikte belli bir ii yapmak iin bir dizi komutlara ihtiya duymulardr. En bata ok basit ilemler yapan bu komutlar zamanla nesneye ynelme (object orientation) gibi ileri seviyede zellikler kazanmtr. lk programlama dilleri, bilgisayarlarn zerinde baz aralarn yerlerini deitirerek veya yeni bileenler eklenerek yaplyordu. Programn ilemesi iin bir devinime ihtiya vard. Eskiden programlar fiziksel olarak yazlyordu. Daha sonra fiziksel programlama yerini elektrik sinyaline brakt. Artk, kurulan elektronik devrelere dk ya da yksel voltajda akm gnderilerek bilgisayarn davran belirlenmeye baland. Yksel voltaj 1, dk voltaj 0 saylarn ifade ediyordu. Bylelikle bugn de kullanlan makine dilinin ortaya kmas iin ilk admlar atlm oldu. Ancak bu ekilde programlar yazmak, sistemi oluturan elektronik devrelerin her program iin batan kurulmasn gerektiriyordu. Bylelikle programlar baz
kavramlar erevesinde yazlmaya baland. ncelikle bilgisayar donanm her program iin batan kurulmamal, bunun yerine basit bir donanmn zerine yazlan komutlar kullanlmaldr. Daha sonra, programlar tek bir komutlar zinciri yerine, kk paralar halinde yazlmaldr. Bu paralarn programn iinde defalarca kullanlabilmesi yordam (subroutine) kavramn ortaya karmtr. Bu modelin kullanlmas ise mantksal karlatrmalar, dnglerin kullanlmasn ve yazlan kodlar tekrar kullanld iin ktphane (library) mantn ortaya karmtr. 1957 ylnda IBM, dk seviye (makine diline yakn) bir programlama dili olan FORTRAN dilini ortaya kard. FORTRAN ile beraber basit mantksal karlatrmalar, dngler, (true-false) lojik ve (integer, double) saysal deikenler kullanlmaya baland. 1959 ylnda, bu programlama dilinin zelliklerini alp, giri k (Input Output IO) gibi yeni ilevler salayan COBOL dili ortaya kt. Daha sonra 1968 ylnda, COBOL ve FORTRAN dillerinin en iyi zelliklerini alarak Pascal ortaya kt. Ayrca Pascal dili, hafzadaki adresler zerinde ilem yapmaya olanak veren iareti (pointer) kavramn beraberinde getirdi. 1972 ylnda C, Pascal dilindeki birok hatay gidererek ortaya kt. C dili ilk defa Unix iletim sistemini yazmak iin kullanlmaya balanmtr. C, dk seviye bir dil olmas, kuvvetli giri k ilemleri salamas gibi birok zellii ile iletim sistemleri yazlmasnda tercih edilmitir. Btn programlama dilleri birok zellie sahip olmasna ramen, modler programlamann birok eksiini gidermek amacyla, yeni bir programlama modeli olan nesneye ynelik programlama - OOP (object oriented programming) ortaya karld. C dilinin ve OOP modelinin tm zellikleriyle C++ dili oluturuldu. C++ dilini, Sun Microsystems tarafndan kartlan Java takip etti. Java dilinin kullanm alanlar, nesneye ynelik bir programlama dili olmas ve beraberinde getirdii p toplama GC (garbage collection) gibi performans arttrc zellikleri ile byk lde geniledi. Microsoft, 2000 ylnda .NET platformunu sunarak, otuzdan fazla programlama dilini ayn at altna toplad. VisualBasic.NET ve VisualC# .NET platformunu kullanan gnmzdeki en gl yksek seviyeli programlama dilleri arasnda yer almlardr. .NET platformu hakknda daha detayl bilgi iin Modl 2ye bakn. (Ref: http://www.princeton.edu/~ferguson/adw/programming_languages.shtml)
Konu: 1
Sonu
Programlar yazldktan sonra, almaya uygun hale getirilene kadar bir dizi ilemden geer. Bu ilemi gerekletiren, programlama dilinin derleyicisidir. (Compiler) Programlar, bir programlama dilinin gramer ve sz dizimi yapsna uygun bir ekilde yazlr. Yazlan kodlar o dilin derleyicisi tarafndan kontrol edilir. Kontrol ileminden sonra, bu kodlar bilgisayarn anlayaca makine diline evrilir. Ancak bir yazm ve ya mantk hatas varsa, programcya gerekli hata mesajn verilerek derleme ilemi iptal edilir. Makine diline evrilen kodlar altrlr.
10
zet
Program nedir? Programc kimdir? Programlama Dilleri Programlama Dillerinin Tarihesi Programn Derlenmesi
1. Var olan bir metin dosyasn (.txt) grntlemek iin Notepad programn kullanabiliriz. letim sistemi, dosyay kullanclara gstermek iin monitr ile iletiim kurar. Monitr iletim sisteminden gelen verilerle gerekli grntleme ilemlerini yapar. Bu senaryodaki program eitlerini belirtin. 2. Bir arkadamza e-posta yollamak istediimizde, e-posta adresi, konu, mesaj bilgilerini gireriz. Daha sonra e-posta uygulamas mesajmz verilen adrese yollar. Programn alma modelinin aamalarn belirtin. 3. C dilini kullanarak yazdnz kodlarn bilgisayar tarafndan altrlabilir hale gelmesi iin hangi aamalarn gereklemesi gerekir?
zaman istenilen dzeye ulaamayacamzdr. Keke ihtiya duyduumuz tm altyap ilemleri iin hazr, kullanm kolay ve esnek bir platform olsayd. Hayalini kurduum aslnda yle bir sistem: Bir sanal maazada cep telefonlarndan sorumlu departmanda sat mdr olarak alyorsunuz. dndasnz ve akll cihaznza bir mesaj geliyor: Henz piyasaya yeni km olan telefonumuz inanlmaz satlar yapyor, telefon ok popler ve stoklarnzda olduka azalm durumda. Bu mesajn hemen ardndan akll cihaznz zerinden, irketiniz iin fiyat ve teslim zaman asndan en uygun olan tedarikiyi bulup ihtiyacnz kadar telefonu sipari edebiliyorsunuz. Peki ya bu koullar altnda almyor olsaydnz? irketinizden sizi cep telefonunuzdan arayacaklar ve problemi ileteceklerdi. Sonra da siz irketinize ancak dnebildiiniz zaman tedarikilerle teker teker irtibata geerek hangisinin irketiniz iin en yararl olduuna karar verecektiniz. Sipari ve teslimat bilgileri zerinde anlatktan sonra ileminizi tamamlam olacaktnz. Yani sadece bir ka dakikada yapabileceiniz basit bir ilem iin belki de btn bir gnnz kaybedecektiniz. Verimliliiniz derken zamannz etkili ekilde kullanamayacaktnz. Oysa akll cihaznz zerinden tm bu ilemleri ksa bir ekilde zebildiinizden ie gitmenize bile gerek kalmadan zamannz en az ekilde kullanarak irketiniz iin en iyi olan seimi yapabilirsiniz. Kesinlikle iler ok daha verimli ve kolay ilerlerdi.. Elbette bu kurulabilecek hayallerin sadece mobil platforma ynelik blmnden bir kesit.
Konu: 1
Sorunun Temeli
Microsoft, vizyonu dorultusunda att admlarn yazlm gelitiricilere yansyan sonularn srekli izliyordu ve yazlm gelitiricilerin sorunlarn u balklar altnda ele alyordu. Uygulamalarn, sistemlerin ve kurumlardaki birimlerin ve farkl kurumlarn arasndaki iletiim sorunu. alanlarn ihtiya duyduklar verilere, ihtiya duyduklar an, kesintisiz, hatasz ve gvenli bir ekilde ve istedikleri platformdan eriebilmeleri. Uygulama gelitirme srecinde, gelitiricilerin altyap kodlar ile uramas ve bunun sonucunda uygulama gelitirme ve test sresinin uzamas. Bir uygulamann farkl platformlarda altrlabilmesi iin ayn ilemleri gerekletirecek kodlarn tekrar tekrar yazlmas ihtiyac.
Microsoft 1990 ylnda, yaanacak 10 ylda ngrerek bu ve benzeri sorunlara zm sunacak, uygulama gelitiricilerin ve son kullanclarn ilerini kolaylatracak bir platform gelitirmeye balad. Microsoft bu platforma ylesine inanyorduki kaynaklarnn %80inden daha fazlasn, yani kaderini bu platforma balamt. ok geni bir analiz ve gelitirme ekibinin almalarnn sonucunda ortaya kan rn 2000 ylnda dnyaya sunulduuna insanlarn karlarnda grdkleri yap karsnda hissettiklerini tanmlamak iin kullanlabilecek en uygun kelime; Hayranlkt. Microsoft.NET Platformu her trl yazlm gelitirme ihtiyacna ynelik hazr bir altyap sunarak uygulama gelitiricilerin windows, web ve mobil platformlara ynelik uygulamalar, ok daha hzl, kolay ve gl bir ekilde gelitirebilmelerine olanak tanyordu. Uygulama gelitiriciler ifreleme, kimlik dorulama, yetkilendirme, soket iletiimi, her trl veri kaynana ynelik veritaban ilemleri, xml ve web servisi teknolojilerine kadar burada saymadmz (editrler bir modln 100 sayfay gemesine pek scak bakmyorlar) ve hatta milyonlarca snf ve fonksiyonlar hazr ekilde karlarnda grdler. Bu gne kadar gnler, haftalar ve hatta aylar harcayarak gelitirmeye altklar bu yaplarn hepsini karlarnda kullanma hazr bir ekilde grmekten de son derece memnunlard.
Hedefler
Visual Studio alma ortam Start Page Menler Solution Explorer Paneli Toolbox Paneli Properties Paneli Help Kullanm
Bu modl, Microsoft Visual Studio ara yzn tanmay salar ve etkili bir biimde kullanmay gsterir. Ev ve i yerindeki alma ortamn dzenlemek daha verimli almay salar. Yazlm gelitirilirken de allan ortam tanmak ve kiiselletirmek rahat allmas asndan nemlidir. Bu modl tamamladktan sonra: Microsoft Visual Studio alma ortamn tanyacak, Menlerin ilevlerini aklayabilecek, Balang sayfasnn zelliklerini kullanabilecek, Solution Explorer, Toolbox, Properties panellerini tanyacak, Microsoft Visual Studio Yardm etkili bir ekilde kullanabileceksiniz.
Ara ubuklar
Men komutlarna grsel ara yz zel ara ubuklar tanmlanabilir
Menler Paneller
Sabitlenebilir, Kayan, Gizlenebilir pencereler
Visual Studio, ok gelimi zelliklere ve yardmc aralara sahip bir dosya editrdr. .NET platformu zerinde gelitirilen proje dosyalar dnda metin dosyalar, sql, rtf uzantl dosyalar da dzenlenebilir. Visual Studio ortamn oluturan ve kullanmn kolaylatran drt ana bileen vardr: alma Sayfalar (Tab Pages) Visual Studio ortamnda dosyalar, birer alma sayfas olarak alr. Bu dosyalar sekmeler halinde sralanr. Sayfalar arasnda CTRL-TAB ksa yolu ile gei yaplr. Bu alma modelinde, sadece bir sayfa grnr ve zerinde alma yaplr. Ancak Visual Studio bize, alma ortamn paralara blme imkn verir. rnek: o
Visual Studio alma ortamn an. Balang sayfas karnza kar. (Eer balang sayfasn gremiyorsanz, Help mensnden Show Start Page komutunu sein) View mensnden, Web Browser alt mensne iaret edin ve Show Browser komutunu sein. Visual Studio amak istediimiz Internet taraycs iin yeni bir sayfa oluturur. CTRL tuuna basl tutarak TAB tuuna basn. Atnz Internet taraycsndan balang sayfasna dner.
Konu: 1
Balang sayfasna sa tklayn ve kan menden New Vertical Tab Group komutunu sein. Visual Studio birden fazla sayfa zerinde alma imknn, sayfalar sekme gruplarna ayrarak salar. Balang sayfasn, sayfa balna basl tutarak, Internet taraycsnn bulunduu sekme grubuna tayn.
PUCU: Visual Studio ortamn bir web taraycs olarak kullanabilirsiniz. Ara ubuklar (Toolbars) Visual Studio, men komutlarn iin grsel ksa yollar ara ubuklar ile sunar. Benzer ilemler iin kullanlan komutlar bir ara ubuunda gruplanr. rnein Standart ara ubuu, yeni dosya oluturmak, bir dosyay amak - kaydetmek gibi genel dosya ilemleri iin kullanlr. Ara ubuklar, varsaylan olarak menlerin altnda bulunur. Ancak ubuklar tanarak yerlerini deitirebilir veya kayan duruma getirilebilir. Ayrca istenen ubuklar saklanlabilir veya gsterilebilir. Ara ubuklarn listesini grmek iin View mensnden Toolbars alt mensne iaret edin. Visual Studio bize kendi ara ubuklarmz oluturma imkn da verir. Farkl ilevlere sahip komutlar gruplanp, kiisel ara ubuu oluturulabilir. rnek: o Balang sayfasnn stndeki bir ara ubuuna sa tklayn. kan men, var olan tm ara ubuklarn listeler. aretli olan ubuklar eklenmi ubuklardr. Bu listeden Web ara ubuunu sein. Web ara ubuu zerine ift tklayn. Bu ilem ubuu floating (kayan men) duruma getirir. Tekrar ift tklandnda, ubuk Dockable (sabit duruma) gelir. Ara ubuuna sa tklayn. Listenin en altndaki Customize (zelletir) komutunu sein. Toolbars sekmesinde New (yeni) komutuna tklayn. kan pencerede ubua Genel lemlerim yazn. Ok tuuna basn. Visual Studio verilen isimde bir ara ubuu oluturur ve kayan durumda grntler.
o o
(kategoriler) listesinden Help kategorisini sein. Bu listenin yan tarafnda bulunan Commands listesinden Index komutunu bulun. Bu komutu tayp, oluturduumuz Genel lemlerim ara ubuuna brakn.
o o
Ara ubuunu, alma ortamnn altna tayarak sabitleyin. Ara ubuuna sa tklayn ve listeden Genel lemlerim ubuunu seerek alma ortamndan kaldrn. Menler Birok alma ortamnn yapt gibi Visual Studio da, benzer eler zerinde ilevleri olan komutlar menler halinde gruplar. Ara ubuklarndan fark sabit
Konu: 1
olmalar ve zelletirmeye ak olmamalardr. Menler bu modlde detayl olarak ele alnacaktr. Paneller Paneller, Visual Studio iindeki pencerelerdir. alma ortamnda birok panel bulunmasyla beraber, Solution Explorer, Toolbox, Object Browser, Properties, Watch, Output, Search Result, Task List gibi ska kullandmz paneller vardr. PUCU: Grmek istenilen paneller View mensnden seilebilir. Paneller, Visual Studio ortam iersinde istenilen yere tanabilir veya sabitlenebilir. Panellerin birka genel zellii vardr: o Auto Hide (Otomatik Gizle): Panelin, fare zerindeyken gzkmesi ve fare ekildikten sonra gizlenmesidir. o Dockable (Sabitlenebilir): Panelin, Visual Studio ortam iersinde bir yerde sabitlenebilme zelliidir. o Floating (Kayan): Kayan paneller herhangi bir yere sabitlenemez. Ancak her sayfann stnde durur ve bylece srekli grnr. Panellerin bu zellikleri Window mensnden eriilebilir. rnek: o
View mensnden Other Windows alt mensn iaret edin ve Favorites panelini sein. Panelin balnda, biri Auto Hide dieri Close olan iki dme grlr.
o o
Paneli tekrar sein, Window mensnden Auto Hide zelliini sein. Daha sonra ayn menden Floating zelliini sein. Panelin tanabildii ancak sabitlenemedii grlr. Panel seili iken, Window mensnden Dockable zelliini sein. Bu sefer panelin, tand zaman alma ortamnn herhangi bir yerine sabitlenebildii grlr. Panel seili iken, Window mensnden Hide komutunu sein. Paneli tekrar amak iin bu etaplar tekrarlayn.
Online Resources
nternet zerindeki kaynaklar Kod rnekleri, gncellemeler, makaleler
My Profile
alma ekline gre zel ayarlar
Visual Studio alma ortamn atmz zaman karmza ilk gelen balang sayfasdr. Bu sayfa blmden oluur.
Projects
O ana kadar altnz projeleri gsterir. Bu menden son projelerinizi aabilirsiniz. Son projelerde gzkmeyen bir proje (Open Project) veya yeni bir proje (New Project) aabilirsiniz.
Online Resources
Bu blmde rnek uygulamalar (Find Samples) ipular bulabilir, en yeni teknolojileri, gncellemeleri veya en son eklenen haberleri takip edebilir, MSDN ktphanelerinde kod rnekleri, makaleler aratrabilirsiniz.
My Profile
Bu blmde alma eklinize gre bir profil seebilirsiniz. Profiller; kullanlan ksa yollara, panellerin yerlerine ve grnmlerine, Visual Studio yardmn kullanrken yaplan filtrelemeye gre deiir. rnein, profili Visual C# Developer olarak ayarlarsak Dynamic Help paneli, sayfalarn sa tarafnda ivili olarak durur. Yardm panelinde bir arama yapmak istediimizde ise, sonular Visual C# filtresine gre kar. Ayrca Solution Explorer paneli CTRL-ALT-R ksa yolu ile alr.
Konu: 1
Grnm, ksa yollar ve yardm filtresi birbirinden bamsz olarak da ayarlanabilir. Bu durumda seilen profil, custom (zel) olarak gzkecektir.
At Startup seeneklerinden, Visual Studio alrken hangi pencerenin
gzkeceini belirleyebilirsiniz. rnein, balangta en son altnz projenin almasn istiyorsanz, Load last loaded solution seeneini tercih etmelisiniz. PUCU:
Giri sayfasn kapattktan sonra, Help mensnden Show Start Page
Konu 3: Menler
View, Window
Paneller, alma sayfalar grnmleri
Tools, Help
Yardmc aralar, yardm seenekleri
Visual Studio menleri birok uygulamann menlerine benzer niteliktedir. Men isimlerinde, belirli bir harfinin alt izilmitir. Belirtilen harfler ALT tuu ile birlikte basldnda, o menlere ksa yolla ulalr. Men komutlarnn bazlarnda ise, sadece o komuta zel bir ksa yol tanmldr. Bu ksa yollar CTRL veya SHIFT gibi birka tu kombinasyonu ile gerekleir.
File (Dosya)
Tm dosya ilemleri bu men altndadr. Standart ara ubuu ile bu mendeki baz komutlara ulalr. File mensndeki komutlar ile: o Yeni bir proje, bir dosya veya bo bir solution (zm) oluturmak, o Oluturulmu bir projeyi veya var olan bir dosyay amak, o Web zerinde paylatrlm dosya veya projeler amak, o Ak olan dosya veya projeleri kapatmak, o Recent Files (en son kullanlan dosya veya projeler) amak, o Dosyalar kaydetmek, yazdrmak mmkndr.
Edit (Dzenle)
Tm yaz dzenleme ilemleri iin, bu mendeki komutlar kullanlr. Text Editor ara ubuu da bu mennn komutlarna ksa yoldur. Edit mensndeki komutlar ile: o Copy, Cut, Paste, Delete, Select All gibi temel ilemler o Find And Replace, Go, Bookmark gibi navigation ilemleri
Konu: 1
o o
Satrlar yorum satr yapma, yorum satrlarn kaldrma, byk kk harf evrimi gibi ileri seviye ilemler gerekletirilir.
View (Grnm)
Visual Studio alma ortamndaki tm paneller bu men komutlaryla gsterilir. Ayrca Navigate Backward ve Navigate Forward komutlaryla en son allan satra geri dnlr.
Project (Proje) Projeye dosya eklemek, karmak, proje zelliklerini gstermek iin bu men kullanlr. Build (Derleme) Projelerin almak zere derlenmesi iin gereken komutlar, bu men altndadr. Debug (Hata Ayklama) Projede hata ayklarken gereken komutlar Debug mens altndadr. Projenin debug durumunda balatmak, BreakPoints (hata ayklarken durulmas gerek satrlar ayarlamak) gibi ilemler yaplr. Tools (Aralar)
Visual Studio ile beraber yklenen yardmc aralarn listelendii mendr. Ara ubuklarn zelletirmek iin kullanlan Customize seenei gibi Options seenei de en sk kullanlan zelliklerden biridir. Visual Studio alma ortamnn tm ayarlar Options mensnden yaplr. Environment ve Text Editor en sk kullanlan seeneklerdir. Environment (Ortam): Sayfa dzeni ve grnm ayarlar, yaz tipi (font) ve renk ayarlar, komutlar iin ksa yol ayarlar, Internet taraycs ayarlar, yardm ve dinamik yardm ayarlar yaplr. Text Editor (Metin Dzenleyicisi): Farkl programlama dillerine zg yaz dzeni yaplr. rnek: o o o
Sol panelde bulunan Environment mensnden Fonts and Colors (Yaz dzeni ve Renkler) sekmesine gelin. Sa panelde bulunan Display items (eleri Listele) mensnden Text alannn sein ve Item background (e arka plan) zelliini Light Grey (Ak Gri) olarak belirleyin. Tm sayfalarn arka plan rengi ak gri olacaktr.
10
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. Sol panelde Text Editor mensnden C# alt mensn sein. Burada Visual C# diline zel metin dzenleme seenekleri bulunur. Sa panelde, Display sekmesinin altnda Line Numbers (Satr Numaralar) seeneini iaretleyin. Bu seenek, Visual C# projelerinde alrken satr numaralarn gsterir.
Window (Pencere)
Sayfalarn ve panellerin grnmleri ve zelliklerini deitirmek iin kullanlan komutlar bu men altnda bulunur. Tm ak alma sayfalar bu men altnda grld gibi, istenen sayfa seilerek n plana getirilir. Ayrca, Close All Documents (Tm Sayfalar Kapat) komutu ile ak olan btn sayfalar kapatlr. Auto Hide All (Tmn Otomatik Gizle) komutu ile, sabit hale getirilmi tm paneller gizlenir.
Help (Yardm) Visual Studio alma ortamnda ok sk kullanlan yardm panellerinin grnm bu men ile salanr. Bu men ile ayrca, kullanlan Visual Studio alma ortamnn srm hakknda bilgi alnr, son gncellemeler kontrol edilir, teknik destek iin gereken e-posta adreslerine veya telefonlara ulalr.
Konu: 1
11
Visual Studio projeleri, bir Solution altnda toplar Solution iinde bulunan tm dosyalar, klasrler grntlenir Panele ait ara ubuu basit ilemler gerekletirir
Refresh, Show All Files, Properties
Visual Studio alma ortamnda projeler bir solution (zm) altnda alr. Bir solution iine farkl dilde ve tipte projeler dhil edilebilir. Visual Studio ile bir solution aldnda, Solution Explorer paneli ile solution iinde bulunan tm projeleri, ilgili dosya ve klasrleri grntler. Panelde koyu yaz tipinde gzken proje, solution iindeki balang projesidir. Bu panelden, eler zerinde silme, kopyalama, tama, ismini deitirme ilemleri yaplabilir. Ayrca panelin st ksmnda, seilen e zerinde basit ilemler gerekletirmek iin bir ara ubuu bulunur.
Refresh (Yenile)
Seilen projenin bulunduu klasrdeki tm dosyalar ve alt klasrleri gsterir. Panelde gzken beyaz eler proje iine dhil edilmemi elerdir. Projede kapsamnda kullanlmak istenen eler (rnein arka plan resmi), zerine sa tklanp Include In Project komutu ile projeye dhil edilmelidir.
Properties (zellikler) Paneldeki tm elerin zellikleri, Properties komutu ile grlebilir. Bu komut seildiinde, enin zellikleri Properties paneli ile grntlenir. (Properties paneli bu modlde detayl olarak ele alnacaktr.)
12
Solution Explorer paneli, View mensnden grlebildii gibi, varsaylan klavye seeneklerinde CTRL-ALT-L ksa yolu ile de grlebilir. (Ref: MSDN, Solution Explorer)
Konu: 1
13
Toolbox (Ara Kutusu) paneli, projelerde kullanlan eitli bileenlerin listelendii paneldir. Buradaki eler, sekmeler iinde gruplanmtr. Her sekme, ortak platformlarda alan veya benzer ilevleri olan nesnelere sahiptir. rnein, Data sekmesinde veri taban ilemlerinde kullanlan bileenler vardr. Windows Forms bileenleri Windows platformunda alan projelerde, Web Forms bileenleri ise Web tabanl projelerde kullanlan nesnelerdir. ClipBoard Ring sekmesinde ise kopyalanan metinler bulunur. Nesnenin silik gzkmesi, o anda allan sayfada kullanlamayaca anlamna gelir.
Toolbox panelinde nesneler, en sk kullanlandan en az kullanlana gre sralanmaktadr. rnein, Windows Forms sekmesinde en stte Label, Link Label, Button, TextBox nesneleri bulunur. Nesneler, yerleri ve sralar tanarak deitirilebilir, ayrca baka bir sekmeye de tanlabilir. Varsaylan sralama dnda, alfabetik olarak da sralama yaplabilir. Visual Studio alma ortamn, Toolbox panelindeki nesnelere yeni isim verme, nesneleri silme veya panele yeni sekmeler ve nesneler ekleme imknlarn da salar. rnek: o o o o
View mensnden Toolbox panelini sein
Panelde herhangi bir yere sa tklayn ve Show All Tab (Btn Sekmeleri Gster) komutunu sein Windows Forms sekmesinde TextBox nesnene sa tklayn. kan menden Rename Item (Ad Deitir) komutunu sein ve Metin Kutusu yazn. Metin Kutusu nesnesini tayarak sekmenin en stne getirin.
14
o o
Panele sa tklayn ve Sort Items Alphabetically (Nesneleri Alfabetik olarak Srala) komutunu sein. Metin Kutusu nesnesinin, alfabetik srada yerini ald grlr. Panele sa tklayn ve Add Tab (Sekme Ekle) komutunu sein. Sekmeye Medya ismini verin. Sekmeye sa tklayn ve Add/Remove Items (Nesne Ekle/Kaldr) komutunu sein. Customize Toolbox diyalog kutusu kar. Burada Toolbox paneline eklenebilecek tm bileenler listelenir. Com Components sekmesine gelin ve listeden Windows Media Player nesnesini iaretleyin. Ok tuuna basarak, diyalog kutusunu kapatn. Windows Media Player nesnesinin, oluturulan Medya sekmesine eklendii grlecektir. Toolbox paneli varsaylan klavye seeneklerinde CTRL-ALT-X ksa yolu ile ulalr.
Visual Studio ortamndaki nesnelerin zelliklerini listeler zellik ad Deeri zellikler kategorilere gre gruplanmtr, alfabetik olarak da sralanabilir F4 ile her yerden ulalr
Properties (zellikler) paneli, seilen bir nesnenin zelliklerini grntler. Paneldeki grnm, zellik ad - deeri eklindedir. Silik olarak gzken zellikler salt okunurdur ve deitirilemez. Panelin zerindeki alr liste, alma sayfasndaki nesneleri listeler. Buradan istenilen nesne seilerek zellikleri grntlenir.
Konu: 1
15
Paneldeki zellikler kategorilere gre gruplanmtr, ancak alfabetik olarak da dizilir. Panelin stnde bulunan ara kutusundan Categorized (Kategoriletirilmi) veya Alphabetic (Alfabetik) seilerek zelliklerin grnmleri deitirilir.
Panelin en altnda bulunan blmde, her zelliin aklamas bulunur. pucu: Bir nesnenin zerindeyken F4 tuuna basnca, Properties paneli grntlenir.
16
Yazlm gelitirirken en ok kullanacamz kaynaklar yardm dosyalar olacaktr. Bir programlama dilinin ok eitli zellikleri, kullanm farkllklar olabilir. yi bir programc btn bu zellikleri ezbere bilen deil, bu zellikleri en ksa srede bulan, renen ve kullanandr. Yardm dosyalarnn kullanmn bilmek, programcln temelini oluturan nemli unsurlardan biridir. DKKAT: Visual Studio Yardmn kullanmak iin, MSDN (Microsoft Developer Network)
yardm ktphanelerinin yklenmi olmas gerekiyor.
Visual Studio Yardm programcya, gelimi zelliklere sahip paneller ve yardm dosyalar ile geni bir kullanm kolayl salar. Visual Studio Yardm dosyalarnn yaps balk, ierik, ilikili konular (See blmlerinden olumutur. Ayrca her yardm dosyasnn altnda bulunan Send Comments balants ile konu hakknda yorum gnderilebilir.
Also)
Visual Studio Yardm panelleri Dynamic Help, Search, Index ve Contents olarak drde ayrlr. Bu paneller, Help mensnden ulalabilir.
Konu: 1
17
Paneldeki yardm konular Help, Samples ve Getting Started olarak blme ayrlmtr. Help blmnde, seilen nesne, bu nesneyle ilikili olan kavramlarn listelendii blmdr. Samples, konuyla ilgili kod rnekleri bulunan yardm dosyalarn gsterir. Getting Started allan sayfalara gre deien, temel ilemleri ieren balang yazlarn gsterir.
Search (Arama)
MSDN ktphanelerinde arama yaplan paneldir. Look for metin kutusuna, aranacak anahtar kelimeler girilir. Filtreleme (Filtered by) ile arama sonular belli konulara gre snrlanr ve istenmeyen seeneklerin gsterilmesi engellenir.
Search panelinde, Search in titles only, Match related words, Search in previous results, Highlight search hits arama
seenekleri bulunur:
Search in titles only: Sadece konu balklarnda arama yapar, ierik
ksmna bakmaz
Match related words: Kelimeleri yazld gibi arar, benzer yazml kelimeleri
aramaz.
Search in previous results: lk aramadan sonra aktif olan bu seenek ile kelimeler, bir nceki aramada bulunan sonular arasna baklr. Highlight search hits: Bulunan yardm sayfalarnda, aranan kelimelerin seili olmasn salar.
18
Bulunan sonular Search Results (Arama Sonular) panelinde gsterilir. Bu panelde o Title, konunun baln o Location, MSDN ktphanelerinde hangi balk altnda bulunduunu o Rank, konunun, aranlan kelimeye olan yaknlk derecesini ifade eder.
Index (Dizin)
Yardm dosyalarndaki btn konular alfabetik srada dizer. Filtreleme ilevi, arama panelinde olduu gibidir. Bu panelin zellii, aranacak kelime yazlrken, bu kelime ile balayan tm konularn alfabetik srada gsterilmesidir. Bu ekilde, aranan konulara ok hzl bir ekilde ulalabilir. Eer bir konu ile ilgili birden fazla yardm dosyas varsa, Index Results (Dizin Sonular) panelinde bu seenekler gsterilir.
Contents (erik)
Contents panelinde, tm MSDN ierii konulara gre hiyerarik yapda, kategorilere ayrlm olarak gsterilir. Bu panelde de ayn ekilde filtreleme yaplarak istenmeyen ierikler kartlabilir. Bir yardm dosyas akken, Help mensnden Sync Contents (erik Senkronizasyonu) komutu seilerek o yardm dosyasnn Contents panelindeki yeri bulunabilir.
Yardm dosyalarn yorumlayabileceksiniz. Bu lab tamamlamak iin, MSDN yardm ktphaneleri yklenmi olmaldr.
Dynamic Help
1. Help mensnden Show Start Page komutuna tklayn. 2. Help mensnden Dynamic Help komutunu seerek Dynamic Help panelini an. Panelde gsterilen ilk konunun ismi nedir?
Konu: 1
19
3. CTRL-ALT-X tularna basp Toolbox panelini an. Dynamic Help mensnde ne deiti? 4. Toolbox panelinde, Windows Forms tabnda Button nesnesini sein. Dynamic Help panelindeki ilk konunun ismi ne olarak deiti? Button seiliyken F1 tuuna basn. Alan sayfann ismi nedir?
Contents
1. Help mensnden Sync Contents komutuna tklayn. Button Members konulu yardm dosyas hangi konularn altnda bulunuyor? 2. Contents panelinin ilk bal olan Visual Studio .NET altnda, Gettings Assitance altnda, "Using Help in Visual Studio .NET altnda, Tips for Using the Help Keyword Index konulu yardm an. File mensnden Print komutunu sein ve sayfay yazdrn. DKKAT: Sayfay yazdrmak iin bilgisayarnza bal bir yazc bulunmas gerekiyor. PUCU:
salar. Yardm dosyalarn yazdrmak, zellikle uzun metinlerde, kolay alma imkn
Search
1. Help mensnden Search komutunu sein. Look for metin kutusuna Visual Studio .NET yazn. Search in titles only, Match related words seeneklerini iaretleyin. Search dmesine basn. Ka tane konu bulundu? En st dereceli konu nedir? 2. Search in previous results seeneini iaretleyin. MSDN kelimesini aratn. Ka konu bulundu? 3. Search in previous results seeneini kaldrn. MSDN kelimesini tekrar arattnz zaman ka konu bulunur? Search in titles only seeneini kaldrnca ka konu bulunur? 4. Search Results ve Search panellerini kapatn.
Index
1. Help mensnden Index komutuna tklayn. Look for metin kutusuna "file types" yazn. lk kan konu nedir? 2. Filtre olarak Visual C# sein. lk hangi konu gsteriliyor? 3. File Types konusu zerine tklayn. Alan sayfada Solution Files (.sln and .suo) adl blm inceleyin. 4. Project Files balnda, Visual Basic and Visual C# alt bal altnda, File Types and File Extentions in Visual Basic and Visual C# konusuna tklayn.
20
5. Alan yardm dosyasn inceledikten sonra, sayfann See Also bal altnda What's New in Projects konusuna sa tklayn. Alan menden Open Link in New Window komutunu sein. Window mensnden New Vertical Tab Group komutunu sein. Bir nceki yardm dosyasyla arasndaki benzerlikleri inceleyin. 6. Window mensnden Close All Documents seenei ile btn sayfalar kapatn ve Visual Studio ortamndan kn.
zet
Visual Studio alma ortam Start Page Menler Solution Explorer Paneli Toolbox Paneli Properties Paneli Help Kullanm
1. Visual C# profili iin, Object Browser paneline hangi ksa yolla ulalr? 2. Visual Studio ortamnda tm sabitlenmi panelleri gizlemek iin hangi men komutu kullanlr? 3. Properties panelindeki zellikler alfabetik olarak nasl sralanr?
Hedefler
Windows Tabanl Uygulamalar zellikler, Metotlar, Olaylar Windows kontrolleri Deiken, Sabit Tanmlar Veri Tipleri Operatrler
Windows tabanl uygulamalar, Windows iletim sistemi zerinde alan uygulamalardr. Windows uygulamalar Windows formlar ve kontrollerinden oluur. Visual Studio bu formlarn ve zerindeki kontrollerin tasarmn, kodlarn yazlmn byk lde kolaylatrarak uygulama gelitirme srecini daha hzl ve kolay hale getirir. Bu modl tamamladktan sonra: Windows tabanl programlamada kullanlan kontrolleri tanyacak, Kontrollerin zellik, metot ve olay kavramlarn renecek, Visual C# .NET dilinde deiken, sabit tanmlamay renecek, Veri tiplerini tanyacak, Operatrleri kullanabileceksiniz.
HERKES N UNIX
KISIM I:
Visual C#.NET ile yazacamz Windows uygulamas ekrana, Hello World! yazsn ve o anki zaman gsteren bir bilgi mesajn kartr. Visual Studio alma ortamn an. File mensnden, New alt mensne iaret edin ve Project komutunu sein. New Project diyalog kutusu, yazlaca dile, alaca ortama gre deien projeleri tiplerini listeler. Proje tiplerinden Visual C#Project ve Windows Application tipinin seili olduunu kontrol edin. Name zelliine HelloWorld yazn ve Ok tuuna basn. Alan Windows projesinde balang olarak bir adet Windows Form tasarm grnmnde alr. Toolbox panelinden Button kontroln formun zerine srkleyip brakn. Properties panelini aarak Button kontrolnn Text zelliine Hello World! yazn. Eklenen Button kontrolne ift tklayarak kod sayfasna gein. Button kontrolne basldnda altrlacak kodu yazn:
MessageBox.Show("Hello World! The time is " + DateTime.Now);
NOT:
HERKES N UNIX
BLM 1:
MessageBox.Show metodunun yazld kodun stne, yaplmak istenileni belirten bir yorum satr yazn.
// MessageBox.Show metodu ile kullancya Merhaba diyoruz. // Now zellii ile o andaki saat ve gn // deerlerini de kullancya gsteriyoruz. F5 tuuna basarak projeyi altrn.
PUCU:
deiiklik yapldn ancak daha kaydedilmediini belirtir. Proje dosyalarnz CTRL-S tularna basarak ska kaydedin.
Metotlar
Yaplan ilemler Parametre ile, Parametresiz arlrlar Focus, Select, Hide, Show
Olaylar
Balarna gelen ilemlerdir Click, MouseDown, Enter
zellikler
zellikler, kontrollerin grnm, yerleimi veya davranlarna zel niteliklerdir. rnein bir Button kontrolnn Text zellii, zerinde yazan yazya erimemizi salar. Kontrollerin zellikleri, tasarm annda Properties panelinden ulalabilecei gibi, kod tarafnda da okunup deitirilebilir. Kontrollerin birok zellii hem okunabilir hem de deitirilebilir. Ancak baz zellikler salt okunur (ReadOnly) ve salt yazlr (WriteOnly) olabilir. Bu tip zellikler Properties panelinde gzkmezler. Kontrollerin birok ortak zellikleri vardr.
HERKES N WINDOWS
KISIM I:
Text (Yazi)
Kontrollerin Text zellii, zerinde grntlenen yazdr. Bu zellik alma annda ska okunup deitirilerek, kullancyla iletiim salanr. TextBox kontrolne girilen bir deerin okunup Label kontrolne yazlmas iin, kontrollerin Text zellikleri kullanlr.
private void button1_Click(object sender, System.EventArgs e) { label1.Text = textBox1.Text; }
Name (sim) Name zellii kontrollere ulamak iin kullanlan zelliktir. Birok kontroln Text
zellii ayn olabilir. Ancak her biri ayr birer nesne olduklar iin, Name zellikleri benzersiz olmas gerekir.
textBox2.Text = textBox1.Text;
Kontrollerin byklk zelliidir. Height (ykseklik) ve Width (genilik) zelliklerinden oluur. Genellikle tasarm annda belirlenen bu zellik, alma annda da deitirilebilir.
label1.Height = 10; label1.Width = 20; BackColor (Arka plan rengi)
Kontrollerin arka plan renginin ayarland zelliktir. Bu zelliin deeri, Color (renk) nesnesinde tanml deerler ile belirlenir.
ForeColor (nalan rengi)
HERKES N UNIX
BLM 1:
Visible (Grnr)
bahsedilecektir.
private void button1_Click(object System.EventArgs e) { // Label kontroln gizle label1.Visible = false; // Label kontroln gster label1.Visible = true; } sender,
Metotlar
Metotlar kontrollerin yapt ilemlerdir. Metotlar parametreyle veya parametresiz arlabilir. Parametreyle armak, metodun girilen deere gre ilem yapacan belirtir. rnein Focus (Odaklan) metodu, parametre beklemeden alr ve kontroln seilmesini salar.
private void button1_Click(object System.EventArgs e) { // lem yapldktan sonra // TextBox kontrolne odaklan textBox1.Focus(); } sender,
metodunun dierlerinden bir fark daha vardr. TextBox iindeki yazy, verilen parametreler gre belli bir ksmn ya da hepsini seer.
private void button1_Click(object System.EventArgs e) { textBox1.Text = "Yazlm Uzman"; textBox1.Focus(); // Sekizinci karakterden sonra,
HERKES N WINDOWS
sender,
KISIM I:
BringToFront (ne Getir) st ste duran kontroller arasndan en ne getirir. SendToBack (Arkaya Gnder)
Olaylar:
Olaylar kontrollerin bana gelen ilemlerdir. Olaylarn metotlardan fark, bu ilemler kontrollerin elinde olmadan gereklemesidir. rnein bir Button kontrolne tklanmas, o kontroln istei dnda yaplmtr. Bu olayn tetiklemesinde kontroln bir rol yoktur. Bu olaylar gerekletii zaman yaplmas gereken ilemler, ilgili olayn yordamna yazlr. Button1 isimli kontroln zerine tkland zaman gerekletirmek istenen eylemler Button1_Click yordamna yazlr. Visual Studio, olaylarn yordam isimlerini Kontrolsmi_Olaysmi olarak biiminde yazar. Kontroller ile alrken benzer olaylar kullanlr.
Click (Tklandnda)
Kontrol zerine tkland zaman tetiklenen olaydr. Windows tabanl programlamada en sk kullanlan olaylardan biridir.
MouseDown (Mouse tuu basldnda)
Fare, kontroln zerindeyken herhangi bir tuuna basld zaman gerekleen olaydr. Bu olay, Click olayndan nce alr.
MouseUp (Mouse tuu brakldnda)
BLM 1:
Baka bir kontrol seilmek zere kldnda, bu kontroln Leave olay tetiklenir.
VisibleChanged (Grnrl deitiinde)
Kontroln grnp grnmediini belirten Visible zellii deitii zaman tetiklenir. PUCU: Olaylarn alma sralarn test etmek iin tm olay yordamlarna, mesaj kutusu
karan (MessageBox.Show) kod yazn. Daha sonra projeyi altrp kontroller zerinde yaplan deiikliklere gre olaylarn alma sralarna bakn.
Windows tabanl uygulamalar gelitirirken ska kullanacamz bir grup kontrol vardr. Form kontrol hari dier btn kontroller Toolbox panelinden seilir. Bu kontroller srklenip Form zerine istenilen pozisyona braklr.
KISIM I:
Kontrollerin tasarm annda byklkleri, yerleri Size ve Location zellikleri ile deitirilebilecei gibi, fare ile de istenilen ekilde ayarlanabilir.
Form
Windows uygulamalar, Windows kontrollerinin tutulduu pencereler olan formlardan oluur. Bir Windows projesi ald zaman Form kontrol otomatik olarak eklenir. kinci bir form eklemek iin Project mensnden Add Windows Form komutunu seilir. Proje alt zaman balang formu grntlenir. Balang formu projenin zelliklerinden deitirilir.
Visual Studio ortamnda formlar, tasarm sayfas ve kod sayfas olmak zere iki farkl sayfada grntlenir. Tasarm sayfas, formun ve zerindeki kontrollerin grnmlerini kolay bir ekilde deitirmeyi salar. Visual Studio bu sayfada yaplan deiiklikleri kod sayfasnda e zamanl olarak gnceller. rnein bir Button kontrolnn geniliini fare ile deitirdiimiz zaman, kod sayfasnda bu
HERKES N UNIX
BLM 1:
kontroln Width zellii yaplan deiiklie gre gncellenecektir. Ayn deiiklikler properties panelinde de grlebilir. Formlarn, dier kontrollerin zelliklerinden farkl baz zellikleri vardr. ControlBox (Denetim Kutusu) Form zerindeki simge durumunda kltme, ekran kaplama ve formu kapama kutularnn grnmn ve eriebilirliini kontrol eder. NOT:
Formun ControlBox zellii False iken uygulama, Debug mensnden Stop Debugging komutu seilerek kapatlabilir.
StartPosition (Balag Pozisyonu) Form ald zaman nerede gzkeceini belirler. CenterScreen seenei formu ekrann ortasnda gsterir. Formlar ald zaman Load olay gerekleir. Eer form, balang formu olarak seilmise, proje balad zaman altrlmak istenen kodlar bu olayn yordamna yazlr.
private void Form1_Load(object sender, System.EventArgs e) { label1.Text = "Proje balatld. Kayt zaman: " + DateTime.Now; }
Button
Bir Windows dmesini temsil eder. Button kontrolne basldnda Click olay tetiklenir. Bu olay gerekletii zaman yaplacak ilemler, ButtonIsmi_Click yordamnda yazlr.
private void btnRenkDegistir_Click(object sender, System.EventArgs e) { btnRenkDegistir.ForeColor = Color.Gray; }
TextBox
Bir Windows metin kutusunu temsil eder. Kullanclarn deer girerek program ile haberlemesini salamak amacyla kullanlr. TextBox kontrolndeki yaz deitii zaman TextChanged olay gerekleir.
private void textBox1_TextChanged(object sender, System.EventArgs e) { // TextBox iindeki yaz deitii zaman // aadaki kod alr. MessageBox.Show("Yaz deitirildi: " + textBox1.Text); }
HERKES N WINDOWS
10
KISIM I:
Label
Bir Windows etiketini temsil eder. Kullancya, form zerinde bir yazy gstermek amal kullanlr. Bu yaznn grnm, Label kontrolnn baz zellikleri ile deitirilir. TextAlign (Yaz Hizalama) Yaznn Label kontrol zerinde nerede duracan belirler.
Font zellii birok alt zellik tar. Bunlardan bazlar en sk kullanlan zelliklerdir.
o Name
Karakterlerin boyutunu belirler. Varsaylan byklk 8,5 deerini alr. o Bold (Kaln) Yaznn kaln tipte olmasn belirler. o Italic (Yatay) Yaznn italik tipte olmasn belirler. o UnderLine (Alt izgili) Yaznn alt izgili olmasn belirler.
ComboBox
Bir Windows alan kutusunu temsil eder. ComboBox kontrol, kullanclarn baz deerleri alan bir listeden semesini salar. Listeye tasarm annda veya alma annda e eklenebilir. Listeye e eklemek iin kontroln Items zelliinden faydalanlr.
HERKES N UNIX
BLM 1:
11
Tasarm annda e eklemek iin Properties panelinden Items zellii seilir. String Collection Editor penceresinde, her enin deeri tek bir satrda yazlr.
alma annda e eklemek iin kod sayfasnda, kontroln Items zelliinin Add metodu kullanlr.
private void Form1_Load(object System.EventArgs e) { comboBox1.Items.Add("Lise"); comboBox1.Items.Add("niversite"); comboBox1.Items.Add("Yksek Lisans"); comboBox1.Items.Add("Doktora"); } sender,
ListBox
Bir Windows liste kutusunu temsil eder. Kontroldeki eler sabit bir liste olarak grntlenir. ListBox kontrolne e ekleme ilemi, ComboBox kontrolndeki ilemlere ile ayndr. ComboBox kontrolnden fark, birden fazla e seilebilir olmasdr.
private void btnBosSiniflar_Click(object sender, System.EventArgs e) { listBox1.Items.Add("YU6501"); listBox1.Items.Add("YM6221"); listBox1.Items.Add("YM6102"); listBox1.Items.Add("YU6412"); }
HERKES N WINDOWS
12
KISIM I:
Timer
Bir Windows sayacn temsil eder. Saya almaya balad zaman, belirli zaman aralklarnda Tick olay gerekleir. Timer kontrolnn Interval deeri, Tick olaynn ka milisaniyede bir gerekleeceini belirler. rnein Interval deeri 2000 olan bir saya, Tick olaynda yazlan kodlar iki saniyede bir altracaktr. Sayac balatmak iin kontroln Start metodu, durdurmak iin ise Stop metodu kullanlr. Enabled zellii, sayacn aktif olup olmadn belirler.
private void btnBasla_Click(object sender, System.EventArgs e) { // Saya 5 saniyede bir alacak timer1.Interval = 5000; timer1.Start(); } private void timer1_Tick(object sender, System.EventArgs e) { MessageBox.Show("Saya alyor..."); } private void btnDur_Click(object sender, System.EventArgs e) { timer1.Stop(); }
HERKES N UNIX
BLM 1:
13
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
Name: lblSure 5. Forma bir Timer kontrol ekleyin. Name zelliini tmrKronometre olarak deitirin. PUCU:
Kod tarafnda kullanacanz kontrollerin isimlerini deitirmek, daha sonra ulamak iin zaman kazandracaktr.
6. Bir ComboBox ekleyin. Text zelliini Hz Sein olarak, Name zelliini de cmbInterval olarak deitirin. Items Collection iine srayla 1000, 2000, 3000, 4000 deerlerini girin. Bu kontrol, alma annda Timer kontrolnn Interval zelliini deitirmeyi, dolaysyla kronometrenin hzn ayarlamay salayacak. 7. Biri Dur, dieri Bala Text zelliklerine sahip iki Button ekleyin. Kontrollerin Name zelliklerini srayla btnDur ve btnBasla olarak deitirin. 8. Bir ListBox kontrol ekleyin ve Name zelliini lbKayit olarak deitirin. Bu kontrol kronometrenin balama ve durma zamanlarn kaydetmeyi salayacak. 9. Bir TextBox kontrol ekleyin. Name zelliini txtSure olarak deitirin ve Text zelliinde yazan yazy silin. 10. Eklenen kontrolleri, resim (Resim numaras) de grnen ekilde dzenleyin.
HERKES N WINDOWS
14
KISIM I:
Kodlarn yazlmas
1. Formun zerine sa tklayn ve View Code komutunu sein. 2. Alan kod sayfasnda, KalanSure isimli bir deiken tanmlayn.
public int KalanSure;
3. Formun tasarm grnmne dnn ve Bala isimli Button kontrolne ift tklayn. btnBasla_Click yordam iine Timer kontroln ayarlayp balatan, ListBox kontrolne kaytlar giren, kalan sreyi Label kontrolnde grntleyen kodlar yazn.
private void btnBasla_Click( System.Object sender, System.EventArgs e ) { // Balang zaman "KalanSure" deikenine atanr. KalanSure = System.Convert.ToInt32( txtSure.Text ); // Kalan sre kullancya gsterilir. lblSure.Text = System.Convert.ToString( KalanSure ); // ListBox kontrolne kayt girilir. lbKayit.Items.Add( "Kronometre balad: DateAndTime.Now.TimeOfDay.ToString() ); // belirler. tmrKronometre.Interval = System.Convert.ToInt32( cmbInterval.Text ); // Timer kontroln altrr. tmrKronometre.Start(); }
HERKES N UNIX
"
hzn
BLM 1:
15
4. Dur isimli Button kontrolne ift tklayn. btnDur_Click yordam iine Timer kontroln durduracak ve ListBox kontrolne kaytlar ekleyecek kodlar yazn.
private void btnDur_Click( System.Object System.EventArgs e ) { // Timer kontroln durdurur. tmrKronometre.Stop(); sender,
5. Tasarm grnmnde tmrKronometre isimli Timer kontrolne ift tklayn. tmrKronometre_Tick yordam iine kalan sreyi azaltacak ve sre sfrlandnda kronometreyi durduracak kodlar yazn.
private void tmrKronometre_Tick( System.Object sender, System.EventArgs e ) { // Her saniye getiinde sure deeri 1 azalacaktr. KalanSure = KalanSure - 1; // KalanSure deeri kullancya gsterilir lblSure.Text = System.Convert.ToString( KalanSure ); durdurulur. // KalanSure deeri sfra ulamsa kronometre
if ( KalanSure == 0 ) { tmrKronometre.Stop(); lbKayit.Items.Add( "Sre Doldu: " + DateAndTime.Now.TimeOfDay.ToString() ); MessageBox.Show( "Sre doldu" ); } }
6. Projeyi balatn, metin kutusuna 5 deerini girin. Hz Sein alan kutusundan 1000 deerini sein ve Bala dmesine basn. Sre baladktan ve bittikten sonra ListBox kontrolndeki deiiklikler nelerdir? Hz 3000 olarak seildiinde balama ve biti zamanlar arasndaki sre ne kadardr?
Konu 4: MessageBox
MessageBox, kullancya bilgi gstermek iin alan mesaj kutusudur. Bu mesaj
16
KISIM I:
Mesaj
kutusunda
hangi
dmelerin
Mesaj kutusu, kapanrken hangi dmenin basldn DialogResult nesnesi ile programcya bildirir.
if(MessageBox.Show("Deiiklikler kaydedilsin mi?", "Kayt", MessageBoxButtons.YesNoCancel) == DialogResult.Cancel) { // ptal tuuna basld zaman // buraya girilir. }
HERKES N UNIX
BLM 1:
17
Option Explicit Off, tanmlanmam deikenlerin kullanmna izin verir Deikenlere, kapsam alan dndan eriilemez Sabitler tanmlandktan sonra deitirilemez
const int buffer = 255;
Tanmlanan deikenlerin tipleri deiken isminden nce belirtilir. Deiken isimlerini belirlerken baz noktalara dikkat etmek gerekir. Boluk, nokta, soru iareti, noktal virgl, ift trnak, tek trnak, aritmetik operatrler, karlatrma ve atama operatrleri, parantezler kullanlamaz. Say ile balayamaz.
HERKES N WINDOWS
18
KISIM I:
PUCU:
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 program iinde, tuttuklar verilere ulamak iin kullanlr. Ancak deikenlere ulamak, tanmlandklar yerde veya alt bloklarda mmkndr. Bu kavrama deikenlerin kapsam alan (Scope) denir. Kapsam alan dndaki bir yerden deikene ulalamaz.
namespace NameSpace1 { class Class1 { int SinifDegiskeni; void Sub1() { int YordamDegiskeni; while(true) { int DonguDegiskeni; } } void Sub2() { int YordamDegiskeni2; } } }
HERKES N UNIX
BLM 1:
19
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 (Class dzeyinde) tanmlanmalar gerekir. Ancak sadece bir yordam iinde kullanlan deikenler class dzeyinde tanmlanrsa, fazladan bellekte yer tutar ve performans der. Class seviyesindeki deikenler, ayn class iindeki fonksiyonlar ile deitirebilir ve class rneinin yaam sresinde ilgili zelliklerine eriim salanabilir.
HERKES N WINDOWS
20
KISIM I:
Veri Tipleri
Veri Tipleri
Boolean Byte Char Date Decimal Double Int16 - Short Int32 - Integer Int64 Long Single String
String yazi = "Veri tipleri rnekleri; boolean bool = True; char karakter = "A; date tarih = #4/23/2005#; decimal numerik = -123456789; double cift = -1.234E-120; single tek = 3.32E+100; byte bayt = 255; short kisaSayi = -32000; int tamSayi = 2000000000; long uzunSayi = -123456789123456789;
Veri tipi, deikenlerin tuttuklar deerlerin trn ve bellekte tutulacak boyutunu tanmlar. Deikenleri veri tipleri ile tanmlarken verinin boyutuna gre bir veri tipi seilmelidir. Visual C#.NET veri tipleri Tablo 1de listelenmitir. Veri Tipi bool byte char decimal Boyut 2 Bayt 1 Bayt 2 Bayt 16 Bayt Deer true false 0 255 Tek bir Unicode karakteri tutar 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:
HERKES N UNIX
double
8 Bayt
BLM 1:
21
Unicode
ile arplacan belirtir. rnein 12 E-3 ifadesi, 12 * 0.001 anlamna gelir. -1.7E-5 = -0.000017 -1.7E+10 = -17000000000.0 0.7432E+2 = 74.32 7432E-3 = 7.432 NOT: Int16, Int32, Int64 .NET veri tipleridir. Visual C# dilindeki karlklar short,
int, long veri tipleridir. string yazi = "Veri tipleri rnekleri"; bool b = true; char karakter = "A"; decimal numerik = -123456789; double cift = -1.234E-120; float tek = 3.32E+100; byte bayt = 255; short kisaSayi = -32000; int tamSayi = 2000000000; long uzunSayi = -123456789123456789;
Byk veri tiplerinden kk veri tiplerine dnm srasnda, deer kayplar meydana gelebilir. rnein float tipinden short tipine yaplacak bir dnmde virglden sonraki saylar kaybedilecektir.
float virgullu = 1.12; short kisaSayi = (float) virgullu; // kisaSayi deikenin son deeri 1 olur
HERKES N WINDOWS
22
KISIM I:
struct
birka veri tipinin bir araya getirilip oluturulduu bileik bir tiptir. struct veri tiplerinde yordam tanmlar da yaplabilir.
struct Nokta { int x; int y; void Degistir(int yeniX , int yeniY) { x = yeniX; y = yeniY; } } struct Ucgen { Nokta n1; Nokta n2; Nokta n3; }
HERKES N UNIX
BLM 1:
23
Dizilerle almak
Diziler
Ayn tipte veriyi bir arada tutar Birden fazla boyutlu olabilir
string [] string [] string [] // ... isimler = isimler; isimler = new string[10]; isimler; new string[4];
Dizi deikenleri, ayn tipte birok veriyi bir arada tutmay salar. Benzer ilemlerde kullanlan deikenler bir dizi altnda listelenebilir. rnein kullancdan alnan isimler String tipinde bir dizi iinde toplanabilir.
string [] isimler;
Dizilerin indisleri sfrdan balar. rnekteki isimler dizisinin 4 tane String tipinden eleman vardr. Dizilerin elemanlarna ulamak iin, istenilen elemann indisi verilmesi gerekir.
isimler[0] isimler[1] isimler[2] isimler[3] = = = = Ali; Ahmet; Mehmet; Aye;
MessageBox.Show(isimler[3]);
HERKES N WINDOWS
24
KISIM I:
Dizilere tek tek deer atanabildii gibi, tanmlarken de balang deerleri atanabilir.
string [] isimler = {"Ali","Ahmet","Mehmet","Aye"};
Burada dizinin ilk boyutunda 5 tane eleman vardr. lk boyuttaki her eleman iin kinci boyutta 6 eleman bulunur. Dolaysyla toplam 30 elemanl bir dizidir. Bu dizide bir boyut daha olsayd, o boyutun her eleman iin dier boyutlardaki 30 eleman bulunacakt. ok boyutlu dizilerin eleman saylar boyutlarndaki eleman saylarn arparak hesaplanabilir.
int [,,,,] dizi = new int[boyut1,boyut2,boyut3,... ,boyutn]; // Eleman says: // boyut1 * boyut2 * ... * boyutN
ok boyutlu dizilere balang deerleri, dizinin boyutu dikkate alnarak verilmelidir. Boyutlardaki elemanlar kme parantezleri ile gruplanmaldr.
// lk boyutunda 2, ikinci boyutunda 4 eleman olan // 2 boyutlu dizi int [,] matris = {{1, 2, 3, 4}, {5, 6, 7, 8}};
ok boyutlu dizilerin elemanlarna ulamak iin, her boyut iin indis gstermek gerekir.
matris[0, 0] = 1;
Baz dizi zellikleri ve metotlar Diziler, .NET Framework iinde tanml Array snf temsil eder. Tm diziler Array snfnda tanml zellikleri ve metotlar kullanrlar.
Length
BLM 1:
25
ndisi verilen boyutun ka elemanl olduunu gsterir. Burada indisin sfrdan baladna dikkat edilmelidir.
int [,,,,] dizi = new int[10, 40, 50, 80, 90]; MessageBox.Show(dizi.GetLength(4).ToString()); // Sonu = 90 Clear, Reverse, IndexOf metotlar Array snfnda Shared (paylatrlm)
Parametre olarak verilen dizinin, belirtilen indis aralndaki tm deerleri temizler. Temizleme ileminde atanan deer, dizi elemanlarnn tiplerine gre deiir. rnein int tipinde tanml bir dizinin elemanlar temizlenirse 0 deerini alacaktr. Buna karn String tipindeki elemanlar (bo yaz) deerini alr.
int []dizi= {12, 13, 14, 15}; // 1. indisten balayarak, 3 eleman temizle Array.Clear(dizi, 1, 3); MessageBox.Show(dizi[2].ToString()); //Sonu = 0 // Dizinin tm elemanlarn temizler Array.Clear(dizi, 0, dizi.Length); Reverse
Parametre olarak verilen dizinin eleman srasn tersine evirir. Dizinin tm elemanlarnn veya belirli indis aralndaki elemanlarnn sras tersine evrilebilir.
string [] harfler = {"A", "B", "C"}; Array.Reverse(harfler); MessageBox.Show(harfler[2]); // Sonu = A string [] harfler = {"A", "B", "C"}; Array.Reverse(harfler, 0, 1); MessageBox.Show(harfler[2]); // Sonu = C IndexOf
lk parametrede verilen dizide, ikinci parametrede verilen deeri arar. Aranan deer dizide bulunursa indisi, bulunamazsa -1 dndrr.
float [] notlar = {78.1, 99.9, 100, 12.2}; float maxNot = 100; MessageBox.Show(Array.IndexOf(notlar, maxNot).ToString()); // Aranan maxNot deerinin indisi = 2
HERKES N WINDOWS
26
KISIM I:
Debug
Debug
BreakPoint ile alma durdurulur Deikenlerin durumlar izlenir
Autos, Locals, Watch panelleri
Visual Studio Debug arac, alma annda kodlar arasnda satr satr ilerleyerek hatalar bulmay salar. ncelemeye balamak istenen kod satr zerinde bir BreakPoint (durma noktas) konarak, hata ayklaycnn bu satr altrlmadan nce orada durmas salanr.
Uygulama altrldnda, BreakPoint konulan kod satrna kadar durmaz. Belirtilen satra sra gelindiinde, kod sayfasnda, o an zerinde bulunan satr ok ile gsterilir. Visual Studio ile hata ayklarken, tanmlanan deikenlerin o andaki deerler incelenerek mantksal hatalar bulunabilir.
HERKES N UNIX
BLM 1:
27
Hata ayklama srasnda baz Visual Studio panelleri, deikenlerin, kontrollerin ve nesnelerin deerlerini listelemek iin kullanlabilir. Bu paneller Debug mensnde Windows alt mensnden gsterilir. Autos Paneli almakta olan satrdaki ifade ile bir nceki ifadede bulunan deiken ve kontrollerin deerlerini listeler. Locals Paneli inde bulunan kapsam alanndaki tm deikenlerin deerlerini listeler. Watch Paneli Deeri incelenmek istenen deiken veya kontroller bu panele elle yazlmaldr. Kodlar arasnda ilerlemek ve hata ayklamaya devam etmek iin drt yol vardr. Bu komutlar Debug mensnden veya Debug ara ubuundan ulalabilir.
1. Step Into
Kod satrnda bir yordam altrlacaksa, bu yordamn iine girer. Bu yordam farkl bir yerde ise, ilgili sayfa alr ve hata ayklamaya devam edilir.
2. Step Over
Herhangi bir yordam iine girmeden, iindeki kapsam alannda almaya devam eder.
3. Step Out
Birden fazla durma noktas yerletirilmise, bir sonraki noktaya kadar almaya devam eder. Hata ayklama, altrlacak hibir satr kalmadnda durur ve uygulama normal almasna devam eder. Durma noktalar kaldrlarak ya da pasif hale getirilerek uygulamann durmas engellenebilir. Btn durma noktalarn kaldrmak iin Debug mensnden Clear All BreakPoints komutu, pasif hale getirmek iin Disable All BreakPoints komutu verilmelidir. Durma noktalarn aktif hale getirmek iin tekrar ayn komut seilmelidir.
HERKES N WINDOWS
28
KISIM I:
Altrma
Bu uygulamada veri tiplerinin kullanm yerlerine, diziler ile alma rneklerine baklacaktr. struct veri tipi 1. Snf isminde bir Windows projesi an. 2. Alan form zerine sa tklayarak View Code komutunu sein. Kod sayfasnda class dzeyinde bir struct tanmlayn.
public struct Ogrenci { public string Isim; public string Soyad; public char Sube; public float OrtalamaNotu; public bool DevamEdiyor; }
3. Ogrenci tipindeki deerleri tutmak iin, class dzeyinde iki elemanl bir dizi tanmlayn
public Ogrenci[] ogrenciler = new Ogrenci[2];
4. Formun Load olayna, uygulama alrken yeni renci ekleme kodlarn yazn.
Ogrenci ogrenci1 = new Ogrenci(); ogrenci1.Isim = "Ali"; ogrenci1.Soyad = "Veli"; ogrenci1.Sube = "C"; ogrenci1.OrtalamaNotu = 67.1; ogrenci1.DevamEdiyor = true; Ogrenci ogrenci2 = new Ogrenci(); ogrenci2.Isim = "Ahmet"; ogrenci2.Soyad = "Veli"; ogrenci2.Sube = "C"; ogrenci2.OrtalamaNotu = 72.9; ogrenci2.DevamEdiyor = true; ogrenciler[ 0 ] = ogrenci1; ogrenciler[ 1 ] = ogrenci2;
5. Forma btnOgrenciEkle isminde bir Button kontrol yerletirin. Bu kontroln Click olayna, diziye yeni bir renci kayd ekleyen kodu ekleyin.
// ogrenciler dizinde bo yer kalmad iin // diziyi, eski deerleri kaybetmeden tekrar // boyutlandrmak gerekir. Ogrenci[] gecici = new Ogrenci[ 3 ]; System.Array.Copy( ogrenciler, gecici,2 ); ogrenciler = gecici; Ogrenci ogrenci = new Ogrenci(); ogrenci.Isim = "Veli"; ogrenci.Soyad = "Veli"; ogrenci.Sube = char.Parse( "D" );
HERKES N UNIX
BLM 1:
29
ogrenciler dizisine baka bir yordamdan nasl eriildi? Formun Load olaynda ogrenci isimli bir deiken tanmland halde, Button kontrolnn Click olaynda ayn isimde bir deiken nasl tanmlanabiliyor? Dizi ilemleri 1. Forma bntOzellikleriGoruntule isminde bir Button kontrol ekleyin ve Click olaynda, diziden indisi verilen renciyi alan kodlar yazn.
int indis = Int32.Parse(textBox1.Text); Ogrenci secilenOgrenci = new Ogrenci(); secilenOgrenci = (Ogrenci)ogrenciler[indis]; string bilgiler = null; bilgiler bilgiler bilgiler bilgiler bilgiler +=secilenOgrenci.Isim + " " + secilenOgrenci.Soyad; +="\n"; +="Notu: " + secilenOgrenci.OrtalamaNotu + "\n"; +="ubesi: " + secilenOgrenci.Sube + "\n"; +="Devam ediyor mu: " + secilenOgrenci.DevamEdiyor;
PUCU: "\n"ifadesi, String deikenlerinde yeni satra geilmesini salar. Aritmetik ilemler 1. Forma btnOrtalamaHesapla isminde bir Button kontrol ekleyin ve Click olaynda snfn ortalamasn hesaplayan kodu yazn.
double not1 = ogrenciler[ 0 ].OrtalamaNotu; double not2 = ogrenciler[ 1 ].OrtalamaNotu; double not3 = ogrenciler[ 2 ].OrtalamaNotu; int ortalama = ( ( int )( ( not1 + not2 + not3 ) / 3 ) ); MessageBox.Show( ortalama.ToString() );
2. Not3 deikeninin tanmland yere BreakPoint koyun ve projeyi altrn. 3. Form aldnda btnOrtalamaHesapla dmesine basn. Uygulamann almas durma noktas konulan yerde duracaktr. 4. Debug mensnden Windows alt mensnden Autos komutunu sein. Autos panelinde not1 ve not2 deikenlerinin deerlerini inceleyin. 5. Debug mensnden Windows alt mensnden Watch komutunu sein. Watch panelinde Name stununa ogrenciler yazn. ogrenciler dizisini + dmesine basarak geniletin ve dizinin elemanlarnn deerlerini inceleyin.
HERKES N WINDOWS
30
KISIM I:
6. Debug mensnden Step Into komutunu sein. Bu ilemi Debug ara ubuu ile ya da F11 tuuna basarak yapabilirsiniz. 7. Gsterilen hata mesajn inceleyin. Continue dmesine basarak uygulamay sonlandrn. 8. Uygulamay tekrar altrn ve nce btnOgrenciEkle dmesine daha sonra btnOrtalamaHesapla dmesine basn.
Konu 8: Operatrler
Operatrler
Aritmetik Operatrler
arpma *, Blme /, Toplama +, karma s alma ^, Mod alma (Mod)
Karlatrma Operatrleri
Kk <, Kk Eit =<, Byk >, Byk Eit >=, Eit =, Eit Deil <>
String Operatrleri
&, Split, ToCharArray, Insert, Remove
Visual C# .NET dilinde alrken, deikenler zerinde birok ilem yaplr. Hesaplamalarda aritmetik ilemler, kontrollerde karlatrma ilemleri veya mantksal ilemler yaplr. Bu ilemler iin Visual C# .NET dilinde tanml operatrler kullanlr.
Aritmetiksel Operatrler
Bu operatrler aritmetik ilemlerinde, saylarla veya say tutan ifadelerle kullanlr. arpma
int sayi = 100; sayi = 200 * 2;
Blme
karma
HERKES N UNIX
BLM 1:
31
Toplama
int toplam; toplam += sonuc; // Bu ifade, toplam = toplam + sonuc ile ayn anlama gelir
PUCU:
Mod alma
int kalan = toplam % 42; // Sonu, toplam deikenindeki deerin 42 ile // blmnden kalan saydr.
Karlatrma Operatrleri
Bu operatrler veri tiplerini birbirleriyle karlatrmak iin kullanlr. Bu operatrler ile yaplan ilemlerin sonucunda true ya da false deeri dner. Karlatrma operatrleri yalnzca say tipleri zerinde yaplmaz. Kk
double sayi = 1.5; float sayi2 = 1.3; sayi2 < sayi // Sonu: True
Kk Eit
Byk
Byk Eit
Eit
Eit Deil
HERKES N WINDOWS
32
KISIM I:
String Operatrleri
String tipleri zerinde gerekletirilen ilemler iin tanml operatrlerdir. String tipindeki deikenleri birbirine balama + operatr ile gerekleir.
string isim, soyad; string IsimSoyad = isim + " " + soyad; Split
Belirtilen ayraca gre yazy bler, kan sonu String dizisinde tutulur. Ayra karakterleri sonu dizisinde yer almaz.
string Kelime = "Kelime1:Kelime2:Kelime3"; string [] parcalar; parcalar = Kelime.Split(':'); // parcalar dizisinin eleman olur: // Kelime1 // Kelime2 // Kelime3 string [] parcalar2; parcalar2 = Kelime.Split('m'); // parcalar2 dizisinin drt eleman olur: // Keli // e1:Keli // e2:Keli // e3 ToCharArray
String deerinin belli bir blmndeki karakterleri ya da tm karakterlerini, Char dizisi olarak dndrr.
char []harfler = "Kelime".ToCharArray(); // Dizinin 1. elemanndan balayarak 4 karakter oku char [] harfler = "Kelime".ToCharArray(1,4); Insert
String tipinde bir deikenin deerine, ilk parametrede belirtilen yerden balayarak ikinci parametredeki deeri ekler. Ancak bu deikenin deeriyle oynamaz. Yeni oluturulan String ifadesini dndrr.
string sayilar = "0123456789"; string yeniSayilar; yeniSayilar = sayilar.Insert(5, "--- Rakamlar ---"); MessageBox.Show(yeniSayilar); // Sonu: 01234--- Rakamlar ---56789 Remove
lk parametrede verilen deerden balayarak, ikinci parametredeki deer kadar karakter, deikenden karlr.
yeniSayilar = yeniSayilar.Remove(4, yeniSayilar.Length - 4); MessageBox.Show(yeniSayilar); // Sonu: 0123
HERKES N UNIX
BLM 1:
33
zet
Windows Tabanl Uygulamalar zellikler, Metotlar, Olaylar Windows kontrolleri Deiken, Sabit Tanmlar Veri Tipleri Operatrler
1. Arabann fren yapmas ve arabaya arplmas, .NET nesnelerinin hangi kavramlarna girer? 2. 10 saniyede bir, ListBox kontrolne, kullancdan alnan deerleri ekleyen kodlar yazn. 3. Deikenler ile sabitlerin fark nedir? 4. 5 < 6 = -1 ifadesi hangi Boolean deerini dndrr, neden? Option Strict On seildiinde kan hata mesajn inceleyin.
HERKES N WINDOWS
Hedefler
Algoritma kurmak Dump Coding zmlemesi Ak diyagramlar
Programlamann temelinde, alma akn, izlenecek yollar belirleyen algoritmalar vardr. Bir i yaplmaya balanmadan nce nasl planlanyorsa, kodlamaya geilmeden nce de bir alma plan belirlenmelidir. Programlar, bu planda yazlan kodlar belli bir sra ile okur ve iler. Dolaysyla algoritma yapsn ok iyi kurmak gerekir. Kurulan algoritmalar ak diyagramlar ile grsel zenginlik kazanrlar. Dump Coding yntemi algoritmalar zmenin uzun fakat etkili bir yoludur. Bu yntem, admlar tek tek inceleyerek algoritma akn zer. Bu modl tamamlandktan sonra: Algoritma kurmay renecek, Dump Coding ile algoritmalar zmleyecek, Ak diyagramlar ile algoritmalar grsel olarak ifade edebileceksiniz.
HERKES N UNIX
KISIM I:
Algoritma
in yaplma srasnn belirlenmesidir. , en kk etaplara ayrlr. Olas tm hatalarn tespit edilmesi, gerekli kontrollerin yaplmas gerekir. Algoritmann yn belirlenmelidir
Veri girii Kararlar lemler
Algoritma, bir iin hangi etaplardan geilerek yaplacan gsteren alma plandr. Algoritma bir programlama dili deildir. Programlama dillerine yol gsteren bir yntem dizisidir. Her dilde algoritma yazlp uygulanabilir. rnein bir cep telefonunun el kitapnda yazan, rehber kayd girmek iin izlenecek yollar, o iin algoritmasdr. Algoritma yazarken, programn almas iin kullanlan kaynaklarn, yaplmas gereken kontrollerin veya ilemlerin aka ifade edilmesi gerekir. Ayrca iyi bir algoritma, tm ihtimalleri kontrol edip istenmeyen durumlarda ne yaplmas gerektiini belirtmesi gerekir. rnein, bir e-ticaret uygulamasnda rn sat algoritmas karlr. Satn alnacak rn seildikten sonra, kullancdan adet miktar bilgisi alnr. Uygulama yazlrken, bu deerin Int16 veri tipinde olacana karar verildii dnlrse; kullancnn girdii adet miktar bu deikene atanmadan nce kontrol edilmelidir. Eer Int16 veri tipinin tutamayaca bir deer girilmise, alma annda uygulamann beklenmedik ekilde durduu ya da istenmeyen sonularn retildii gzlemlenir. Ayrca sistemin verdii hata, kullancnn anlamayaca bir mesaj ierecei iin, uygulamann imajn da kt ynde etkiler. Veri girii: alma zamannda ou zaman, ileyiin tamamlanmas iin dardan bir bilgi girilmesi gerekir. Algoritmann almas iin ihtiya duyduu
HERKES N UNIX
BLM 1:
veriler, ilemi balatan kiiden veya belirtilen bir kaynaktan alnabilir. Bu bilgiler salanmadan ilem devam etmez. Kararlar: Karar ve kontrol yaplar algoritmann akn ynlendiren en nemli kavramlardr. Girilen veya ilem sonucunda elde edilen veriler, ilemin amacna gre kontrol edilir ve sonuca gre algoritma ak istenilen yere ynlendirilir. lemler: Algoritmann ak boyunca veriler zerinde deiiklikler, yeni deer atamalar gibi ilemlere ihtiya duyulur. Algoritmalar kurulurken, yaplan ilemlerin yaln halde, tek tek yazlmas okunabilirlii arttrr. Algoritmalar adm sras ile alr ve karar yaplar sonucunda farkl bir yere ynlendirilmedii mddete, bir sonraki adm ile ilemeye devam eder. rnek: Telefon kulbesinden telefon amak iin rnek bir algoritma 1. Telefon kulbesine git 2. Telefon kart al 3. Telefon srasnda ka kii olduuna bak 4. Kii says sfrdan fazlaysa 3 e dn 5. Kap kapalysa kapy a 6. eri gir, kapy kapat 7. Telefon kartn telefona yerletir 8. Ahizeyi kaldr 9. Numaray evir 10. Konumann bitip bitmediine bak 11. Konuma bittiyse kart al, bitmediyse 10 a dn 12. Bir daha konuma yaplacaksa 7 e dn 13. Kapy a, dar k Bu algoritmann ilemesi iin, her ihtimal gzden geirilerek, algoritma ak gerekli yerlere ynlendirilir. rnein kapnn kapal olmas durumunda kapy amak iin gerekli komutlar verilmelidir. Bu algoritmann ihtiya duyduu veriler, ya kullanc tarafndan verilir ya da ilem balamadan nce belirlidir. Sradaki kii says, telefon kart gibi veriler kullanc tarafndan salanm; evrilecek numara, algoritma balamadan nce belirlenmitir.
HERKES N UNIX
KISIM I:
Dump Coding
Kark algoritmalarn zmlenmesi Deikenlerin deerleri yazlarak ileyi takip edilir.
Dump Coding, aptal kodlama anlamna gelir. Bu yntem birok kark algoritmay zmlememizi salar. Dump coding yntemi, algoritmann her admnda, deikenlerin tek tek deerlerini yazp ileyii takip etmektir. rnek: ki saynn OBEB ini (ortak blenlerin en byn) alan algoritmalardan bir tanesi Euclid tarafndan gelitirilmitir. 1. 2. 3. 4. ki say gir. Byk A, kk B A says B saysna bl. Tam blnyorsa, OBEB B saysdr. k A saysnn deerini, Kalan saynn deeri yap A ile B saylarn yer deitir. kinci etaba dn
Bu algoritmann alma mant, Dump Coding yntemi ile adm adm incelenir. 1. ki say girilir. A = 12 ve B = 8 2. A says, B saysna tam blnmyor. Algoritma dier etaptan devam eder. 3. Kalan say = 4. Dolaysyla A = 4 olur. 4. A says ile B says yer deitirilir. A = 8 ve B = 4 olur. kinci etaba dnlr.
HERKES N UNIX
BLM 1:
Ak Diyagram
Bala Bitir Veri Girii Karar Verme Veri Taban Ekran Printer Fonksiyon Devam
Madde madde yazlan algoritmalarn okunmas kolaydr ancak ileyiin btnn grmek ou zaman mmkn deildir. Ak diyagramlar, algoritmalar grsel biimde gstermeyi, dolaysyla daha anlalr hale getirmeyi salar. Algoritmada yaplacak ilemlerin eitlerine gre eitli semboller kullanlr. Bala Bitir Algoritmann hangi aamadan balayacan ve ne zaman biteceini gsteren semboldr. Bir algoritmay temsil eden ak diyagramnda, bir tane Bala ve bir tane Bitir sembol olmaldr.
HERKES N UNIX
KISIM I:
Veri Girii Kullancdan ve baka bir kaynaktan alnan verilerin isimlerini tutar.
Karar Verme Karar yapsn belirten semboldr. stnde koul ifadesi belirtilir.
Veri taban Veri tabannda okuma veya yazma ilemi yapldn gsterir.
lem Bir ilem yaplacan belirten semboldr. Her ilem iin ayr bir fonksiyon sembol kullanlmas, ak diyagramn daha anlalr klar.
HERKES N UNIX
BLM 1:
Fonksiyon lem sembolne yazlamayacak byklkte ilemler, alt ilem olarak bu sembolle belirtilir.
HERKES N UNIX
KISIM I:
ay Demleme
Bu rnekte, bir ay demleme ileminde yaplmas gereken ilemleri, kontrol edilmesi gereken olaylar ieren algoritma kurulur. 1. Kullancdan su vermesi beklenir. 2. Suyu stma ilemi yaplr. 3. Suyun kaynayp kaynamad kontrol edilir. Kaynamamsa 2. etaba dnlr. 4. ay daha nceden hazr olduu iin, kullancdan beklenmez. Demlie ay koyma ilemi yaplr. 5. Kullancdan, demleme ileminin ne kadar srecei bilgisi alnr. 6. Kullancdan alnan demleme sresi ile imdiki zaman (ayn demlenmeye balad zaman) toplanr. kan deer, BitisZamani isimli deikene atlr. Bu deiken demleme ileminin ne zaman bitecei bilgisini tutar. 7. imdiki zaman, biti zamanndan kkse ayn demlenmesi iin ayrlan sre daha dolmam demektir. Bu sre dolana kadar 7. etap tekrarlanr. 8. ayn demlendiini, kullancya ekran zerinde bildiren bir mesaj kartlr.
HERKES N UNIX
BLM 1:
HERKES N UNIX
10
KISIM I:
zet
Algoritma kurmak Dump Coding zmlemesi Ak diyagramlar
BLM 1:
11
2. Dump Coding ile Algoritmann fark nedir? 3. Bir rnn bilgilerinin, veri tabanndan grntleme ileminin algoritmasn kurun 4. Bu algoritmay ak diyagram ile gsterin.
ekilerek
kullancya
HERKES N UNIX
Hedefler
If Then ElseIf ile ak kontrol Koul Operatrleri Select Case Karar yaplarnn kullanm yerleri
Uygulamalar altrlrken, yazlan kodlarn alma sras, satrlarn teker teker ilenmesi ile gerekleir. Ancak ou zaman, baz kodlarn sadece belli durumlarda almas istenir. rnein uygulama alrken kullanc ad ve parola sorulmas, kullanclarn seviyelerine gre eriim izinleri tanmlanmas gibi durumlarda kontrol ilemleri yaplmaldr. Bu kontroller de karar yaplar ile gerekletirilir. Algoritmalarn akn kontrol etmekte en byk rol, karar yaplarnndr. Visual C# .NET dilinde farkl ekillerde kullanlan ancak benzer grevlere sahip karar yaplar tanmldr. Bu blm tamamlandktan sonra
if else if karar yaplar ile ak kontrol yapabilecek,
KISIM I:
if
If
Koul ifadesi True ise If blouna girilir. Verilen koul saland zaman yaplan ilemleri tutar.
if karar yaps, bir koul saland zaman yaplacak ilemleri kapsar. Kontrol
edilecek koul ifadesinin sonucu true deerini alrsa, kme parantezleri arasndaki kodlar altrlr.
if(Koul) { }
rnek: Vize ve final notunu kullancdan aldktan sonra, geme notunu hesaplayan ve notun elliden byk olmas durumunda ekrana getiniz mesajn kartan algoritma.
BLM 1:
3 double gecmeNotu; short finalNotu = short.Parse(textBox1.Text); short vizeNotu = short.Parse(textBox2.Text); gecmeNotu = finalNotu * 0.7 + vizeNotu * 0.3; if(gecmeNotu > 50) { MessageBox.Show("Getiniz tebrikler..."); }
Koul Operatrleri
Koul Operatrleri
And Or Not AndAlso OrElse
Veri tipleri ve deikenler zerinde kontrol yaplrken birden fazla koula ihtiya duyulabilir. Bu durumda, koullar birbirleriyle karlatracak operatrler kullanlr. Bu kontrollerden dnen deerler Boolean tipinde olduu iin, koul operatrleri de bu deerler zerinde ilem yaparlar. & (And) Bu ifade, verilen koullarn kesiimini alr. Eer tm koullarn deeri true ise sonu da true olur. En az bir tane false deeri olan koul varsa, sonu false olur. Koul 1
true true false
Koul 2
true false true
KISIM I:
| (Or) Bu ifade, verilen koullarn birleimini alr. Eer tm koullarn deeri false ise sonu false olur. En az bir tane true deeri varsa sonu true olur. Koul 1
true true false false
Koul 2
true false true false
Koul 1 || Koul 2
true true true false
&& (AndAlso) Koullardan biri False ise, dierleri kontrol edilmeden False deeri dndrlr. Bu tip bir kullanm, birok koulun kontrol edilmesi gerektiinde performans arttrr.
string [] dizi; // Diziye eleman ekleme ilemleri // ... if (dizi.Length > 0 && dizi[1].EndsWith(".")) { label1.Text = "Cmle sonundaki kelime: " + dizi[1]; }
Bu rnekte, dizinin ilk eleman zerinde bir kontrol yaplmak isteniyor. Ancak diziye eleman eklenmemise, ilk elemana ularken hata retilecektir. Dolaysyla dizinin uzunluunu da kontrol etmek gerekir. Kontrol And ifadesi ile yaplsayd, dizi elemann noktayla bitip bitmedii ve dizinin uzunluu kontrol edilecekti. Bu durumda i ie if ifadeleri ile uzun bir kod yazlacakt. Pek ok kyaslama gerekecek ve performans decekti. Ancak burada, dizi uzunluu koulu salanmazsa, dier koula geilmeden if kontrolnden klr. || (OrElse) Koullardan biri True ise, dierleri kontrol edilmeden True deeri dndrlr.
string Rol; // Veritabanndan, kullancnn rol alnr. // ... // Sadece Administrator, Moderator ve Power User rolndeki // kullanclar dosya silme ilemi yapabilirler. if (Rol == "Administrator" || Rol == "Moderator" || Rol = "Power User") { // Dosya silme ilemleri }
BLM 1:
Dosya silme ilemi iin, kullancnn rol veritabanndan alndktan sonra, kontrol ilemi yaplr. Eer bir kullancn rol Administrator, Moderator veya Power User rolnden biriyse dier kontrollerin yaplmas gerekmez. Bu rnekte Rol deikeni Administrator deerine eitse, dier iki koul kontrol edilmeden true ifadesi dner.
! (Deil) Bir koulun deerini tersine evirir. Koul false ise true, true ise false olur. Koul
true false ! Koul false true
if else
If Then Else
If koulunda salanmayan tm durumlar iin Else ifadesi kullanlr.
ElseIf
Koullarn salanmad durumlarda, yeni kontrollerin yaplmas iin kullanlr.
Select Case
ElseIf ilevini grr ancak yazlmas okunmas daha kolaydr.
girer.
if(Koul) { //Dier kodlar } else { //Dier kodlar
6 }
KISIM I:
rnek: Her 100 milisaniyede bir, formun renginin siyahken beyaz olmas, beyazken ise siyah olmas iin, formun renginin kontrol yaplmas gerekiyor.
public bool Beyaz = true; private void timer1_Tick(object sender, System.EventArgs e) { if(Beyaz) { this.BackColor = Color.Black; Beyaz = false; } else { this.BackColor = Color.White; Beyaz = true; } } if kontrolnde formun beyaz olup olmad bool tipindeki bir deikende tutuluyor. Koulda beyaz adl deiken eer true ise, formun arka plan siyah yaplr. Bu koulun salanmad durumda, yani beyaz deikeninin false olduu durumda, else iindeki kodlar alacaktr ve formun arka plan beyaz yaplacaktr. Her kontrolden sonra beyaz deikenin deitirilmesinin nedeni, formun bir siyah bir beyaz olmas istendii iindir.
else if
if deyimindeki koul salanmadysa else deyimindeki kodlar alyordu.
rnek: Gnn saatine gre karlama mesaj kartmak iin, saat deikeni birok kez kontrol edilmesi gerekir. Sadece bir if kontrol yaplsayd, sadece iki karlama mesaj kartlabilirdi.
string karsilamaMesaji = " BilgeAdama hogeldiniz!"; int saat = DateTime.Now.Hour;
BLM 1:
if ((9 <= saat && saat { karsilamaMesaji = "Gnaydn,"); } else if (12 <= saat && { karsilamaMesaji = gnler,"); } else if (16 <= saat && { karsilamaMesaji = akamlar,"); }
< 12)) karsilamaMesaji.Insert(0, saat < 16) karsilamaMesaji.Insert(0, "yi saat < 18) karsilamaMesaji.Insert(0, "yi
switch
switch deyimi else if ile benzer ilevi grr, ancak okunmas daha kolaydr. switch ile seilen bir deerin kontrol edilmesi Case ifadelerinde yaplr. string karsilamaMesaji = " BilgeAdama hogeldiniz!"; int saat = DateTime.Now.Hour; switch (saat) { case 9: case 10: case 11: karsilamaMesaji = karsilamaMesaji.Insert(0, "Gnaydn,"); break; case 12: case 13: case 14: case 15: karsilamaMesaji = karsilamaMesaji.Insert(0, "yi gnler,"); break; case 16: case 17: karsilamaMesaji = karsilamaMesaji.Insert(0, "yi akamlar,"); break; default: karsilamaMesaji = karsilamaMesaji.Insert(0, "Merhaba,"); break; }
Buradaki switch kullanm, saat deerine gre ilem gerekletirilmesidir. Say, case ifadelerinde verilen deerler eitse ilgili kodlar altrlr. default ise, dier koullarn salanmad tm durumlarda devreye girer.
KISIM I:
break ifadesi, kontroln durmas gerektiini belirtir. Saynn belli deerler aralnda kontrol yaplmas iin bo case ifadeleri kullanlr.
birbirlerine gre deiik avantajlar vardr. if else if karar yaplarnda, kontrol edilen deikenlerin ya da deerlerin her seferinde tekrar yazlmas gerekir. Bu durumda switch karar yaps, kodlarn yazln ve okunuunu kolaylatrmas asndan tercih edilmelidir. Ancak switch ile belli deerler aralnda kontrol yaplmas, case ifadelerinin ard ardna yazlmas gerektii iin zordur. Bir grup RadioButton kontrol iinden sadece bir tanesi seilebildii iin, seilen kontrol bulmak iin else if yapsnn kullanm yeterli olacaktr.
if (RadioButton1.Checked) { } else if (RadioButton2.Checked) { } else if (RadioButton3.Checked) { }
BLM 1:
Ancak bu kontroller, CheckBox kontrolnn kullanm yapsna uymaz. Formlarda birden fazla CheckBox kontrol seilebildii iin, seilen kontrolleri bulmak iin sadece if bloklar kullanlmaldr.
if (CheckBox1.Checked) { } if (CheckBox2.Checked) { } if (CheckBox3.Checked) { }
Uygulama
Bu uygulama kullancya, stok durumuna veya tarihe gre deien grntleme seenekleri sunarak, rn katalogu tantlr. rnler kategorilere gre ayrlm bulunmaktadr ve ComboBox kontrolleri ile filtrelerden biri seilmedii takdirde ilem gereklemez. Stok durumu filtresi ile sadece stokta bulunan ya da stokta kalmam satlmakta olan rnler listelenebilir. Tarihe gre filtreleme ile yeni kan rnler ya da tm rnler gzlenebilir. Uygulamada, ak diyagramndan koda gei aamas rahat bir ekilde grlecektir.
Algoritmann incelenmesi
Uygulamann algoritmas balang ve rn ekleme algoritmas olarak ikiye ayrlmtr. Balang algoritmasnda rn kategorisinin, stok durumu ve tarih filtrelerin seilip seilmedii kontrol yaplr. Eer herhangi biri seilmedii zaman kullancya ilgili mesaj gsterilir ve algoritmadan klr. Tm kontroller yapldktan sonra, ilgili kategorideki rnlerin listeye eklenmesi iin dier algoritma devreye girer.
10
KISIM I:
rn ekleme algoritmas, ilk algoritmada seilen kriterlere gre, kullancya gsterilecek rn listesini doldurur. Bu algoritma balang olarak kategori numarasn alr. Bu kategorideki stokta bulunan rnleri listeye ekler. Stok durumu filtresinde Hepsi deeri seiliyse, stokta o an bulunmayan rnler de listeye eklenir. Tarih filtresinde Son kanlar deeri seiliyse, eski rnler listeden kartlr.
BLM 1:
11
Yazlm 3. Forma biri cmbTarihSirasi dieri cmbStokDurumu isminde iki ComboBox kontrol ekleyin. cmbTarihSirasi son rnleri; cmbStokDurumu stoktaki rnleri gsteren filtre olarak kullanlacaktr. cmbTarihSirasi elemanlarna Son kanlar ve Tm rnler deerlerini, cmbStokDurumu elemanlarna Sadece Stoktakiler ve Hepsi deerlerini ekleyin. 4. lblMesaj isminde bir Label kontrol ekleyin. Dock zelliini Buttom yapn. Bu kontrol filtrelerin seilmedii durumda hata mesajlarn gsterecektir. 5. lblSecilenUrunler isminde bir Label kontrol ekleyin ve lbUrunler liste kutusunun stne yerletirin. Bu kontrol, seilen rnlerin hangi kategoride olduunu gsterecektir. 6. Forma btnListele isminde bir Button kontrol ekleyin.
12
KISIM I:
Kodlarn yazlmas
Bu uygulamada kodlarn tamam btnListele dmesinin Click olayna yazlacaktr. Kodlar arasndaki numaralar ak diyagramnda ilenen durumlara referans gnderir. Algoritma 1, balang algoritmasndaki numaralar; Algoritma 2, rn ekleme algoritmasndaki numaralar ifade eder. 1. btnListele dmesine ift tklayn ve Click olayna gelin. Dmeye her basldnda liste kutusuna ard ardna eler eklenmemesi ve hata mesajlarnn temizlenmesi iin gerekli kodlar yazn.
lblMesaj.Text = ""; lbUrunler.Items.Clear();
2. Kategori listesinden, stok ve tarih filtreleri iin alan kutulardan elerin seili olup olmad kontrol yaplr. Eer seilmemi bir deer varsa, ilgili hata mesaj lblMesaj etiketinde grntlenir.
// Algoritma 1 - 1 if ( cmbStokDurumu.SelectedIndex == -1 && cmbTarihSirasi.SelectedIndex == -1 ) { lblMesaj.Text = "Stok Durumu ve Tarih Sras seiniz."; // Algoritma 1 - 2 } else if ( cmbStokDurumu.SelectedIndex == -1 ) { lblMesaj.Text = "Stok Durumunu seiniz."; // Algoritma 1 - 3 } else if ( cmbTarihSirasi.SelectedIndex == -1 ) { lblMesaj.Text = "Tarih Srasn seiniz."; // Algoritma 1 - 4 } else if ( lbKategoriler.SelectedIndex == -1 ) { lblMesaj.Text = "Kategori seiniz."; } else { // Algoritma 1 - 5 3. if else if deyimlerinde tm kontroller yapldktan sonra else
BLM 1:
13
// Eski rnlerin gsterilmesi istenmiyorsa // listeden kartlr. // Algoritma 2 - 5 if ( cmbTarihSirasi.SelectedIndex == 0 ) { // Algoritma 2 - 6 lbUrunler.Items.Remove( "MSDN Tv Visual C#" ); lbUrunler.Items.Remove( "MSDN Tv Visual C# 2" ); } break;
if ( cmbStokDurumu.SelectedIndex == 1 ) { lbUrunler.Items.Add( "Yazlm Mhendislii Balang Dzeyi" ); lbUrunler.Items.Add( "Access Giri" ); } if ( cmbTarihSirasi.SelectedIndex == 0 ) { lbUrunler.Items.Remove( "Yazlm Uzmanl 1" ); } break; case 2: lbUrunler.Items.Add( "Visual Studio 6.0" ); lbUrunler.Items.Add( "Visual C# .NET Standard 2003" ); lbUrunler.Items.Add( "Visual C# C# Standard 2003" ); if ( cmbStokDurumu.SelectedIndex == 1 ) { lbUrunler.Items.Add( "Visual Studio .NET 2005" ); } if ( cmbTarihSirasi.SelectedIndex == 0 ) { lbUrunler.Items.Remove( "Visual Studio 6.0" ); } break; }
5. swicth ifadesinde tm eklemeler yapldktan sonra ikinci algoritma biter. lk algoritmann son aamas olan, kullancya hangi kategoride rn seildiini gsteren mesaj yazlr ve if karar yaps sonlanr.
// Algoritma 1 - 6 lblSecilenUrunler.Text = lbKategoriler.Text + " Kategorisindeki rnler"; }
14
KISIM I:
Konu 2: Dngler
Hedefler
For Next Dngs While, Until Dngleri Do Loop Dngs ie dngler Dnglerin kullanm yerleri
Algoritmalarda baz ilemlerin tekrar almas iin, onlar her seferinde yazmak gerekir. Ancak bu zm, ok fazla tekrar iin hem yazmay hem de okumay zorlatrr. rnein yz elemanl bir diziye rasgele say atanmas iin ilemin yz defa yazlmas gerekir. Dngler ile ilem sadece bir defa yazlr ve tekrar saysna gre bu ileme geri dnlr.
BLM 1:
15
Bu blm tamamlandktan sonra For ve While dngsn tanyacak, ie dngler kullanabilecek, Hangi dngnn nerede kullanldn reneceksiniz.
For
For Next
Saya, belirtilen aralkta olana kadar ilem yaplr. Step ifadesi, sayacn artaca ya da azalaca miktar belirler. Next ifadesi, sayac otomatik artrr ya da azaltr.
int fahr; int derece; for (int derece = 0; derece <= 100; derece += 10) { fahr = derece * 1.8 + 32; Label1.Text += fahr + " Fahrenheit= "; Label1.Text += derece + " Celcius" + "\r\n"; }
For dngs bir ilemin belirli sayda yaplmas iin kullanlr. for (int i = 0; i < 10; i++) { MessageBox.Show(Merhaba); }
Bu dngde 3 parametre vardr. lk parametre sayacn balang deerini belirler. rnekte, saya deikeni tanmlanp 0 deeri atanmtr. kinci parametre bir koul ifadesidir. Bu koul saland srece dng devam eder. rnekteki dng, i deeri 10dan kk olduu srece devam edecektir. nc parametre, her dngden sonra yaplmas gereken ilemi belirtir. rnekte, her ilemden sonra i deeri bir artrlr.
16
KISIM I:
Dnglerde kullanlan sayalar sadece belli bir sayda ilem yapmay salamaz. Sayalarn artma veya azalma admlar belirli olduu iin, kod iersinde ou zaman bu avantajdan yararlanlr.
listBox1.Items.Add("Karakter - ASCII kod karl"); for (int i = 50; i <= 255; i = i + 2) { listBox1.Items.Add(Microsoft.VisualBasic.Strings.Chr(i) & " - " & i) }
rnein dizi ilemlerinde, dizinin her elamanna ulamak iin saya kullanlabilir. Sayacn artma hz bir olduu iin dizi[sayac] ifadesi, srayla dizinin elemanlarna ulamay salar.
int [] dizi = new int[10]; Random r = new Random(); for (int i = 0; i < dizi.Length ; i++) { dizi[i] = r.Next(100); }
BLM 1:
17 public struct Musteri { public string Isim; public string Soyad; public string[] Telefonlari; } public Musteri[] Musteriler; // Musteriler dizisi dolduruyor // ...
private void Button1_Click( System.Object sender, System.EventArgs e ) { int i, j; for ( i=0; i<=Musteriler.Length - 1; i++ ) { // lk mteri seiliyor Musteri m = Musteriler[ i ] ; Label1.Text += m.Isim + " " + m.Soyad; Label1.Text += " mterisinin telefonlar:" for ( j=0; j<=m.Telefonlari.Length - 1; j++ Label1.Text += m.Telefonlari[ j ] ; Label1.Text += "\n"; } } }
+ "\n"; ) {
Birden fazla boyutlu dizilerde ilem yaparken de For dngs i ie kullanlabilir. rnein iki boyutlu bir tabloda, ilk boyut iin bir for dngs, dier boyut iin de baka bir for dngs kullanlarak dizinin tm elemanlarna ulalabilir.
Random r = new Random(); string[,] tablo = new string[ 5, 5 ]; byte i = 0; for ( i=1; i<=4; i++ ) { tablo[ 0, i ] = "Yazar " + i; tablo[ i, 0 ] = "Kitap " + i; tablo[ ( ( int )( r.Next(3)) ) + 1, ( ( int )( r.Next(3) ) ) + 1 ] = "X"; } tablo isminde String deerleri tutan bir dizi oluturulur ve dizinin ilk satrna yazar isimleri, ilk stununa da kitap isimleri konur. For dngsnn sayac birden balad iin dizinin 0,0 koordinatl ilk elemanna deer atanmaz.
Yazar 2
Yazar 3
Yazar 4
18
KISIM I:
Daha sonra tablonun dier elemanlarna rasgele X deerleri atanr. Bu deer hangi yazarn hangi kitab yazdn gsterecektir. r.Next(3) + 1 ifadesi 1 4 arasnda rasgele say retir. Bu say tablo dizisine indis olarak verildiinde ise, kalan hcrelerde X deeri elde edilir. Yazar 1 Kitap 1 Kitap 2 Kitap 3 Kitap 4 X X X X Yazar 2 Yazar 3 Yazar 4
Yazarlar ve Kitaplar tablosu hazrlandktan sonra, hangi yazarn hangi kitab yazdn bulmak iin yine tablo elemanlar iinde dolap X deerini aramak gerekir. lk For dngs ile Kitaplar satrnda, ikinci For dngs ile Yazarlar stunlarnda gezilir.
for (int j=0; j<=tablo.GetLength( 0 ) - 1; j++ ) { for (int h=0; h<=tablo.GetLength( 1 ) - 1; h++ ) { // Tablonun her elemannn deeri // X deeri ile karlatrlr. if ( tablo[ j, h ] == "X" ) { Label2.Text = tablo[ 0, h ] + ", "; Label2.Text += tablo[ j, 0 ]; Label2.Text += " kitabn yazyor"; break; } } Label1.Text += "\n"; }
Tablonun her eleman kontrol edilir ve X deeri bulunduu zaman yazar ismi ve kitap ismi ekrana yazdrlr. Yazar isimleri, dizinin ikinci boyutunun ilk srasnda tutulduu iin tablo[0,h] kodu ile ulalr. Kitap isimleri ise, dizinin ilk boyutunun ilk srasnda tutulduu iin tablo[j,0] kodu ulalr. Buradaki h ve j deikenleri o anda kontrol edilen elemann tablodaki indisleridir.
break ifadesi, o anda bulunan For dngsnden kmay salar. Bu rnekte
ikinci For dngs yazarlar stunu zerinde dnd iin, bu dngden kldnda, ilk For dngsne tekrar geilir. Bu sefer yeni bir kitap iin
BLM 1:
19
yazarlar kontrol edilir. Sonuta bir kitab birden fazla yazar yazmasna ramen, grntlenecek olan sadece ilk yazardr.
While
While
Verilen koul gerekletii srece ilem yaplr. Sayac deitirmek iin kod yazlmas gerekir.
int toplam = 0; short sayac = InputBox("Bir say girin"); while (sayac > 0) { toplam += sayac; sayac -= 1; }
Birden ona kadar olan saylarn toplamn hesaplamak iin, bir ve on arasndaki saylar tek tek yazlp toplanabilir. yi bir yntem olmasa da sonucu verir. Ancak kullancnn girdii bir sayya kadar toplam almak iin bir dng gerekir.
int toplam = 0; int sayac = int.Parse(txtSayiGirisi.Text); while (sayac > 0) { toplam += sayac; sayac -= 1; }
Burada kullancnn girdii saydan itibaren sfra kadar giden bir dng kurulur. Dng sayacn sfrdan byk olduu her durum iin alacaktr. Saya sfrlandnda ise dngden klr.
20
KISIM I:
Sonsuz Dngler
While dngs saya ile kullanlrken, sayacn deitirilmesine dikkat edilmesi
gerekir. Eer saya deitirilmezse, While ifadesindeki koul hep true deeri alaca iin sonsuz dngye girilir. Sadece sayacn kontrol edilmedii durumlarda deil, koullarn yazlmalarndaki mantk hatalar da sonsuz dngye sebebiyet verir.
int i = 0; while (i < 10 | i > 5) { label1.Text = "Sonsuz dngye girildi"; i += 1; } For dngsnde saya, artrma ifadesindeki deerden fazla bir sayda
azaltlrsa yine sonsuz dngye girilir. Bu dngnn almas, int veri tipinin alabilecei minimum deere ulanca hata ile sonlanr.
for(int i = 0; i <= 9; i += 3) { MessageBox.Show("Sonsuz dng"); i -= 4; }
Uygulama
Bu uygulamada, bir satran tahtas zerindeki bir filin hareket alan hesaplanr. Satran tahtas rasgele talarla doldurulur. Verilen bir koordinatta bulunan fil, apraz hareketlerine gre nereye ilerleyebilecei bulunur. Eer filin nnde bir ta varsa, bu tan bulunduu yere ve daha gerisine ilerleyemeyecektir. Filin drt bir yanna apraz olarak hareket edebilecei gz nnde bulundurulmas gerekir. Tahtann doldurulmas 1. Satranc isminde bir Windows projesi an. 2. Form zerine lbHareketAlani isminde bir ListBox, btnGoster isminde bir Button ekleyin. 3. btnGoster dmesinin Click olayna 8 x 8 boyutunda bir dizi tanmlayp dolduran kodlar yazn. Bu dizi bool tipinde deerler tar. Verilen indisteki elemann deeri true olmas, o koordinatta bir tan bulunduunu belirtir.
lbHareketAlani.Items.Clear(); int a,b; Random r = new Random(); bool[,] tahta = new bool[ 8, 8 ]; for ( a=0; a<=7; a++ ) { for ( b=0; b<=7; b++ ) { int sonuc = (r.Next() % 2);
BLM 1:
21
Hareket Alan Tahta zerindeki bir fil, drt apraz yne doru ilerleyebilir. Dizide apraz olarak ilerlemek x ve y koordinatlarnn eit oranda artmas ve azalmas demektir. Dizide ilerlerken x ve y koordinatlarnn sfrdan kk ve dizinin boyutundan byk olmamasna dikkat edilmelidir. Drt farkl yne gre, koordinatlar artacak ya da azalacaktr. 1. Fili tahta zerine yerletirmek iin kullancdan koordinatlar aln.
byte x = byte.Parse( txtFilinXKoordinati.Text ) ; byte y = byte.Parse( txtFilinYKoordinati.Text ) ;
2. 0, 0 ynne doru olan yoldaki talarn kontroln yapn. Filin x ve y koordinatlarn birer drerek, koordinatlarda ta var m yok mu kontrol edilir. Eer ta yoksa bu kareye ilerlenebildiini, lbHareketAlani liste kutusuna koordinat eklenerek gsterilir. Yol zerinde bir ta varsa, daha fazla ilerlenemeyecei iin While dngsnden klr.
int i = 1; while ( x - i >= 0 & y - i >= 0 ) { if ( !( tahta[ x - i, y - i ] ) ) { lbHareketAlani.Items.Add((x i).ToString() + " - " + (y - i).ToString() ); i += 1; } else { break; } }
0 ) {
22 i = 1; while ( ! ( x + i >= tahta.GetLength( 0 ) | y + i >= tahta.GetLength( 1 ) ) ) { if ( !( tahta[ x + i, y + i ] ) ) { lbHareketAlani.Items.Add( (x + i).ToString() + " - " + (y + i).ToString()); i += 1; } else { break; } }
KISIM I:
Debug Kodlar yazldktan sonra indislerin doru kullanldn, dnglerde mantksal hatalar yaplmadn kontrol etmenin en kolay yolu hata ayklayc ile almaktr. Bu rnekte birok dng kurulmutur, filin drt hareket ynndeki engeller kontrol edilir. Tm hareketlerin ileyiine Debug ile kolayca baklr. 1. TextBox ile filin koordinatlarnn alnd yere BreakPoint koyun ve projeyi altrn. 2. x ve y koordinatlarna 0 deerini girin. Filin, tahtann sol st kesinde olduu varsaylr. Bu durumda fil hangi ynde ilerleyebilir? Step Into komutu ile kodlar arasnda ilerleyin ve hangi dng iine girdiini bulun. 3. Locals panelinde i deikeninin deerini izleyin. Ayn panelde tahta dizisinin, o anda kontrol edilen deerine bakn. x ve y deerlerinin bir fazlasn alarak, dier deerin true ya da false olduunu kontrol edin.
BLM 1:
23
Tasarm zaman hatalar, kodlarn yazlmas srasnda derleyici tarafndan bulunan ve Task List panelinde gsterilen hatalardr. Task List panelinde hatann aklamas, hatann projenin hangi dosyasnda ve dosyann kanc satrnda bulunduunu gsterir. Tasarm zaman hatalar szdizimi yanl kullanldnda meydana gelir. alma zaman hatalar, uygulama alrken yaplmas imknsz bir ilemin gerekletirilmesi srasnda meydana gelir. rnein TextBox ile bir saynn alnmas srasnda, kullanc String tipinde bir deer girerse alma zamannda bir hata oluur.
int []dizi = new int[10]; for (int i = 0; i <= dizi.Length; i++) { Label1.Text &= dizi(i) }
Buradaki hata mesaj, dizinin byklnn dnda bir indis verildiini belirtir. Visual C# .NET dilinde uygulama gelitirirken oluabilecek tm hatalar .NET FrameWork ats altnda Exception snflar halinde tanmlanr. rnein dizinin byklnden farkl bir indis verildiinde IndexOutOfRangeException hatas ortaya kar. Tm hatalar gibi bu hata da Exception taban snfndan tremitir.
24
KISIM I:
alma zamannda ortaya kan hatalar uygulamann beklenmedik bir ekilde sonlanmasna neden olur. Uygulamann devam etmesi iin bu hatalarn yakalanp ilenmesi gerekir. Try Catch Finally bloklar iinde, alma zaman hatalar meydana geldii durumlarda almas istenen kodlar yazlr. Try blou iine, alrken hata retebilecek kodlar yazlrken, Catch blou iine, hata olutuunda yaplmas gereken ilemler yazlr.
int sayi, sonuc; try { Random r = new Random(); sayi = r.Next(3); sonuc = 100 / sayi; MessageBox.Show("Blme ilemi baarl, sonu: " + sonuc.ToString()); } catch (Exception ex) { MessageBox.Show("Blme ilemi baarsz. Hata Mesaj: " + ex.Message); }
Bu rnekte retilen rasgele bir say ile blme ilemi yaplyor. Say sfr deerini aldnda blme ilemi hata retecektir. Dolaysyla bu ilem Try blou iine yazlmaldr. Catch blounda, ilemin baarsz olduunu belirten bir mesaj
BLM 1:
25
yazlr. Exception nesnesinin Message zellii, hatann olutuu zaman retilen mesaj tutar. Exception nesnesinin zellikleri Catch iinde kullanlmayacaksa, tanmlanmasna gerek yoktur.
try { } Catch { label1.Text = "Exception kullanlmyor."; } Finally blounda, Try Catch iinde yaplan tm ilemlerden sonra
altrlacak kodlar yazlr. Finally blounda yazlan kodlar hata meydana gelse de gelmese de altrlacaktr.
try { // Dosya a // Dosya ilemleri } catch (Exception ex) { // Dosya alrken veya ilem yaplrken // hata meydana geldi. } finally { // Dosya kapat } Finally blounda, genellikle, kullanlan kaynaklar serbest braklr. rnekte,
bir dosya alyor. Dosya ama veya dosyaya veri yazma ilemlerinde bir hata meydana geldiinde, Catch ifadesinde bu hata yakalanp ilgili mesaj kullancya gsterilir. Finally blou her halkarda alaca iin dosya kapama ilemi burada yaplr.
ifreleme:
Verilen yaznn ifrelenmesi etaptan oluur: Yaznn karakterleri Ascii kodlarna evrilir. Kodlar, gerekiyorsa balarna 0 konarak, 4 haneli yaplr ve sral halde bir String deikeninde tutulur.
26
KISIM I:
Sral ekilde yazlan kodlar, bir batan bir sondan karakter alnarak tekrar dzenlenir. rnek: acf kelimesinin ifrelenmesi: a c f karakterleri Ascii kodlarna evrilir. a = 97 c = 99 f = 102 Kodlar balarna sfr konarak 4 haneli yaplr. 0097 0099 0102 Sral halde bir String deikenine yazlr. 009700990102 Saynn ortasna kadar, nce batan daha sonra sondan rakam alnarak tekrar yazlr. Siyah olarak gsterilen rakamlar, dizinin sonundan alnmtr.
0 02 020 0200 02009 020091 0200917 02009170 020091700 0200917009 02009170090 0 2 0 0 9 1 7 0 0 9 0 9 = ifre Projenin almas 1. Visual Studio ortamnda, Sifreleme isminde bir Windows projesi an. 2. Alan forma lblSifre isminde bir Label kontrol, btnSfrele isminde bir Button kontrol ekleyin. Bu kontroller kullancdan alnan yaznn ifrelenip grntlenmesini salayacaktr. 3. Alan forma lblDesifre isminde bir Label kontrol ve btnSfreyiCoz isminde bir Button kontrol ekleyin. Bu kontroller ifrelenmi yaznn lblSifre kontrolnden alnarak, ifrelenip grntlenmesini salayacaktr. DKKAT:
yazlacaktr. ifreleme algoritmasnn tm kodlar btnSifrele kontrolnn Click olayna
BLM 1:
27
1. ifrelenecek yaznn girilmesi iin gerekli kodu yazn. Bir yaz girilene kadar kullancdan yaz istemek iin do while dngsn kullann.
string yazi = null; // Algoritma 1 - 1 do { yazi = txtSifrelenecekYazi.Text; } while ( ! ( yazi.Length > 0 ) );
2. Girilen yaznn karakterlerini bir dizide toplamak iin String deikeninin ToCharArray() metodunu kullann.
// Algoritma 1 - 2 char[] karakterler = yazi.ToCharArray();
3. Karakterlerin Ascii kodu karln tutmak iin kodlar isminde bir dizi yaratn. Karakterler dizisindeki tm elemanlar zerinde ilem yapmak iin bir dng kurun. Karakterler dizisindeki her karakteri Asc hazr fonksiyonu ile Ascii koduna evirin.
int uzunluk = karakterler.Length - 1 ; string[] kodlar = new string[ uzunluk + 1 ]; int i; // kelimedeki her karakterin ASCII kodu alnr for ( i=0; i<=uzunluk; i++ ) {
KISIM I:
4. Bu algoritma sonunda elde edilen kodlar dizisi, ifrelenecek olan yaznn her karakterinin Ascii kodunu tutar. Bu dizi dier algoritmann giri deeri olarak kullanlacaktr. Sral Kodlara evirme Ascii karakter kodlar 0 255 arasnda deer alr. Dolaysyla her kod maksimum haneli olacaktr. ifre oluturulurken yaplan son dzenlemede kolaylk salamak iin, bu kodlar 4 haneli yaplr. Daha sonra bu kodlar diziden ekilerek SiraliKodlar adl bir String deikenine yazlr.
1. Dizideki kodlar sral bir ekilde tutmak iin SiraliKodlar adl bir deiken tanmlayn. lk algoritmadan alnan Ascii kodlarn tutan kodlar dizisi zerinde bir dng kurun.
string SiraliKodlar = null; short j = 0; while ( j <= kodlar.Length - 1 ) { j += 1; }
DKKAT: 2 4 etaplarnda yazlacak tm kodlar While dngsnn iine yazlacaktr. Bu dngde kullanlacak Ascii kodunu bir deikene atan kodu yazn.
BLM 1:
2. AsciiKodu deikeninde tutulan kodun 4 haneli hale getirilmesi iin ka tane sfr eklenmesi gerektiini bulun. Eklenecek sfrlarn says, 4 AsciiKodu deikeninin uzunluu kadardr. rnein 192 kodlu bir deikene eklenmesi gerenken sfr says 4 3 = 1 tanedir.
byte eklenecek = System.Convert.ToByte( 4 - AsciiKodu.Length );
3. Eklenecek say kadar alacak bir dng iinde, sfr ekleme ilemini yapn.
for ( i=0; i<=eklenecek - 1; i++ ) { // Alogritma 2 - 3 AsciiKodu = AsciiKodu.Insert( 0, "0" ); }
4. Dzenlenmi AsciiKodu, SralKodlar deikenine yazn ve sayac bir artrarak dier Ascii koduna gein.
// Alogritma 2 - 4
SiraliKodlar += AsciiKodu; j += 1;
Algoritma sonunda ortaya kan deer, karakterlerin 4 haneli Ascii kodlarn tutan bir String deikenidir. Bu deiken dier algoritmada, tekrar dzenlenmek zere kullanlacaktr. ifrenin oluturulmas Bir nceki algoritmada elde edilen SralKodlar deikeni halen istenilen ifreli yaz deildir. nk 4 haneli kodlar sral bir ekilde durur ve kolayca zlebilir. ifrenin ilk bakta anlalmasn daha da zorlatrmak iin, sralanm kodlar biraz daha kartrlr.
30
KISIM I:
2. SralKodlar deikeni zerinde yaplacak ilem says, bir batan bir sondan ilerlendii iin, deikenin uzunluunun yars kadardr. Sayacn bu uzunlua kadar tanml olan bir dng oluturun.
// Algoritma 3 - 2 while ( j < SiraliKodlar.Length / 2 ) { j += 1; }
DKKAT:
yazlacaktr.
4. ifreye, SralKodlarn uzunluk j indisli karakterini ekleyin. // Algoritma 3 - 3 Sifre += Strings.Mid( SiraliKodlar, j + 1, 1 ); 5. Sonu olarak kan ifre, girilen yaznn Ascii kodlarnn kark dzende tutulmas ile oluturulur.
// Algoritma 3 - 4 Sifre += SiraliKodlar.Substring(SiraliKodlar.Length - j - 1, 1 );
ifreyi zmek
ifreleme algoritmas kullanlarak oluturulan ifrenin zlmesi, izlenen yollarn tersi uygulanarak gerekletirilir. Deifre algoritmas iki etaptan oluur. 1. Bir batan bir sondan karakter alnarak ifrelenen Ascii kodlar, sral kodlar haline dntrlr. 2. 4 haneli olarak duran sral kodlar, karakterlere evrilir. Karakterler ard ardna konarak deifre ilemi gerekletirilir. rnek: acf kelimesinin ifrelenmi hali 020091700909 eklindedir. Bu kelime ifrelenirken, karakterleri 4 haneli Ascii kodlarn evrilmi ve bu kodlarn rakamlarnn sras deitirilmiti. Bu ifrenin nce 4 haneli sral kodlar haline getirilmesi iin, ifrelenen yntemin tersi ilenir. Srayla okunan rakamlar nce baa daha sonra sona yazlr.
BLM 1:
31
ifre: 0 2 0 0 9 1 7 0 0 9 0 9 Sral kodlara evrim: Srann ilk yars 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 yarnsn birleimi olur: 0097 0099 0102 DKKAT:
Srann ilk yars oluturulurken, rakamlar sona eklenir. Ancak srann son yars oluturulurken rakamlar baa eklenir.
Bu 4 haneli kodlar String deerinden Integer deerine evrilir ve bu deerlerin karl olan karakterler yazlr. 0097 97 a 0099 99 c 0102 102 f Elde edilen karakterler birletirildiinde ifre zlm olur: acf DKKAT:
yazlacaktr. Deifre algoritmasnn tm kodlar btnSifreyiCoz kontrolnn Click olayna
ifreyi Sral Kodlara Dntrme Bu algoritma verilen ifreyi sral Ascii kodlarna dntrr.
1. ifreyi lblSifre etiketinden aln ve sral kodlarn oluturulmas iin gereken deikenleri tanmlayn.
// Algoritma 1 - 1 string Sifre = lblSifre.Text; string SiraliKodlar = null; short i = 0;
32
KISIM I:
// Baa ve sona rakam eklenecei iin // deikenlere balang deerleri verilir string ilkYarisi = ""; string sonYarisi = "";
2. ifrenin tm elemanlar zerinde bir dng kurarak, sral kodlarn ilk ve son yarsn oluturun. Kodlarn ilk yars, ifrenin tek haneli rakamlar ile; kodlarn son yars, ifrenin ift haneli rakamlar ile oluturulur. Dolaysyla dngnn sayac ikier ikier artmaldr. ifrenin i indisli rakamn srann ilk yarsna, yanndaki rakam (i + 1 indisli rakam) srann son yarsna ekleyen kodlar yazn.
for ( i=1; i<=System.Convert.ToInt16( Sifre.Length ); i+=2 ) // Algoritma 1 - 2 // Srann ilk yarsnn sonuna rakam eklenir. ilkYarisi += Strings.Mid( Sifre, i, 1 ); // Algoritma 1 - 3 // Srann son yarsnn bana rakam eklenir. sonYarisi = sonYarisi.Insert( 0, Sifre.Substring(i , 1 ) ); }
3. Sral kodlarn ilk yars ve son yars birletirilir. Elde edilen deer, 4 haneli Ascii kodlarnn srayla tutulduu bir String deeridir.
// Algoritma 1 - 4 SiraliKodlar = ilkYarisi + sonYarisi;
Sral Kodlarn Okunmas lk algoritmada elde edilen sral Ascii kodlar, bu algoritmada okunarak karakterlere evrilir ve ifre zlm olur.
1. ifre zld zamanki deerinin tutulaca deikeni tanmlayn ve sral kodlar zerinde bir dng kurun. Sral kodlarn 4 haneli kodlardan
BLM 1:
33
olutuu iin, dngde bir seferde 4 rakam alnacaktr. Bunun iin dngnn sayac 4 artrlmaldr.
i = 0; string yazi = ""; while ( i < SiraliKodlar.Length ) { i += 4; }
DKKAT:
yazlacaktr.
2. Dng her seferinde bir Ascii kodu alr. Bu deeri tutan bir deiken tanmlanr ve sral kodlardan 4 haneli rakam bu deikene atanr.
int AsciiKodu; // Algoritma 2 - 1 AsciiKodu = int.Parse( SiraliKodlar.Substring(i , 4 ) ) ;
Dizinin Doldurulmas
1. Siralama isimli bir Windows projesi an 2. Form zerine biri lbSirasiz, dieri lbSirali isimli iki ListBox ekleyin. Bu kontroller dizinin srasz ve sral halini listeler. 3. btnListele ve btnSirala isimli iki Button ekleyin. 4. Formun kod tarafna gein ve bir dizi tanmlayn. Bu dizi bir ok yordamn iinde kullanlaca iin global olarak tanmlanr.
public string[] dizi = new string[ 5 ];
5. btnListele dmesinin Click olayna, diziyi kark bir ekilde isimlerle dolduran kodlar yazn:
dizi[ dizi[ dizi[ dizi[ dizi[ 0 1 2 3 4 ] ] ] ] ] = = = = = "Enis"; "Engin"; "Tamer"; "Kadir"; "Fulya";
34
KISIM I:
Dizinin Sralanmas
Sralama algoritmas, dizi zerinde bir dng kurar ve srayla dizinin bir eleman seilir. Bu eleman iin bir baka dng kurulur ve seilen elemann indisine kadar olan tm elemanlarla bir karlatrma yaplr. Kk olan srann bana konmak iin byk olan ile yer deitirilir. rnek 1. Dizinin 2. eleman seilir: Engin Dizinin 2. indisine kadar olan elemanlarla karlatrlr. Engin deeri alfabetik srada Enis deerinden kk olduu iin, bu iki deer yer deitirilir. Sra, Engin Enis Tamer Kadir Fulya olur. 2. Dizinin 3. eleman seilir: Tamer Dizinin 3. indisine kadar olan elemanlarla karlatrlr. Tamer deeri, Enis ve Engin deerlerinden byk olduu iin sralama deimez. 3. Dizinin 4. eleman seilir: Kadir Dizinin 4. indisine kadar olan elemanlarla karlatrlr. Kadir < Tamer olduu iin bu iki deer yer deitirilir. Sra, Engin Enis Kadir Tamer Fulya olur. Kadir deeri , Enis ve Engin deerlerinden byk olduu iin sralama deimez. 4. Dizinin 5. eleman seilir: Fulya Dizinin 5. indisine kadar olan elemanlarla karlatrlr. Fulya < Tamer olduu iin bu iki deer yer deitirilir. Sra, Engin Enis Kadir Fulya Tamer olur. Fulya < Kadir olduu iin bu iki deer yer deitirilir. Sra, Engin Enis Fulya Kadir Tamer olur. Dizideki tm deerler kontrol edildii iin algoritmadan klr.
BLM 1:
35
1. btnSirala dmesinin Click olayna, dizi zerinde bir dng tanmlayn. Bu dng dizinin (1 indisli) ikinci elemanndan balayarak dizi sonuna kadar devam edecektir. Daha sonra bu dng iine baka bir dng daha yazn. Bu dng, ilk dngnn sayacndan balar ve sfr olana kadar devam eder. kinci dngnn amac, ilk dngde seilen eleman, dizinin bana kadar olan elemanlarla karlatrmaktr.
int i; for ( i=1; i<=dizi.Length - 1; i++ ) { int j = i; while ( j != 0 && String.Compare(dizi[ j ], dizi[ j - 1 ]) == -1 ) { // Yer deitirme Algoritmas j -= 1; } } While dngs, j deeri sfr olana kadar ve dizinin kontrol edilen deeri bir
nceki deerden kk olana kadar devam eder. Burada, dizi elemanlarnn kontrolnn sadece bir defa (bir nceki eleman ile) yapld dnlebilir. Ancak kk eleman yer deitirildiinde j deeri bir drlr. Dng tekrar alt zaman, ayn eleman bu sefer dizinin kalan elemanlaryla karlatrlr. AndAlso operatr, j deerinin sfr olma durumunda dier kontroln yaplmamas iin kullanlr. Dier kontrolde dizi(j 1) ifadesi, negatif indisli deere ulalmak istendii iin hata mesaj verir.
36
KISIM I:
2. Yer deitirme algoritmas, bir deikenin deerinin geici bir yerde tutulmas ile gerekletirilir.
Sralama algoritmasnda dizinin j ve j - 1 indisli deerleri yer deitirilir. While dngs iinde Yer deitirme Algoritmas yazan yorum satrn kaldrn ve yerine algoritma kodlarn yazn.
// Yer deitirme string temp = dizi[ j - 1 ]; dizi[ j - 1 ] = dizi[ j ]; dizi[ j ] = temp ;
BLM 1:
37
NOT: kili arama ynteminde byk kk kyaslamas yapldndan dizinin sral olmas
gerekir.
Dizinin sralanmas
Arama algoritmas sral bir dizi zerinde alaca iin, dizi oluturulduktan sonra sralanmas gerekir. 1. IkiliArama isminde bir Windows projesi an. 2. Forma btnAra isimli bir Button ve lbDizi adl bir ListBox ekleyin. 3. Kod sayfasna gein ve global bir dizi tanmlayn.
public int[] dizi = new int[ 11 ];
4. Formun Load olayna diziyi rasgele saylar ile doldurmak iin gereken kodlar yazn.
int i; Random r = new Random(); for (i=0; i<=10; i++ ) { dizi[ i ] = r.Next(1000); }
Arama algoritmas
kili arama algoritmas, dizi zerinde aranacak deeri nce srann ortasndaki deerle karlatrr. Dizi kkten bye sral olduu iin, eer aranan deer ortadaki deerden kkse arama, dizinin ilk yarsnda devam eder. Dizinin dier yars aranan deerden byk deerler ierdii iin, aramaya dhil edilmez. rnek Kkten bye sral dizi zerinde 9 deeri aranacaktr. Dizi: 1 2 4 7 9 10 12 18 1. Son, ba ve orta deikenleri tanmlanr: Son deeri dizinin son elemannn indisini, ba deeri dizinin ilk elemannn indisini, orta deeri ise son + ba / 2 deerini alr. Orta deeri virgll bir deer alrsa tam sayya evrilir. 2. Balang olarak ba -1, son dizi uzunluu deerini alr. Ba = -1 Son = 8 Orta = (8 1) / 2 = 3 3. Dizinin orta indisli deeri alnr. Dizi(3) = 7
38
KISIM I:
4. Aranan 9 deeri, yediden byk olduu iin, dizini son yarsnda aranr. Ba deikenine orta deeri verilirse, dizinin balang indisi deitirilir, bylece aramalar dizinin son yarsnda gereklemi olur. Dizi: 9 10 12 18 Ba = 3 Son = 8 Orta = (8 + 3) / 2 = 5 5. Dizinin orta indisli deeri alnr. Dizi(5) = 10 6. 9 deeri, ondan kk olduu iin, kalan dizinin ilk yarsnda aranr. Dizi: 9 10 Ba = 3 Son = 5 Orta = (5 + 3) / 2 = 4 7. Dizinin ortasndaki deer alnr: 9 8. Bylece 9 deerinin indisi orta deeri olur.
BLM 1:
39
Kodlar Arama algoritmasnn kodlar btnAra dmesinin Click olayna yazlacaktr. 1. Algoritma iin gerekli bas, son ve orta deikenlerini tanmlayn ve balang deerlerini verin. Aranan deerin indisini tutmak iin de bir deiken tanmlayn.
int int int int son = dizi.Length; bas = -1; orta; indis;
40
KISIM I:
3. Dizide aranacak deer kalmad zaman kan bir dng kurun. Son ve bas deerleri arasndaki fark bire dtnde, dizide aranacak deer kalmamtr.
while ( son - bas > 1 ) { }
4. While dngs iine, dizinin orta indisli deerini alan ve bu deeri aranan deerle karlatran kodlar yazn.
orta = ( son + bas ) / 2; if ( dizi[ orta ] > hedef ) { son = orta; } else if ( dizi[ orta ] < hedef ) { bas = orta; } else { indis = orta; MessageBox.Show( "ndis: " + indis.ToString()); return; }
Eer dizinin ortasndaki deer aranan deerse, indis bulunmu demektir. orta deikeni kontroln yapld deerin indisini tuttuu iin, sonu orta deeri olur ve yordamdan klr. 5. Eer istenen deer bulunamadan dngden klrsa, indis -1 deerini alr. End While ifadesinden sonra, aranan deerin bulunamadn belirten kodu yazn.
indis = -1; MessageBox.Show( "ndis: " + indis + " Aranan deer bulunamad");
BLM 1:
41
zet
Algoritma kurmak Dump Coding zmlemesi Ak diyagramlar
1. if ifadesi hangi veri tipini kontrol eder? 2. if - switch karar yaplarnn farklar nelerdir?
3. true | false & false
4. 5. 6. 7. 8.
(true | false) & false ifadeleri hangi deerleri dndrr? 4 boyutlu bir dizinin tm elemanlarn doldurmak iin, dizi zerinde ka tane dng kurulmaldr? Uygulamalar derledikten sonra hatalar hangi yollarla grlebilir? Finally bloundaki kodlar ne zaman alr? Sral arama ynteminde (Linear Search) dizinin elemanlarnn sral olmas gerekli midir? Sral arama yntemin bir dizi zerinde uygulayn.
Hedefler
Sub Function kullanm .NET Tarih, String, Matematik fonksiyonlar Online Offline yardmn etkin kullanm
Uygulama gelitirirken, bir ilemin birok yerde kullanld zamanlar olur. Bu gibi durumlarda bir kere yazlan kodlar, farkl yerlerde tekrar yazlr. Uygulama zerinde bir deiiklik yaplmak istenirse, tekrar yazlan kodlarn tek tek bulunup deitirilmesi gerekir. Bylece hem uygulamann yazm zorlar hem de deiik yapmak giderek imknsz hale gelir. Bu problemler, birok yerde yaplmas istenen ilemlerin fonksiyonlar ve yordamlar iinde yazlmas ile zlr. Sadece fonksiyon ve yordamlarn isimleri kullanlarak, istenen yerlerde kodlar altrlr. Yaplan ilemin sonucunda oluan deer isteniyorsa fonksiyonlar kullanlr. rnein veritabanna yeni bir kullanc ekledikten sonra kullancnn ID numaras isteniyorsa fonksiyon kullanlmaldr. Eer yaplan ilemlerin sonunca bir deer dndrlmyorsa yordamlar kullanlr. rnein bir ComboBox kontrolne e ekleme ilemi yordam iine yazlabilir. .NET atsndaki nesnelerin birok fonksiyon ve yordamlar vardr. Tm fonksiyon ve yordamlarn ka parametre ald, geriye dn deerinin ne olduu, hangi nesneye ait olduklar ezberlenemez. Dolaysyla Visual Studio yardmnn kullanlmas kanlmazdr. Bu modl tamamlandktan sonra: Yordam ve fonksiyon kullanarak kodlarnzn ynetilebilirliini ve esnekliini artracak, Fonksiyon ve yordamlarn farklarn ayrt edebilecek,
KISIM I:
.NET atsndaki tarih ve zaman, matematik, String fonksiyonlarn tanyacak, Offline ve Online yardm etkin bir ekilde kullanabileceksiniz.
Void
Dn deeri olmayan kod bloklardr. Birok yerde kullanlacak kodlar, yordamlar ile gruplanmaldr.
void Temizle() { Label1.Text = ""; ListBox1.Items.Clear(); }
Yordamlar dn deeri olmayan kod bloklardr. Bu yordamlar void ifadesi ile belirtilir.
void YordamIsmi() { }
Uygulama iinde birok yerde alacak kodlar yordam iinde yazlr. Bu kodlar, iine yazldklar yordamn ismi ile arlarak, istenilen yerde tekrar altrlabilir. rnein bir uygulama balarken form zerindeki kontrollerin temizlenmesi gerekiyorsa, bu kodlar bir daha yazmamak iin yordam kullanlabilir.
void Temizle() { label1.Text = ""; listBox1.Items.Clear(); }
Yordam tanmlarken parantezler iine, alabilecei parametreler yazlr. Eer yordam parametre almyorsa parantezlerin ii bo braklr.
BLM 1
void YazilimUrunleriEkle() { ComboBox1.Items.Add("Yazlm Uzmanl"); ComboBox1.Items.Add("Yazlm Mhendislii"); Label1.Text = "Yazlm paketleri eklendi..."; }
Yordamlar tanmladktan sonra baka bir yordam veya fonksiyon iinde kullanlr. Yordam kullanmak iin, gerekli yere isminin yazlmas yeterlidir.
Void DersleriListele() { switch( ComboBox1.SelectedIndex ) { case 0: Temizle(); ListBox1.Items.Add("Access - likisel Veritabanlar"); ListBox1.Items.Add("Programlamaya Giri Ve Algoritma"); ListBox1.Items.Add(".NET Framework"); ListBox1.Items.Add("VB.NET ile Windows Tabanl Programlama"); ListBox1.Items.Add("ASP.NET ile Web Tabanl Programlama"); Label1.Text = "Yazlm Uzmanl dersleri yklendi." ; break; case 1; Temizle(); Ynetimi"); ListBox1.Items.Add("SQL Server Veritaban
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"); yklendi."; Label1.Text = "Yazlm Mhendislii dersleri
Burada ComboBox kontrolnden seilen deerin kontroln indis zerinden yaplmas, YazilimUrunleriEkle yordamnda eklenen elemanlarn sras deiirse problem yaratr. Liste kutusuna eklenen dersler yanl paketlerde gzkr. Ancak ComboBox kontrolnn seili metni zerinden kontrol yaplrsa
KISIM I:
da, eklenen isimler deitii zaman bir problem ortaya kar. Bu durumda iki yordamn birbirine bamll grlr. Bu rnekte, bir yordamda deiiklik yapld zaman dier yordamn alma ekli de kontrol edilmelidir. Label ve ListBox kontrollerini temizleyen kodlar sadece iki satr olduu iin Temizle yordamnda yazlmayabilirdi. Ancak bu kodlar DersleriListele yordamnda defa kullanld iin her deiiklikte, kodun yazld yer bulunup gerekli dzeltmeler yaplacakt. rnein temizle ilemi, liste kutusunda Dersler metni gzkecek ekilde deitirebilir. Bu durumda, deiiklii sadece Temizle yordamnda yapmak yeterli olur.
Void Temizle() { Label1.Text = ""; ListBox1.Items.Clear(); ListBox1.Items.Add("Dersler: "); }
Parametre Kullanm
Parametre Kullanm
Parametreler ile yordamlarn davranlar deitirilir. Params, ayn tipten snrsz parametre girilmesini salar.
Yordamlarn baz deerlere gre farkl ilem yapmas istenebilir. lemin bal olduu bu deerlere parametre veya argman denir. Yordamlar parametre alacak ekilde tanmlanp, arldklar srada istedikleri parametreleri verilerek kullanlr.
Void YordamIsmi(VeriTipi Parametre1, VeriTipi Parametre2, ) { }
BLM 1
rnein uygulamann birok yerinde kullancya bilgi vermek amal mesaj kutular kullanlr. Eer bu mesajlar bir yordam iine yazlrsa, daha sonra mesajlar bir Label zerinde gsterilecek ekilde deitirmek kolay olacaktr. Yordamn gsterecei mesajlar parametre olarak verilmesi gerekir.
Void MesajGoster(string mesaj) { Label1.Text = mesaj; } Void Yordam1() { //... MesajGoster("1. Yordam iinden alr."); } Void Yordam2() { //... MesajGoster("2. Yordam iinden alr."); } Void Yordam3() { // ... MesajGoster("3. Yordam iinden alr."); }
Yordamlar arrken tm parametrelerin belirtilen veri tipte verilmesi gerekir. Yordamlar tanmlarken parametreleri isimleri ve veri tipleri belirtilmelidir. Ayrca parametreler deer tipi ya da referans tipi olarak geilecei belirtilmelidir. Yordamn normal akndan klmak istenirse Return ifadesi kullanlr.
Void MusteriBilgisi(int MusteriId) { if( ! MusteriId > 0 ) Return // MusteriId deerine gre // mteri bilgileri veritabanndan ekilir. }
Diziler parametre olarak kullanldklarnda byklkleri verilmez. Fakat parantezler kullanlarak, verilen parametrenin dizi olduu belirtilmelidir.
void MatrisTopla(int [,] matris1 , int [,] matris2) { int x = matris1.GetLength(0); int y = matris1.GetLength(1); if (x != matris2.GetLength(0) matris2.GetLength(1)) { MessageBox.Show("Matris boyutlarnn birbiriyle ayn olmaldr."); || y !=
byklkleri
6 return; } int [,] sonuc = new int[x - 1, y - 1]; for(int i = 0; i < x; i++) { for (int j = 0 ; j < y; j++) { sonuc[i, j] = matris1[i, j] + matris2[i, j]; } } }
KISIM I:
Params
Yordamlar ve fonksiyonlar arrken parametrelerin mutlaka girilmeleri gerekir. Ancak baz durumlarda yordamlara ve fonksiyonlara girilecek parametrelerin says tasarm zamannda belli olmaz. params anahtar kelimesi ile yordamlara, ayn veri tipinde parametre dizisi verilebilir. params ile verilen dizi yordamn son parametresi olarak tanmlanmaldr.
public void YasOrtalamasi( byte[] Yaslar ) { int toplam = 0; double ortalama = 0.0; string sinif, params
int i; for ( i=0; i<=Yaslar.Length - 1; i++ ) { toplam += Yaslar[ i ]; } // Parametre verilmezse i = 0 olur if ( i > 0 ) { ortalama = toplam / i; } MessageBox.Show( sinif + " snfnn ortalamas: " + ortalama); }
ya
Ya ortalamasn hesaplayan bu yordamn ilk parametresi verilmek zorundadr. params ile tanml olan dizi, yordam arlrken girilen tm parametreleri tutar. Fakat girilen bu parametrelerin veri tipleri ayn olmak zorundadr. Bu rnekte girilecek yalar Byte tipinde olacaktr.
BLM 1
private void Button1_Click2( System.Object sender, System.EventArgs e ) { // lk parametre verildikten sonra, // istenen sayda parametre verilebilir YasOrtalamasi("YU6112", 45, 14, 25, 28); // Yalar parametre olarak verilmeyebilir YasOrtalamasi("YU6112"); }
Parametrelerin snrl olmamas, dizilere eleman ekleme ilemini kolaylatrr. rnein bir diziye birok eleman eklemek iin, bu elemanlarn bir dizi iinde parametre verilmesi gerekir.
public string[] Raf; public void KitapEkle( string[] Kitap ) { // Raf dizisine, kitaplar dizisinin // elemanlar eklenir. }
Bu yordamn kullanm iin, eklenecek deerlerin nce bir diziye aktarlmas gerekir. Yordamn yazlmas kolay ancak kullanm zordur. Bu yordam kullanacak programcnn ii params ile kolaylatrlr.
public void Mesaj( string msg ) { Label1.Text += msg + "\n"; } ) { public void KitapEkle( string Kitap, byte Genisletme if ( Genisletme == 0 ) { Mesaj( "Dizi boyutu geniletilemedi..." ); return ; } // Geniletme faktr kullancya brakld iin // dizide bo alanlar olabilir. lk bo alan bulunup // veri buraya aktarlr. int i; while ( i < Raf.Length ) { if ( Raf( i ) == ( ( System.String[] )( "" ) ) ) { Raf( i ) = ( ( System.String[] )( Kitap ) ); return; } i += 1; } // Dizide bo yer yoksa yeniden boyutlandrlr. string[] Temp = new string[ i + Genisletme ]; System.Array.Copy( Raf, Temp, Raf.Length ); Raf = Temp; Raf[ i + 1 ] = Kitap; }
nce, diziye bir tek eleman ekleyen yordam yazlr. Dizinin tm alanlar doluysa, geniletme parametresinde verilen deer kadar tekrar boyutlandrlr.
KISIM I:
Geniletme deikeni Byte veri tipinde tanml olduu iin negatif deer alamaz. Dolaysyla dizinin boyutunun kltlmesi engellenmi olur. Bu yordam tek bana kullanlabilir olduu gibi, diziye birok eleman ekleyecek yordama yardmc niteliindedir.
public void Ekle( params string[] Kitaplar ) { for ( i=0; i<=Kitaplar.Length - 1; i++ ) { // Geniletme faktr 5 ile tek tek kitap eklenir. KitapEkle( Kitaplar[ i ], 5 ); } Mesaj( Kitaplar.Length + " kitap rafa eklendi." }
);
Bu yordam ise snrsz parametre alarak, dizi ilemlerinde programcya kolaylk salar.
private void Button1_Click( System.Object sender, System.EventArgs e ) { Ekle( "Kitap1", "Kitap2", "Kitap3" ); }
Void Main
Void Main
Balang yordamdr. Application snf kullanlarak, istenen formlar yklenir.
public static void Main() { Application.Run( new Form1() ); }
Yeni bir yordam tanmlarken Main yordam hari istenilen isim verilebilir. Main yordam btn uygulamalarn giri noktasdr. Windows uygulamalarnda formlar yklenmeden nce o form iinde tanml Main yordam altrlr. Bu Main yordamnda Application snf balang formunu Run metodu ile
BLM 1
ykler. Application snf, .NET Framework atsnda, uygulamalar balatmak, ynetmek ve sonlandrmak iin kullanlr. Projenin zelliklerinden balang nesnesi Sub Main olarak ayarlanrsa, uygulama alt zaman tm projede Main yordam arar. Windows uygulamalar gelitirirken Main yordam yazlrsa balang formunun da bu yordam iinde belirtilmesi gerekir. Bu yordam bir modln iinde tanmlanabilir.
public static void Main() { Application.Run( new Form1() ); } Application snfnn Run metodu, parametre olarak balang formu ister.
Uygulama balad zaman hangi formun almas isteniyorsa, bu formdan oluturulup parametre olarak verilir. New anahtar kelimesi, snflar oluturmak iin kullanlr.
Balang formu olarak seilen bir Windows formunda Main yordam tanmlanrsa, bu yordam static olarak tanmlanmaldr. static metotlar uygulama genelinde paylatrlan sabit metotlardr.
public static void Main() { MessageBox.Show("Balang formlar kod ile yklenmelidir."); }
Balang formu olarak ayarlanm bir formun iine bu Main yordam tanmlanrsa, formu yklemek iin herhangi bir kod yazlmad iin uygulama sadece mesaj kutusunu gsterecektir.
10
KISIM I:
Konu 2: Fonksiyonlar
Function
lem yapldktan sonra deer dndrlr. Return ifadesinden sonraki kodlar altrlmaz.
bool KontrolOk() { if (TextBox1.Text.Length > 0 ComboBox1.SelectedIndex > -1) { return false; } return true; }
&
Fonksiyonlar bir ilem yaptktan sonra geriye deer dndrrler. rnein bir arpma fonksiyonunun dn deeri, parametre olarak verilen iki saynn arpm olacaktr. Fonksiyonlarn tanmlar deikenler gibidir.
DnVeriTipi Fonksiyon(VeriTipi Param1, ...) { }
& ComboBox1.SelectedIndex
BLM 1
Bu fonksiyonun almas Return ifadesinden sonra yazlan deerin dndrlmesiyle sonlanr. Burada dikkat edilmesi gereken nokta, fonksiyon deer dndrdkten sonra sonland iin Return ifadesinden sonra gelen hibir kod altrlmaz. Eer dn deerini belirledikten sonra baka bir ilemin yaplmas isteniyorsa, fonksiyon ismi kullanlr. Fonksiyonun ismi bir deiken gibi gzkse de, temsil ettii deer fonksiyonun dn deeridir.
float GunlukKur(string Cinsi) { Switch(Cinsi) { Case "d": Case "D": Return 1.43; Case "e": Case "E": Return 1.81; Case "s": " Case "S": Return 2.91; } }
) {
public double KurHesapla( float Miktar, string Cinsi return Miktar * GunlukKur( Cinsi ); // Bu satrdan sonra yazlan kodlar ilenmez.
} private void Button1_Click1( System.Object sender, System.EventArgs e ) { Label1.Text = System.Convert.ToString( KurHesapla( -1000, "d" ) ); }
rnek: Snf geme notunun hesaplanmas, geriye bir sonu dndrlecei iin fonksiyon ile yazlmas gereklidir. Parametre olarak final ve vize notlar alnr ve bu deerlerle hesaplanan geme notu sonu olarak dndrlr. Vize notlarnn girilmesi zorunlu deildir, dolaysyla bu deerler params olarak verilebilir.
public int NotHesapla( int VizeKatSayisi, params int[] vizeler ) { int vizeToplam = 0; double vizeOrtalama = 0.0; int i; Final, float
12 for ( i=0; i<=vizeler.Length - 1; i++ ) { vizeToplam += vizeler( i ); } if ( i > 0 ) { vizeOrtalama = vizeToplam / i; } float finalKatSayisi = 1 - VizeKatSayisi; return finalKatSayisi * Final + VizeKatSayisi * vizeOrtalama; }
KISIM I:
Fonksiyonun ilk parametresi final notudur. Final notu bir tane olaca iin girilmesi zorunludur. Daha sonra vize notlarnn ortalamas hesaplanarak final notu ile toplanr. Parametre olarak verilen vize katsays, vize notlarnn ortalamadaki arlklarn belirler.
private void Button1_Click( System.Object sender, System.EventArgs e ) { int gecmeNotu; gecmeNotu = NotHesapla( 70, System.Convert.ToSingle( 0.6 ), 90, 80, 86, 75, 90 ); MsgBox( gecmeNotu ); }
BLM 1
13
Fonksiyon ve yordamlar kullanrken, ayn isimde birden fazla tanmlanabildikleri grlr. Buna Ar Yklenme (OverLoad) denir. Bir yordamn ve fonksiyonun ar yklenmesi kullanmn kolaylatrr. Ayn isimde farkl seenekler sunmas metotlarn kullanln arttrr.
public void UrunAra( int UrunId ) { // rn numarasna gre arama yaplr. } public int UrunAra( string UrunIsmi ) { // rn ismine gre arama yaplr. // Bulunan rnn numaras dndrlr. } public int UrunAra( string UrunIsmi, DateTime UretimTarihi ) { // rn ismine ve retim tarihine gre arama yaplr. // Bulunan rnn numaras dndrlr. } public int UrunAra( DateTime UretimTarihi ) { // retim tarihine gre arama yaplr. // Bulunan rnn numaras dndrlr. }
Metotlarn ayn isimde olmasnn ayrm parametrelerin veri tipi ve saysna gre yaplr. Metotlarn isimleri, parametre says ve parametrelerin veri tipleri metotlarn imzalarn (Method Signatures) oluturur. rnein rn numarasna gre arama yapan yordamn imzas UrunAra(int) eklindedir. int parametre alan bir UrunAra isminde baka bir yordam veya fonksiyon tanmlanamaz. Fonksiyonlarn dn tipleri ile imzalar tanmlanmaz.
Metotlar ar yklerken dikkat edilmesi gereken baz noktalar vardr. mzalar ayn olan metotlar tanmlanamaz Fonksiyonlar yklenebilir. yordamlarla, yordamlar da fonksiyonlarla ar
14
KISIM I:
String Fonksiyonlar
CompareTo Concat CopyTo EndsWith & StartsWith ToUpper & ToLower Join SubString Trim, TrimEnd, TrimStart
String fonksiyonlar, kullanld String deeri stnde verilen parametrelere gre deien ilemler yaparlar. Sonu olarak geriye dndrdkleri deerler, fonksiyonun ileyi amacna gre deiir. CompareTo
Bu fonksiyon, ilemin yaplaca deeri parametre olarak verilen deerle karlatrr. ki deer bir birine eitse 0, parametredeki deer alfabetik olarak nde ise 1, deilse -1 deeri dndrlr.
string yazi1 = "BilgeAdam"; string yazi2 = TextBox1.Text; switch ( yazi1.CompareTo( yazi2 ) ) { case 0: MessageBox.Show( "Yazlar birbirine
eit");
break; case 1: MessageBox.Show( yazi1 + ", " + yazi2 + " kelimesinden sonra geliyor"); break; case -1: MessageBox.Show( yazi1 + ", " + yazi2 + " kelimesinden nce geliyor"); break; } Concat
BLM 1
15
string kurum = "BilgeAdam"; Label1.Text = String.Concat("Kurum: ", kurum, "ubeler: ", "\n", "Fatih", "Bakrky", "Kadky", "Beikta", "Town Center"); CopyTo
BU fonksiyon ile bir String deikenin belli bir ksm, bir karakter dizisine kopyalanr. Ayrca kopyalanacak dizinin hangi indisten itibaren balanaca da belirtilir.
string yazi = "BilgeAdam"; char[] Karakterler = new char[ 11 ]; // Yaznn 5. karakterinden itibaren alnan 4 karakter, // karakterler dizisinin 3. indisinden balanarak // diziye kopyalanr. yazi.CopyTo( 5, Karakterler, 3, 4 ); // Karakterler dizisinin son hali: // _ _ _ A d a m _ _ _ _
Burada dikkat edilmesi gereken nokta, karakterlerin kopyalanaca dizinin byklnn yeterli olup olmaddr. Dizinin kopyalanmaya balanacak indisi ile kopyalanacak karakterlerin uzunluunun toplam, dizi byklnden kk olmaldr EndsWith & StartsWith Bu fonksiyonlar, String deikeninin, parametrede verilen String deeriyle baladn ya da bittiini gsterir. Geriye dn deeri Boolean tipindedir.
bool degisken.EndsWith(string deger) bool degisken.StartsWith(string deger) string HtmlTag = "<table>"; if ( HtmlTag.StartsWith( "<" ) & HtmlTag.EndsWith( ">" ) ) { MessageBox.Show( "Yazm doru"); } ToUpper & ToLower ToUpper, String deikenin iindeki kk karakterleri bye; ToLower,
Bir String dizisindeki elemanlar, parametre olarak verilen ayra karakteri ile birletirerek tek bir String deikeni dndrr.
16 string [] yazi = {"sim", "Soyad", "Adres", "Email", "Telefon"}; MessageBox.Show(String.Join(";", yazi)); // Sonu: sim;Soyad;Adres;Email;Telefon SubString
KISIM I:
Verilen bir String deerinin, bir blmn String olarak dndren fonksiyondur. stenen karakterlerin hangi indisten balayaca parametre olarak geilir. Bu durumda, balang karakterinden sona kadar okunur. Ancak fonksiyonun, ka karakter okunacan belirten bir parametre kabul eden ar yklemesi de vardr.
string yazi = "BilgeAdam"; MessageBox.Show (yazi.Substring(5)); // Sonu : Adam MessageBox.Show (yazi.Substring(5, 2)); // Sonu : Ad
Trim fonksiyonu, parametre olarak verilen bir karakteri, String deikeninin bandan ve sonundan kaldrr. TrimEnd fonksiyonu parametrede verilen karakteri String deikeninin sadece sonundan, TrimStart ise sadece bandan kaldrr. string yazi = "--------Merhaba--------"; MessageBox.Show (yazi.Trim("-")); // Sonu: Merhaba MessageBox.Show (yazi.TrimEnd("-")); // Sonu: --------Merhaba MessageBox.Show (yazi.TrimStart("-")); // Sonu: Merhaba--------
BLM 1
17
Matematiksel Fonksiyonlar
Abs Ceiling & Floor Cos, Sin, Tan Exp Log Max & Min Pow Sqrt
Uygulamalarda ou zaman matematiksel hesaplamalara ihtiya duyulur. Bu hesaplamalar kolaylatran hazr matematik fonksiyonlar vardr. Bu fonksiyonlar .NET Framework atsnda System.Math uzay alannn iinde tanmlanmtr.
Abs
Verilen bir saynn mutlak deerini dndrr. Dnen deer her durumda pozitif olacaktr.
Math.Abs(-123) // Sonu: 123
kk tamsayy verir. Floor fonksiyonu verilen saydan kk, en byk tam sayt verir.
Math.Ceiling(-12.231231) // Sonu: -12 Math.Ceiling(12.231231) // Sonu: 13 Math.Floor(-12.231231) // Sonu: -13 Math.Floor(12.231231) // Sonu: 12
18
KISIM I:
Cos, Sin, Tan Bu fonksiyonlar temel trigonometrik ilemleri gerekletirir. Cos fonksiyonu verilen derecenin kosinsn, Sin saynn sinsn ve Tan saynn tanjantn hesaplar. Parametre olarak verilen derece radyan (360 derece) deeri olarak kabul edilir.
double Derece = 90; Math.Cos(Math.PI * Derece / 180); Math.Sin(Math.PI * Derece / 180); Math.Tan(Math.PI * Derece / 180); Exp
Bu fonksiyon, e sabitinin deerini (yaklak 2,718281 deerini), parametrede verilen say ile ssn alr.
Math.Exp(4) // Sonu yaklak: 54,59815 Log
Logaritmik hesaplamalar iin kullanlan bir fonksiyondur. parametresi verilmezse saynn e tabannda logaritmasn alr.
Math.Log(1000, 10) // Sonu: 3 Math.Log(Math.E) // Sonu: 1
Taban
lk parametrede verilen bir saynn, ikinci parametredeki deer kadar ssn alr.
Math.Pow(10,3) // Sonu: 1000 Sqrt
BLM 1
19
Tarih ve zaman fonksiyonlar Date veri tipi zerinde hesaplamalar yapan fonksiyonlardr. Bu fonksiyonlar System.DateTime uzay alannda tanmldr.
CompareTo
String ifadelerinde olduu gibi, tarih ve zaman deerleri zerinde de karlatrma yaplabilir. CompareTo fonksiyonu, ilem yaplan tarih ile parametre olarak verilen tarihi karlatrr. Parametredeki tarih kkse 1, bykse -1 veya eitse 0 dndrr. DateTime d = #03/23/2002#; MessageBox.Show (d.CompareTo(Now).ToString()); DaysInMonth
Verilen bir yln artk yl olup olmadn hesaplar. Dn deeri True ya da False tipindedir.
DateTime.IsLeapYear(1200)) // Sonu: True
20 Parse
KISIM I:
Parametrede verilen String bir ifadeden Date veri tipine evrim ilemini yapar. String ifadesinde verilen ifadenin doru bir tarih ve zaman tipinde olmas gerekir.
DateTime.Parse("23.04.2005 20:20:00") DateTime.Parse("22 July 2005 02:00 PM") DateTime.Parse("18 Haziran 1980")
ngilizceden farkl bir dilde girilen ay isimlerinin tarih tipine evrilmesi iin, uygulamann kltr o dilde ayarlanmas gerekir. // Uygulama kltr Franszca yaplr. FR"); Application.CurrentCulture = New Globalization.CultureInfo("fr// temps deikeninin deeri 23/05/2005 olacaktr. DateTime temps = DateTime.Parse("23 Mai 2005"); // Bu kod hata verecektir. DateTime zaman = DateTime.Parse("23 Mays 2005");
ToLongDateString & ToLongTimeString Verilen tarihi uzun tarih ve zaman formatnda gsteren fonksiyonlardr.
DateTime d = #1/29/2005 12:59:22 PM#; d.ToLongDateString() // Sonu: 29 Ocak 2005 Cumartesi d.ToLongTimeString() // Sonu: 12:59:22
ToShortDateString & ToShortTimeString Verilen tarihi ksa tarih ve zaman formatnda gsteren fonksiyonlardr.
DateTime d = #1/29/2005 12:59:22 PM#; d.ToShortateString() // Sonu: 29 Ocak 2005 d.ToShortTimeString() // Sonu: 12:59
BLM 1
21
Offline Yardm
Offline Yardm
IntelliSense Index, Search, Contens, Dynamic Help Uygulama: String.Format fonksiyonunun aratrlmas
Uygulama gelitirirken, kodlarn yazlmasnda IntelliSense aracndan byk lde faydalanr. IntelliSense, bir kodun yazlmas srasnda ald zaman, yazlan kodlarla balayan tm metot, zellik ve nesneleri programcya sunar. O anda zerinde bulunan enin aklamas, ald parametreler gibi bilgileri de gsterir.
22
KISIM I:
bulunduu zaman yeni bir alma sayfasnda gsterilir. Bu sayfada aranan kavram ile ilgili detayl bilgiler ve rnekler mevcuttur. rnek: String veri tiplerinin yazdrlmasn deiik formatlarda yazdrlmas String.Format fonksiyonu ile kullanlr. 1. Visual Studio ortamnda bir proje an ve kod sayfasnda String.Format yazn. Fonksiyonu yazdktan sonra parantezi an ve IntelliSense aracnn kard meny inceleyin. Fonksiyon ka parametre alabiliyor? Aa ve yukar oklarla men iinde ilerleyerek fonksiyonun ar yklenmi durumlarn inceleyin. Fonksiyonun ka tane ar yklemesi yazlm? 2. Format yazsnn stne geldikten sonra F1 tuuna basn ve dinamik yardmn at sayfaya bakn. Bu sayfa fonksiyonun tm ar yklemelerini gsterir. 3. Parametre olarak String ve params Object alan fonksiyona tklayn. kan sayfa fonksiyonun detaylarn listeler. lk olarak fonksiyonun sz dizimi verilmitir. Burada parametre isimleri ve tipleri zerinde balantlar grnr. Bu balantlar ile ilgili yardm dosyas alr.
Parameters blmnde bu fonksiyonun ald parametrelerin
gelebilecek hatalar listelenir. blm, fonksiyonun kullanm yerleri, parametrelerin nasl kullanlaca, parametreler kullanlrken dikkat edilmesi gereken yerler, balantl konular gibi fonksiyon hakknda detayl bilgi verir.
Remarks Example
verilir.
Requirements blmnde, fonksiyonun alabilmesi iin
BLM 1
23
sunar.
Remark blmndeki tanmlamalardan ve Examples blmndeki rneklerde
fonksiyonun nasl kullanldn inceleyin. 4. Kod sayfanza gein ve String.Format fonksiyona bir rnek yazn.
int ocak = 1000; int subat = 1100; MessageBox.Show(String.Format("Ocak ay maa {0:C} -- ubat ay maa: {1:c}", ocak, subat));
5. Formatlama ilemleri hakknda daha fazla bilgi almak iin, fonksiyonun yardm sayfasna gelin ve Remarks blmnde Formatting Types balantsna tklayn. Ya da Index panelinden Formatting Types yazn ve yardm sayfasn an. kan sayfada her veri tipi iin kullanlan formatlama seenekleri vardr. Numeric Format Strings balantsna tkladktan sonra alan sayfada NumberFormatInfo balantsna tklayn. Format Character tablosunda deiik formatlama seeneklerini inceleyin ve kodunuzda deneyin. 6. Web ara ubuundan geri tuuna basarak veya Alt Sol Ok ksa yolu ile String.Format Method balkl ilk atnz sayfaya dnn. 7. Parametre olarak IFormatProvider, String ve params Object alan fonksiyon tanmna tklayn. Fonksiyonun kullanmn inceledikten sonra, bu kullanma bir rnek yazn.
MessageBox.Show (String.Format(New Globalization.CultureInfo("it-IT"), "Bugn: {0:dddd MM yyyy}", DateTime.Now));
8. Bu rnekte uygulamann kltr ayarlar deitirilmeden, tarihin istenen kltr ayar ile gsterilmitir. Kltr ayarlarnn tanmlanmasn incelemek iin Index yardm panelinde CultureInfo yazn ve about CultureInfo Class indeksini sein. kan Index Result penceresinde CultureInfo Class indeksini sein. 9. Bu sayfada kan kltr isimlerini rneinizde kullanarak deiik sonular inceleyin. NOT: Trke dil ailesi iin Globalization.CultureInfo("TR-tr")
kullanlr
24
KISIM I:
Online Yardm
Online Yardm
Online MSDN Ktphaneleri Start Page Online Resources Uygulama: Undo yordamnn aratrlmas
MSDN ktphanelerinde offline olarak yardm almak hzl ve etkili bir yntemdir. Ancak bu yardm dosyalarnn gncellenmesi iin MSDN srmnn yenilenmesi gerekir. Online yardm MSDN ktphanelerinin internet ortamnda yaynlanmasdr. Yeni rnekler, makaleler ve dzeltmelerle gncellenen bu yardm dosyalarna http://msdn.microsoft.com adresinden ulalabilecei gibi, Visual Studio ortamndan da bu dosyalar iinde arama yaplabilir. rnek: Windows uygulamasnda kullanlan bir metin kutusunda Geri Al (Undo) ilemi yaplmak isteniyor fakat fazladan kod yazlmak istenmiyor. Bunun iin .NET Framework atsnda hazr bir metodun olup olmad kontrol edilmesi gerekir. Online yardm ile gerekli arama yapldktan sonra kan sonular yorumlanr. 1. Balang sayfasn (Start Page) an ve Online Resources sekmesine gelin. 2. Sol paneldeki menden Search Online mensne gelin ve Search For altndaki metin kutusuna TextBox Undo yazn. Sonularn MSDN Online iinde hangi duruma gre filtrelenebildiini gsteren balantlar kar. Sonular Tm MSDN iinde, MSDN kod ve kardan yklemelerde, MSDN teknik makalelerinde, Microsoft bilgi veri kaynanda,
BLM 1
25
3.
4.
5.
6.
Microsoft.com genelinde filtrelenebilir. Search results for All of MSDN balantsna tklayn ve kan sonular inceleyin. Aranan kaynak .NET Framework iinde kullanlabilmesi istendii iin TextBoxBase.Undo Method (.NET Framework) yardm konusuna tklayn. MSDN Online ktphanelerinin sayfa dzeni, ierii offline yardm ile ayndr. TextBoxBase taban snfnn Undo metodunu inceleyen bu yardm sayfasnda, metot tanmlamas, Remarks, Examples, Requirements ve See Also blmleri grlr. Examples blmnde Visual C# kodlarnn altnda Undo metodunun kullanmn inceleyin. Undo yapldktan sonra silinen kelimelerin bir listede tutulmas ve listeye ekleme ileminin kolay bir ekilde yaplmas isteniyor. Bunun iin Sol panelde bulunan menlerin stndeki Search For metin kutusuna ArrayList yazn ve kan sonularda ilk balantya tklayn. ArrayList snfnn Count, Item zelliklerini ve Add metodunu inceleyin. Ve uygulamanz tamamlamak iin bu zellikleri kodunuzda kullann.
ArrayList silinenler = New ArrayList; Void GeriAl() { // Metin kutusunda geri alnacak bir veri varsa if (TextBox1.CanUndo) { // Eski deerler listeye eklenir. silinenler.Add(TextBox1.Text); TextBox1.Undo(); GeriAlinanKelimeler(); } } // Listeleme ilemini yapan yordam void GeriAlinanKelimeler() { ListBox1.Items.Clear(); for (int i = 0; i < silinenler.Count; i++) { // i indisli Item, liste kutusuna eklenir. ListBox1.Items.Add(silinenler.Item(i)); } }
26
KISIM I:
Projenin Almas
1. KelimeOyunu isminde bir Window projesi an ve forma listedeki kontrolleri ekleyin.
btnBasla ve btnGiris isminde iki Button txtKelime isminde bir TextBox lblMesaj isminde bir Label
tmrSure isminde bir Timer 2. Projenizin kod sayfasna gein ve uygulama boyunca kullanlacak global deikenleri tanmlayn.
// Kontrol edilecek kelime public string kelime; // Oyunun seviyesi public byte OyunSeviyesi = 1; // Timer kontrolnde kullanlacak sre public int kalanSure = 5; // Bilinen kelime says public int tekrar = 0; 3. Uygulamaya giri Sub Main yordamndan yaplr. Bu yordamda
kullancdan, formun balnda grntlenecek bir kullanc ad istenir. Eer kullanc ad bo girilirse form yklenmeden uygulamadan klr.
// Uygulamann giri noktas public static void Main() { string KullaniciAdi = null; KullaniciAdi = Microsoft.VisualBasic.Interaction.InputBox( "Kullanc Ad girin:", "", "", -1, -1 ); if ( KullaniciAdi == "" ) { return; } Form1 oyun = new Form1(); oyun.Text = KullaniciAdi + " yaryor"; oyun.ShowDialog(); }
Parametreler
lev Zaman
TextBox Focus verir
sfrlar ve kontrolne
BLM 1
27
SeviyeAtla Kontrol
Oyunun artrr.
seviyesini
kelime2
kinci kelimenin, ilk kelimenin harfleriyle baladnn kontrol yaplr. Tekrar deerinin, seviye kadar ss alnr.
PuanHesapla
Byte
seviye,
Short
OyunuBaslat yordam
public void OyunuBaslat() { Temizle(); kelime = TextBox1.Text; tmrSure.Start(); SonrakiKelimeBilgi(); }
OyunuBitir yordam
public void OyunuBitir( string neden ) { tmrSure.Stop(); Bilgi( neden ); Temizle();
int puan; puan = PuanHesapla( OyunSeviyesi, System.Convert.ToInt16( tekrar ) ); MessageBox.Show( "Puannz: " + puan); }
Bilgi yordam
public void Bilgi( string kelime ) { Label1.Text = kelime; }
SonrakiKelimeBilgi yordam
28
KISIM I:
public void SonrakiKelimeBilgi() { string mesaj = null; mesaj += Microsoft.VisualBasic.Strings.Right( kelime, OyunSeviyesi ); mesaj += " ile balayan bir kelime girin"; Bilgi( mesaj ); }
SeviyeAtla yordam
public void SeviyeAtla( byte seviye ) { OyunSeviyesi = seviye; OyunuBitir( seviye + ". seviyeye geildi" ); SonrakiKelimeBilgi(); }
) {
Kontrol fonksiyonu
public bool Kontrol( string kelime1, string kelime2
);
// kinci kelimenin banda oyun seviyesi kadar // karakter alnr. string bas = kelime2.Substring( 0, OyunSeviyesi // kinci kelime, ilk kelimenin sonu ile balyorsa // doru girilmitir. True deeri dner. return kelime1.EndsWith( bas );
PuanHesapla yordam
public int PuanHesapla( byte seviye, short tekrar ) { return Math.Pow( tekrar, seviye ); }
Olaylarn yazlmas
1. tmrSure kontrolnn Tick olayna kalan sreyi kontrol eden kodlar yazn
private void tmrSure_Tick( System.Object sender, System.EventArgs e ) { if ( kalanSure <= 0 ) { OyunuBitir( "Sreniz doldu" ); } else { kalanSure -= 1; } } 2. btnBasla dmesinin Click olayna, oyunu balatan yordam yazn private void btnBasla_Click( System.Object sender, System.EventArgs e ) { OyunuBaslat(); }
BLM 1
29
3. btnGiris dmesinin Click olayna, girilen kelimeyi alp kontrolleri yapan kodu yazn. Burada dikkat edilmesi gereken nokta, tekrar saysnn seviye ile doru orantl olmasdr.
private void btnGiris_Click( System.Object sender, System.EventArgs e ) { string girilen = TextBox1.Text; if ( !( Kontrol( kelime, girilen ) ) ) { string neden = null; neden = "Girilen kelime, ilk kelimenin son neden += OyunSeviyesi + " harfi ile
"; balamyor";
OyunuBitir( neden ); } else if ( tekrar > 5 * OyunSeviyesi ) { SeviyeAtla( System.Convert.ToByte( OyunSeviyesi + 1 ) ); } else { tekrar += 1; kelime = girilen; SonrakiKelimeBilgi(); Temizle(); } }
30
KISIM I:
zet
Sub Function kullanm .NET Tarih, String, Matematik fonksiyonlar Online Offline yardmn etkin kullanm
1. Yordam ile fonksiyon arasndaki fark nedir? 2. Main yordam formlarn ve modllerin iinde nasl tanmlanr. Kendi Main yordamnz yazn. 3. Yordam ve fonksiyonlar uygulamalarda kod tekrarn nasl nler? 4. Yordam ve fonksiyonlarn snrsz parametre almasn salayan params neden sonda tanmlanr? 5. Farkl kltrlerde tarih, zaman, metin deerlerini gstermek iin gerekli olan snflar ve fonksiyonlar nelerdir? 6. Yordam ya da fonksiyon ierisiden yordam ya da fonksiyonlar arlabilir mi? Uygulamasn yazn. 7. Bir yordam ya da fonksiyon kendisini arabilir mi? (Recursive) Uygulamasn yazn.
Hedefler
Deer Veri Tipleri Referans Veri Tipleri Organizasyon yaps ByVal ByRef
.NET iinde tanmlanabilen veri tipleri temel (primitive) veri tipleri ya da kullancnn tanmlad veri tipleridir. Temel veri tipleri .NET iinde tanmlanm ve baz nemli zellikleri olan tiplerdir. rnein 32 bitlik bir sayy temsil eden Int32 deer tipi temel bir tiptir. Bu temel tipin zerinde aritmetik ilemler yaplabilir. struct olarak tanmlanan kullanc veri tipleri zerinde aritmetik ilemler yaplamaz. Temel ve kullanc tanml veri tipleri, deer tipi ve referans tipi olarak ikiye ayrlr. struct bir deer tipi, Class ise bir referans tipidir. Deer tipleri bellein stack blgesinde, referans tipleri heap blgesinde depolanr. Deer tiplerinin oluturulmas ve silinmesi, sadece deerleri zerinde ilem yapld iin kolaydr. Deer tipinin mr bittii zaman stack yapsndan hemen kaldrlr. Referans tiplerinin oluturulmas, yok edilmesi ekstra bir performans gerektirir. Ancak iki veri tipinin de birbirlerine gre avantajlar vardr. Bu modl tamamlandktan sonra: Temel ve kullanc tanml deer tiplerini tanyacak, Temel ve kullanc tanml referans tiplerini tanyacak, Veri tiplerinin bellei kullanm renecek,
ref kavramn renecek,
Deer Tipleri
Built-In Deer Tipleri
.NET iinde tanml veri tipleridir.
// Visual C# tanm deer tipi short sayi = 10; // .NET Framework tanm deer tipi Int16 sayi2 = 10;
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.
.NET Framework
System.Boolean System.Byte System.Char System.Decimal
Deer
True / False
8 bit uzunluunda say 16 bit uzunluunda Unicode karakter 128 bit say uzunluunda
Konu: 1
3 Double int Long Short float System.Double System.Int32 System.Int64 System.Int16 System.Single
64 bit uzunluunda kayan tipte say 32 bit uzunluunda say 64 bit uzunluunda say 16 bit uzunluunda say 32 bit uzunluunda kayan tipte say
// Visual C# tanm deer tipi short sayi = 10; // .NET Framework tanm deer tipi Int16 sayi2 = 10;
tipleri tanmlandklarnda bu constructor ile oluturulur. Ancak bir veya daha fazla parametre alan constructor metotlar kullanlabilir.
struct veri tipleri Class yapsna benzer, ancak deer tipi olduklar
Referans Tipleri
Built-In Referans Tipleri
Object, Built-In referans tipidir. Array, dizilerin Built-In referans tipinde olmasn salar.
Referans tipindeki deerlere eriimler, bu deerlerin bellekte oluturulduu yerin adresi ile salanr. Bu deerler bellekteki heap blgesinde oluturulur. Referans tipindeki deikenlerin, baka deikenlere atama ilemleri bellekteki adreslerin kopyalanmas ile gerekleir. Dolaysyla ayn adresteki veriyi gsterir. Bu iki deikenden herhangi biri deitiinde, dieri de deimi olacaktr. Snf ve dizi yaplar referans tipleridir. Dizilerin tuttuklar deerlerin says ou zaman nceden bellidir ama boyutlar ve uzunluklar deiebilir. Dolaysyla dizi deikenlerinin ismi, elemanlarnn bellekte tutulduklar ilk yerin adresini temsil eder. Ancak dizilerin tuttuklar deerler referans tipinde olmayabilir.
Konu: 1
5 // Parametre olarak verilen dizinin balang adresidir. // Dolaysyla, bu adres blgesinde tanml // deerlere ulalabilir.
public void Goruntule( int[] dizi ) { for ( i=0; i<=dizi.Length - 1; i++ ) { Label1.Text += dizi[ i ]; } }
struct veri tipi, deer tipi olduu iin, tanmlandklar anda bellekte stack
blmnde oluturulur. Bellekte ayrlan yer struct iinde tanml olan Built-in veri tiplerinin toplam boyutu kadardr. Visual C# .NET dilinde struct veri tipleri New anahtar kelimesiyle de oluturulabilir. Ancak bu constructor metotlar parametre alacak ekilde tanmlanmaldr. Varsaylan parametresiz constructor metotlar CLR tarafndan ilenir. Dikkat edilmesi gereken bir durum da, New ile oluturulan deikenler yine bir deer tipidir ve stack alannda tutulur. NOT:
Classlardan nesne olutururken New anahtar kelimesi kullanlr ancak bu nesneler
public struct Ogrenci { public string adi; public string soyadi; public Ogrenci( string isim, string soyisim ) { this.adi = isim; this.soyadi = soyisim; }
Konu: 1
7 } public void Test2() { // 1 - renci deeri tanmland srada // stack alannda yer ayrlr Ogrenci Ali = new Ogrenci(); // 2 - New ile tanmlanan deikenler de stack // alannda oluturulur. // Fark, bu deikenin balang deeri almasdr. Ogrenci Veli = new Ogrenci( "Veli", "Mehmet" ); // 3 - Parametre olarak sipari nesnesinin // adresi verilir Goruntule(Veli); End Sub public void Goruntule( Ogrenci ogr ) { MessageBox.Show (ogr.adi + " " + ogr.soyadi); } 1. Ali deikeni tanmlanrken Stack yaps
Deiken 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
Degisken ogr.soyadi Deer = Mehmet Deiken ogr.adi Deer = Veli ogr Ogrenci Deiken Veli.soyadi Deer = Mehmet Deiken Veli.adi Deer = Veli Veli Ogrenci Deiken Ali.soyadi Deer = Deiken Ali.adi Deer = Ali Ogrenci
Test isimli yordamdan klnca, bu deikenler oluturulduklar srayla stack yapsndan kaldrlr.
Konu: 1
Heap
Stack
Classlardan (Snf) nesneler oluturulduklar zaman bu nesnelerin deerleri heap blgesinde tutulur. Ancak bu nesneleri gsteren bir adres tutucusu oluturulur ve bu adresin deeri de stack alannda depolanr.
public class Siparis { public DateTime Tarih; public string AliciIsmi; public string Urun; public Siparis() { } public Siparis( DateTime Tarih, string Isim, string Urun ) { this.Tarih = Tarih; this.AliciIsmi = Isim; this.Urun = Urun; } } public void Test() { // 1 - Sipari referans oluturulur Siparis ilkSiparis = null; // 2 - Yeni bir nesne oluturulup,adresi
10
// bu referansa aktarlr ilkSiparis = new Siparis( DateAndTime.Now, "Enis Gnesen", "Visual Studio.NET 2003" ); // 3 - Yeni bir nesne daha oluturulur ve adresi // deikene aktarlr ilkSiparis = new Siparis( DateAndTime.Now.AddYears( -1 ), "Enis Gnesen", "Visual Studio.NET 2002" ); // 4 - Yeni bir referans ve nesne oluturulur Siparis ikinciSiparis = new Siparis(); // 5 - ki deikenin ayn bellek alann gstermesi // salanr ilkSiparis = ikinciSiparis; // 6 - Bu alandaki rn ismi deitirilir ilkSiparis.Urun = "BilgeAdam Yazlm Uzmanl"; // 7 - Parametre olarak sipari nesnesinin // adresi verilir Goruntule( ikinciSiparis ); End Sub public void Goruntule( Siparis parametreSiparis ) { MessageBox.Show (parametreSiparis.Urun); } 1. ilkSiparis tanmlanrken Stack Alan
Heap Alan
Nesne
Adres Bilgisi
2.
Heap Alan
Konu: 1
11
Nesne Siparis Tarih = 10.05.2005 AliciIsmi = Enis Gnesen Urun = Visual Studio.NET 2003
3.
Heap Alan
Nesne 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
4.
Heap Alan
12
AliciIsmi = Urun = 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
5.
0x00000056
0x00000012
Deer = 0x00000088 (Gsterdii adres ikinci referans ile ayn olur) ilkSiparis
sipari
Heap Alan
Nesne Siparis Tarih = AliciIsmi = Urun = 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
6.
gsteren
referans
Konu: 1
13
Heap Alan
Nesne Siparis Tarih = AliciIsmi = Urun = BilgeAdam Yazlm Uzmanl 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
7.
0x00000056 (Referanslarn kaybetmi nesneleri, Garbage Collector bellekten siler) 0x00000012 (Referanslarn kaybetmi nesneleri, Garbage Collector bellekten siler)
Heap Alan
14
Sonu olarak gsterilen deer, heap alannda 0x00000088 adres numaral nesnenin rn ismi olur. Parametre olarak verilen nesneler heap alannda tekrar oluturulmazlar. Referans olarak geen deikenler aslnda deer tipleridir. Ancak nesnenin tm deil sadece adres deerinin kopyas oluturulur.
ByVal ByRef
ByVal
Parametreye, deikenin deeri geer.
public void ElemanDegistir( int[] dizi, int index, int yeniDeger ) { dizi[ index ] = yeniDeger; }
ByRef
Parametreye, deikenin adresi (referans) geer.
public void Ekle( ref string Kelime, string eklenecek ) { Kelime = Kelime.Insert( 0, eklenecek ); }
Fonksiyon ve yordamlara parametre verilirken varsaylan olarak, deikenlerin deerleri verilir. Parametre olarak verilen deikenler zerinde deiiklik yaplmas iin bu parametrelerin bulunduu adres bilgilerine ihtiya vardr. Referans tipindeki deerler parametre olarak geildiklerinde, referanslar verilir. Ancak deer tipleri parametre olarak verildiklerinde bu deerler kopyalanr ve asl deikenin tuttuu deere ulalamaz. Bu karklklar zmek iin, yordamlarda parametreler ref olarak belirtilir.
Konu: 1
15
Normal parametre olarak verilecek deikenin deeri ile ilem yaplacan belirtir. Dolaysyla bu parametrenin deeri deitirilemez.
// Deiecek olan kelime normal verilmitir public void Ekle( string Kelime, string eklenecek ) Kelime = Kelime.Insert( 0, eklenecek ); } private void Button1_Click1( System.Object sender, System.EventArgs e ) { string mesaj = "Hello"; Ekle( mesaj, " World" ); MessageBox.Show (mesaj); } mesaj deikenin deeri, yordama deer olarak verilmitir. Dolaysyla
yordamn zerinde alt deer, mesajn bir kopyasdr. Bellek alannda fiziksel olarak farkl yerlerde dururular. Yani deiiklik yaplan deer, sadece bir kopyadr. Yordam sonlandnda kopya olarak oluturulan deer silinecek ve asl deer deimemi olarak kalacaktr. Bu durumda parametre olarak mesaj deikeninin adresi verilmelidir. Dolaysyla yordamdaki parametrenin ref olarak tanmlanmas gerekir.
public void Ekle2( ref string Kelime, eklenecek ) { Kelime = Kelime.Insert( 0, eklenecek ); } string
Parametre olarak referans tipinde bir deiken verilirse bir fark olmaz. Referans tipleri, nesnelerin bulunduu heap alanlarnn adresini tutar. Dolaysyla normal tanmlanan parametreye referans tipinin deeri (adres bilgisi) kopyalanr. Bu kopya zerinden ayn adres alannda deiiklik yaplr.
// Parametre ByVal ile tanml olsa dahi, deitirir // dizinin belirtilen indexteki deeri, // adres olarak eriilir. public void ElemanDegistir( int[] dizi, int index, int yeniDeger ) { dizi[ index ] = yeniDeger; } private void Button1_Click( System.Object sender, System.EventArgs e ) { int[] sayilar = new int[ 3 ]; sayilar[ 0 ] = 111; sayilar[ 1 ] = 222; sayilar[ 2 ] = 333; ElemanDegistir( sayilar, 1, 1000000 ); MessageBox.Show( sayilar[ 1 ] ); // Sonu = 1000000
16 }
zet
Deer Veri Tipleri Referans Veri Tipleri Organizasyon yaps ByVal ByRef
1. Deer deikenleri ve referans deikenleri arasndaki fark aklaynz. Her iki deiken tipinin de yer ald parametreleri ieren bir yordam yazn. Deikenlerin verilerinin deiip deimediinin gzlemleyin. 2. struct yapsn aklaynz. Kompleks bir veri tipi stucture yapsnda kodlayn. Yazlan veri tipinin uzunluunu hesaplayn.
Hedefler
Listeleme Kontrolleri
ListBox, TreeView, ComboBox
Resim Kontrolleri
PictureBox, ImageList
Dzenleme Kontrolleri
TabControl, Panel, HScrollBar, VScrollBar
Dinamik Kontroller
alma annda eklenen kontroller
Visual C#.NET ile Windows Tabanl Programlama modlnde, Windows Formlarna ve kontrollerine giri yaplmt. .NET atsnda, Windows uygulamalarnn grnm ve kullanm zenginliini artrmak iin birok kontrol vardr. Visual Studio ile varsaylan olarak gelen kontrollerin dnda birok kontrol de Windows uygulamalarna eklenebilir. Bu modl tamamlandktan sonra:
ListBox, TreeView, ComboBox gibi listeleme kontrollerini tanyacak, PictureBox, ImageList gibi resim kontrollerini tanyacak, TabControl, Panel, HScrollBar, VScrollBar gibi dzenleme
kontrollerini tanyacak,
DateTimePicker, MonthCalendar gibi zaman ve tarih kontrollerini
Formlar
Kullanc ile iletiimi salar Show ve ShowDialog ile birden fazla form alr. Balang formu projenin zelliklerinden ayarlanr.
Windows uygulamalar, kullanc ile iletiimi Form nesneleri ile salar. Formlar, grnm zellikleri, pencere stili deitirilerek ve zerine kontroller eklenerek zelletirilir. Ayrca birden ok form nesnesi kullanlarak, uygulamalar zenginletirilir.
Konu: 1
snfndan tremi snflardr. Dolaysyla yeni bir Form oluturmak iin, istenen Form snfndan bir nesne oluturulmas yeterlidir.
frmYeni yeniForm = New frmYeni;
Yeni oluturulan formlarn gsterilmesi, formun Show ve ShowDialog metotlar ile yaplr. ShowDialog metodu, form gsterildikten sonra, kapanana kadar dier formlara eriimi engeller. ShowDialog metodundan sonra yazlan kodlar, form kapandktan sonra altrlr.
frmYeni yeniForm = New frmYeni; yeniForm.ShowDialog(); // Bu kodlar yeniForm kapandktan sonra altrlr MessageBox.Show(Form kapand...) ; ShowDialog ile gsterilen formlar, hangi durum ile kapandklarn belirten bir DialogResult sonucu dndrrler. Bu kullanm MessageBox.Show hazr
Formun hangi diyalog sonucu ile dneceini, zerindeki Button kontrollerinin DialogResult zellii ile belirlenir. Eer dmenin bu zellii Yes olarak ayarlanmsa, Form bu dmeye baslp kapand zaman, DialogResult.Yes deerini dndrr. rnein bir Windows uygulamasnn, kullancnn girdii verilere gre deiik formlarn amas iin Main yordamndan faydalanlr.. Bu yordamda, kullancnn istedii form dinamik olarak yklenir.
public void Main1() { string grup = null, parola = null; grup = Interaction.InputBox( "Kullanc grubu:", "", "", -1, -1 ); parola = Interaction.InputBox( grup + " grubuna giri iin parola girin:", "", "", -1, -1 ); // // // // Gruplarn parolas kontrol edilir ve ilgili grubun formu alr. Eer parola veya grup ismi yanl girilirse hata formu yklenir. switch ( grup.ToUpper() ) { case "SATI": if ( parola.ToUpper() != "SATIS_PAROLA" HataFormuYukle( "Sat departman } else {
) {
parolas yanl!" );
frmSatis(); }
break; case "YNETM": if ( parola.ToUpper() != "YONETIM_PAROLA" ) { HataFormuYukle( "Ynetim departman parolas yanl!" ); } else { frmYonetim yonetimDepartmani = new frmYonetim(); yonetimDepartmani.ShowDialog(); } break; default: HataFormuYukle( grup + " isminde bir grup bulunamad" ); break; } } // Hata formu, verilen parametredeki mesaj // gsterecek ekilde ayarlanr ve yklenir. public void HataFormuYukle( string mesaj ) { frmHata hataFormu = new frmHata(); hataFormu.lblHataMesaji.Text = mesaj; hataFormu.ShowDialog(); }
Ayn Windows projesi iinde alan formlar almadan nce kontrollerinin zellikleri deitirilebilir. rnein hata formu gsterilmeden nce, zerindeki Label kontrolnn Text zellii ilgili hata mesajn gsterecek ekilde ayarlanabilir.
Form zellikleri:
zellik
AcceptButton
Deer Tipi
Button
Aklama Form zerinde Enter tuuna basld zaman tklanacak Button kontrol Form zerinde Esc tuuna basld zaman tklanacak Button kontrol Formun effaflk oran (0 -1 aras)
CancelButton
Button
Opacity
Double
Konu: 1
Ekran Kapla dmesinin grnrl Simge Durumunda Klt dmesinin grnrl ve Minimize dmelerinin tmnn grnrl
Maximize Close,
ControlBox
Boolean
StartPosition
FormStartPosition
Form ald zaman, ekran zerindeki konumu Formun pencerelerin gzkmesi tm zerinde
TopMost
Boolean
Formun kenar stili Formun alabilecei maksimum byklk Formun alabilecei minimum byklk
Form Olaylar:
Olay
Click Closing Closed Load KeyDown
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 kaldrlmas gerekleir tuun ile
KeyUp
Form Metotlar:
Metot
Hide
Aklama Formu
Visible
False
Formu kapatr. Eer form balang formuysa uygulama sonlanr Formu gsterir. Hide ile gizlenmise, Visible zellii True yaplr. Formu diyalog kutusu olarak gsterir.
Show
ShowDialog
rnek: Bir Windows formunun kapanmasn ynetmek iin, o formun Closing olayna ve Close metoduna ihtiya vardr. Kapanmasn yavalatmak iin bir Timer kontrol kullanlr ve formun effafl yavaa azaltlr.
private void Form1_Load( System.Object sender, System.EventArgs e ) { this.Text = "Hogeldiniz... " + DateTime.Now; } private void Form1_Closing( object sender, System.ComponentModel.CancelEventArgs e ) { // Kapanma olay gereklemeden nce iptal edilir e.Cancel = true; Timer1.Start(); } private void Form1_KeyDown( object sender, System.Windows.Forms.KeyEventArgs e ) { // Shift-Ctrl-F3 tular basldnda uygulama kapanr if ( e.Shift & e.Control & e.KeyCode == Keys.F3 ) { this.Close(); } } private void Timer1_Tick( System.Object sender, System.EventArgs e ) { // Formun grnmez hale gelince uygulama kapanr if ( this.Opacity == 0 ) { Application.Exit(); } else { this.Opacity -= 0.1; } }
Konu: 1
Label
Label
Kullancya bilgi veren etikettir.
etikettir.
Label zellikleri
zellik
TextAlign
Deer Tipi
ContentAlignment
BorderStyle
BorderStyle
Kontroln kenar stilidir. FixedSingle deeri, kontroln kenar izgilerini gsterir. Fixed3D deeri, kenarlarn boyutlu olmasn salar Etiket zerinde grntlenmek istenen resmi tutar Etiket zerindeki resmin nerede duracan
Image
Drawing.Image
ImageAlign
ContentAlignment
belirler
RightToLeft RightToLeft
Etiket zerindeki yaznn ynn belirler. Eer Yes deerini alrsa, yazlar sadan sola gsterilir
Label1.BorderStyle = BorderStyle.Fixed3D; // Visual Studio klasr altndaki simgeler kullanlabilir Label1.Image = Image.FromFile("C:\Program Files\ _ Microsoft Visual Studio .NET 2003\Common7\Graphics\icons\Flags\FLGTURK.ICO"); Label1.ImageAlign = ContentAlignment.MiddleRight; Label1.RightToLeft = RightToLeft.Yes; Label1.Text = "Trke";
NOT:
ramen sol tarafta gzkr. Bu durum, RightToLeft zelliinin Yes olarak atanmasndan kaynaklanr.
Konu: 1
TextBox
TextBox
Kullancdan bilgi almak iin kullanlr.
TextBox zellikleri
zellik
MultiLine
Deer Tipi
Boolean
Aklama Metin kutusuna birden fazla satrda deer girilebilmesini salar. False durumunda ise, metin kutusunun ykseklii deitirilemez Metin kutusunda kaydrma ubuklarnn grnmesi. Varsaylan olarak kaydrma ubuu grntlenmez, ancak Horizontal, Vertical kaydrma ubuklar ya da ikisi birden gsterilebilir. Metin kutusuna parola girilecekse, girilen
ScrollBars
ScrollBars
PasswordChar
Char
10
Metin kutusuna girilen deerlerin, satr sonlandnda bir alt satra geilmesini belirtir. Eer MultiLine zellii False ise, alt satrlar tanml olmayaca iin bu zelliin bir etkisi grlmez. Metin kutusunun alabilecei maksimum karakter saysn belirtir. 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.
MaxLength
Integer
ReadOnly
Boolean
CharacterCasing
CharacterCasing
TextBox Olaylar
Olay
TextChanged
TextBox Metotlar
Metot
Cut Copy Paste
Aklama Seilen karakterleri siler ancak hafzada tutar. Seilen kopyalar Hafzaya karakterleri karakterleri alnan metin
Konu: 1
11
kutusuna yaptrr
Clear SelectAll
rnek: Form zerinde girilen deerlere gre tek saylarn hesaplanmas ve grntlenmesi ilemi iin TextBox kontrolnn birok olayndan ve zelliinden yararlanlr.
private void Form1_Load( System.Object sender, System.EventArgs e ) { // Form yklenirken kontrollerin ayarlanmas: txtAltSayi.MaxLength = 2; txtUstSayi.MaxLength = 4; txtSayilar.Multiline = true; txtSayilar.ScrollBars = ScrollBars.Vertical; txtClipBoard.ReadOnly = true; txtClipBoard.Multiline = true; } // Bu olay hem txtUstSayi hem de txtAltSayi kontrolnn // TextChanged olaynda gerekleir. // Handles ifadesinden sonra kontroller virglle ayrlmtr private void txtUstSayi_TextChanged( System.Object sender, System.EventArgs e ) { TekSayiYazdir(); } public bool Kontrol() { // Metin kutularna say girildiyse if ( IsNumeric( txtUstSayi.Text ) & IsNumeric( txtAltSayi.Text ) ) { // ve alt limit 0 dan byk, ve st limitten kkse int ust = txtUstSayi.Text; int alt = txtAltSayi.Text; if ( ust > alt & alt > 0 ) { // giri doru yaplmtr return true;
12 } }
// Kod buraya gelirse, giri yanl yaplmtr return false; } public void TekSayiYazdir() { if ( !( Kontrol() ) ) { return; } txtSayilar.Clear(); int alt = txtAltSayi.Text; int ust = txtUstSayi.Text; // Saylar metin kutusuna, tek saylarn yazdrlmas for ( i=alt; i<=ust; i++ ) { if ( i % 2 == 1 ) { txtSayilar.Text += i + Constants.vbCrLf; } } } // Saylarn txtClipboard isimli metin kutusuna kaydedilmesi: private void btnKaydet_Click( System.Object sender, System.EventArgs e ) { txtClipBoard.Text = txtSayilar.Text; // Saylarn kopyalanmas iin, nce seilmesi gerekir txtSayilar.SelectAll(); txtSayilar.Cut(); } // Cut yordam arldktan sonra veriler kopyalanr. // Paste ile bu kopyalanan veriler geri yazdrlr. private void btnYukle_Click( System.Object sender, System.EventArgs e ) { txtSayilar.Clear(); txtSayilar.Paste(); }
Konu: 1
13
Button
Button
Komut vermek iin kullanlan dmelerdir.
Button zellikleri
zellik
DialogResult
Deer Tipi
DialogResult
Aklama olduu form ShowDialog metodu ile arld zaman, dn deerini belirler Dmeye basldnda ve dmenin zerine gelindiinde grnen format belirler Ait
FlatStyle
FlatStyle
Button Olaylar
Olay
Click
14
rnek: Bir formun zerindeki dmelerin DialogResult zellikleri deitirilerek, zel bir mesaj kutusu tasarlanabilir.
private void btnIslemYap_Click ( System.Object sender, System.EventArgs e ) { OnayFormu onay = New OnayFormu; onay.btnHayir.DialogResult = DialogResult.No; onay.FlatStyle = FlatStyle.Flat; onay.btnEvet.DialogResult = DialogResult.Yes; onay.btnEvet.FlatStyle = FlatStyle.Flat; if (onay.ShowDialog == DialogResult.Yes) // Kayt ilemleri... }
Konu: 1
15
CheckBox
CheckBox
Kullancya seenekler sunmay salar. Birok seenek seilebilir.
CheckBox zellikleri
zellik
Checked CheckAlign
Deer Tipi
Boolean ContentAlignement
Seme kutusunun ve zerinde yazan metnin birbirlerine gre konumlarn belirler Kontroln seme kutusu ya da dme eklinde olmasn belirler Seili olup olmamas dnda, Intermediate durum da eklenir. Eer kontrol Intermediate durumundaysa Checked zellii True olur. Kontrole basld
Appearance
Appearance
ThreeState
Boolean
AutoChecked
Boolean
16
zaman seili duruma geileceini belirtir. Eer bu zellik False ise, kontroln durumunu deitirmek iin, Click olaynda, Checked zelliini gncellemek gerekir
CheckBox Olaylar
Olay
CheckChanged
rnek: Bir GSM ebekesinden fatural hat alnda toplam tutar hesaplanrken, baz seenekler CheckBox kontrolleri ile sunulabilir.
// Form zerindeki tm seme kutularnn durumu // deitii zaman, toplam fiyat tekrar hesaplanr double toplam = txtAcilisTutari.Text; // lk faturada 22 YTL al bedeli eklenir if ( cbOzelIletisimIlkFatura.Checked ) { toplam += 22; } // KDV eklenir if ( cbKDV.Checked ) { toplam *= 1.18; } // zel letiim vergisi eklenir if ( cbOzelIletisim.Checked ) { toplam *= 1.25; } txtToplam.Text = toplam;
Konu: 1
17
RadioButton
RadioButton
Sunulan seeneklerin bir tanesini semeyi salar. GroupBox kontrol ile gruplanr.
GroupBox
Kontrollerin dzenlenmesini salar. Balk yazs bulunur.
Panel
Yatay Dikey kaydrma ubuklar bulunur.
RadioButton kontrolleri, kullancya sunulan seeneklerden sadece bir tanesinin seilmesine izin verir. Form zerinde birden fazla RadioButton konulduunda bu kontrollerin sadece bir tanesi seili olabilir. Fakat baz durumlarda, farkl seenek gruplar kullanlarak kullancnn birden fazla seim yapmas istenebilir. Bu durumda, baz seenekler GroupBox kontrol ile gruplanmaldr.
Bu kontroln zellikleri ve olaylar CheckBox kontrol ile ayndr. Sadece bir seenek seilebildii iin, kontrollerin yaplmas CheckBox kontrolne gre daha kolaydr.
GroupBox
Bu kontrol kontrollerin mantksal bir dzende gruplanmas iin kullanlr. inde bulunan kontrollerin ileyilerinde bir farkllk grnmez. Bir grup RadioButton kontrolnn, dier RadioButton kontrollerinden etkilenmemesi iin kullanlr.
Panel
GroupBox kontrol gibi, kontrollerin belli bir dzende gzkmesini salamak
iin kullanlr. GroupBox kontrolnden fark olarak yatay ve dikey kaydrma ubuklarnn bulunur, ancak Panel zerinde balk yazs bulunmaz.
18
Panel zellikleri
zellik
AutoScroll
Deer Tipi
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 iyi den ok kt ye kadar bir deer verilmesiyle oluturulur. Sonu olarak elde edilen anket bilgileri kullancya gsterilerek onaylamas beklenir.
// Ozet bilgilerinin tutulduu deiken private string AnketOzet; // Onaylama dmesinin aktif hale gelmesi iin // tm oylamalarn yaplm olmas gerekir private bool IcerikOyuSecildi, AracOyuSecildi;
private void Form1_Load( System.Object sender, System.EventArgs e ) { // Sistem ve yazlm seeneklerini tutan // GroupBox kontrolleri gizlenir:
Konu: 1
19 grpSistem.Visible = false; grpYazilim.Visible = false; // Anketleri tutan Panel kontrol gizlenir pnlAnket.Visible = False; // Onayla dmesi oylamadan nce pasif haldedir btnOnayla.Enabled = False; }
Eitimler seildiklerinde, ilgili alt seeneklerin grntlenmesi salanr. Alt seenekler, ayr GroupBox kontrollerinde tutulur.
private void rbYazilim_CheckedChanged( System.Object sender, System.EventArgs e ) { // GroupBox kontrollerini grnmleri, eitimleri // seili olmasyla doru orantldr. grpYazilim.Visible = rbYazilim.Checked; grpSistem.Visible = rbSistem.Checked; UrunTemizle(); pnlAnket.Visible = False; } // rnler balang deerlerine evrilir void UrunTemizle() { rbMCSD.Checked = False; rbMCSE.Checked = False; rbSistemUzmanligi.Checked = False; rbYazilimUzmanligi.Checked = False; }
Alt rnler seildiklerinde, anket paneli grntlenir ve panelin karlama mesajnda, ilgili rnn ismi gsterilir.
private void rbSistemUzmanligi_CheckedChanged( System.Object sender, System.EventArgs e ) { string panelMesaji; // Bu olay tetikleyen RadioButton kontrol alnr RadioButton basilan = sender; lblKarsilamaMesaji.Text = basilan.Text + " iin anket girii:"; pnlAnket.Visible = true; }
Anketlerde, ilgili konularda oylama yapld zaman, oylama dmesi aktif hale getirilir ve anket mesaj oluturulur.
// Eitim ierii iin verilen oy private void rbCokIyi_Icerik_CheckedChanged( System.Object sender, System.EventArgs e ) { IcerikOyuSecildi = true; RadioButton basilan = sender; AnketOzetiCikar( "Eitim ierii: " + basilan.Text
);
20
} // Eitim ara gereleri iin verilen oy private void rbCokIyi_Arac_CheckedChanged( System.Object sender, System.EventArgs e ) { AracOyuSecildi = true; RadioButton basilan = sender; AnketOzetiCikar( "Eitim ara gereleri: " + basilan.Text ); } public void AnketOzetiCikar( string ozet ) { AnketOzet += ozet + Constants.vbCrLf; if ( IcerikOyuSecildi & AracOyuSecildi ) { btnOnayla.Enabled = true; } }
Anket bilgileri oluturulduktan sonra, onay dmesi aktif hale gelir. Bu dmeye basld zaman kullancya girdii bilgiler mesaj kutusu ile gsterilir. Kullanc onayladktan sonra kayt ilemleri gerekleir.
private void btnOnayla_Click( System.Object sender, System.EventArgs e ) { string mesaj; mesaj = "Yaplan anket sonucu: " + Constants.vbCrLf + AnketOzet + Constants.vbCrLf; mesaj += "Bilgileriniz kaydedilecektir. Devam etmek istiyor musunuz?"; if ( MessageBox.Show( mesaj, MsgBoxStyle.YesNo, "Anket Sonucu" ) == DialogResult.No ) { return; } else { // Anket kayt ilemleri...
Konu: 1
21 } }
ListBox
ListBox
Nesnelerin listelenmesini salar. stenen sayda e seilebilir.
Kullancya sunulan seeneklerin bir liste halinde grnmesini salar. Liste kutusundan istenen sayda e seilebilir.
ListBox zellikleri
zellik
Items
Deer Tipi
ListBox.ObjectCollection
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
SelectedItem SelectedItems
Object SelectedObjectCollection
SelectedIndex
Integer
22
alr.
SelectedIndices SelectedIndexCollection
Liste kutusundan seilen elerin indislerini bir koleksiyon nesnesinde tutar. Listenin elerinin tutulduu veri kaynadr. Veri kayna bo geilirse Items koleksiyonuna eklenen eler grntlenir. Veri kaynandan gelen elerin, kullancya gsterilecek zelliidir. Veri kaynandan gelen elerin, dn deerini belirleyen zelliidir. Seilen enin, liste kutusunun ValueMember ile belirtilen zelliidir. Liste kutusundan ka tane e seilebileceini belirtir. None deeri 0, One deeri 1, MultiSimple ve
MultiExtended
DataSource
Object
DisplayMember
String
ValueMember
String
SelectedValue
Object
SelectionMode
SelectionMode
Konu: 1
23
ListBox Olaylar
Olay
SelectedIndexChanged
ListBox Metotlar
Metot
GetItemText
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
GetSelected
FindString
rnek: Tedarikiden alnacak ve stokta bulunan rnleri listelemek ve alm satm ilemi yapmak iin ListBox kontrolleri kullanlabilir.
rnlerin tutulmas iin bir Struct oluturulur. Bu rn yapsnn ToString metodu tekrar yazlmtr. Bunun nedeni, ListBox kontrolnde listelenen nesnelerin grntlendii deer ToString metodu arlarak belirlenir. Dolaysyla liste kutularnda istenen formatta deerin gzkmesini salamak iin ToString metodunun tekrar yazlmas gerekir.
public struct Urun { public string Ismi;
public Urun( string UrunIsim, double UrunFiyat ) { Ismi = UrunIsim; Fiyat = UrunFiyat; } public override string ToString() { return string.Format( "{0} - {1:C}", Ismi, Fiyat ); } }
private void Form1_Load( System.Object sender, System.EventArgs e ) { lbTedarikci.SelectionMode = SelectionMode.MultiExtended; lbStok.SelectionMode = SelectionMode.MultiExtended; UrunEkle(); } public void UrunEkle() { Urun u = new Urun(); u = new Urun( "Kalem", 1.49 ); lbTedarikci.Items.Add( u ); u = new Urun( "Silgi", 0.39 ); lbTedarikci.Items.Add( u ); u = new Urun( "Defter", 4.99 ); lbTedarikci.Items.Add( u ); u = new Urun( "Cetvel", 1.99 ); lbTedarikci.Items.Add( u ); u = new Urun( "Pergel", 2.99 ); lbTedarikci.Items.Add( u ); u = new Urun( "Not Defteri", 3.79 ); lbTedarikci.Items.Add( u ); }
Tedariki liste kutusundan, stok liste kutusuna e aktarlmas iin, seilen deerler nce liste kutusuna eklenir. Daha sonra bu seilen deerler, dier listede olmayaca iin tek tek kartlr.
private void btnEkle_Click( System.Object sender, System.EventArgs e ) { // Tedarikiden alnan rnler stok listesine eklenir foreach ( object item in lbTedarikci.SelectedItems ) { lbStok.Items.Add( item ); } // Stok listesine eklenen tm rnler // tedariki listesinden kartlr foreach ( object item in lbStok.Items ) { lbTedarikci.Items.Remove( item ); }
Konu: 1
25
private void btnCikar_Click( System.Object sender, System.EventArgs e ) { // Tedarikiden alnan rnler stok listesine eklenir foreach ( object item in lbStok.SelectedItems ) { lbTedarikci.Items.Add( item ); // Stok listesine eklenen tm rnler // tedariki listesinden kartlr foreach ( object item in lbTedarikci.Items ) { lbStok.Items.Remove( item ); } if ( lbStok.Items.Count == 0 ) { btnCikar.Enabled = false; btnHesapla.Enabled = false; } }
Stoktaki toplam fiyatn hesaplanmas ilemi, rnlerin fiyatlarnn alnp toplanmas ile gerekleir.
private void btnHesapla_Click( System.Object sender, System.EventArgs e ) { double toplam = 0; for (int i=0; i<=lbStok.Items.Count - 1; i++ ) { Urun urun = ( ( WindowsApplication8.Form1.Urun )( lbStok.Items[ i ]) ); toplam += urun.Fiyat; } lblToplam.Text = System.Convert.ToString( toplam ); }
private void lbStok_SelectedIndexChanged( System.Object sender, System.EventArgs e ) { Urun secilen = new WindowsApplication8.Form1.Urun(); secilen = ( (Urun )( lbStok.SelectedItem ) ); lblUrunFiyat.Text = string.Format( "{0:C}", secilen.Fiyat ); }
26
CheckedListBox
CheckedListBox
ListBox yapsndadr. eler iaret kutusu ile gsterilir.
Liste kutusunun tm zellik, metot ve olaylarn alr ve listedeki elerin iaret kutusu ile gsterilmesini salar.
CheckedListBox zellikleri
zellik
CheckedItems
Deer Tipi
CheckedItemCollection
Aklama Liste kutusunda iaretlenmi eleri tutar Liste kutusunda iaretlenmi elerin indislerini tutar Liste kutusunda eye tkland zaman iaretlenmesini belirler. False ise ilk tklamada e seilir, ikinci tklamada seme kutusu iaretlenir.
CheckedIndices
CheckedIndexCollection
CheckOnClick
Boolean
CheckedListBox Metotlar
Metot Aklama
Konu: 1
27 GetItemSelected
Parametre olarak verilen indisteki enin seili olup olmadn dndrr lk parametrede verilen indisteki elemann seili olup olmadn, ikinci parametrede verilen Boolean deeri ile belirler
SetItemSelected
rnek: Kategori bana stoktaki toplam rnlerin gsterildii bir uygulamada, listelenen kategorileri semek iin bu kontrol uygun olur.
Listede bir e seildii zaman, seilen tm kategorilerin rn stok durumu alnr ve toplam rn says kullancya gsterilir.
private void chlistKategoriler_SelectedIndexChanged( System.Object sender, System.EventArgs e ) { int toplam; toplanr. i++ ) { { // Listedeki seilen elerin rn adeti
for ( i=0; i<=chlistKategoriler.Items.Count - 1; if ( chlistKategoriler.GetItemChecked( i ) ) object secilen = null; secilen = chlistKategoriler.Items( i ); // Stok durumunu gsteren fonksiyon arlr toplam += StokDurumu( secilen.ToString() } }
);
lblToplamUrun.Text = "Seilen kategorilerdeki toplam rn: " + toplam; } // Kategoriye gre, stoktaki rnlerin belirlenmesi public int StokDurumu( string kategori ) { switch ( kategori ) {
28 case "Film": return 1100; case "Mzik": return 982; case "Bilgisayar": return 302; case "Kitap": return 1222; default: return 10; }
// Ekleme ilemi private void btnKategoriEkle_Click( System.Object sender, System.EventArgs e ) { chlistKategoriler.Items.Add( txtKategoriAdi.Text ); }
ComboBox
ComboBox
Listelenen eler alan kutuda grntlenir. Listeden bir tane e seilebilir.
Liste kutusu ile ayn zelliklere sahiptir. Ancak listelenen eler alan bir kutuda grntlenir ve listeden en fazla bir tane e seilebilir. Liste kutusuna gre bir baka farkll ise, istee bal olarak, kullancn alan kutu zerinde deer girebilmesidir. Dolaysyla bir TextBox kontrol gibi de davranabilir.
ComboBox zellikleri
Konu: 1
29
zellik
DropDownStyle
Deer Tipi
ComboBoxStyle
Aklama Kontroln listeleme stilini belirler. Simple stil, listedeki sadece bir eyi grntler. DropDown stili, listenin tm elemanlarn grntleyerek seilmelerini ve kullancnn deer girmesini saar.
DropDownList
Kontrole eklenebilecek maksimum e saysn belirler. Kullancnn girebilecei maksimum karakter saysn belirler. Seilen enin grntlenen yazsn belirler.
MaxLength
Integer
SelectedText
String
rnek: Tarih ve say formatlarn, kullancnn seimine brakarak bir say veya tarih yazdrma ilemi ComboBox kontrolleri ile yaplabilir.
e eklenmesi
private void Form1_Load( System.Object sender, System.EventArgs e ) {
30
cmbFormat.DropDownStyle = ComboBoxStyle.DropDownList; cmbFormatString.DropDownStyle = ComboBoxStyle.DropDownList; cmbFormat.Items.Add( "Tarih Format" ); cmbFormat.Items.Add( "Say Format" ); }
Tarih ya da say formatlarndan biri seildii zaman, ikinci ComboBox kontrolne deiik format seenekleri eklenir.
private void cmbFormat_SelectedIndexChanged( System.Object sender, System.EventArgs e ) { cmbFormatString.Items.Clear(); switch ( cmbFormat.SelectedIndex ) { case 0: cmbFormatString.Items.Add( "dd - MM cmbFormatString.Items.Add( "yyyy*MM*dd "dddd
yyyy" ); hh:mm" );
Format seildikten sonra metin kutusuna girilen deer alnr ve ilgili formatta gsterilir
btnGoster_Click( System.Object sender, { cmbFormat.SelectedIndex ) { 0: DateTime d = txtYazi.Text; lblSonuc.Text = d.ToString( cmbFormatString.Text ); break; case 1: int i = txtYazi.Text; lblSonuc.Text = i.ToString( cmbFormatString.Text ); break; } }
Konu: 1
31
NumericUpDown
NumericUpDown
Saysal deerlerin yukar aa oklar ile seilmesini salar
DomainUpDown
Object tipinde nesnelerin seilmesini salar.
Bu kontrol kullancnn, saysal bir deeri girmesini veya yukar aa oklar ile semesini salar.
NumericUpDown zellikleri
zellik
HexaDecimal
Deer Tipi
Boolean
Aklama Saylarn on altlk tabanda grntlenmesini belirler. Aa yukar oklar kullanldnda, saylarn artma ve azalma admlarn belirler. Kontrolde gsterilen saylarn alabilecei maksimum deeri belirler. Kontrolde saylarn minimum gsterilen alabilecei deeri
Increment
Decimal
Maximum
Decimal
Minimum
Decimal
32
belirler.
ThousandSeparators Boolean
Saylarn basamak ayracn gsterilmesini belirler. Kontroln gsterdii say deerini belirler.
True deerini alrsa kullancnn giri yapmasn engeller.
Value ReadOnly
Decimal Boolean
NumericUpDown Olaylar
Olay
ValueChanged
NumericUpDown Metotlar
Metot
DownButton
Aklama Aa dmesine basar ve say deerini drr. Yukar dmesine basar ve say deerini artrr. zaman deerlerinin ayarlanmas
UpButton
rnek:
Alarm
Konu: 1
33 nGun.Minimum = 1; nYil.Maximum = 2099; nAy.Maximum = 12; nGun.Maximum = 31; nSaat.Minimum = 0; nDakika.Minimum = 0; nSaat.Maximum = 23; nDakika.Maximum = 59; nYil.Value = DateAndTime.Now.Year; nAy.Value = DateAndTime.Now.Month; nGun.Value = DateAndTime.Now.Day; nSaat.Value = DateAndTime.Now.Hour; nDakika.Value = DateAndTime.Now.Minute; }
Bu deerlerden herhangi biri deitii zaman, doru tarih ve zaman deerinin girilmesi kontrol edilir
private void nGun_ValueChanged( System.Object sender, System.EventArgs e ) { string tarih; tarih = nGun.Value + "." + nAy.Value + "." + nYil.Value; if ( !( IsDate( tarih ) ) ) { MessageBox.Show( tarih ); } string zaman; zaman = nSaat.Value + ":" + nDakika.Value; if ( !( IsDate( zaman ) ) ) { MessageBox.Show ( zaman ); } }
DomainUpDown
NumericUpDown kontrol ile ayn yapdadr ancak saysal deerler yerine
Object tipinde deerler tutar. Bu deerler kontroln Items koleksiyonunda tutulur. Kontrol, bu zellii ile liste kutusuna benzemektedir.
DomainUpDown zellikleri
zellik
Items
Deer Tipi
DomainUpDownItemCollection
Aklama Kontroln elerinin tutulduu dinamik bir listedir. Kontrolde seilen eyi tutar.
SelectedItem
Object
34 Wrap Boolean
Liste sonuna gelindiinde bataki veya sondaki eye geri dnlmesini belirler.
DomainUpDown Olaylar
Olay
SelectedItemChanged
rnek: Metin kutularnn deitirilmek istenen yaz tipleri DomainUpDown kontrolnde tutulabilir.
private void Form1_Load( System.Object sender, System.EventArgs e ) { for ( i=0; i<=10; i++ ) { dFont.Items.Add( System.Drawing.FontFamily.Families[ i ].Name ); } dFont.Wrap = true; } private void dFont_SelectedItemChanged( System.Object sender, System.EventArgs e ) { if ( dFont.SelectedIndex >= 0 ) { TextBox1.Font = new Font( dFont.SelectedItem.ToString, 15 ); } }
Konu: 1
35
HScrollBar / VscrollBar
HScrollBar VScrollBar
Saysal deer tayan kaydrma ubuklardr.
Horizontal Vertical ScrollBar kontrolleri, saysal bir deer tayan kaydrma ubuklardr. Tuttuklar deerlerin saysal olmas bakmndan NumericUpDown kontrolne benzer. Bu kontroller, zerlerinde kaydrma ubuklar olmayan kontroller zerinde kullanlabilir. rnein bir ListBox, Panel gibi kontrollerin kendi ScrollBar kontrolleri vardr. TextBox kontrolnn de ilgili zellikleri ayarlanarak yatay ve dikey ScrollBar kontrolleri gsterilebilir.
ScrollBar zellikleri
zellik
Value
Deer Tipi
Integer
SmallChange
Integer
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 zelliinin alabilecei maksimum deeri tutar
LargeChange
Integer
Minimum
Integer
36 Maximum Integer
ScrollBar Olaylar
Olay
Scroll ValueChanged
Aklama ubuklar kaydrldklar zaman gerekleir. Kod ile ya da ubuklar kaydrlnca Value zellii deitii zaman gerekleir.
rnek: Bir ComboBox kontrolnn elerini listelemek iin, aaya doru bir kaydrma ubuu grntlenir. Ancak listedeki baz elemanlarn kontrole smyorsa, alma annda bu kontroln genilii artrlabilir.
private void Form1_Load( System.Object sender, System.EventArgs e ) { hsGenislik.Maximum = ComboBox1.Width * 2; hsGenislik.Value = ComboBox1.Width; } private void hsGenislik_Scroll( System.Object sender, System.Windows.Forms.ScrollEventArgs e ) { ComboBox1.Width = hsGenislik.Value; }
Konu: 1
37
TrackBar
TrackBar
Kaydrma ubuunun pozisyonu grsel olarak takip edilir. Pozisyon, klavye tular ile deitirilebilir.
Bu kontrol, ScrollBar kontrollerine benzer yapdadr ancak kontrol, bir cetvel biiminde olduu iin, zerinde durulan pozisyon grsel olarak takip edilebilir. Kontroln, kaydrma ubuklarndan bir fark da zerine odaklanabilir olmasdr. Dolaysyla kontroln Value deeri klavyede bulunan yukar, aa, sa, sol oklar ve PageUp, PageDown dmeleri ile deitirilebilir.
TrackBar zellikleri
TrackBar kontrolnn birok zellii ScrollBar kontrollerinin zellikleriyle
ayndr. Fakat kontrol daha esnek hale getiren birka zellii vardr. zellik
TickStyle TickFrequency Orientation
Deer Tipi
TickStyle Integer Orientation
Aklama Kontroln deerini gsteren izgilerin pozisyonunu belirler izgiler arasnda kalan deerlerin saysn belirler Kontroln ynnn yatay veya dikey olmasn salar.
38
TabControl
TabControl
Sekme sayfa yaps sunar. TabPage nesnelerinden oluur.
TabControl nesnesi, iinde sekme sayfalar tutan yapdr. Bu sayfalar, TabPage nesneleri olarak oluturulup yaplandrldktan sonra TabControl
nesnesinin TabPages koleksiyonuna eklenir. Ekleme ilemi, Properties paneli ile tasarm annda da yaplabilir.
TabControl zellikleri
zellik
HotTrack
Deer Tipi
Boolean
Aklama Fare ile sekme sayfalarnn zerine gelindiinde, isimlerinin grsel olarak deimesini belirler Sekme sayfalarnn boyutunu belirler Eklenen sekmelerin birden fazla satrda st ste gzkmesini belirler Fare sekme sayfalarnn zerindeyken bilgi mesajnn gsterilmesini belirler Seilen belirler sekme sayfasn
ItemSize Multiline
Size True
ShowToolTips
Boolean
SelectedTab
TabPage
Konu: 1
sayfasnn
TabControl nesnesine TabPage sayfalar eklemek iin tasarm annda TabPages Collection Editor penceresinden yararlanlabilir.
TabPage zellikleri
Sekme sayfalar, normal form tasarmlar gibi kontroller eklenerek yaplr. TabPage kontrol Panel kontrolnden trer ve Panel kontrolnn tm zelliklerini alr. zellik
ToolTipText
Deer Tipi
String
Aklama Bu zelliin deeri, fare sayfann zerindeyken, bilgi mesaj olarak gsterilir. Ait
40
olduu TabControl nesnesinin ShowToolTip zellii True olmaldr. rnek: Bir kullanc kaydnn tek bir formda grntlenmesi isteniyorsa, bu form TabControl ile kk sayfalara blnebilir.
DateTimePicker
DateTimePicker
Takvimden zaman deeri seilmesini salar. Takvim yaps alan kutu eklindedir.
Bir alan kutudan zaman deeri semeyi salar. Seilen deer Date tipinde olur.
Konu: 1
41
DateTimePicker zellikleri
zellik
CalendarTrailingForeColor
Deer Tipi
Color
Aklama Bir nceki ve bir sonraki ayn gnlerinin grntlenme rengi Takvim balnn nalan rengi Takvim balnn arka plan rengi Takvim arka plan rengi Takvimdeki plan rengi yazlarn n
Takvimin gsterilecei yaz tipi ayarlar Tarih deerinin yannda seme kutusunun gsterilmesi. Seme kutusu grntlendii zaman, tarihin seili olup olmadn gsterir Kontroln grntlenecei format belirler. Long, Short deerleri uzun ve ksa tarih formatn, Time sadece zaman gsterir. Custom deeri, CustomFormat zelliine girilen formatta gsterileceini belirler Tarihin hangi formatta gsterileceini belirler. Seilen belirler tarih deerini
Checked
Boolean
Format
DateTimePic kerFormat
Kontroln alabilecei maksimum tarih deeri Kontroln alabilecei minimum tarih deeri Kontroln formunu alan kutu ya da yukar aa oklar formatnda gsterir. Bu zellik True olduunda, kontroln format,
NumericUpDown
42
kontrolnn olur.
formatnda
rnek: Verit tabanndan bir kaydn belli tarih aralklar ile sorgulanmas srasnda, kullancnn balang ve biti tarihlerini semesi iin bu kontrol kullanlr.
private void Form1_Load( System.Object sender, System.EventArgs e ) { TarihAyarla( dtBaslangic ); TarihAyarla( dtBitis ); } public void TarihAyarla( DateTimePicker dtTarih ) { dtTarih.Format = DateTimePickerFormat.Custom; dtTarih.CustomFormat = "dd - MM - yyyy"; dtTarih.MaxDate = DateAndTime.Now.AddYears( 2 ); dtTarih.MinDate = DateAndTime.Now.AddYears( -2 } private void System.EventArgs e ) DateTime basTarih sonTarih btnAra_Click( System.Object sender, { basTarih, sonTarih; = dtBaslangic.Value; = dtBitis.Value;
);
if ( DateTime.Compare( basTarih, sonTarih ) == 1 ) { return; } string Sql; Sql = "Select * From Siparisler Where SiparisTarih Between "; Sql += basTarih + " And " + sonTarih; // } komutunu altr
Konu: 1
43
MonthCalendar
MonthCalendar
Takvimden bir zaman aral seilmesini salar.
DateTimePicker kontrolnn alan takvimi biimindedir. Bu kontrol kullancya, tarih alanlar zerinde daha esnek almay salar.
MonthCalendar zellikleri
DateTimePicker kontrolnn birok zelliini almasna ramen, baz
zelliklerinde deiiklikler grlr. rnein Value zellii bu kontrolde yoktur. Bu kontrolden seilen deerler, bir tarih araldr. Dolaysyla tek bir Date tipini tutan bir zellik yoktur. zellik
MaxSelectionCount SelectionRange
Deer Tipi
Integer SelectionRange
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 dmelerine
SelectionBegin
Date
SelectionEnd ScrollChange
Date Integer
44
ay
Takvimde hangi gnlerin kaln yaz tipinde gsterileceini belirler. aretlenen gnler, her ay iin kaln gsterilir. Takvimin alt ksmnda, sistem takvimine gre hangi gnde olduunu gsterir Takvimde, o gnn seili olmasn belirler Takvimin sol tarafnda, yln hafta numaralarn gsterir
ShowToday
Boolean
ShowTodayCircle ShowWeekNumbers
Boolean Boolean
MonthCalendar Olaylar
Olay
DateChanged
Aklama Seilen tarihten farkl bir tarih seildiinde gerekleir Yeni bir tarih seildii zaman gerekleir. DateChanged olay gerekletikten hemen sonra bu olay gerekleir.
DateSelected
rnek: Yaplacak grevlerin tutulduu bir Windows uygulamasnda, grevin balang ve biti tarihleri tek bir MonthCalendar kontrolnden kolaylkla seilebilir.
Konu: 1
45
public class Gorev { public string GorevIsmi; public DateTime BaslangicTarihi; public DateTime BitisTarihi; // Liste kontrollerinde grevin isminin grntlenmesi // iin, ToString metodunu tekrar yazmak gerekir. public override string ToString() { return GorevIsmi; } public Gorev( string Isim, DateTime basTarihi, DateTime bitTarihi ) { this.GorevIsmi = Isim; this.BaslangicTarihi = basTarihi; this.BitisTarihi = bitTarihi; } }
Grevler eklenecei zaman, yeni bir grev nesnesi oluturulur ve grevin balang-biti tarihleri ayarlanr.
private void Form1_Load( System.Object sender, System.EventArgs e ) { // Maksimum iki hafta seilsin MonthCalendar1.MaxSelectionCount = 14; } private void btnEkle_Click( System.Object sender, System.EventArgs e ) { DateTime baslangicTarihi = MonthCalendar1.SelectionStart; DateTime bitisTarihi = MonthCalendar1.SelectionEnd; string gorevIsmi = txtYeniGorev.Text; Gorev yeniGorev = new Gorev( gorevIsmi, baslangicTarihi, bitisTarihi ); ListBox1.Items.Add( yeniGorev ); } private void ListBox1_SelectedIndexChanged( System.Object sender, System.EventArgs e ) { Gorev secilen; secilen = ListBox1.SelectedItem; MonthCalendar1.SelectionStart = secilen.BaslangicTarihi; MonthCalendar1.SelectionEnd = secilen.BitisTarihi; txtYeniGorev.Text = secilen.GorevIsmi; }
46
Timer
Timer
Zaman deeri ayarlanabilen sayatr. Interval zellii ile, ka milisaniyede bir alaca belirlenir.
Timer zellikleri
zellik
Enabled Interval
Deer Tipi
Boolean Integer
Sayacn hangi zaman aralnda bir almas gerektiini belirler. Milisaniye cinsindedir.
Timer Olaylar
Olay
Tick
Aklama
Interval zelliinde belirtilen zaman deeri getiinde gerekleir.
Timer Metotlar
Metot Aklama
Konu: 1
47 Start Stop
ProgressBar
ProgressBar
Yaplan ilemlerin ilerleyiini gzlemeyi salar. Maksimum ve minimum deerleri arasndaki pozisyonu gsterir.
ProgressBar, belli bir andaki deerinin, alabilecei deer aralna gre yzdesini gsterir. Yaplan bir ilemin ilerleyiini gstermesi asndan olduka kullanl bir kontroldr.
ProgressBar zellikleri
zellik
Minimum Maximum Value
Deer Tipi
Integer Integer Integer
Aklama Kontroln alabilecei minimum deer belirler Kontroln alabilecei minimum deer belirler Kontroln verilen deer aralndaki pozisyonunu belirler
rnek: ProgressBar bir saym ileminde kalan durumu gstermek iin kullanlabilir.
48
sayma ileminin hz iin bir Timer bulunur. Saya her ilediinde yeni deer ProgressBar kontrolnde gsterilir.
public int kalan; private void Durum_Load( System.Object sender, System.EventArgs e ) { kalan = ProgressBar1.Maximum; Timer1.Start(); } private void Timer1_Tick( System.Object sender, System.EventArgs e ) { if ( kalan == 0 ) { Timer1.Stop(); this.Close(); } int aralik; aralik = ProgressBar1.Maximum ProgressBar1.Minimum; int oran = ( aralik - kalan ) / aralik * 100; Label1.Text = oran + "% tamamland"; kalan; } ProgressBar1.Value = ProgressBar1.Maximum kalan -= 1;
private void Form1_Load( System.Object sender, System.EventArgs e ) { CheckBox1.Checked = true; } private void btnBaslat_Click( System.Object sender, System.EventArgs e ) { Durum frmDurum = new Durum(); frmDurum.Timer1.Interval = TextBox1.Text; if ( CheckBox1.Checked ) { frmDurum.ShowDialog();
Konu: 1
49 } }
ErrorProvider
ErrorProvider
Hata mesajlarn kontrollerin yannda gsterir.
ErrorProvider zellikleri
zellik
BlinkRate
Deer Tipi
Integer
BlinkStyle
ErrorBlinkSytle
farkl bir hata meydana geldiinde yanp sneceini belirler. NeverBlink ise simgenin yanp snmeden grntleneceini belirler
Icon Icon
50
ErrorProvider Metotlar
Metot
SetError
zellik
IconAlignment On ErrorProviderIsmi
Aklama Hata simgesinin, kontroln zerinde nerde bulunacan belirler Hata simgesinin, kontrolden ka piksel uzakta duracan belirler Varsaylan belirler hata mesajn
IconPadding On ErrorProviderIsmi
Error On ErrorProviderIsmi
rnek: Kayt ilemlerinin yapld srada, isim soyad ve TC kimlik numaralarnn girileri ErrorProvider kontrol ile denetlenebilir.
Metin kutularnn Validating olaynda, girilen verilerin kontrolleri yaplr ve gerektii durumlarda ErrorProvider ile hata mesajlar gsterilir.
private void txtIsim_Validating( object sender, System.ComponentModel.CancelEventArgs e ) { if ( txtIsim.Text == "" ) { ErrorProvider1.SetError( txtIsim, "sim alan bo girilemez" ); // Bu komut olayn gereklemesini engeller // Dolaysyla veri girilmeden bu alandan klamaz e.Cancel = true; }
Konu: 1
51 else { // Eer beri doru girilmise, Error simgesini // gizlemek iin, hata mesaj bo girilir ErrorProvider1.SetError( txtIsim, "" ); } } private void txtSoyad_Validating( object sender, System.ComponentModel.CancelEventArgs e ) { if ( txtSoyad.Text == "" ) { ErrorProvider1.SetError( txtSoyad, "Soyad alan bo girilemez" ); e.Cancel = true; } else { ErrorProvider1.SetError( txtSoyad, "" ); } } private void txtTCKimlik_Validating( object sender, System.ComponentModel.CancelEventArgs e ) { if ( !( IsNumeric( txtTCKimlik.Text ) ) ) { ErrorProvider1.SetError( txtTCKimlik, "Kimlik numaras yanl girildi" ); e.Cancel = true; } else { ErrorProvider1.SetError( txtTCKimlik, "" ); } }
52
PictureBox
PictureBox
Resim grntlemeyi salar.
PictureBox zellikleri
zellik
Image SizeMode
Deer Tipi
Image PictureBoxSizeMode
Aklama Kontroln resim kaynan belirler Kontroln, resmi nasl grntleyeceini belirler. AutoSize deeri, kontroln bykln resmin byklne gre ayarlar. CenterImage deeri, resmi kontroln ortasna gelecek ekilde ayarlar. Normaldeeri, kontroln sol st kesine gre konumlandrr. StretchImage deeri, resmi kontroln byklne gre boyutlandrr ve resmin tam grnmesini salar.
Konu: 1
53
rnek: Form zerinde bir resmin deiik boyutlarda gsterilmesi iin PictureBox kontrol tercih edilir.
private void ComboBox1_SelectedIndexChanged( System.Object sender, System.EventArgs e ) { switch ( ComboBox1.SelectedIndex ) { case 0: PictureBox1.SizeMode = PictureBoxSizeMode.Normal; break; case 1: PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage; break; case 2: PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; break; case 3: PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize; break; } } private void btnGoster_Click( System.Object sender, System.EventArgs e ) { PictureBox1.Image = Image.FromFile( txtResimYeri.Text ); }
54
ImageList
ImageList
Resimleri liste halinde tutar. Kontrollerin elerine resim atanmasn salar.
ImageList kontrol, form kontrolleri ve iinde bulunan eleri iin arka plan resmi salayan bir listesi grevini grr.
ImageList zellikleri
zellik
Images
Deer Tipi
ImageCollection
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.
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.
Konu: 1
55
rnek: ImageList kontrolnde tutulan resimler bir say oyununda rasgele resim gstermek iin kullanlabilir.
private void btnYerlestir_Click( System.Object sender, System.EventArgs e ) { int max = ImageList1.Images.Count - 1; Random r = new Random(); PictureBox1.Image = ImageList1.Images( r.Next( PictureBox2.Image = ImageList1.Images( r.Next( PictureBox3.Image = ImageList1.Images( r.Next( PictureBox4.Image = ImageList1.Images( r.Next( }
LinkLabel
LinkLabel
Nesnelere balant kurulmasn salar. Metin iinde birden fazla balant tutabilir.
56
Bu kontrol, nesnelere balant kurmak iin kullanlr. Text zelliinde birden fazla nesneye balant kurulabilir. Bu durumda, kontrole tkland zaman hangi balantnn ilenecei Click olaynda belirlenir.
LinkLabel zellikleri
zellik
LinkArea
Deer Tipi
LinkArea
Aklama Balantnn hangi karakterler arasnda aktif olacan belirler Balantnn yazsnda bulunan izginin ne zaman gsterileceini belirler.
HoverUnderline
LinkBehavior
LinkBehavior
LinkVisited
Boolean
VisitedLinkColor
Color
zellii rengini
gsterilecek belirler
Links LinkLabel.LinkCollection
LinkLabel Olaylar
Olay
Click
Konu: 1
57
tkland zaman gerekleir. Dier kontrollerin tklama olayndan farkl olarak, LinkLabel zerinde hangi balantya basld anlalr. rnek: letiim bilgi formunda e-posta ve internet adresleri gibi balantlar gstermek iin LinkLabel kullanlr.
private void Form1_Load( System.Object sender, System.EventArgs e ) { string bilgi; bilgi = "BilgeAdam web sitesi: http://www.bilgeadam.com" + Constants.vbCrLf; bilgi += Constants.vbCrLf + "Mail ile ulamak iin tklayn" + Constants.vbCrLf; LinkLabel1.Text = bilgi; // nternet adresinin balad karakterden // itibaren link eklenir LinkLabel1.Links.Add( 22, 24, "http://www.bilgeadam.com" ); // Mail adresinin balad karakterden // itibaren link eklenir LinkLabel1.Links.Add( 72, 8, "mailto:postakutusu@bilgeadam.com" ); } private void LinkLabel1_LinkClicked( System.Object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e ) { int tiklanan; tiklanan = LinkLabel1.Links.IndexOf( e.Link ); //Tklanan linkin ziyaret edildii belirtilir LinkLabel1.Links( tiklanan ).Visited = true; // Linki altrmak iin ilgili ilem gerekletirilir
58
System.Diagnostics.Process.Start( e.Link.LinkData ); }
TreeView
TreeView
elerin hiyerarik yapda grntlenmesini salar. TreeNode nesnelerinden oluur.
Bu kontrol, iinde bulunan eleri hiyerarik bir yapda grntler. Her eklenen e bir dm temsil eder. Dmler birleerek aa yapsn olutururlar. Dmler kk ve alt dm olarak ikiye ayrlr. Kk dmler, kontroln ilk srasnda yer alr ve ayn seviyededir. Alt dmler, kk dmlerin ve dier alt dmlerin altna eklenebilir.
TreeNode nesnesi
TreeView kontrolnde gsterilen eler, zelliklerini TreeNode snfndan alr. Kk ve alt dmlerin tm TreeNode tipindedir. Her dmn bir Nodes zellii vardr. Bu zellik, dmn, alt dmlerinin tutulduu koleksiyondur. Alt dmler oluturulup bu zellie eklenebilir. TreeNode dmleri oluturulup, zellikleri atandktan sonra TreeView kontrolnde gsterilmesi iin, TreeView nesnesinin Nodes koleksiyonuna eklenmesi gerekir.
Deer Tipi
String
Konu: 1
Ayn seviyedeki bir sonraki dm gsterir Ayn seviyedeki bir nceki dm gsterir Alt dmlerinin sonuncusunu gsterir en
Alt dmlerinin ilkini gsterir Dmn yaz tipini belirler Dmn, kkten kendisine kadar olan tm dmlerin Text zelliklerini sralar Dmn ait olduu
TreeNode nesnesini belirtir
Parent
TreeNode
Aklama Dmn ilk seviyedeki alt dmlerini gizler. Eksi iaretine baslmas ile ayn grevi grr. Dmn ilk seviyedeki alt dmlerini gsterir. Art iaretine baslmas ile ayn grevi grr. Dmn alt dmlerini son seviyeye kadar gsterir. Dmn durumu aksa kapal, kapalysa ak duruma getirir Verilen parametre True ise tm alt dmlerin, False ise sadece ilk seviyedeki dmlerin saysn verir.
Expand
ExpandAll Toggle
GetNodeCount
60
TreeView zellikleri
zellik
CheckBoxes
Deer Tipi
Boolean
Aklama Dmlerin yannda iaret kutularnn gsterilmesini belirler Kontroln tm eleri iin varsaylan resmin, ImageList iindeki indisini belirler. Bu zelliin kullanlmas iin, kontroln ImageList zelliinin belirlenmesi gerekir. enin zerine gelip seildiinde gsterilecek resmin, ImageList iindeki indisini belirler 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
ImageIndex
Integer
SelectedImageIndex
Integer
ShowRootLines
Boolean
PathSeparator
String
Konu: 1
61
TreeView Metotlar
Metot
CollapseAll ExpandAll
TreeView Olaylar
Olay
BeforeSelect AfterSelect BeforeCollapse AfterCollapse BeforeExpand AfterExpand
Aklama Dm seilmeden nce gerekleir Dm seildikten sonra gerekleir Dm kapanmadan nce gerekleir Dm kapandktan sonra gerekleir Dm almadan nce gerekleir Dm aldktan sonra gerekleir
62
rnek: rn kategorileri, genelde tek kategori olarak ele alnsa da, aslnda hiyerarik bir yapda incelenmeleri gerekir. Her kategorinin sonsuz sayda alt kategorisi olabilir. Bu tip kategoriler, en iyi ekilde TreeView kontrol ile grntlenebilir.
Yeni kategori ekleme ilemi kk dm ve alt dm olarak yaplabilir. Eer RadioButton kontrollerinde kk dm seilmise ana kategori; alt dm seilmise, seilen kategorinin altna bir alt kategori eklenir.
private void btnYeniKategoriEkle_Click( System.Object sender, System.EventArgs e ) { TreeNode secilen; secilen = TreeView1.SelectedNode; if ( RadioButton1.Checked ) { // Kk dm eklenir TreeView1.Nodes.Add( txtYeniKategori.Text ); } else if ( RadioButton2.Checked ) { // Seilen kategoriye alt kategori eklenir secilen.Nodes.Add( txtYeniKategori.Text ); } }
Seilen bir kategorinin silinme ilemi iin, o dmn hangi ana dme ait olduu bulunmaldr.
private void btnSil_Click( System.Object sender, System.EventArgs e ) { TreeNode secilen = TreeView1.SelectedNode; if ( !( secilen.Parent == null ) ) { Seilen dm, Parent dmnn Nodes // koleksiyonundan kartlr. secilen.Parent.Nodes.Remove( secilen ); } else { // Eer Parent yok ise Kk dmdr. TreeView1.Nodes.Remove( secilen ); //
Konu: 1
63 } }
private void btnGoster_Click( System.Object sender, System.EventArgs e ) { TreeView1.ExpandAll(); } private void btnKategoriGoster_Click( System.Object sender, System.EventArgs e ) { TreeNode secilen = TreeView1.SelectedNode; MessageBox.Show ( secilen.FullPath, MsgBoxStyle.OKOnly, "Kategori Yolu" ); }
ListView
ListView
elerin deiik ekillerde listelenmesini salar. ListViewItem nesnelerinden oluur. Her e, ListViewSubItem alt elerinden oluur.
Kullancya deiik listeleme seenekleri sunan bir kontroldr. inde bulunan eler, tek bir nesne olarak veya detaylar ile gsterilebilir. Dolaysyla eler ListViewItem nesnesi, detaylar ise ListViewSubItem nesnesi olarak tanmlanr.
64
ListView zellikleri
zellik
View
Deer Tipi
View
Aklama Listenin grnmn belirler. LargeIcons deeri listedeki elerin byk resimle, SmallIcons kk resimle grnmesini salar. List deeri, eleri kk resimle fakat alt alta grnmesini salar. Details deeri, alt elerin kolonlar altnda grntlendii detay grnm salar. Detay grnmnde, kolonlarn kullanc tarafndan dzenlenebilmesini belirler elerin ne zaman etkinletirileceini belirler. OneClick deeri, enin tek tklamayla, Standard deeri, enin ift tklamayla aktif hale geleceini belirler. TwoClick deeri seili iken, ilk tklandnda e seilir, daha sonra ikinci defa tklandnda ise e aktif hale gelir. elerin yannda seme kutularnn bulunmasn belirler Detay grnmnde iken, elerin alt elerinin gsterilecei kolonlar tutan koleksiyondur Detay grnmde,
AllowColumnReorder
Boolean
Activation
ItemActivation
CheckBoxes
Boolean
Columns
ColumnHeaderCollection
FullRowSelect
Boolean
Konu: 1
65
LabelEdit
Boolead
alma annda, kullancn, liste elerinin yazsn deitirmesini belirler. Bu zelliin kullanlmas iin, Activation zellii Standard olmas gerekir.
ListView Olaylar
Olay
AfterLabelEdit
Aklama enin deitikten gerekleir enin deimeden gerekleir yazs sonra yazs nce
BeforeLabelEdit
Form1_Load(
System.Object
sender,
66
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( HorizontalAlignment.Left ); ListView1.Columns.Add( HorizontalAlignment.Left ); ListView1.Columns.Add( HorizontalAlignment.Left ); "Ad", "Boyut", "Tr",
ListView1.View = View.Details; ListViewItem oge = new ListViewItem( "bin" ); oge.SubItems.Add( "" ); oge.SubItems.Add( "Dosya Klasr" ); oge.ImageIndex = 0; ListView1.Items.Add( oge ); oge = new ListViewItem( "Form1.vb" ); oge.SubItems.Add( "11 KB" ); oge.SubItems.Add( "Visual C# Source" ); oge.ImageIndex = 2; ListView1.Items.Add( oge ); oge = new "WindowsApplication1.sln" ); oge.SubItems.Add( "1 KB" ); oge.SubItems.Add( "Microsoft Solution Object" ); oge.ImageIndex = 1; ListView1.Items.Add( oge ); } ListViewItem(
Visual
Studio
deiir.
private void ComboBox1_SelectedIndexChanged( System.Object sender, System.EventArgs e ) { switch ( ComboBox1.SelectedIndex ) { case 0: ListView1.View = View.Details; break; case 1: ListView1.View = View.LargeIcon; break; case 2: ListView1.View = View.SmallIcon; break; case 3: ListView1.View = View.List; break; }
Konu: 1
67
Dinamik Kontroller
s
Dinamik Kontroller
alma annda oluturulup forma eklenir. AddHandler ile kontroln olaylarna eriilir.
Void Yordam1() { Button b = new Button(); b.Click += new EventHandler(ButonaBasildi); } Private Void ButonaBasildi(Object sender ,EventArgs e) { }
Kontroller tasarm annda eklenip ayarlanabildii gibi, alma annda da oluturulup forma eklenebilir. Kontrollerin, Properties panelinde gzken tm zelliklere kod tarafnda ulalabildii iin alma annda nceden oluturulmu bir kontroln zellii deitirilebilir. Bununla birlikte, yeni bir form oluturup gsterme ilemi gibi, alma annda yeni bir kontrol oluturup, zellikleri atanp form zerinde gsterilebilir. Yeni eklenen kontrollerin olaylarna erimek iin EventHandler nesnesi kullanlr. Olay gerekletii zaman altrlacak kodlarn bulunduu yordam ise EventHandler nesnesi oluturulurken, parametre olarak geilmelidir.
button1.Click+=new EventHandler(button1_Click);
Bu ekilde tanmlanan yordamlarn, kontroln olay tanmlaycs ile ayn parametrelere sahip olmaldr.
private void button1_Click(object sender, EventArgs e) { }
68
rnek: Form zerinde srekli dme eklenen ve dmelerin, basld zaman yok edildii bir oyun yazlmas iin, bu dmelerin dinamik bir ekilde oluturulmas gerekir.
Form zerindeki bir Timer kontrol, iki saniyede bir dme oluturup forma ekler.
private void Timer1_Tick( System.Object sender, System.EventArgs e ) { // Yeni bir dme oluturulur. Button b = new Button(); b.Height = 30; b.Width = 30; b.Text = "X"; int maxLocation_Y, maxLocation_X; // Yeni dmenin yeri form dnda bir yerde olamaz maxLocation_X = this.Width - b.Width; maxLocation_Y = this.Height - b.Height; Random r = new Random(); // Dmenin bulunaca yer rasgele ayarlanr. b.Location = new Point( r.Next( maxLocation_X ), r.Next( maxLocation_Y ) ); b.Click +=new EventHandler(ButonaBasildi ); // Oluturulan kontrol, Formun kontroller // listesine eklenmelidir. this.Controls.Add( b ); }
Konu: 1
69 private void ButonaBasildi( System.Object sender, System.EventArgs e ) { // Kontroln, zerine basld zaman yok edilmesi sender.Dispose(); }
Dinamik Kontroller Balantlar yeni bir sayfada ald zaman, yeni bir TabPage oluturulur. Bu sayfann iine yeni bir tarayc kontrol oluturulup eklenir. Daha sonra bu sayfa TabControl nesnesine eklenir.
Kontrollerin eklenmesi
Yeni bir Windows projesi an ve ToolBox paneline Microsoft Web Taraycn ekleyin. Not: ToolBox paneline kontrol ekleme ilemleri iin Modl 3 e bakn
70
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn. Kontrol Kontrol smi
TextBox txtAdres RadioButton - rbAyniSayfa RadioButton - rbYeniSayfa GroupBox GroupBox1 LinkLabel LinkLabel1 Button btnSayfaKapat Button btnTumunuKapat TabControl TabControl1 TabPage TabPage1 Text Text Text Text TabPages Dock Text Dock
zellik
Text Checked
Deer http://
True
Ana Sayfa Sayfay Kapat Tm Sayfalar Kapat Yeni bir sayfa ekleyin
Bottom
Sayfa 1
Fill
Tarayc AxWebBrowser1
Konu: 1
71
Kodlarn yazlmas
1. Form yklenirken LinkLabel kontrolnn gsterecei balanty ve formun AcceptButton zelliini ayarlayn.
private void Form1_Load( System.Object sender, System.EventArgs e ) { LinkLabel1.Links.Add( 0, 9, "http://www.bilgeadam.com" ); this.AcceptButton = btnGit; }
2. Yazlan Internet adresine gitmek iin kullanc, ayn sayfay veya yeni alacak bir sayfay kullanabilir. Seilen duruma gre ayn sayfada ya da farkl sayfada Internet sitesini grntleyen kodlar yazn.
private void btnGit_Click( System.Object sender, System.EventArgs e ) { // Girilen balantnn banda http ifadesi // bulunmuyorsa bu ifade eklenir if ( !( txtAdres.Text.StartsWith( "http://" ) ) ) { txtAdres.Text = txtAdres.Text.Insert( 0, "http://" ); } // TabControl nesnesinde sayfa yoksa ya da Yeni Sayfa // seenei seilmise, adres yeni sayfada gsterilir. if ( rbYeniSayfa.Checked || TabControl1.TabPages.Count == 0 ) {
72
YeniSayfa( txtAdres.Text ); } else { AyniSayfa( txtAdres.Text ); } public void YeniSayfa( string link ) { // Dinamik kontroller oluturulur. TabPage sayfa = new TabPage( link ); AxSHDocVw.AxWebBrowser tarayici = new AxSHDocVw.AxWebBrowser(); tarayici.Dock = DockStyle.Fill; // Tarayc TabPage kontrolne eklenir sayfa.Controls.Add( tarayici ); // Oluturulan sayfa TabControl nesnesine eklenir. TabControl1.TabPages.Add(sayfa); // Yeni alan sayfa seili olarak gsterilir TabControl1.SelectedTab = sayfa; // Tarayc, verilen balanty grntler tarayici.Navigate(link); } public void AyniSayfa( string link ) { // Internet sitesi, seilen sayfada gsterilir. TabPage sayfa = null; sayfa = TabControl1.SelectedTab; AxSHDocVw.AxWebBrowser tarayici = null; // Tarayc, sayfann kontrolleri iinde bulunur. // Sayfada baka kontrol bulunmad iin, ilk // kontrol taraycdr. tarayici = ( ( AxSHDocVw.AxWebBrowser )( sayfa.Controls[ 0 ] ) ); sayfa.Text = link; tarayici.Navigate( link ); }
3. Ana sayfa balantsna tkland zaman, BilgeAdam internet sitesinin yeni bir sayfada almasn salayan kodlar yazn.
private void LinkLabel1_LinkClicked( System.Object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e ) { YeniSayfa( System.Convert.ToString( e.Link.LinkData ) ); }
Konu: 1
73 sayfa.Dispose(); } } private void btnTumunuKapat_Click( System.Object sender, System.EventArgs e ) { foreach ( System.Windows.Forms.TabPage sayfa in TabControl1.TabPages ) { sayfa.Dispose(); } }
Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn. Kontrol Kontrol smi
TextBox txtTahmin ListBox ListBox1 DomainUpDown DomainUpDown1 Items
zellik
Deer
Kodlarn Yazlmas
Sistem tarafndan tutulacak saylar, DomainUpDown kontrolnde yaplan seime gre farkl ya da ayn rakamlara sahip olacaktr.
private int BulunacakSayi; public int SayiUret() { int sayi = DortHaneliSayi(); // Saydaki rakamlar tekrar edilebilirse if ( DomainUpDown1.SelectedIndex == 1 ) { return sayi; } // Saynn rakamlar birbirinden farkl // olana kadar say retilir while ( !( SayiKontrol( sayi ) ) ) { sayi = DortHaneliSayi(); } return sayi; }
Konu: 1
public bool SayiKontrol( int sayi ) { char[] rakamlar = sayi.ToString().ToCharArray(); edilir // Rakamlar tek tek bir birleriyle kontrol
j++ ) {
// Tekrarlanan rakam varsa False dner for (int i=0; i<=rakamlar.Length - 2; i++ ) { for (int j=i + 1; j<=rakamlar.Length - 1; if ( rakamlar[ i ] == rakamlar[ j ] ) { return false; } } } return true; }
private void btnYeniOyun_Click( System.Object sender, System.EventArgs e ) { BulunacakSayi = SayiUret(); lblMesaj.Text = "Yeni Oyun! Say retildi..."; }
private void txtTahmin_Validating( object sender, System.ComponentModel.CancelEventArgs e ) { if ( txtTahmin.Text.Length == 4 ) { ErrorProvider1.SetError( txtTahmin, "" ); } else { ErrorProvider1.SetError( txtTahmin, "Say yanl girildi" ); e.Cancel = true; } }
76
char[] sBulunacak; sBulunacak = BulunacakSayi.ToString().ToCharArray(); // Yerleri tutan saylar bulunur for ( i=0; i<=3; i++ ) { if ( sdizi[ i ] == sBulunacak[ i ] ) { arti += 1; } } // Yerleri tutmayan saylarn kontrol for ( i=0; i<=3; i++ ) { for ( j=0; j<=3; j++ ) { if ( i != j ) { if ( sdizi[ i ] == sBulunacak[ j ] ) eksi += 1; break; } } } } if ( arti sonuc } else if ( sonuc } else if ( sonuc } else if ( sonuc } } private void btnTahmin_Click( System.Object sender, System.EventArgs e ) { ListBox1.Items.Add( TahminKontrol( int.Parse(txtTahmin.Text ) ) ); } == 0 & eksi == 0 ) { = "0"; arti == 4 ) { = "Tebrikler!"; arti != 0 && eksi != 0 ) { = "+" + arti + " -" + eksi; arti == 0 ) { = "-" + eksi;
return sonuc;
Konu: 1
77
Dinamik kontroller Kullancnn setii seviye kadar kart ekleme ilemi iin kullanlr.
Tag Kontrollerin Tag zellii, o kontrole ait bilgi tutmak iin kullanlr.
Bu labda, yeni eklenen kartlarn hangi resmi tayaca kontrol Tag zelliinde tutulur.
Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn. Kontrol Kontrol smi
ComboBox ComboBox1
zellik
Items
ImageList ImageList1
Images
Kodlarn Yazlmas
1. ComboBox kontrolnden seviye seildii zaman, form zerinde var olan tm dmelerin silinip, seilen seviye kadar dme eklenmesi gerekir. Bu ilem oyunu batan balatr.
public void KartYerlestir( int kartSayisi ) { DugmeleriSil(); int x = 10; int y = 50;
78
zellikleri
for (int i=1; i<=kartSayisi; i++ ) { // Dinamik bir dme oluturulur ve // ayarlanr Button kart = new Button(); kart.Height = 30; kart.Width = 30; kart.Location = new Point( x, y );
kart.Click += new System.EventHandler( ButonaTiklandi ); this.Controls.Add( kart ); // // Bir sonraki eklenecek olan dme ilk kontroln 70 piksel sanda
olacaktr
2. Dmeleri silme ilemi, form zerindeki tm dmelerin bir listeye atlp daha sonra formun kontrollerinden kaldrlarak yaplr.
public void DugmeleriSil() { ArrayList silinecek = new ArrayList(); tutulur // Form iindeki Button kontrolleri bir listede
foreach ( System.Windows.Forms.Control c in this.Controls ) { if ( c is Button ) { silinecek.Add( c ); } } for (int i=0; i<=silinecek.Count - 1; i++ ) { this.Controls.Remove( (Control)silinecek[ i } }
] );
Konu: 1
79 } Random r = new Random(); int i = 0; da // Kartlar ikier ikier ele alnr. ki karta
// ayn resim atanr. Ve bu iki kart dmeler // listesinden kartlr. while ( dugmeler.Count > 0 ) { Button kart1 = null, kart2 = null; kart1 = (Button)dugmeler[ r.Next( dugmeler.Count - 1 ) ]; kart1.Tag = i; dugmeler.Remove( kart1 ); kart2 = (Button)dugmeler[ r.Next( dugmeler.Count - 1 ) ]; kart2.Tag = i; dugmeler.Remove( kart2 ); i += 1; } }
4. Eklenen kartlara tkland zaman, ilk seferde bir kart alr ve resmi gsterilir. kinci kart ald zaman bu iki kartn resmi aynysa kart formdan kaldrlr.
private Button AcikKart; private bool acik = false; private void ButonaTiklandi( object sender, EventArgs e ) { Button kart = (Button)sender; // Eer ilk kart alyorsa if ( !( acik ) ) { // Kart grntle kart.BackgroundImage = ImageList1.Images[ int.Parse(kart.Tag.ToString()) ]; AcikKart = kart; acik = true; // Eer ikinci kart alyorsa } else { // Alm kartn resmi, yeni alan kartn // resmi ile aynysa, bu kartlar silinir if ( kart.Tag == AcikKart.Tag ) { this.Controls.Remove( kart ); this.Controls.Remove( AcikKart ); } else { AcikKart.BackgroundImage = null; } acik = false; } }
80
kullanlr
Try Catch Finally Hesaplamalar yaplrken, kullancn yanl bir
Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn. Kontrol Kontrol smi
Button 0 9 aras her say iin
zellik
Text
Konu: 1
81
Kodlarn Yazlmas
1. lemin trn ve seildiini belirleyen, girilen bir nceki sayy tutan global deikenleri yazn.
private bool IslemSecildi = false; private double Sayi; private string Islem;
2. Say dmelerinden herhangi birine basld zaman, metin kutusunun grnmn deitiren ilemi yazn.
private void Button1_Click( System.Object sender, System.EventArgs e ) { if ( !( IslemSecildi ) ) { txtSayi.Text += ((Button)sender).Text; } else { txtSayi.Text = ((Button)sender).Text; IslemSecildi = false; } }
3. lem seildii zaman, bir nceki girilen sayy tutan kodlar yazn.
private void btnCarp_Click( System.Object sender, System.EventArgs e ) { Islem = ((Button)sender).Text; try { Sayi = double.Parse(txtSayi.Text); IslemSecildi = true; } catch ( Exception ex ) { MessageBox.Show( "Say dzgn formatta girilmedi); } finally { txtSayi.Text = ""; txtSayi.Focus(); } }
82
5. C (temizle) tuuna basld zaman, metin kutusunu temizleyen ve global deikenleri balang deerlerine getiren kodlar yazn.
private void btnTemizle_Click( System.Object sender, System.EventArgs e ) { Sayi = 0; IslemSecildi = false; txtSayi.Text = ""; txtSayi.Focus(); }
zet
Listeleme Kontrolleri
ListBox, TreeView, ComboBox
Resim Kontrolleri
PictureBox, ImageList
Dzenleme Kontrolleri
TabControl, Panel, HScrollBar, VScrollBar
Dinamik Kontroller
alma annda eklenen kontroller
1. Formun kapanmasn effafln yavaa azaltarak salamak iin, formun hangi olay, zellik ve metotlarndan faydalanr? Uygulamasn yazn. 2. Fiziksel olarak bulunduklar yerlerin bir dizide tutulduu resimlerin, slayt gsterisi eklinde gsterilmesi hangi kontroller ile salanr? Uygulamasn yazn.
Konu: 1
83
3. Kurumsal bir irketin elemanlarnn bal olduklar departmanlar ve mdrleri hiyerarik olarak hangi kontrol ile gsterilebilir? Her mdr ve departman baka bir mdr ve departmana baldr. Uygulamasn structure yapsn kullanarak ve ilgili kontroller ile birlikte yazn. 4. Microsoft Excel ile oluturulan sayfalar, ayn pencerede tutulur. Bir Windows uygulamasnda snrsz sayda sayfann ayn form zerinde tutmay hangi kontrol salar? Bu sayfalar alma annda oluturulmak istenirse, kontroln hangi zelliklerinden faydalanlr.
Hedefler
Menler
MainMenu, ContextMenu
Menler
Windows uygulamalarnda kullanlan iki tip men vardr. MainMenu, formlarn banda duran sabit mendr. ContextMenu, fare ile sa tklandnda kan mendr.
MainMenu
MainMenu
Formlarn banda duran mendr. MenuItem nesnelerinden oluur. Men elerine ksa yollar atanabilir.
Windows uygulamasna bir men eklemek iin, Toolbox panelinden bir MainMenu kontroln forma srkleyin. Eklenen men bir bileen olarak formun alt blmnde gzkecektir. Ancak stne gelindiinde formun balnn hemen altnda belirir. Men esi eklemek veya ismini deitirmek iin stne gelinir ve balk yazs yazlr. Properties panelinde bu mennn MenuItem olarak eklendii grlr.
Menye MenuItem eklendiinde hemen altnda ve yannda, men eklemek iin bir yer alr. Bu alan yere de men ismi girip, alt men eleri oluturulabilir. Men elerine basld zaman bir ilemin gereklemesi iin, kontrole ift tklanarak bu enin Click olayna geilir. altrlmak istenen kodlar buraya yazlr.
Konu: 1
Men elerine isim verirken & iareti kullanlarak, kullancn klavyenin ALT tuuyla bu eyi altrmasn salanabilir. & iareti hangi karakter ile kullanlrsa, ksa yol olarak o karakter kullanlr.
Deer Tipi
Booleand
Aklama Men esinin yannda seili olduuna dair bir iaretin gzkmesini salar Men esinin durumda olmadn belirler aktif olup
Enabled
Boolean
RadioCheck
Boolean
enin seilme stilinin RadioButton dmesi olarak gzkmesini salar. Menye ulam iin bir ksa yol tanmlar. Mennn ksa yolunun, isminin yannda gzkmesini belirler Alt menlerin tutulduu koleksiyondur.
ShortCut ShowShortCut
ShortCut Boolean
MenuItems
MenuItemCollection
rnek:
private void Form1_Load( System.Object sender, System.EventArgs e ) { MenuItem dosya = new MenuItem( "D&osya" );
// Yeni ileminin yaplmas iin bir men eklenir. MenuItem yeni = new MenuItem( "&Yeni" ); yeni.Shortcut = Shortcut.CtrlN; yeni.ShowShortcut = true; yeni.Select += new System.EventHandler( YeniClick ); dosya.MenuItems.Add( yeni ); // Ama ileminin yaplmas iin bir men eklenir. MenuItem ac = new MenuItem( "&A" ); ac.Shortcut = Shortcut.CtrlO; ac.ShowShortcut = false; ac.Select += new System.EventHandler( AcClick ); dosya.MenuItems.Add( ac ); MainMenu1.MenuItems.Add( dosya ); } private void AcClick( System.Object sender, System.EventArgs e ) { } private void YeniClick( System.Object sender, System.EventArgs e ) { }
Konu: 1
ContextMenu
ContextMenu
Kontrollerin ContextMenu zelliine atanr. Kontrollere sa tkland zaman kan mendr.
ContextMenu, bir kontroln stne sa tkland zaman kan mendr. Bu men uygulamaya eklendii zaman Properties panelinde, kontrollerin ContextMenu zellii olarak bu men atanabilir.
ToolBar
ToolBar
Menlerin ilevlerine grsel ksa yollar sunar. ToolBarButton nesnelerinden oluur. ImageList kontrol ile kullanlr. Hangi dmeye basld ButtonClick olay ile anlalr.
sunan bir kontroldr. Kontroldeki eler ou zaman ImageList kontrolnn salad resimler ile gsterilir. Resim yerine yaz da gsterilebilir ancak yaz ile ilem listelemek menler ile salanr. ToolBar kontrolnde yaplacak ilemler bir ToolBarButton olarak gsterilir. ToolBar zellikleri zellik Deer Tipi Aklama
Konu: 1
7 Buttons ToolBarButtonCollection
Kontroln dmelerinin tutulduu koleksiyon Kontroldeki dmelerin boyutunu belirler. Dmelerin boyutlar ayr ayr belirlenemez. Stili DropDownButton olarak seilmi
ToolBarButton
ButtonSize
Size
DropDownArrows
Boolean
Deer Tipi
ToolBarButtonStyle
Aklama Dmenin grnm stilini belirler. PushButton deeri standart bir dmeyi, ToggleButton basld zaman basl kalan bir dmeyi, Separator deeri dmeler arasnda
bir
ayrac
temsil
stili olarak seilmise, yannda kacak meny belirler. Bu men sadece ContextMenu cinsinden olabilir.
DropDownButton
Kontroln
olup
Dmenin zerinde yazan yazy belirler kontrolne bir balanmsa, bu zellik dmenin hangi resmi gstereceini belirler.
ToolBar ImageList
ToolTipText
String
Dmelere tkland zaman almas istenen kodlar, ToolBar kontrolnn ButtonClick olayna yazlr. Ancak burada hangi dmeye basld kod yazarak bulunmas gerekir.
private void ToolBar1_ButtonClick( System.Object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e ) { switch ( ToolBar1.Buttons.IndexOf( e.Button ) ) { // Ayralar da bir ToolBarButton olduu iin // indisler kontrol edilirken buna dikkat edilmelidir case 0: // Kopyala
Konu: 1
ToolTip
ToolTip
Kontrollerin zerine gelindiinde bilgi mesaj verir. Mesaj, kontrollerin ToolTip on ToolTip1 zelliine yazlr.
Bu kontrol, form zerindeki kontrollerin zerine gelindii zaman ipucu gstermek iin kullanlr. ToolTip forma eklendii zaman, kontrollerin zelliklerinde ToolTip on [ToolTip kontrolnn ismi] eklinde bir zellik belirir. Bu zellie verilen yazlar, alma annda kontrollerin ipucunu belirler. ToolTip zellikleri zellik
Active
Deer Tipi
Boolean
Aklama Kontroln aktif olup olmadn belirler. False deerini alrsa, form zerinde ipucular grntlenmez.
AutoPopDelay,
AutomaticDelay
Integer
10
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.
InitialDelay
Integer
ReshowDelay
Integer
ShowAlways
Boolean
Konu: 1
11
StatusBar
StatusBar
Windows formlarnn durum ubuudur. ShowPanels birden fazla panelin gzkmesini salar. Paneller birden fazla durum mesaj gsterilmek iin kullanlr.
Windows uygulamalarnda formlarn altnda bulunan durum ubuunu temsil eder. Durum ubuklarnda sadece bir yaznn grntlenebildii gibi, iindeki paneller ile birden fazla durum yazs grntlenebilir. StatusBar zellikleri zellik
Panels
Deer Tipi
StatusBarPanelCollection
Aklama Kontroln iinde birden fazla yaz grntlemek iin kullanlan panelleri tutar. Birden fazla panelin gzkmesini belirler.
StatusBar kontrolnn yannda, formun boyutunu deitirmek iin kullanlan simgenin gzkmesini belirler
ShowPanels SizingGrip
Boolean Boolean
Text
String
zerinde yazan yazy belirler. Eer ShowPanels zellii True ise, bu zellikte yazlan yaz
StatusBar
12
gzkmez.
StatusBar kontrolne panel eklemek iin kontroln Panels zelliinden
yararlanlr.
Deer Tipi
StatusBarPanelAutoSize
Aklama Panelin baz durumlara gre otomatik boyutlandrmasn salar. None deeri panelin boyutunun deimeyeceini, Contents deeri, panelin ierdii yazya gre deieceini belirler. Spring deeri, durum ubuundaki bo alanlarn paylalmasn salar. Panelin kenarlk stilidir. Raised deeri, panelin bir dme gibi gzkmesini, Sunken deeri, panelin bask gzkmesini salar. None deeri, kenarlarn gzkmesini engeller. Panelin yazsnn hizalanmasnn belirler.
BorderStyle
StatusBarPanelBorderStyle
Alignment
HorizontalAlignment
Konu: 1
minimum belirler.
Style StatusBarPanelStyle
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
private void Form1_Load( System.Object sender, System.EventArgs e ) { StatusBarPanel p = new StatusBarPanel(); p.MinWidth = 100; p.AutoSize = StatusBarPanelAutoSize.Contents; p.Alignment = HorizontalAlignment.Left; p.BorderStyle = StatusBarPanelBorderStyle.Raised; p.Style = StatusBarPanelStyle.Text; StatusBar1.Panels.Add( p ); Timer1.Interval = 1000; Timer1.Start(); } private void Timer1_Tick( System.Object sender, System.EventArgs e ) { StatusBarPanel panel = new StatusBarPanel(); panel = StatusBar1.Panels[ 0 ]; panel.Text = System.Convert.ToString( DateAndTime.Now ); }
14
NotifyIcon
NotifyIcon
Windows grev ubuunda grntlenen simgedir.
Deer Tipi
Icon
Aklama Grev ubuunda gzkecek simgeyi belirler Simgeye sa tkland zaman alacak men Simge zerine gelindiinde grntlenecek yazy belirler.
ContextMenu Text
Menu String
Konu: 1
15
RichTextBox
RichTextBox
TextBox kontrolnden daha gelimi zelliklere sahiptir.
Seilen yaznn rengi, yaz tipi deitirilebilir Madde iaretleri kullanlabilir. Satr balarndaki boluklar ayarlanabilir.
Normal bir metin kutusundan daha gelimi zelliklere sahip bir kontroldr. TextBox kontrolnde yaznn yaz tipi, bykl gibi ayarlar yaplabilir. Ancak sadece seilen yaznn rengi, yaz tipi, satr ba genilii, madde iaretleri kullanm gibi ayarlar yapmak mmkn deildir. RichTextBox kontrol, bu tip zengin zelliklerin kullanlmasn salar.
RichTextBox zellikleri
RichTextBox kontrol kullancya birok seenek sunar, dolaysyla tasarm ve
alma annda eriilebilen birok zellii bulunur. Tasarm annda ulalabilecek zellikler: zellik
ZoomFactor
Deer Tipi
Single
16
deer alr.
WordWrap Boolean
Uzun yazlarn bir sonraki satra geerek grntlenmesini salar Balant olarak girilen yazlarn LinkLabel eklinde alglanmasn belirler Satrlar String dizisi olarak tutar Satrlarn madde iaretinden ka piksel akta duracan belirler
Tab tuunu bir karakter
DetectUrls
Boolean
Lines BulletIntend
String() Integer
AcceptsTab
Boolean
Satr bandaki boluun gsterilmesini belirler Satrlarn maksimum uzunluunu piksel cinsinden belirler.
RightMargin
Integer
Deer Tipi
Boolean
Aklama Kontrol iine yaz yazarken farenin gizlenmesini belirler En son yaplabilecek Undo ileminin tipini tutar
Undo ilemi yapldktan
UndoActionName
String
RedoActionName
String
Konu: 1
17
Seilen satrn hizalanmasn belirler Seilen metnin rengini belirler Seilen metnin yaz tipini belirler Seilen satrn, sol kenara olan uzakln belirler Seilen metnin uzunluunu belirler
SelectionLength
Integer
Aklama Metin kutusu iinde, parametre olarak verilen bir yazy arar. Yazy ilk grd yerin indisini dndrr. Bir dosyadan metni ykler alnan
LoadFile SaveFile
Parametre olarak verilen konumdaki dosyaya, metni yazar. Dosyann rtf veya doc uzantlarnda kaydedilmesi, zengin ieriin grntlenmesi asndan nemlidir. Yaplan alnr ilem geriye
Undo Redo
18
Aklama Metin kutusundaki yaz deitii zaman gerekleir Metin iindeki bir balantya tkland zaman gerekleir
LinkClicked
simgesinin
grev
ubuunda
ToolBar Kaydetme, dosya ama, hizalama gibi ilemlere ksa yollar salamak iin kullanlr. ImageList Ara ubuundaki dmeleri resimlerini belirlemek iin
kullanlr
SaveFileDialog Dosyalarn kaydedilmesi srasnda kullanlr. OpenFileDialog Dosyalar amak iin kullanlr. FontDialog Yaz tipini deitirmek iin kullanlr. StatusBar Dosyalar ald zaman isimlerini ve kayt durumlarn
Konu: 1
19
Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn. Kontrol Kontrol smi
ContextMenu ContextMenu1
zellik
Deer 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. Ara ubuundaki eleri temsil eden resimler ekleyin
ImageList ImageList1
Images
OpenFileDialog
OpenFileDialog1
SaveFileDialog
SaveFileDialog1
FontDialog - FontDialog1 StatusBar - StatusBar1 ShowPanels Panels True
ki tane panel ekleyin. lk panelin AutoSize zelliini Contents olarak belirleyin. Uygulamanz simge sein
True
NotifyIcon - NotifyIcon1
Icon Text
iin
bir
Notepad Uygulamas
RichTextBox RichTextBox1
Dock
Uygulamaya son olarak bir MainMenu ve ilgili alanlara MenuItem elerini ekleyin. Parantez iinde belirtilen tular, men elerine erimek iin kullanlacak ksa yollardr. Bu deerleri, men elerinin ShortCut zelliine ekleyin.
20
Dosya o Yeni (Ctrl N) o A (Ctrl O) o Kaydet (Ctrl S) o Farkl Kaydet o k Dzen o Geri Al (Ctrl Z) o Kes (Ctrl X) o Kopyala (Ctrl C) o Yaptr (Ctrl V) o Sil o Bul o Yaz Tipi o Tmn Se Grnm o Sola Hizala o Saa Hizala o Ortala o Madde aretle o Ara ubuunu gizle Yardm o Hakknda
Uygulamaya frmBul isminde yeni bir form ekleyin. Bu form, metin kutusunda aranan deeri bulmak iin kullanlacaktr. Forma, arama ilemleri iin gereken kontrolleri ekleyin. Kontrol Kontrol smi
Button Button1 Button Button2 CheckBox cbTumKelimeyiSec
zellik
DialogResult Text Text Text Checked
TextBox txtAranan
Konu: 1
21
Kontrolleri ekledikten sonra Button1 ve Button2 dmelerinin Click olayna, formu kapatan kodlar yazn:
private void Button1_Click( System.Object sender, System.EventArgs e ) { this.Close(); } Uygulamaya frmHakkinda isminde yeni bir form ekleyin. Bu form, uygulama
bilgilerini ierir.
Kodlarn yazlmas
Dosya ismini ve dosyann kaydedilip edilmediini tutan deikenleri tanmlayn
private bool Kaydedildi = true; private string DosyaIsmi;
Men elerine kod eklemeden nce, yaplacak ilemler yordamlar iine yazlr. Bylece kodun karmakl azalr ve deiiklik yapmak kolaylar. Durum ubuunda deiiklik yapma ilemlerini yazn. Durum ubuu, dosya ama kaydetme gibi ilemler sonunda deiecektir
public void DurumDegistir() { StatusBar1.Panels[ 0 ].Text = DosyaIsmi; if ( Kaydedildi ) { StatusBar1.Panels[ 1 ].Text = "Kaydedildi"; } else { StatusBar1.Panels[ 1 ].Text = "Kaydedilmedi"; } }
22
// Kaydetme ilemi public void Kaydet() { if ( DosyaIsmi == "" ) { FarkliKaydet(); } else { RichTextBox1.SaveFile( DosyaIsmi ); Kaydedildi = true; } DurumDegistir(); } // Farkl kaydetme ilemi public void FarkliKaydet() { string dosya; // Kaydedilecek yeri semek iin // SaveFileDialog kutusu gsterilir salanr // Dosya yoksa otomatik olarak oluturulmas SaveFileDialog1.CreatePrompt = true; if ( SaveFileDialog1.ShowDialog() == DialogResult.OK ) { dosya = SaveFileDialog1.FileName; RichTextBox1.SaveFile( dosya ); DosyaIsmi = dosya; Kaydedildi = true; } DurumDegistir(); }
Yeni bir dosya veya var olan bir dosyay ama ilemlerini tanmlayn.
public void DosyaAc( bool yeniDosya ) { if ( !( Kaydedildi ) ) { switch ( MessageBox.Show( "Dosya kaydedilsin mi?","", MessageBoxButtons.YesNoCancel) ) { case DialogResult.OK: // Kaydetme ilemi yaplr Kaydet(); break; case DialogResult.Cancel: // lem iptal edildi return; } } if ( !( yeniDosya ) ) { // Varolan bir dosya alr. string dosya = null; if ( OpenFileDialog1.ShowDialog() == DialogResult.OK ) { dosya = OpenFileDialog1.FileName; RichTextBox1.LoadFile( dosya ); DosyaIsmi = dosya; } } else {
Konu: 1
23
// Yeni bir dosya alr RichTextBox1.Clear(); DosyaIsmi = ""; } Kaydedildi = true; DurumDegistir(); }
Bulma ilemlerini gerekletiren kodlar yazn. Burada yeni bir form alp, orda girilen deerlere gre arama ilemi yaplr.
public void Bul() { // Bulma formu grntlenir, iptal tuuna basldysa frmBul bul = new frmBul(); if ( !( bul.ShowDialog() == DialogResult.OK ) ) string aranan = bul.txtAranan.Text; if ( aranan == "" ) { return; }
klr
{ return; }
// Bulduktan sonra kelimenin tmn iaretlenmesi bilgisi alnr bool TumKelimeyiSec = bul.cbTumKelimeyiSec.Checked; // Bulunan ilk indis alnr. int start = RichTextBox1.Find( aranan ); if ( !( TumKelimeyiSec ) ) { // Sadece aranan kelime seilir. RichTextBox1.Select( start, aranan.Length ); } else { int son = start; int bas = start; while ( son < RichTextBox1.Text.Length - 1 && RichTextBox1.Text.Substring( son, 1 ) != " " ) { son += 1; } while ( bas > -1 && RichTextBox1.Text.Substring( bas, 1 ) != " " ) { bas -= 1; } ); } } RichTextBox1.Select( bas + 1, son - bas - 1
Dikkat:
eklediiniz dmelerin indis numaral ile farkllk gsterebilir. Yaplan ilemler yorum satr olarak geilmitir. Bu ilemleri, dmelerin indislerine gre tekrar dzenleyin. Dmelerin indislerini renmek iin ToolBar kontrolnn Buttons zelliine bakn.
24
private void ToolBar1_ButtonClick( System.Object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e ) { // Baslan dmenin indisine gre ilem yaplr. switch ( ToolBar1.Buttons.IndexOf( e.Button ) ) { case 0: //Kaydet Kaydet(); break; case 1: // Ac DosyaAc(False); break; case 3: // Kopyala RichTextBox1.Copy(); break; case 4: // Kes RichTextBox1.Cut(); break; case 5: // Yaptr RichTextBox1.Paste(); break; case 7: // Geri Al RichTextBox1.Undo(); break; case 8: // Tekrarla RichTextBox1.Redo(); break; case 10: // Madde iaretle RichTextBox1.SelectionBullet = Not RichTextBox1.SelectionBullet; break; case 11: // Sola Hizala RichTextBox1.SelectionAlignment = HorizontalAlignment.Left; break; case 12: // Ortala RichTextBox1.SelectionAlignment = HorizontalAlignment.Center; break; case 13: // Saa Hizala RichTextBox1.SelectionAlignment = HorizontalAlignment.Right; break; } }
Dosya iinde bulunan bir balantya tkland zaman, bu balanty ilgili taraycda aan kodlar yazn.
// Linke git
Konu: 1
// Kapanrken dosyann kaydedilmesi kontrol edilir. private void Form3_Closing( object sender, System.ComponentModel.CancelEventArgs e ) { if ( !( Kaydedildi ) ) { switch ( MessageBox.Show ("Dosya kaydedilsin mi?", "", MessageBoxButtons.YesNoCancel) ) { case DialogResult.OK: // Kaydetme ilemi yaplr Kaydet(); break; case DialogResult.Cancel: // ilem iptal edildi e.Cancel = true; break; } } }
Her men esinin altna, ilgili ilemleri yazn. Burada dikkat edilmesi gereken nokta, baz ContextMenu elerinin ve MainMenu elerinin ayn ilemi yaptdr. rnein Geri Al komutu, her iki mende de vardr. Bu kodlar farkl yordamlar yerine, ayn yordamn iine yazarak Handles ifadesine iki men esinin Click olay yazlr.
rnek:
private void MenuItem19_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.Undo(); }
Bu kodda belirtilen men isimleri, uygulamanzda MainMenu veya ContextMenu kontrolne eklediiniz menlerin isimleri ile farkllk gsterebilir. Yaplan ilemler yorum satr olarak geilmitir. lgili men esine ift tklayarak Click olaynda, burada belirtilen ilemleri yazn.
Dikkat:
26 DosyaAc(True); }
// Dosya A private void MenuItem14_Click( System.Object sender, System.EventArgs e ) { DosyaAc(False); } // Kaydet private void MenuItem15_Click( System.Object sender, System.EventArgs e ) { Kaydet(); } // Farkl Kaydet private void MenuItem16_Click( System.Object sender, System.EventArgs e ) { FarkliKaydet(); } // k private void MenuItem18_Click( System.Object sender, System.EventArgs e ) { Application.Exit(); } // Geri al private void MenuItem19_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.Undo(); } // Kes private void MenuItem21_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.Cut(); } // Kopyala private void MenuItem22_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.Copy(); } // Yaptr private void MenuItem23_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.Paste(); } // Yaz sil private void MenuItem24_Click( System.Object sender, System.EventArgs e ) { // silinecek kelime RichTextBox kontrolnde seilen kelimedir string silinecek = RichTextBox1.SelectedText; // secilen kelimenin indisi bulunur int i = RichTextBox1.SelectionStart; RichTextBox1.Text = RichTextBox1.Text.Remove(i, silinecek.Length);
Konu: 1
27 } // Tm yazy se private void MenuItem28_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.SelectAll(); } // Yaz tipini se private void MenuItem36_Click( System.Object sender, System.EventArgs e ) { // Font seerken, renklerin de grnmesi salanr. FontDialog1.ShowColor = True; if (FontDialog1.ShowDialog == DialogResult.OK) { RichTextBox1.SelectionFont = FontDialog1.Font; } } // Sola Hizala private void MenuItem29_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.SelectionAlignment = HorizontalAlignment.Left; } // Saa Hizala private void MenuItem30_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.SelectionAlignment = HorizontalAlignment.Right; } // Ortala private void MenuItem32_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.SelectionAlignment = HorizontalAlignment.Center; } // Madde iaretle private void MenuItem33_Click( System.Object sender, System.EventArgs e ) { RichTextBox1.SelectionBullet = Not RichTextBox1.SelectionBullet; } // Hakknda formunun gsterilmesi private void MenuItem34_Click( System.Object sender, System.EventArgs e ) { frmHakkinda hakkinda = New frmHakkinda(); hakkinda.ShowDialog(); } // Ara ubuunun gizlenmesi, MainMenu ve Toolbar kontrolne // atanan ContextMenu yaplr. private void MenuItem37_Click( System.Object sender, System.EventArgs e ) { ToolBar1.Visible = MenuItem37.Checked; MenuItem37.Checked = Not MenuItem37.Checked;
28 }
MDI Formlar
MDI Formlar
Multiple Document Interface Bir ok alt formu barndran formlardr. Bu formlarn IsMdiContainer zellii True yaplr. Alt formun MdiParent zellii, ait olduu ana formu belirler MdiChildren zellii alt form dizisini verir.
Multiple Document Interface formlar, iinde birden fazla form barndran formlardr. MDIChild olarak eklenen bu formlar birbirinden tamamen bamszdr. rnein bir Excel dosyas iinde birden fazla sayfa olabilir. Bu sayfalar ana forma baldr. Ana form kapand zaman bu sayfalar da kapanr. MDIParent olarak nitelendirilen bu ana formlarn, MDIChild formlarn amak ve ynetmek iin menlere ihtiyalar vardr. Formlar MDI olarak tanmlamak iin IsMdiContainer zelliinin True olarak ayarlanmas gerekir.
Konu: 1
29
MDI formlara alt formlar eklemek iin, form oluturma ilemleri bilinen ekilde yaplr. Ancak formun MDIParent zellii belirlenmelidir.
AltForm f = New AltForm(); // Oluturulan form, ana forma balanr. f.MdiParent = this; f.Show();
Bir formun sahip olduu alt formlara ulamak iin, MDIChildren zelliinden yararlanlr. Bu zellik tek boyutlu bir Form dizisidir.
// Tm formlar kapatr. // Alt formlar kapand zaman, dizi otomatik olarak // yeniden boyutlandrlr. while (this.MdiChildren.Length > 0) { this.MdiChildren[0].Close(); } // Tm formlar Minimize eder for (int i = 0; i < Me.MdiChildren.Length; i++) { this.MdiChildren[i].WindowState = FormWindowState.Minimized; }
Alt formlar geniletildiklerinde, form zerinde yazan bal ana forma tanr. Alt formda tanml bir men, ana formun mens ile birleir. Bu men birleim ilemine Merge denir. Men eleri varsaylan olarak, ana formdaki menlerin yanna eklenir. Ancak men elerinin MergeType zellii ile varsaylan deer deitirilebilir.
MergeType.Add
Varsaylan deerdir. Bu deeri alan men eleri, birleme sonucunda menye eklenir.
MergeType.MergeItem
Bu deeri alan menler, sonu mensnde ayn MergeOrder deerindeki menlerle birleir.
MergeType.Replace
30
Alt formlar, ana forma basamak eklinde eklenir. Birok alt form ile allyorsa bu formlarn dzenlenmesine ihtiya duyulur. Alt formlar dzenlemek iin formun LayoutMdi metodu kullanlr.
this.LayoutMdi(MdiLayout.TileHorizontal) this.LayoutMdi(MdiLayout.TileVertical) this.LayoutMdi(MdiLayout.Cascade) this.LayoutMdi(MdiLayout.ArrangeIcons)
MDI Form iindeki alt formlardan seili olana ulamak iin, formun ActiveMdiChild zellii kullanlr.
if (! this.ActiveMdiChild == null) { this.Text = this.ActiveMdiChild.Text; }
Konu: 1
31
Fare Olaylar
Fare olaylar
MouseEventArgs, olayla ilgili parametreleri tutar. MouseDown
Dmeye basld zaman gerekleir.
MouseUp
Baslan dme kaldrlnca gerekleir.
MouseMove
Kontroln zerinde hareket edince gerekleir.
Fare olaylar, formlar zerinde farenin bir tuunun tklanmas, zerine gelmesi gibi olaylardr. Bu olayla ilgili parametreler, olay gerekletii zaman MouseEventArgs nesnesi ile kullancya bildirilir.
MouseEventArgs zellikleri: Button Click
Hangi fare dmesine basldn gsterir. Olay gerekleene kadar, dmeye ka defa basldn belirler. rnein fareye ift tklanmsa 2 deerini alacaktr.
Delta X Y
Farenin ortadaki dmesinin dnme orann gsterir. Kontrole gre, farenin tkland pozisyonun x koordinatn gsterir. Kontrole gre, farenin tkland pozisyonun y koordinatn gsterir. NOT: Fare olaylar MDI formlar zerinde gereklemez.
MouseDown olay
Farenin herhangi bir dmesi basld zaman gerekleir. Kontroln Click olaynda nce alr.
32
MouseUp olay
Farenin baslan dmesi kaldrld zaman gerekleir.
MouseMove olay
Farenin, kontrol zerinde hareket etmesi ile gerekleir.
salar.
StatusBar Seilen dosyalarn konumlarn grntlemeyi salar. ListBox Alt klasrlerin listelenmesi iin kullanlr.
Kontrollerin eklenmesi
Form zerine tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn. Kontrol Kontrol smi
Form ContextMenu ContextMenu1
zellik
isMDIContainer
Deer
True
Alt Klasrler, Kaldr deerlerini ieren men eleri ekleyin Yeni Konum, Dosya
MainMenu MainMenu1
Konu: 1
33
Uygulamaya DosyaBilgileri isminde yeni bir form ekleyin. Form iine tablodaki kontrolleri ekleyin ve zelliklerini ayarlayn. Kontrol Kontrol smi
MainMenu MainMenu1
zellik
ListBox ListBox1
Dock
Fill
Kodlarn yazlmas
Ana Form Belirtilen konumdaki klasrleri listeleyen kodlar yazn.
= public string[] KlasorleriAl( string konum ) { string[] klasorler System.IO.Directory.GetDirectories( konum + @"\" );
for (int i=0; i<=klasorler.Length - 1; i++ ) { klasorler[ i ] = klasorler[ i ].Remove( 0, konum.Length + 1 ); } return klasorler; }
Form zerinde grntlenecek klasrlerin bulunduu yeri tutan deikeni ve yeni formun almasn yazn.
private string YeniKonum;
public void FormBilgileri() { DosyaBilgileri f = new DosyaBilgileri(); f.MdiParent = this; f.Text = YeniKonum + TreeView1.SelectedNode.FullPath; f.KlasorleriListele(); f.Show(); }
Yeni konumu seen men altna, TreeView kontrolnde alt klasrleri listeleyen kodlar yazn
34
YeniKonum = Microsoft.VisualBasic.Interaction.InputBox( "Konum girin:", "Yeni Konum", @"C:\", -1, -1 ); string[] klasorler = KlasorleriAl( YeniKonum ); for (int i=0; i<=klasorler.Length - 1; i++ ) { TreeView1.Nodes.Add( klasorler[ i ] ); } TreeView1.SelectedNode = TreeView1.Nodes[ 0 ]; }
TreeView kontrolnde bir klasr seildii zaman durum ubuunda klasrn ismini grntleyen kodlar yazn.
private void TreeView1_AfterSelect( System.Object sender, System.Windows.Forms.TreeViewEventArgs e ) { StatusBar1.Text = YeniKonum + TreeView1.SelectedNode.FullPath; } ContextMenu iinde tanmlanan ilemleri yazn.
// Alt klasrler private void MenuItem3_Click( System.Object sender, System.EventArgs e ) { TreeNode secilen = TreeView1.SelectedNode; secilen.Nodes.Clear(); string konum = YeniKonum + secilen.FullPath; string[] altKlasorler = KlasorleriAl( konum ); { } for (int i=0; i<=altKlasorler.Length - 1; i++ ) secilen.Nodes.Add( altKlasorler[ i ] ); }
// Seilen klasrn listeden kaldrlma ilemi private void MenuItem4_Click( System.Object sender, System.EventArgs e ) { TreeNode secilen = TreeView1.SelectedNode; if ( secilen == null ) { return; } if ( secilen.Parent == null ) { TreeView1.Nodes.Remove( secilen ); } else { secilen.Parent.Nodes.Remove( secilen ); } }
// Dosya bilgileri MainMenu esine tklandnda private void MenuItem5_Click( System.Object sender, System.EventArgs e ) { FormBilgileri(); }
Konu: 1
35
// Dosya bilgileri TreeView esine ift tklandnda private void TreeView1_MouseDown( object sender, System.Windows.Forms.MouseEventArgs e ) { if ( e.Clicks == 2 ) { FormBilgileri(); } }
Farenin ortadaki tekerleinin dndrlmesi ileminde, TreeView iinde seilen eden bir nceki veya bir sonraki eye gidilmesi iin gereken kodlar yazn.
private void TreeView1_MouseWheel( object sender, System.Windows.Forms.MouseEventArgs e ) { if ( TreeView1.SelectedNode == null ) { return; } if ( e.Delta < 0 ) { TreeNode sonraki = TreeView1.SelectedNode.NextNode; if ( !( sonraki == null ) ) { TreeView1.SelectedNode = sonraki; } } else { TreeNode onceki = TreeView1.SelectedNode.PrevNode; if ( !( onceki == null ) ) { TreeView1.SelectedNode = onceki; } } }
private void MenuItem3_Click( System.Object sender, System.EventArgs e ) { string yeniKlasor = Interaction.InputBox( "Yeni klasr ismi girin:", "", "", -1, -1 ); yeniKlasor = yeniKlasor.Insert( 0, this.Text + @"\" ); System.IO.Directory.CreateDirectory( yeniKlasor ); KlasorleriListele(); }
36
zet
Menler
MainMenu, ContextMenu
1. MainMenu ve ContextMenu nesnelerini ve kullanm alanlarn aklaynz. Kontrolleri ieren bir uygulama gelitirin. 2. ImageList kontrolnn kullanm amacn ve kullanmn aklaynz. Kontol ieren bir uygulama gelitirin. 3. SDI ve MDI form yaplarn aklaynz ve her iki tr iin birer rnek uygulama gelitirin.
Hedefler
Access ortam Veri tipleri Veri modelleme teknikleri
Birok irket, kurum ve kaytlarn tutan yaplar iin verinin nemi ok byktr. Verilerin kt zerinde tutulmas hem aramalarn yaplmas hem de kayt dzeni asndan ok zor bir yntemdi. Bilgisayarlarn i yaamnda kullanlmaya balanmas ile verilen ynetimi daha da kolaylat. Ancak bu teknoloji ilerledike kullanlmas zorlamaya balad. Verilerin tutulmas metin dosyalarndan tablolara aktarld. Gnmzde veri ve tablo yaplarnn ynetimi artk veritaban yneticilerin eline braklm durumdadr. Windows ve Web uygulamalarn ou veri zerine younlar. Uygulamalarda veriye hzl bir ekilde ulamak ve veriyi ynetmek iin tablo yaplarnn iyi bir ekilde modellenmesi gerekmektedir. Bu modlde Microsoft Access veritaban zerinde veri yaplarnn kullanlmas ilenir. Bu modl tamamladktan sonra: Microsoft Access ortamn tanyacak, Veritabanlarnda kullanlan deiik veri tiplerini tanyacak, Veri modelleme tekniklerini reneceksiniz.
Access Ortam
Access ortam
Grev Blmesi
Balang Yardm Arama Sonular Dosya Arama Yeni Dosya
Tablo oluturmak
Tasarm grnmnde tablo Sihirbaz ile tablo Veri girerek tablo
Access ortam, veritaban gelitirirken kullancya birok kolaylk sunar. Access ald zaman sa panelde Grev Blmesi kar. Bu panel birok ileme ksa yol salar. Balang Access Office Online balang sayfasdr. Microsoft haber sitelerine balantlar ve en son alan veritabanlarn listeler. Yardm Online yardm seeneklerini sunar Arama sonular Online yardmda bulunan sonular listeler Dosya Arama Belirtilen yerde, belli tipte dosyalar aramay salar. Yeni Dosya
Konu: 1
Yeni bir veri taban dosyas veya veri eriim dosyas amak iin kullanlr.
Bo veritaban komutu verildii zaman Yeni Veritaban Dosyas diyalog kutusunda, dosya ismi girilip yeni veritaban oluturulur. Oluturulan veritaban dosyalarnn uzants mdb olur. Daha nceden oluturulmu bir veritabann amak iin Dosya mensnden A komutu verilir. Ctrl O ksa yolu da dosyalar amak iin kullanlabilir. Veritaban ald zaman, veritaban zerinde yaplabilecek tm ilemleri sunan bir pencere kar. Veritaban nesnelerini ynetilmesi bu pencere ile yaplr. Sol panelde bulunan nesneler sekmesinde, veritabannda bulunabilecek tm nesneler listelenmitir. Bir nesne tipi seildiinde, veritabannda bulunan bu tipteki tm eler grntlenir. rnein Tablolar sekmesine gelindiinde veritaban zerindeki tablolar grntlenir, yeni tablo oluturmak iin seenekler sunulur.
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.
Konu: 1
Bu seenek ile tablolar veri girii ile oluturulur. Access kullancnn girdii verilere gre alan says ve tipi belirler. Ancak alan adlarn daha sonradan deitirilmelidir.
Oluturulan tablolar tasarm ve veri sayfas grnmlerinde incelenebilir. Veri sayfas grnm kullancya veri girmesi iin byk kolaylklar salar. rnein Evet/Hayr veri tipindeki bir alan veri girilmesi iin bir CheckBox grntlenir. Ayrca tablonun ilikide olduu tablolar bulunur ve alt tablo olarak kullancya sunulur.
Tablolar oluturulduktan sonra aralarndaki ilikilerin kurulmas grntlenmesi iin ara ubuunda likiler dmesi kullanlr.
ve
Veri Yaplar
Metin Veri Tipleri
Text, Memo
Konu: 1
Not (Memo) Maksimum 65535 karakter tutar. Byk metinsel veriler iin tercih edilmelidir.
Konu: 1
Normalizasyon, yer alanndan kazanma, veri tutarll ve leklenebilirlik amacyla tablolardan gereksiz verilerin kartlmas ilemleridir. Bu ilemler, tablolarn etapta normal formlara getirilmesi ile gerekleir.
Bu ilem, yatay dzeyde gereksiz veya tekrarlanan verilerin kartlmasdr. Satrlarda en az dzeyde veri tutulmas ve bir bilginin sadece bir kolonda bulunmas salanr. rnek: Bu rnekte bir eitmen grubunun yapt projeler bir veritabannda tutulur. Verilerin tek bir tabloda tutulmas baz problemlere yol aacaktr. Eitmen1 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 projeleri iki eitmen ile snrlanm oluyor. Ancak bir kitab birok eitmenin yazd durumlar da olabilir.
10
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
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 yaplma olasl artar. Dolaysyla veri btnl bozulur. rnein Mhendislik Kitab yerine Muhendis Kitapi gibi bir veri girildii zaman, alnacak raporlarda elikiler meydana gelir. Dolaysyla bu tekrarlanan verilerin ayr bir tabloda tutulmas gerekir. Eitmen No 1 2 Eitmen Ali Veli
Konu: 1
11
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 ile ulalacaktr. Dolaysyla tablolarda onlarca karakterin tekrarlanmas yerine, verileri temsil eden numaralar tekrarlanacaktr. Bu durum hem veritabannn bymesini engeller hem de tablo zerinde kayt aramalarn hzlandrr. Tablolar birbirinden ayrldktan sonra projelerin hangi eitmenler tarafndan yapld ve hangi konularda olduu bilgileri kaybedilmitir. Bu bilgilerin elde edilmesi iin tablolar arasnda ilikiler kurmak gereklidir. likilerin kurulmas iin tablolarn, birbirlerine referans vermesi gerekir. Yani bir tablodan dierine ulamak iin bir bilgi gerekir. rnein bir projenin hangi konuda olduunu belirlemek iin, konu numarasna ihtiya vardr. Bu numara, projenin hangi konuda olduunu belirleyecektir. Tablolar arasnda ilikileri kurmak iin bu numaralarn doru biimde kullanlmas gerekir. Bu numaralar davranlarna gre ikiye ayrlr.
12
Primary Key
Bir ya da birden fazla alan Primary Key yaplabilir. Alanlardaki veriler tekrarlanamaz.
Tablonun bir ya da birden fazla alan, tek bir veriyi temsil etmesi iin Birincil
Anahtar yaplr. Bu anahtar verinin bir daha tekrarlanmamasn salar ve
ilikiler kurulurken ana tabloyu belirler. rnekteki Birincil Anahtar olan alanlar Eitmen No, Proje No ve Konu No alanlardr. Birden fazla alann Birincil Anahtar olarak tanmlanmas, alanlarn tuttuu verinin birleik olarak tekliini salar. rnein sipari detaylar tablosunda, sipari numaras ile rn numarasnn beraber tekrarlanmamas gerekir. Aksi halde bir sipariteki rnn iki farkl adet, indirim vs. bilgileri olacaktr. Sipari No 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 veri tutmamasdr. rnekte 100 numaral siparite 680 numaral rn kayd iki defa gemitir. Yaplacak sorgularda, bu rnn siparite 1 adet olduu ve 0 YTL indirim yapldn, ayn zamanda 2 adet olduunu ve indirimin 5 YTL olduu grlr. Bu da verinin tutarlln bozar.
Konu: 1
13
Access ile tablolarda Birincil Anahtar oluturmak iin, istenen alanlar seilerek ara ubuundaki Birincil Anahtar dmesine baslr.
Foreign Key
Baka bir tablonun Primary Key alanna referans gsterir likideki Primary Key zerinde gncelleme ve silme ilemleri, bu alanda da yaplabilir.
Cascade Update Cascade Delete
Bir tablo iinde baka bir tabloya referans vermek iin, o tablonun numaras kullanlr. Yani o tablonun Birincil Anahtar alanna gnderme yaplr. Bu ilemin yaplmas iin, referans gnderen tabloda bu verinin tutulmas gerekir. Farkl bir tablonun birincil anahtarn tutan alana Yabanc Anahtar denir. rnein, ark listesinin tutulduu bir tabloda albm numaras, albmler tablosundaki Birincil Anahtar olan alana referans verir.
14
Bu anahtarlarn kullanm ilikilerin tanmlanmasnda byk neme sahiptir. Tablolarn normalizasyonunun salanmas iin birbirleriyle ilikilendirilmeleri gerekir. eit iliki vardr. 1. Bire bir iliki (One to One) 2. Bire sonsuz iliki (One to Many) 3. Sonsuza sonsuz iliki (Many to Many) Access ile tablolar arasndaki ilikiler, bir alannn srklenip dier tablodaki bir alann zerine braklmas ile kurulur. Access bu alanlarn Birincil Anahtar olup olmadna bakarak ilikinin cinsini belirler.
liki tanmlanrken kan likileri Dzenle penceresinde, tablolardaki hangi alanlar zerinde iliki kurulaca gsterilir. Buradan ilikinin tr davran hakknda zel ayarlamalar yaplr. Bilgi Tutarllna Zorla (Enforce Referential Integrity) Bir tablodaki verinin dier tabloda var olup olmadn kontrol eder. likili Alanlar Ardarda Gncelle (Cascade Update) Birincil Anahtar zerinde bir deiiklik yaplmsa, ilikide olduu tablolardaki Yabanc Anahtar alanlar da deitirir.
likili Kaytlar Ardarda Sil (Cascade Delete) Tabloda bir kayt silindii zaman, ilikide olduu tablolardaki veriler de silinir.
Konu: 1
15
Unique Constraint
Primary Key dndaki alanlarn tekil olmas Unique tanmlanrken alan indekslenir.
Baz durumlarda, Birincil Anahtar olmayan alanlarn bazlarnn da tabloda birden fazla gemesi istenmez. rnein renci tablosundaki bir numara baka bir renci iin geerli deildir. Ya da sicil tablosundaki bir TC kimlik numaras da tekrarlanmaz. Bu alanlarn Tekil olarak tanmlanmas gerekir. Access ile tablo tasarlarken, alanlarn Tekil olarak tanmlanmas indekslemeyi gerektirir. Bir alann indekslenmesi, tabloda aramalarn o alan zerinden daha hzl yaplmasn salar. Ancak her alan zerinde indeks kullanlmamaldr. Bu durum sorgularn performansn artrmak yerine drr. zerinde ska sorgu altrlan alanlar indekslenebilir.
16
Konu: 1
17
Tablolarn birinci normal forma getirilmesi iin ilikilerin kurulmas gerekir. Bu durumda, ayrlan tablolarn birbirleri ile ilikiler saptanmas ve bunun sonucunda Yabanc Anahtar alanlarnn eklenmesi veya ara tablolarn oluturulmas gerekir. rnein, Proje ile konular arasnda bir sonsuza sonsuz bir iliki vardr. Bir projenin birden fazla konusu olabilir ve bir konuda birden fazla proje yaplabilir. Bunun iin ara tablonun kurulmas gerekir. Konu No 500 501 Konu Windows Web
18
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
Konu: 1
19
Birinci normal form satr baznda gereksiz verilerin kartlmasyd. kinci normal form ise kolon baznda veri tekrarn kontrol eder. Eer bir kolonda bir veri, birden fazla kullanlyorsa bu verilerin ayr bir tabloda tutulmas gerekir. rnekte kurum ismi BilgeAdam, tm satrlar iin yazlmtr. Dolaysyla bu kolonda veri tekrar yaplmtr. Bu kurum ismi ayr bir tabloda tutulup, ana tabloda numaras ile referans gsterilmelidir. Kurum No 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 iin bir Yabanc Anahtar eklenir. Proje No 100 101 Proje Uzmanlk Kitab Mhendislik Kitab Saat 300 350 Kurum No 221214 221214
20
nc Normal Form
nc Normal Form
Primary Key ile direk ilikisi bulunmayan alanlar ayr bir tabloya alnr.
nc normal formda tablonun, Birincil Anahtar ile direk ilikisi bulunmayan, ancak dier alanlara bal alanlar bulunur. rnein kurumlar tablosunda ehir ismi alan, kurum ile dorudan balants yoktur. Adres alan ile daha ok balantldr. Bu alanlarn ayr bir tabloya alnmas nc derece normalizasyondur. Tablolar ayrldktan sonra aralarndaki ilikiler belirlenmelidir. Bu rnekte bir kurumun birden fazla adresi olabilir. Ancak bir adres, sadece bir kuruma aittir. Kurum No 221214 Adres No 17982 Kurum smi BilgeAdam 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.
Konu: 1
21
ehir smi stanbul ehir No 34 Adres Barbaros Bulvar Beikta Kurum No 221214
(Sehirler Ornek_likiler)
22
Firmalar: Firma bilgileri ayr bir tablo olarak tutulur. Bilgi olarak adres, mteri temsilcisi ismi, e-posta ve web sayfas tutulur.
Sipariler: rnler satn alndktan sonra, sipari bilgisi olarak kayda geer. Siparilerin nakliye creti, sipari verilme ve gnderilme tarihi, havale ile deme durumlarnda son deme tarihi, gnderilecek adres, denip denmedii ve
Konu: 1
23
sipariin iptal edilip edilmedii gibi bilgileri tutulur. Ayrca sipariin hangi kaytl kullancnn verdiini de tutmak gerekir. Bir siparii sadece bir kullanc verebilir ve bir kullanc birden fazla sipari verebilir. Dolaysyla bir sonsuz bir iliki oluturmak iin kullanc numaras Yabanc Anahtar olarak tanmlanmaldr.
Sipariler ile rnler arasnda sonsuza sonsuz bir iliki vardr. Yani bir siparite birden fazla rn bulunabilir. Bir kullanc ayn anda birden fazla rn almak isteyebilir. Ayn ekilde bir rn birden fazla siparite bulunabilir. Yani bir rn birden fazla kullancya satlabilir. Bu durumda sipariler ile rnler arasnda ayr bir tablo yaplmas gerekir. Bu ara tablo, bir sipariteki bir rn bilgisini tutacaktr. Dolaysyla bu tabloyu daha etkin bir ekilde kullanlabilir. rnein belli bir siparite bir rnden ka tane alnd ancak bu tabloda tutulabilir. Ve bu rn, yaplan bir kampanyadan alnyor olabilir. Bylece bu kaytta kampanya bilgilerinin de tutulmas gerekir.
24
Stok Merkezleri: rnlerin belirli ehirlerde veya belirli merkezlerdeki stoklar tutulmas gerekir. Sipariin verildii yere en yakn stoktan rn gndermek iin bu stok blgelerinin tutulmas gerekir. Bu stokun adres, e-posta, merkez olup olmad bilgileri tutulmaldr.
Konu: 1
25
Stok ile rnler arasnda sonsuza sonsuz bir iliki vardr. Yani bir stok merkezinde birden fazla rn bulunabilir ve bir rn birden fazla stok merkezinde bulunabilir. Bu iliki iin ara bir tablo yaplmaldr.
26
Yorumlar: Kullanclarn yaptklar yorumlarn bir tabloda tutulmas gerekir. Ancak burada dikkat edilmesi gereken nokta, bir kullancnn yorum yazmas iin sisteme giri yapmas gerekmez. Dolaysyla burada kullanclar tablosuna bir referans gstermeye gerek yoktur. Yorumlar yazan kiileri takma adlar, yazd yorumlar, tarih ve verdii puan tutulmaldr. Ayrca yorumun hangi rn hakknda yapldn belirten ve rnler tablosuna referans gsteren bir Yabanc Anahtaralannn tutulmas gerekir.
Konu: 1
27
Sepetim: Kullanclarn rnleri inceledikten sonra sepetlerinde saklamas iin oluturulan bir tablodur. Bu tabloda rn numaras ve kullanc numarasna referans gsterilmelidir. Bu rnlerin eklenme tarihi ve adeti de tabloda tutulmaldr. Kullanclar rnleri, srekli sepete ekleyip kartabilir. karma ileminde, verinin tablodan silinmesi gerekir. Ancak bir kaydn srekli eklenip silinmesi performans drr. Dolaysyla rnn sepetten kartldn belirleyen bir yes/no veri tipinde alan belirlenebilir. Bu alann deeri evet ise rn sepettedir ve kullancya gsterilir. rnn tekrar ekleme ileminde ise sadece bu alan gncellenir.
Kampanyalar: Kullancya sunulan kampanyalar e-ticaret kavramnda nemli bir yer alr. Bu kampanyalar bir ya da birden fazla rnn belli tarihler arasnda toplam fiyatta belli bir indirim yaplmasyla gerekleir. Kampanya tablosunda kampanyann balang biti tarihleri, devam edip etmedii, ve yaplan indirim birer alan olarak tutulmaldr.
28
Bu durumda bir kampanyada birden fazla rn olabilir. Bir rn ise birden fazla kampanya dhilinde olabilir. Dolaysyla ara tablo eklenerek sonsuza sonsuz bir iliki kurulmaldr.
Konu: 1
29
zet
Menler
MainMenu, ContextMenu
1. Veritaban ynetim sistemi kavramn ve bu sistemlere neden ihtiya duyulduunu aklayn. 2. Microsoft Access platformunun avantajlarn aklayn.
30
3. Microsoft Access'te yer alan veri trlerini ve kullanm alanlarn aklayn. 4. Birincil Anahtar ve Yabanc Anahtar yaplarn ve kullanm alanlarn aklayn. rnek bir veri taban gelitirin.
Hedefler
Select cmlesi: Sorgulama Update cmlesi: Gncelleme Insert cmlesi: Veri Ekleme Delete cmlesi: Silme Join: Tablolar birletirme
SQL dili (Structured Query Language), veritabanlar zerinde sorgu yapmak iin kullanlan bir dildir. Sorgular, analiz aamalarnda, veri eklerken gncellerken ve silerken kullanlr. Sorgular tek bir tablo zerinde yaplabilecei gibi birok tablodan veri okunmay salar. Sorgular zerinde konan kriterler, detayl veri analizi yapmak iin kullanlr. Bu modl tamamladktan sonra
Select cmleleri ile tablo sorgulayabilecek,
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.
Access ile sorgular grntlemek, oluturmak iin veritaban penceresinden sorgular sekmesi seilir. Sorgular iki ekilde oluturulabilir. Tasarm grnmnde sorgu Sorgular, istenen tablolar ve gerekli alanlar eklenerek oluturulur. Burada sorgunun farkl grnm ekli vardr. Tasarm grnm, SQL grnm ve Veri sayfas grnm.
Tasarm grnmnde sorgular, tablolarn grsel olarak eklenip, alanlarnn seilmesi ile oluturulur. Tablolar balama ilemleri, kriterler ve alan isimlerinin SQL diline evrilmesi Access tarafndan yaplr.
Konu: 1
SQL grnmnde sorgular, SQL cmlesinin kullanc tarafndan yazlarak oluturulur. Bu modlde sorgular, bu grnmde oluturulacaktr.
Veri sayfas grnmnde, SQL sorgusunu altrldktan sonra verilerin grnmdr. SQL sorgular altrldktan sonra da bu grnme geilir.
Sihirbaz ile sorgu Access sihirbaz, tablolar zerinde yaplacak sorgularn kolay ve hzl bir ekilde oluturulmasn salar.
Select Sorgusu
Tablolardan veri ekmek iin kullanlr. From ile tablolar belirtilir. Where ifadesinden sonra kriterler yazlr.
SELECT Alanlar FROM Tablo smi WHERE Kriterler
Sorgunun yaps Select Alanlar From Tablo smi Where Kriterler eklindedir. Bu cmlede Select kelimesinden sonra gelen alanlar, tablolar oluturulan kolonlardr. Sonu kmesinde, tablonun hangi alanlar olacan gsterir. Burada yaplan kolon baznda filtrelemedir.
Konu: 1
5 From ifadesi, sorgunun hangi tablo veya tablolar zerinde yaplacan gsterir. Where ifadesinden sonra, sorgu kmesinde, verilen kritere uyan satrlar grntlenir. Bu yaplan satr baznda filtrelemedir. SELECT * FROM Urunler
Ancak bu durum tek tablo zerinden yaplan ilemler iin gerekli deildir. Birka tablo zerinde sorgu yapld zaman, alanlar tablo ismiyle belirtmek gerekir.
SELECT Isim, BirimFiyat, EklenmeTarihi FROM Urunler
Where ifadesinden sonra yazlan kriterler mantksal karlatrmalardr. Bu karlatrmalar alanlardaki deerler zerinde yaplr. Karlatrmalar aritmetik olabildii gibi metinsel de olabilir.
Byk Alandaki deerin verilen bir deerden veya baka bir alandan byk olduunu kontrol eder.
SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi > 100
Byk Eit Verilen bir alann veya deerin, kontrol edilen alandan byk veya alana eit olduunu kontrol eder.
SELECT Urunler.*
Kk Alandaki deerin verilen bir deerden veya baka bir alandan byk olduunu kontrol eder.
SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi < 100
Kk Eit Verilen bir alann veya deerin, kontrol edilen alandan kk veya alana eit olduunu kontrol eder.
SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi <= 100
Between - And Alandaki deerin iki deer arasnda olduunu kontrol eder. Deerlere eit olduklar durumlar da sonu kmesine dhil edilir.
SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi BETWEEN 100 AND 200 Not
rnek
False
Konu: 1
Sfr veya birden fazla karakter * zel karakterlerin kullanm Tek karakter ? Tek Say # Karakter Aral Aralk D
Nu* Be [*]
Nuray, Nuri Be *
Banu Beikta
Is Null
Baz alanlarn deerleri bo braklm olabilir. Bo braklan alanlarn deerleri Null olarak geer. Sorgularda bo alanlarn kontrol Is Null ifadesi ile yaplr.
SELECT Urunler.* FROM Urunler WHERE Urunler.Ozellikler Is NULL
Bir sorguda birden fazla kriter kullanlabilir. Ancak bu kriterlerin AND veya OR ifadeleri ile ayrlmalar gerekir. AND ifadesi ile ayrlan kriterlerin hepsinin saland satrlar sonuca dhil edilir. OR ifadesi ile ayrlan kriterlerin herhangi biri saland satrlar sonuca dhil edilir. rnek: 12.12.2002 den sonra kaydolmu, ismi E ile balayan kullanclar.
SELECT * FROM Kullanicilar WHERE Kullanicilar.KayitTarihi > #12/12/2002# AND Kullanicilar.Isim Like 'E*';
Hesaplama Fonksiyonlar
Hesaplama Fonksiyonlar
Sum Toplam Avg Ortalama Max Maksimum Min Minimum Count Sayma
Alanlar zerinde sayma, toplama, ortalama alma gibi aritmetik ilemlerin yan sra minimum maksimum deerlerin alnmas gibi ilemler de yaplabilir. Bu ilemlerin sonucunda saysal bir sonu ortaya kar. Bu say, sonu tablosunda gsterilirken herhangi bir alan ismi ifade etmez. Dolaysyla sonu tablosunda saysal deerleri gsterilirken mantksal bir isim verilmesi gerekir. Bu ifade ise AS anahtar kelimesi ile belirtilir.
Sum
Kriterlerin saland alanlar zerinde toplama ilemi yapar.
SELECT Sum(IncelenmeSayisi) AS [Toplam Incelenme Sayisi] FROM Urunler WHERE Uretiliyormu = -1;
Konu: 1
Avg
Kriterlerin saland alanlarn ortalama deerini alr.
SELECT Avg(Urunler.BirimFiyat) AS [Ortalama Fiyat] FROM Urunler WHERE Uretiliyormu = -1;
Max
Kriterlerin saland alanlarn maksimum deerini alr. Metinsel deerlerde alfabetik olarak sralama yapar.
SELECT Max(Isim) AS [En son geen kullanc] FROM Kullanicilar; SELECT Max(KayitTarihi) AS [En son kaydolan kullanc] FROM Kullanicilar;
10
Min
Kriterlerin saland alanlarn minimum deerini alr.
SELECT Min(Isim) AS [En bata geen kullanc] FROM Kullanicilar; SELECT Min(KayitTarihi) AS [lk kaydolan kullanc] FROM Kullanicilar;
Count
Deeri Null olmayan satrlarn ka tane olduunu verir. Genellikle tablolardaki satr says istendiinde bu fonksiyon kullanlr. Ancak bu tip bir sorguda, saylan alann bo bir deer almamas gerekir. Primary Key alannn zerinden bir saym yaplabilir.
SELECT Count(KullaniciId) AS [Toplam Kullanc Says] FROM Kullanicilar;
Konu: 1
11
Insert
Insert Sorgusu
Tablolara veri eklemek iin kullanlr.
INSERT INTO Tablo (Alan1, Alan2,) VALUES (Deer1, Deer2)
INSERT INTO Siparisler (KullaniciId, NakliyeUcreti, SiparisTarihi, SonOdemeTarihi, Adres ) VALUES (1, 3, '20.05.2005', '25.05.2005', 'Beikta Istanbul')
tablo isimi, alan ad ve hangi deerlerin eklenecei belirtilmelidir. Insert sorgularnda dikkat edilmesi gereken nokta, gerekli olan (Null kabul etmeyen) alanlara deer eklenmesi unutulmamaldr. Szdizimi:
INSERT INTO Tablo (Alan1, Alan2,) VALUES (Deer1, Deer2) Values ifadesinde verilen deerler, tablonun yazlan alanlaryla ayn srada
olmas gerekir.
INSERT INTO Siparisler ( KullaniciId, NakliyeUcreti, SiparisTarihi, SonOdemeTarihi, Adres ) VALUES (1, 3, '20.05.2005', '25.05.2005', 'Beikta Istanbul')
Bu tip Insert sorgularnda sadece tek bir deer girilebilir. Ancak baz durumlarda birden fazla verinin girilmesi istenebilir. Bu durumda, girilecek deerler Select cmlesiyle baka bir tablodan alnr. rnek: denen siparilerin tutulduu ayr bir tablo oluturulur. Sipari tablosundan bu tabloya tm denen kaytlarn aktarlmas ilemi Insert Select cmlesi ile yaplr.
INSERT INTO OdenenSiparisler ( SiparisId, KullaniciId, NakliyeUcreti, SiparisTarihi, GonderilmeTarihi, Adres)
12
SELECT SiparisId, KullaniciId, NakliyeUcreti, SiparisTarihi, GonderilmeTarihi, Adres FROM Siparisler WHERE Odendi = -1;
Update
Update Sorgusu
Tablolarda veri gncellemek iin kullanlr.
UPDATE Tablo SET Alan1 = Deer1, Alan2 = Deer2,
UPDATE Kullanicilar SET ParolaSorusu = 'Yeni Soru', ParolaCevabi = 'Yeni Cevap' WHERE KullaniciId = 23
Update sorgular tablolarda var olan kaytlarn belirli alanlarnn gncellenmesi ilemini yapar. Bu sorguda da tablo, alan ve yeni deerlerin belirtilmesi gerekir. Szdizimi: UPDATE Tablo SET Alan1 = Deer1, Alan2 = Deer2,
Bu sorguda dikkat edilmesi gereken en nemli nokta, belli kaytlarda gncelleme ilemi yaplyorsa WHERE kriterinin unutulmamas gerekir. Aksi halde tablodaki tm kaytlar, sorguda belirlenen deerleri alacaktr. rnek:
UPDATE Kullanicilar SET ParolaSorusu = 'Yeni Soru', ParolaCevabi = 'Yeni Cevap' WHERE KullaniciId = 23
Konu: 1
13
Delete
Delete Sorgusu
Tablolardan veri silmek iin kullanlr
DELETE FROM Tablo
Tablodan veri silmek iin kullanlr. Bu sorguda alan isimleri belirtilmez, ancak WHERE kriterinin unutulmamas gerekir. Szdizimi:
DELETE FROM Tablo smi
rnek:
DELETE FROM Sepetim Where KullaniciId = 12
14
INNER JOIN
Inner Join
Tablolar birletirmek iin kullanlr. Primary Key ve Foreign Key alanlar zerinden birletirme yaplr.
SELECT Alanlar FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2 ON isim1.Alan = isim2.Alan
SELECT StokDurumu.Adet, Urunler.Isim FROM Urunler INNER JOIN StokDurumu ON Urunler.UrunId = StokDurumu.UrunId;
Birden fazla tablodan kayt ekilmek istendiinde, bu tablolarn Primary Key ve Foreign Key alanlar zerinden birletirilmeleri gerekir. Tablolar birletirmek, birok bilgiyi sonu kmesinde tek bir tablo olarak gstermeyi salar. rnein bir rnn hangi kategoride olduu bilgisi rnler tablosunda vardr. Ancak bu deer o kategori numarasn belirttii iin, son kullancya bir ey ifade etmez. Kategori ismi ise, kategoriler tablosunda durur. Sonu kmesinden kategori ismini grntlemek iin bu tablolarn birletirilmesi gerekir. Szdizimi:
SELECT Alanlar FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2 ON isim1.Alan = isim2.Alan
Burada tablo isimlerine birer takma isim verilmitir. Bu isimler alanlarn seiminde yazm kolayl salar. Baz alanlar birbirleriyle ayn isimde olduklar iin bu alann hangi tabloya ait olduu belirtilmelidir. Alan isimleri
SELECT isim1Alan1, isim1.Alan2, , isim2.Alan1, isim2.Alan2 FROM Tablo1 AS isim1 INNER JOIN Tablo2 AS isim2 ON isim1.Alan = isim2.Alan ki tablonun birletirme ilemi, ON ifadesinden sonra belirtilen alanlar zerinden
Konu: 1
15
rnek: rnlerin stoklardaki miktarn renmek iin stok ve rnler tablolarn birletirmek gerekir.
SELECT StokDurumu.Adet, Urunler.Isim FROM Urunler INNER JOIN StokDurumu ON Urunler.UrunId = StokDurumu.UrunId;
kiden fazla tablodan bilgi ekmek iin, nce iki tablo birletirilir. Sonu olarak kan tablo ile de dier tablolar tek tek birletirilir. Birletirme ilemi ((Tablo1 + Tablo2) + Tablo3) + Tablo4 eklindedir. Inner Join kullanlrken parantezlerin unutulmamas gerekir. rnek: Bir kullancnn sepetindeki rnlerin birim fiyatlar sorgulanmak istendii zaman kullanclar, sepetim, rnler tablolar ilikide olduklar alanlar zerinden birletirilmelidir.
SELECT k.Isim, k.Soyad, s.Adet, u.BirimFiyat FROM (Urunler u INNER JOIN Sepetim AS s ON u.UrunId = s.UrunId) INNER JOIN Kullanicilar AS k ON k.KullaniciId = s.KullaniciId WHERE k.KullaniciId = 1
16
Group By
Group By
Ayn verilerin gruplanmasdr. Hesaplama fonksiyonlar ile kullanlr. Hesaplama fonksiyonunda kullanlmayan alanlar gruplanmaldr.
SELECT k.Isim, k.KategoriId, SUM(u.BirimFiyat) AS [Toplam Fiyat], COUNT(UrunId) AS [rn Says] FROM Urunler u INNER JOIN Kategoriler k ON u.KategoriId = k.KategoriId GROUP BY k.KategoriId, k.Isim
Hesaplama fonksiyonlarnn kullanld sorgularda Select ifadesinden sonra sadece hesaplanan alan sonu kmesine eklenmiti. Ancak ou zaman, hesaplanan bir alanlar ile birlikte dier alanlarn da sonu kmesinde olmas istenir. rnein belli bir kategoride ka tane rnn bulunduu, kategori numaras sonu kmesinde olacak ekilde isteniyor. Bu durumda, rnler tablosundaki kaytlarn sayma ileminin gerekletirilmesi iin nce kategori numarasna gre gruplanmas gerekir.
SELECT k.KategoriId, COUNT(UrunId) AS [rn Says] FROM Urunler u INNER JOIN Kategoriler k ON u.KategoriId = k.KategoriId GROUP BY k.KategoriId
Tablodan kategori numaras dnda baka herhangi bir alan daha isteniyorsa, bu alan Group By ifadesine ya da bir hesaplama fonksiyonunun iine alnmaldr.
SELECT k.Isim, k.KategoriId, Sum(u.BirimFiyat) AS [Toplam Fiyat],
Konu: 1
17 COUNT(UrunId) AS [rn Says] FROM Urunler u INNER JOIN Kategoriler k ON u.KategoriId = k.KategoriId GROUP BY k.KategoriId, k.Isim
Aritmetiksel lemler
Aritmetiksel lemler
Toplama, karma, Blme, arpma
SELECT Urunler.Isim, BirimFiyat * 1.18 AS [KDV Dahil Fiyat] FROM Urunler
Sorgular srasnda, alanlar zerinde toplama, karma, arpma, blme gibi aritmetiksel ilemler yaplabilir. Bu ilemler sabit deerler ile yaplabildii gibi baka alanlardaki deerler ile de yaplabilir. rnek: Birim fiyatlarnn KDV eklenmi halini gsteren sorgu.
SELECT Urunler.Isim, BirimFiyat * 1.18 AS [KDV Dahil Fiyat] FROM Urunler
18
SELECT Sum(BirimFiyat) * 1.18 AS [Toplam rnler Fiyat KDV Dahil] FROM Urunler
Toplama ilemi, saylar zerinde yaplabildii gibi metinsel deerler zerinde de birletirme grevi grr. rnek: Kullanclarn isim ve soyadlarnn beraber grntlenmesi
SELECT Kullanicilar.Isim + ' ' + Kullanicilar.Soyad AS [sim Soyad] FROM Kullanicilar
zet
Menler
MainMenu, ContextMenu
1. Select ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin.
Konu: 1
19
2. Insert ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin. 3. Update ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin. 4. Delete ifadesinin kullanm alann aklayn ve bir rnek SQL cmlesi gelitirin. 5. Delete ve Update ifadelerini kullanrken dikkat etmemiz gereken noktalar aklayn. 6. Cascade Delete ve Cascade Update ifadelerini ieren bir veri taban uygulamas gelitirin ve silme durumunu gzlemleyin.
Modul 1:
ADO.NET
Bu modlde, Visual Studio .NET ortamn ile tanacak ve ierisinde kullanlan temel proje bileenleri hakknda genel bilgiler verilecektir. Ayrca alma zaman hatalarn yakalamay ve uygulamay derlemeyi reneceksiniz. Bu modl tamamlandktan sonra: Proje oluturabilecek, Projeye referans ekleyebilecek, Projeye isim alan ekleyebilecek, Proje zelliklerini deitirebilecek, Dinamik yardm alabilecek, Proje ierisine grevler ekleyebilecek alma zaman hatalarn yakalayabilecek, Uygulamalar derleyebileceksiniz.
ADO.NET
Modl 1:
C# ortam, C#.NET projelerini kolay bir ekilde oluturma imkan salar. Projenin almas iin gereken dosyalar otomatik olarak ekler. Projenin gelitirilme aamasnda yeni bileenlerin eklenmesi, men ve ara ubuklar ile kolay bir ekilde gerekletirilir.
ADO.NET
C#.NET ile Windows tabanl, Web tabanl gibi eitli projeler gelitirilebilir. Bu projeler farkl platformlarda alaca veya farkl amalara ynelik oluturulaca iin, balang bileenleri farkllk gsterecektir. rnein Windows tabanl projeler iin Windows formlarnn kullanlmas ve baz referanslarn eklenmesi gerekir. Visual Studio ortamnn salad ablonlar, proje dosyalarnn balang kodlarn otomatik olarak yazp gerekli referanslar ekleyerek gelitiriciye hzl bir balang saar.
Windows Application Class Library
Windows tabanl uygulamalar gelitirmek iin kullanlr. Dier projeler iin class ktphaneleri salayan DLL (Dynamic Link Library) oluturmak iin kullanlr. Bu bileenler projelere Reference olarak eklenerek tekrar kullanlr.
Windows Control Library
Kullanc tanml Windows kontrolleri oluturmak iin kullanlr. Bu kontroller Windows uygulamalarnda, birok formda tekrar kullanlmak zere tasarlanr.
Smart Device Application ASP.NET Web Application
Mobil cihazlar zerinde uygulama gelitirmek iin kullanlr. IIS (Internet Information Services) zerinde alacak Web uygulamalar gelitirmek iin kullanlr.
ASP.NET Web Service
ADO.NET
Modl 1:
Web uygulamalarna XML Web Service salayan projeler gelitirmek iin kullanlr. Oluturulan bu projeler, dier uygulamalara Web Reference olarak eklenir.
Web Control Library Console Application Windows Service
Web uygulamalarnda, kullanc tanml kontroller oluturmak iin kullanlr. Komut penceresinde alacak konsol uygulamalar gelitirmek iin kullanlr. Windows altnda srekli alan uygulamalar iin kullanlr. Bu uygulamalar, kullanclarn sisteme giri yapmad durumlarda da almaya devam eder.
Other Projects
Enterprise Applications (irket uygulamalar), Deployment Projects (Ykleme projeleri), Database Projects (Veritaban projeleri) gibi deiik ablonlardr.
Empty Project
Herhangi bir ablon uygulanmadan alan Windows projelerdir. Balang nesnesi ve referanslar eklenmez.
Empty Web Project
Herhangi bir ablon uygulanmadan alan Web projelerdir. Bu proje IIS zerinde tanmlanr ancak form ve referans nesneleri eklenmez.
Blank Solution
Balang olarak bir proje almaz. Bo bir solution dosyas alr. stenen projeler, Add New Project komutu ile bu solution iine dhil edilir. Visual Studio ile yeni bir proje birka admda oluturulabilir. 1. File mensnden New alt mensne iaret edin ve Project komutunu sein. 2. New Project penceresinden Visual C# Projects tipini ve almak istediiniz ablonunu sein. 3. Name zelliine projeye vereceiniz ismi yazn. 4. Location zellii projenin dosyalarnn bulunaca yeri belirler. Browse dmesine basarak Windows dizinine ulan ve projenin yerini sein. 5. More dmesine basld zaman, solution dosyas iin yeni bir isim kullanlmas ve ayr bir klasr almasn salayan panel grntlenir. Solution iin farkl bir isim vermek iin Create directory for Solution seeneini iaretleyin ve metin kutusuna solution iin yeni bir isim yazn. 6. OK tuuna basld zaman proje alr. Solution iin ayr bir klasr seilmemise, proje dosyalar proje ismi ile oluturulan klasr altnda oluturulur.
ADO.NET
Visual C# .NET ile oluturulan bir projenin almas iin gereken baz dosyalar vardr. Bu dosyalarn birou, projenin tipine gre farkllk gsterir. Yeni bir proje aldnda, projeye verilen isim ile bir klasr alr ve proje dosyalar bu klasr altna yerletirilir. Solution Dosyalar (.sln, .suo) Visual C# .NET projeleri bir solution dosyas (.sln) altnda oluturulur. Solution dosyas farkl projeleri bir arada tutar ve birden fazla projeyi ierisinde barndrr. Visual Studio ile proje oluturulurken solution dosyas otomatik olarak eklenir. Solution User Option (.suo) dosyalar, kullancnn solution ile alrken yapt ayarlar tutar ve proje tekrar ald zaman bu ayarlar getirir. Project Dosyalar (.csproj, .csproj.user) Bir projenin iinde bulunan bileenlerin, eklenen referanslarn tutulduu proje dosyasdr. Visual C# projeleri .csproj uzantl dosya ile oluturulur. Bu dosya ayn zamanda, bir solution iinde farkl dilde ve tipteki projeleri ayrt etmek iin kullanlr. Projeye zg ayarlar ise .csproj.user dosyasnda tutulur. Yerel Proje Dosyalar (.cs) Form, class gibi bileenlerin tutulduu dosyalardr. Bir .cs uzantl dosya iinde birden class tutulabilir. Ancak projedeki her form iin ayr bir .cs dosyas oluturulur. Web Projeleri Dosyalar (.aspx, .asmx, .asax) Web uygulamalarnda oluturulan dosyalar Web sunucusunda (ISS) tutulur. Bu dosyalar web formlar iin .aspx, Web Service iin .asmx, global snf iin .asax uzantsna sahiptir.
ADO.NET
Modl 1:
Proje oluturulduktan sonra yeni nesnelerin eklenmesi Project mens ile ya da Solution Explorer paneli kullanm ile gerekleir. Project mensnden yeni bir form, module, class, component, user control eklemek iin ilgili men komutu seilebilir. Add New Item komutu ile farkl tipte birok dosya projeye dhil edilebilir.
Assembly Nedir?
Visual Studio .NET ortamnda gelitirilen uygulamalar derlendiinde, .exe veya .dll uzantl dosyalar oluur. .NETin otomatik olarak oluturduu bu dosyalara assembly denir. Assembly ierisinde dosyaya ait balk, aklama ve telif hakk gibi kritik bilgiler tutulur. Visual Studio .Net ierisinde gelitirilen bir projeye, farkl kiiler tarafndan gelitirilmi assemblyler eklenebilir. zellikle gelimi projelerde assemblyler ayr programclar tarafndan yazlarak ortak bir proje altnda toplanabilir.
ADO.NET
Herhangi bir projenin ierisine, bileen ktphanelerinin eklenmesi iin kullanlr. Bu bileen ktphaneleri, .NET ve COM bileenlerden oluur. Projeye referans eklemek iin belirtilen admlar takip edin. 1. Solution Explorer penceresinden References mens sein. References mensne sa tklayn. 2. Alan menden Add Reference komutunu verin. 3. Alan pencere zerinden .NET, COM, Projects sekmelerinden herhangi birini sein. .NET, projeye NET bileen ktphanelerini eklemek iin kullanlr. COM, projeye COM bileen ktphanelerini eklemek iin kullanlr. Projects, proje ile ayn solution ierisinde yer alan bileen ktphanelerini eklemek iin kullanlr. 4. Eklenecek assembly nesnesini sein ve Select dmesini tklayn. Birden fazla assembly semek iin ayn ilemi tekrar edin. 5. Referans ekleme ilemini tamamlamak iin OK dmesine tklayn. Proje ablonlar ierisinde en ok kullanlan referanslar unlardr:
ADO.NET
Modl 1:
System: Programn almas iin gerekli en temel referanstr. System.dll ktphanesi ierisinde tutulur. System.Data: Veritaban balantlarnn yaplmas iin gerekli referanstr. System.Data.dll ktphanesi ierisinde tutulur. System.Drawing, System.Windows.Forms: Windows form ve kontrollerini ieren referanstr. System.Drawing.dll ve System.Windows.Forms.dll ktphaneleri ierisinde tutulur. System.XML: XML teknolojisinin kullanlmasn salayan referanstr. System.XML.dll ktphanesi ierisinde tutulur.
ADO.NET
10
.NET ierisindeki tm ktphaneler, .NET Framework ismi verilen ortak at altnda toplanr. Bu at altndaki tm ktphaneler amalarna gre namespace denilen isim alan altnda gruplandrlr. Bu isim alan ierisinde snflar, ara yzler ve modller bulunur. .NET ierisinde veritaban uygulamalar gelitirmek iin System.Data.dll ktphanesine ihtiya duyulur. Bu ktphane Visual Studio .NET ierisindeki tm proje ablonlarnda otomatik olarak yer alr. System.Data.dll ktphanesi ierisinde;
System.Data System.Data.Common System.Data.SqlClient System.Data.OleDb System.Data.SqlTypes System.Xml
ADO.NET
Modl 1:
11
rnekte NSBilgeAdam isminde bir isim alan tanmlanmtr. Bu isim alan ierisine Egitim ve Ogrenci isminde snflar eklenmitir.
namespace NSBilgeAdam { // BilgeAdam isim alannda kullanlacak //Snf, Modul ve Arayzler tanmlanr class Egitim { //... } class Ogrenci { // } // vs... }
BilgeAdam isim alan iindeki Ogrenci snfn kullanmak iin, snf ismini, isim alan ile birlikte belirtilmelidir.
ADO.NET
UYARI: Proje ile ayn isimdeki bir isim alan .NET derleyicisi tarafndan yeni oluturulan
tm projelere eklenir. Bu genel isim alanna kk isim alan (root namespace) denir. Dolaysyla kendi oluturulan isim alanlarn, kk isim alann ile birlikte belirtilmelidir.
Herhangi bir isim alan ierisinde birden fazla isim alan tanmlanabilir. rnekte NSBilgeAdam isim alan ierisinde Idari, Egitim ve Ogrenci adnda ayr isim alan eklenmitir.
namespace NSBilgeAdam { // BilgeAdam isim alannda kullanlacak // Class, Module ve Interfaceler tanmlanr namespace Idari { class Personel { } } namespace Egitim { class Grup { } } namespace Ogrenci { class Bilgi { } } // vs... }
ADO.NET
Modl 1:
13
Bir isim alan ierisinde yer alan snflar tanmlamak iin, snfn bulunduu ktphanenin yolunu eksiksiz olarak belirtmek gerekir. Ancak bu ekilde kullanmlar, kodun okunmasn olduka zorlatrr. rnekte snflar bu yntemle tanmlanmtr.
bilgeadam.NSbilgeadam.Idari.Personel kisi1; kisi1 = new bilgeadam.NSbilgeadam.Idari.Personel(); bilgeadam.NSbilgeadam.Ogrenci.Bilgi Ogrencibilgi; ogrencibilgi = new bilgeadam.NSbilgeadam.Ogrenci.Bilgi();
Her snf iin ktphane yolunun tekrarn ortadan kaldrmak iin, using anahtar szc kullanlr. using szc ile eklenen isim alanlarnn nesnelerine, proje ierisinden dorudan eriilebilir. rnekte NSBilgeAdam isim alannn projeye dhil edilmesi gsterilmektedir.
using bilgeadam.Nsbilgeadam; NSBilgeAdam isim alannda bulunan bir snf kullanmak iin sadece ismini
ie isim alannn kullanmnda, iteki isim alanna kolayca erimek iin ksaltmalar kullanlabilir. rnekte, NSBilgeAdam isim alan ierisindeki Ogrenci isim alanna eriim gsterilmektedir
ADO.NET
14 using ogr = bilgeadam.NSBilgeadam.Ogrenci; Public Class Form1:System.Windows.Forms.Form { // ... ogr.Bilgi OgrBilgi = new ogr.Bilgi(); }
Projenin genel davranlarn ve konfigrasyon zelliklerini deitirmek iin Property Page penceresi kullanlr. Proje zelliklerini deitirmek iin belirtilen admlar takip edin. 1. Proje isminin zerinde farenin sa butonunu tklayn. 2. Alan menden Properties komutunu verin. 3. Alan Property Page penceresi zerinde Common Properties (Genel zellikler) ve Configuration Properties (Konfigrasyon zellikleri) sekmelerinden herhangi birini sein. 4. Genel zellikler, projenin genel davranlarn deitirmek iin kullanlr. 5. Konfigrasyon zellikleri, Hata ayklama ve Derleme seeneklerinin deitirilmesi iin kullanlr. 6. Proje zelliini deitirdikten sonra OK butonunu tklayn. En ok kullanlan proje zellikleri unlardr:
ADO.NET
Modl 1:
15
Assembly Name: Derlenen uygulamann exe veya .dll uzantl kt dosyasnn adn belirler. Root Namespace: Kk isim alann belirler. Varsaylan olarak projenin ismi gelir. Project Output Type: Derlenen uygulamann hangi tipte assembly oluturacan belirler. Bu tipler Windows, konsol uygulamalar ya da snf ktphaneleri (.dll) olabilir. Startup Object: Uygulamann hangi formdan veya modlden almaya balayacan belirtilir.
ADO.NET
16
Solution Explorer paneli, bir solution iindeki tm dosyalar grntler. Solution iinde birden fazla proje bulunabildii iin, bu projeler sral bir
ADO.NET
Modl 1:
17
ekilde listelenir. Koyu renkle gsterilen proje, solution iinde ilk altrlacak projedir. Bu panel ile solution iine proje ekleme silme, projelere yeni nesne ekleme silme ilemleri gerekletirilir. Panelin st tarafnda buluna ara ubuu, dosyalar zerinde baz ilemlerin gerekletirilmesi iin ksa yollar sunar. rnein ara ubuundan Show All Files komutu seildii zaman, projelerin bulunduu klasrdeki tm dosyalar gsterilir. Solution Explorer panelinde beyaz ile gsterilen nesneler projeye dhil edilmemitir. rnein, proje klasrnde bulunan bir resim dosyasn projeye dhil etmek iin, resme sa tklayp Include In Project komutu verilmelidir.
Solution Explorer panelini grntlemek iin View mensnden Solution Explorer komutunu verin.
Object Browser, Visual Studio .NET ierisindeki ktphane ve isim alanlarn tm alt eleriyle ile beraber hiyerarik ekilde listeler. Object Browser grntlemek iin, View Penceresinden Object Browser
komutunu verin.
Object Browser pencerenin sol st kesinde Browse alan Selected Components seenei ile birlikte varsaylan olarak grnr. Bu seenek ile
ADO.NET
18
projeye dhil edilen referanslar ve bu referanslarla ilikili isim alanlar hiyerarik bir ekilde listelenir.
Objects paneli ierisinden seilen herhangi bir isim alan geniletilirse, iindeki
tm eler hiyerarik ekilde listelenir. Bu elerin herhangi biri seildiinde, o eye ait tm alt eler Members penceresinde listelenir.
Objects penceresinin sa alt kesinde ise, seilen enin tanmn ve hangi
Server Explorer, Visual Studio .NET ortam ierisinde veri salayclarla almay kolaylatrmak iin tasarlanm bir aratr. Ayrca Server Explorer sunucu makine bileenlerinin ynetimi ve kullanmn salar. Server Explorer, Data Connections ve Servers olmak zere iki sekmeden
oluur. Veri salayclar ile almak iin Data Connections seenei kullanlr. Yeni bir veri salayc oluturmak iin belirtilen admlar takip edin. 1. Server Explorer zerinden Data Connections seeneini sein. 2. Data Connections seenei zerinde farenin sa butonunu tklayn. Alan menden Add Connection komutunu verin. 3. Alan Data Link Properties penceresinden balant oluturulur.
ADO.NET
Modl 1:
ilemleri yerine getirilebilir ve veritaban nesneleri, srekle brak metodu ile form zerine srklenebilir.
Visual Studio .NET, ierisinde ok fazla konuyu barndrd iin tmne hakim olmak neredeyse imknszdr. Bu nedenle yazlm gelitiricilerin iini kolaylatrmak iin, Visual Studio .NET ierisinde dinamik yardm ktphanesi oluturulmutur. Dinamik yardm, uygulama gelitirirken yazlan koda gre tm yardm konularn listeler. PUCU: Dinamik yardm aktif hale getirmek iin, Help mensnden Dynamic Help
komutunu tklayn.
ADO.NET
20
Grev Listesi, aktif proje ierisine grev eklemek iin kullanlr. Bu grevler uygulama geliiminin takip edilmesini salar. Grev Listesi iersine eklenen tm grevleri nem srasna gre sralanabilir. Grev Listesi aracn proje ortamnda aktif hale getirmek iin View mensnn Other Windows alt mensnden Task List komutunu tklayn. Grev Listesi arac zerinde Click here to add a new task alan tklanarak yeni grev eklenebilir. Biten grevin nndeki onay kutusu tklanarak, grev sonlandrlabilir.
ADO.NET
Modl 1:
21
Uygulamalarn gelitirme srasnda birok hata ile karlalr. Bu hatalarn ou alma zamannda ortaya kt iin, kodun yazlmas srasnda hatann kaynann anlalmas zordur. Hata reten kod satrlarn, hatalarn nedenini anlamak iin Visual Studio Debug (Hata ayklama) arac kullanlr. Visual Studio Debug arac Kodlar arasna BreakPoint konarak, almann istenen satrda durmasn, Kodlar arasnda ilerlerken deerlerinin gzlenmesini,
Command Debug
panelleri
ile
deikenlerin altrlmasn,
ADO.NET
22
BreakPoint
BreakPoint kullanm, uygulamann almasnn istenen kod satrnda durdurulmasn salar. alma, bir artn gerekletii durumda da durdurulabilir. rnein bir deikenin, belli bir deeri ald kod satrnda uygulamann durmas istenebilir.
stenen bir kod satrna BreakPoint koymak iin, kod sayfasnn sol tarafnda bulunan panele tklanr ya da F9 tuuna baslr. Belirtilen bir art gerekletikten sonra almann durmas isteniyorsa, Breakpoint zerine sa tklanp BreakPoint Properties komutu verilmelidir. kan pencerede Condition dmesine baslarak BreakPoint Condition penceresi alr. Bu pencerede bir deikenin istenen bir deeri aldktan sonra almann durmas belirtilir.
ADO.NET
Modl 1:
23
almann, artn belli bir say kadar saland zaman durdurulmas iin, BreakPoint Properties penceresinde Hit Count dmesine baslr. BreakPoint Hit Count penceresinde, artn gerekleme says girilir. rnekte, BreakPoint be defa veya daha fazla ulald zaman durulmas belirtilir.
Debug Panelleri
alma durdurulduktan sonra, deikenlerin o andaki durumlar Debug panelleri ile gzlemlenir. Bu paneller ancak hata ayklama srasnda kullanlabilir. Debug panelleri, Debug mens altnda Windows mensnden seilebilir.
Autos
ADO.NET
24
almakta olan satrla, bir nceki ve bir sonraki arasnda kalan deikenleri listeler.
Locals
allan kapsam iindeki tm deikenleri listeler. Bu kapsam bir modl, yordam veya dng olabilir.
Watch
Deeri incelenmek istenen deiken veya zellikler, bu panele yazlarak eklenir. alma durdurulduktan sonra kodlar arasnda ilerlemek gerekir. Kodlar arasnda ilerlemenin, yordamlarn iine girilmesi, zerinden atlanmas gibi birok yol vardr. 1. Step Into altrlan kod eer bir yordam veya fonksiyon ise bu yordam veya fonksiyonun iine girilir ve hata ayklamaya devam edilir. 2. Step Over Bir yordam veya fonksiyon iine girilmeden ilerlenir. 3. Step Out Bir yordam veya fonksiyon iinde ilerleniyorsa, buradan klarak yordam veya fonksiyonun arld yere dnlr. 4. Continue Bir sonraki BreakPoint satrna gidilir. Eer baka bir BreakPoint konmamsa, uygulama normal almasna devam eder.
ADO.NET
Modl 1:
25
Command paneli iki farkl modda kullanlr. Immediate Bu modda, deiken deerleri deitirebilir, .NET Framework snflarndaki metotlar veya kullanc tanml metotlar altrlabilir. Immediate moduna gemek iin immed komutu kullanlr. Immediate modunda bir deikenin deeri ? ile renebilir ve yeni deer atanabilir.
?sayi 40 sayi = 50 ?sayi 50
Command Bu modda, Visual Studio ortamnda tanml veya kullanc tanml makrolar, men eleri kullanlabilir. Command moduna gemek iin >cmd komutu kullanlmaldr.
>cmd >Debug.StepOver >Help.About
ADO.NET
26
C# .NET ile gelitirilen uygulamalar altrlmadan nce derleme ileminden geer. Derleme ilemi ile kodun C# sz dizimine uygun yazlp yazlmad kontrol edilir ve kod altrlmak zere makine diline evrilir.
ADO.NET
Modl 1:
27
Uygulamalar derlenmesi Build mensnden yaplr. Build Solution Solution iindeki, son derleme ileminden sonra deien projelerin derlenmesini salar. Rebuild Solution Solution iindeki tm projelerin tekrar derlenmesini salar.
Build Proje smi Belirtilen projenin, son derleme ileminden sonra deien bileenlerinin derlenmesini salar. Rebuild Proje smi Belirtilen projenin tm bileenlerinin tekrar derlenmesini salar. Uygulama derlendikten sonra bulunan hatalar Task List panelinde grntlenir. Task List panelinde grntlenen hatalara ift tklanarak, hatann yapld satra ulalr.
NOT:
ADO.NET
28
Modl zeti
1. 2. 3. 4. 5. 6.
Assembly nedir? sim Alan nedir? Object Browser niin kullanlr? Server Explorer ne ie yarar? alma zaman hatalarn yakalamak iin neler yaplr? Proje nasl derlenir?
ADO.NET
Modl 1:
29
Uygulama1
Windows Uygulamas Oluturmak
Bu uygulamada Windows Application kullanarak ar Merkezi (Call Center) isminde bir uygulamas oluturacaz. ar Merkezi uygulasn oluturmak 1. Visual Studio .Neti kullanarak ar Merkezi isminde uygulama oluturmak. File mens altndan New alt mensn iaret edin ve Project komutunu tklayn. New Project ileti kutusundan Windows Application ablonunu sein. Name metin kutusuna CagriMerkezi yazn. Location metin kutusuna C:\Proje yazn ve OK butonunu tklayn 2. Uygulamann Assembly Name Cagri ad ile deitirmek. Proje isminin zerinde farenin sa butonunu tklayn. Alan menden Properties komutunu verin. Alan pencere zerinden Common Properties (Genel zellikler) klasrn sein Common Properties klasr altndaki General sekmesi ierisinden Assembly Name metin kutusuna Cagri yazn ve OK butonunu tklayn.
ADO.NET
30
Uygulama 2
Object Browser Kullanmak
Bu uygulamada Object Browser kullanarak System.Data ktphanesini inceleyeceiz. System.Data ktphanesini amak 1. 2. 3. 4.
View mens ierisinden Object Browser alt mensn sein. Object paneli ierisindeki System.Data ktphanesini geniletin. System.Data Ktphanesi ierisindeki System.Data.OleDb isim alann
isim
Uygulama 3
Debug Aracn Kullanmak
Bu uygulamada ar merkezi veritabanna balant alan kodlar Debug kullanarak incelenir. Kodlarn yazlmas 1. Form1 nesnesinin kod sayfasna gein ve OleDbConnection oluturan bir fonksiyon yazn.
ADO.NET
Modl 1:
31
2. Formun zerine ift tklayarak Load olayna gelin. Load olaynda, veri tabanna balant aan kodlar yazn. Bu veri taban C:\Proje\CagriMerkezi klasr altnda bulunacaktr.
System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(); // Connection oluturan fonksiyon arlr con = ConnectionOlustur(@"data source=C:\Proje\CagriMerkezi\CagriMerkezi.mdb;Provider=Micro soft.Jet.OleDB.4.0"); con.Open(); // Veritaban ilemleri ilerleyen modllerde // anlatlacaktr. Bu ksm bo brakn. con.Close();
Hata ayklama 1. Formun Load metoduna bir BreakPoint yerletirin. 2. Projeyi F5 ile altrn. Balang formu yklendii zaman Load olay alaca iin, alma belirtilen noktada durur. 3. Debug mensnden Step Into komutunu seerek ya da F11 tuuna basarak kod iersinde ilerleyin. ConnectionOlustur isimli metodun iine girildii grlr. 4. ConnectionOlustur metodundan kldktan sonra, Locals panelini an ve con isimli deikeni inceleyin. 5. Command panelini an ve immed komutunu yazarak, Immediate moduna gein. 6. Command paneline con.State yazarak Connection nesnesinin State zelliini renin. 7. Debug mensnden Continue komutunu vererek ya da F5 tuuna basarak almann ilerlemesini salayn. 8. Formu kapatarak uygulamay sonlandrn. 9. con.Open() kodunun bulunduu satra BreakPoint koyun ve sa tklayarak BreakPoint Properties komutunu verin. 10. Condition dmesine tkayn ve metin kutusuna con.State = 1 yazn. con nesnesinin State zellii 1 (balant ak) olduu zaman almann durmas ayarlanr.
ADO.NET
32
11. OK tuuna basn ve projeyi altrn. almann belirtilen noktada durmad gzkr. Bunun nedeni, BreakPoint iinde verilen artn salanmamasdr. 12. Formu kapatarak uygulamay sonlandrn ve Visual Studio ortamndan kn.
ADO.NET
Modul 1:
ADO.NET
34
Bu modlde verilerin hangi ortamlarda depolandn reneceksiniz. Ayrca depolanan veriye erimek iin kullanlan yntemleri renecek ve ADO.NET teknolojisi hakknda bilgi sahibi olacaksnz. Bu modln sonunda:
ADO.NET
Modul 2:
35
Veri depolama yntemlerini renecek, Balantl ve Balantsz veri ortamlarn renecek, Veri eriim yntemlerini renecek, ADO.NET nesne modelini renecek, ADO.NET nesne modelinde veri salayclarn seebileceksiniz.
ADO.NET
36
Veri Depolama
Gnmzde verileri saklamak iin eitli teknikler kullanlr. rnein bir emlak emlak alm, satm bilgilerini dosya ktlar zerinde depolayabilir. Bu yntem veri arama ve listeleme ilemlerinin karmak hale gelmesine ve arama
ADO.NET
Modul 2:
37
sresinin uzamasna sebep olur. Hatta daha byk organizasyonlarda ilemlerin yavalamasna ve durmasna sebep olabilir. Artan ihtiyalar dorultusunda veri depolamak ve depolanan veriye erimek iin eitli veri depolama yntemleri gelitirilmitir. Bu yntemler: Yapsal Olmayan: Bu yntem ile depolanan veriler iin belirli bir snflandrma ve sralama yoktur. Veriler dz bir ekilde kaydedilir. rnein basit not dosyalar. Yapsal: Bu yntem ile depolanan veriler eitli gruplara ayrlarak saklanr fakat bu gruplar arasnda bir alt-st ayrm yaplmaz. rnein virglle ayrlm dosyalar (csv), Excel belgeleri. Hiyerarik: Hiyerarik depolama yntemini aa yapsna benzetebiliriz. Bu yntemde veriler eitli kategorilere blnerek depolanr. Her bir kategorinin ierisinde alt kategorilerde olabilir. rnein XML (eXtensible Markup Language) dosyalar. likisel Veritaban: likisel veritabanlarnda veriler tablolar zerinde depolanr. Tablo ierisindeki her bir satr kayd, her bir stun ise veriyi ifade eder. rnein SQL Server, Oracle, Access. Nesne Ynelimli Veritaban: En gelimi veri depolama yntemidir. Bu yntemde veriler; ihtiyaca gre gruplandrlarak, nesneler ierisinde saklanr. rnein Versant, AOL
ADO.NET
38
Balantl veri ortamlar, uygulamalarn veri kaynana srekli bal kald ortamlardr. Bu ortamlarda veri alma ve deitirme ilemleri uygulama ile veri kayna arasnda balant kurulduktan sonra gerekletirilir. Balantl veri ortamlarnda, veri ilemleri gerekletii srece balant ak kalr. lk bilgisayar retiminden bugne en ok tercih edilen yntem balantl veri ortamlar olmutur. Balantl ortamlar veriye erimek iin birok avantaj salar. Avantajlar: En gvenli veri ortamdr. Veri kaynana yaplan e zamanl eriimlerde, veri kaynann kontroln kolaylatrr.
Dezavantajlar: Uygulama ile veri kayna arasnda gerekleen koruyabilmek iin sabit bir a balantsnn olmas gerekir. balanty
Uygulama ile veri kayna arasndaki balant a zerinden gerekletii iin, a trafiinin younluunu artrr.
rnein araba reten bir fabrikada yaplan retim bilgilerinin dier birimlere ulatrlmas ve bu kaytlarn depolanmas iin ezamanl bir balant kurulmas gereklidir. Ya da bir emlak firmasnda emlaknn, mlk ve menkul bilgilerini gncel tutabilmesi iin sabit bir balant kurmas gereklidir.
ADO.NET
Modul 2:
39
Balantsz veri ortam, uygulamann veri kaynana srekli bal kalmad veri ortamdr. Uygulama ile veri kayna arasnda balant, veri al verii yaplrken alr ve ilem bittikten sonra kapatlr. Bu veri ortamlar evrimd almak iin kullanlr. Teknolojinin ilerlemesi ve veri depolayan aralarn tanabilirliinin salanmas ile tm dnyada evrimd ortamlara duyulan ihtiya artmtr. Laptop, Notebook ve Pocket PC gibi aralarn yaygnlamas ile gnmzde uygulamann veri kaynana bal olmad durumlarda bile veri girii yaplabilir. Uygulamada sadece evrimii veya evrimd ortamlardan birini semek yeterli olmayabilir. Gelimi uygulamalarda her iki ortamn avantajlarn birletiren bir zm tercih edilebilir. Avantajlar: Laptop, Notebook ve Pocket PC gibi aralarla girilen veriler, istenilen zamanda veri ortamlarna aktarlabilir. evrimd ortamlar sayesinde, verilerin depoland uygulama zerindeki yk hafifletilir. Bu durum performans artn salar.
Dezavantajlar: Balantsz veri ortamlarnda, verilerin gncel kalmasna dikkat edilmelidir. Bu ortamlarda veri gncelleme ilemleri farkl zamanlarda
ADO.NET
40
gerekletirilebilir. Veri zerinde yaplan bu deiimlerin, dier kullanclara gsterilebilmesi iin eitli zmler gelitirilmelidir. Balantsz veri ortamlar ierisinde farkl kullanclar ezamanl gncelleme ilemleri gerekletirebilir. Bu durumda oluacak veri akmalarnn engellenmesi gerekir.
rnein bir toptanc firmasnda, firma alanlar farkl konumdaki bayilerinin tm siparilerini bir el bilgisayarna kaydedebilir. Bu veriler el bilgisayarnda geici bir sre iin depolanr. Bu sre alanlarn sahada kald sredir. Sre sonunda veriler sunucu bilgisayara aktarlr.
ADO.NET
Modul 2:
41
lk bilgisayardan bugne veriye erimek iin pek ok yntem gelitirilmitir. Bu yntemlerin bazlarnda ama yerleim, bazlarnda ise paylam olmutur. Amacn veriyi saklamak olduu durumlarda paylam konusunda zm aranm, amacn veriyi birok kullanc arasnda paylamak olduu durumda ise ana verinin nerede saklanaca konusunda zm yollar aranmtr.
ADO.NET
42
Kullanc saysnn ve verinin boyutunun artmasyla, veri eriimi iin bilinen modeller de olduka gelimitir. Birebir veri paylam yerine, internet zerinden oklu kullanc desteine ak veri eriim modelleri gelitirilmitir. Gnmzde gelinen son nokta ise, her an her yerden veriye kolayca erimemizi salayan XML Web Servis modelidir. Veri merkezli uygulamalar gelitirmek iin veri eriim modelleri kullanlr. Bir veri eriim modelinde ki mantksal her birime katman (tier) denir. Veri merkezli bir uygulamada katman says makine saysna bal deildir. Katman saysn veri eriim modelindeki dzeyler belirler.
stemci Katman (Client tier): Sunum ya da kullanc servis katman olarak da bilinir. . Bu katman kullanc ara yzn iermektedir. Katman (Business tier): Bu katman, uygulamann veri kayna ile etkileen blmdr. Veri Katman (Data tier): Veriyi ieren katmandr. Birlikte alabilirlik Katman (Interoperability tier): Platform ve dilden bamsz, her tr veriye etkileim salayan katmandr. Bu katmana herhangi bir iletim sistemi zerinde bulundurulabilen XML Web Servislerini rnek verebiliriz.
ADO.NET
Modul 2:
43
Uygulamalar, katmanlara blnerek leklenebilirlii artrlr. NOT: Katman says arttka, veri eriim modelinin leklendirebilirlii ve karmakl da
artar.
ADO.NET
44
Konu 2: ADO.NETe GR
ADO.NET Nedir?
ADO (ActiveX Data Objects), farkl veri kaynaklarna hzl ve gvenli eriim
iin Microsoft tarafndan gelitirilen nesne modelidir. ADO.NET ise ADO teknolojisinin en yeni versiyonudur. ADO ile ayn programlama modelini
ADO.NET
Modul 2:
45
kullanmamakla birlikte, ADO modelinden gelen pek ok zm yolunu da beraberinde getirir. Uygulama geliim ihtiyac arttka, yeni uygulamalarda Web uygulama modeline olan ballk gittike azalmaktadr. imdilerde ise a balantlar zerinden veriyi rahata aktarabilmek iin XML kullanmna olan ynelim artmaktadr. te ADO.NET, XML ve ADO.NETin .NET Framework iinde en uygun ekilde programlama ortam oluturmamz salar. ADO.NET modelinin dier veri eriim modellerine gre stnlklerini yle sralayabiliriz: ADO.NET, veritabanndan ekilen verilerin kopyasn XML formatn kullanarak bellee aktarr. Uygulamann kullanc says arttka kaynak kullanm da artmaktadr. N-Katmanl (N-tier) uygulama yaps kullanlarak, uygulamalarn katmanlar zerinden datlmas salanr. Bylece uygulamalarn leklenirlii artar. ADO.NET ile balantsz veri ortamlar iin uygulama gelitirilebilir. ADO.NET gelimi XML destei verir.
46
DataSet snflar, evrimd ortamlar iin veri depolama ve ynetme ilemlerini salar. DataSet snflar veri kaynandan bamsz her tr uygulama ve veritaban iin kullanlabilir. zellikle likisel Veritaban, XML ve XML Web Servisleri zerinden veri ekmek iin kullanlr.
.NET veri salayc snflar, farkl trdeki veritabanlarna balanmak iin kullanlr. Bu snflar sayesinde istenilen trdeki veri kaynana kolayca balant kurulabilir, veri ekilebilir ve gerekli gncelleme ilemleri yaplabilir. ADO.NET nesne modeli, aadaki veri salayc snflarn ierir: SQL Server .NET Veri Salaycs OLE DB .NET Veri Salaycs Dier .NET Veri Salayclar
Hangi veri kayna kullanlacaksa, sadece ona uygun veri salayc snf
DKKAT:
kullanlmaldr.
NET veri salayclar, ADO.NET mimarisinin veritaban ile uygulama (Windows, Web) veya XML Web Servis arasnda balant kurmak iin her tr alt yapy barndran ekirdek bileendir. Tm veri salayclar, System.Data isim alan iinde tanmlanmtr.
ADO.NET
Modul 2:
47
NET Framework 1.0 srm ile birlikte SQL Server .NET ve OLE DB .NET veri salayc snflar gelmitir. SQL Server .NET: SQL Server 7.0 ve SQL Server 2000 veritabanlarna hzl balant salar. SQL Server balant nesneleri System.Data.SqlClient isim alannda bulunur. OLE DB .NET: SQL Server 6.5 ve daha ncesi srmlerine, Oracle, Sybase, DB2/400 ve Microsoft Access veri tabanlarna balant kurmay salar. OLE DB balant nesneleri System.Data.OleDb isim alannda bulunur. NET Framework 1.1 srm ile birlikte SQL Server .NET ve OLE DB .NET veri salayclarna Oracle .NET ve ODBC .NET veri salayclar da eklenmitir. ORACLE .NET: Oracle veritabanlarna balant iin tasarlanm veri salaycsdr. Oracle balant nesneleri System.Data.OracleClient isim alannda bulunur. NOT:
System.Data.OracleClient isim alann kullanmak iin, projeye
ODBC .NET: Dier veritabanlarn destekleyen genel bir veri salaycdr. ODBC balant nesneleri System.Data.ODBC isim alannda bulunur. renim ve kullanm kolayl olmas amacyla ADO.NET veri salayclarn isimlendirilmesinde genelletirmeye gidilmitir. SQL Server .NET veri salayclarnn snf isimleri Sql n eki ile, OLE DB .NET veri salayclarnn snf isimleri ise OleDb n eki ile balar. Bu genellemeye SqlConnection ve OleDbConnection rnekleri verilebilir.
ADO.NET
48
Modul 2:
49
XxxCommand: Veri kayna zerinde sorgu altrmak iin kullanlr. Veri kaynandan dnen kaytlar XxxDataReader veya DataSet kullanlarak veri balantl kontrollere aktarlr. XxxDataReader: evrimii balantlarda sadece veri okumak iin kullanlan snftr. XxxDataAdapter: evrimd balantlarda kullanlan veri ileme nesnesidir. NOT:
Xxx yerine seilen veri salaycsna gre SQL, OLEDB, Oracle ve ODBC
Modl zeti
1. 2. 3. 4.
Veri depolama yntemleri nelerdir? Balantl ve Balantsz Veri ortamlar nelerdir? Veri eriim yntemleri nelerdir? ADO.NET veri salayclar nelerdir?
ADO.NET
50
Uygulama 1
Yeni balant oluturmak.
Bu uygulamada Server Explorer kullanarak ar Merkezi uygulamas iin yeni bir balant oluturulur. ar Merkezi Uygulamas iin yeni balant oluturmak.
ADO.NET
Modul 2:
51
3. Visual Studio .Neti kullanarak ar Merkezi uygulamasn amak. File mens altndan Open alt mens ierisinden Project komutunu tklayn. Look in alan kutusundan C:\Proje\ CagriMerkezi klasrn sein. Alan Open Project penceresinden CagriMerkezi.sln dosyasn seerek Open butonunu tklayn. 4. Uygulamaya CagriMerkezi veritabann eklemek. Proje isminin zerinde farenin sa butonunu tklayn. Alan menden Add mensnden Add Existing Item komutunu verin. Alan pencere zerindeki Look in alan kutusundan CD Srcs\Veritaban klasrn sein. Alan Add Existing Item penceresinden CagriMerkezi.mdb veritabann seerek Open butonunu tklayn. 5. CagriMerkezi uygulamas iin yeni balant oluturmak. Server Explorer penceresi zerinde farenin sa butonunu tklayn. Alan menden Add Connection komutunu tklayn. Alan Data Link Properties penceresinin Provider sekmesini tklayn. Provider sekmesinden Microsoft.Jet.OLEDB.4.0 Provider i seerek Next butonunu tklayn.
ADO.NET
Modul 4:
ADO.NET
Modul 3
53
Veriyi yneten uygulamalar, bu verilerin bulunduu kaynaa balanma ihtiyac duyar. Visual Basic .NET ile veri kaynana balanmak iin, kaynan tipine, yapsna gre farkl nesneler ve farkl veri salayclar kullanlr. Bu modln sonunda:
ADO.NET
54
Farkl veritabanlarna gre veri salayclar seebilecek, Balant cmlesi oluturabilecek, Farkl veritabanlar iin Connection nesnelerini ynetebileceksiniz.
ADO.NET
Modul 3
55
ADO.NET mimarisi, uygulama ile veritaban arasnda balant kurmak ve kurulan balant zerinden kaytlar almak, deitirmek ve silmek iin veri salayclarn kullanr. Farkl veritabanlar iin farkl veri salayclar kullanlr.
ADO.NET
56
Uygun veri salayc seiminde en nemli kriter Hangi salayc en iyi performans verir? sorusunun cevabdr. nk Sql Server, Oracle, Access gibi veritabanlarna farkl veri salayclar ile eriilebilir. Microsoft .NET Framework, veritabanlar ile balant kurmak iin farkl veri salayclarn destekler. SQL Server .NET OLEDB .NET ODBC .NET
.NET Framework iindeki veri salayclar, System.Data.dll ierisinde ki System.Data isim alannda yer alr. Tablo 1.1 de hangi salayc isim alan ile hangi veritabanna balanlabilecei gsterilmektedir.
ADO.NET
Modul 3
57
Veri Taban
Sql Server 7.0 ve sonraki srmler Sql Server 6.5 ve nceki srmler Microsoft Access veri taban Oracle Server Dier veri tabanlar(Oracle, Sybase, DB2/400)
Tablo 1.1: Veri Tabanlar ve Veri Salayc sim Alanlar ODBC .NET veri salayclar, dier veri salayclarndan farkl olarak, veri kaynana balanrken hibir ara katman kullanmaz. Bunun yerine, balant iin ODBC APIleri kullanr. .NET Framework veri salayclar Tablo 1.2 de belirtilen snflar kullanmaktadr. Snf isimlerinin nndeki XXX n eki kullanlan veri salayc ismini simgeler. Eer veritabanna OLEDB veri salaycs ile balanlrsa OLEDB n ekini, eer SQL Server veri salaycs ile balanyorsa SQL n ekini alr.
ADO.NET
58
Snf
XXXConnection XXXCommand
Aklama
Balant amak ve kapatmak iin kullanlan snftr. Veritaban zerinde Stored Procedure (Sakl Yordamlar) veya SQL Cmleleri altrmak iin kullanlan snftr. Veritabanndan sadece okunur ve ileri hareketli kaytlar ekmek iin kullanlan snftr. Veritabanndan ekilen verileri DataSet ierisine veya DataSet e evrimd eklenmi verileri veritabanna aktarmak iin kullanlan snftr
XXXDataReader XXXDataAdapter
System.Data.SqlClient isim alan ierisinden evrimii balantlar gelitirmek iin SqlConnection, SqlCommand, SqlDataReader snflar kullanlr.
ADO.NET
Modul 3
59
SqlConnection; MS SQL Server zerinde balant amak ve kapatmak iin kullanlan snfdr. SqlCommand; MS SQL Server zerinde Stored Procedure (Sakl Yordamlar) veya SQL Cmleleri altrmak iin kullanlan snftr. SqlDataReader; MS SQL Server zerinde SqlCommand ile altrlan SELECT sorgularn sonularn geri dndrmek iin kullanlan snftr.
System.Data.SqlClient
isim alan ierisinden evrimd balantlar gelitirmek iin SqlConnection, SqlDataAdapter, DataSet snflar kullanlr.
SqlConnection; MS SQL Server zerinde balant amak ve kapatmak iin kullanlan snftr. SqlDataAdapter; MS SQL Serverdan ekilen verileri DataSet ierisine ve DataSete evrimd eklenmi verileri MS SQL Servera aktarmak iin kullanlan snftr. DataSet; SQLDataAdapter nesnesinden gelen kaytlar evrimd depolamak ve ynetmek iin kullanlan snftr. DataSet tm veri salayc snflar iin ortaktr. NOT: DataSet, System.Data isim alan ierisinde yer alr.
System.Data.OleDb isim alan ierisinden evrimii balantlar gelitirmek iin OleDbConnection, OleDbCommand, OleDbDataReader snflar kullanlr.
OleDbConnection; Access veya dier veritabanlar zerinde balant amak ve kapatmak iin kullanlan snftr. OleDbCommand; Access veya dier veritabanlar zerinde Stored Procedure (Sakl Yordamlar) veya SQL Cmleleri altrmak iin kullanlan snftr. OleDbDataReader; Access veya dier veritabanlar zerinde OleDbCommand ile altrlan SELECT sorgularn sonularn geri dndrmek iin kullanlan snftr.
System.Data.OleDb isim alan ierisinden evrimd balantlar gelitirmek
iin OleDbConnection, OleDbDataAdapter snflar kullanlr. OleDbConnection; Access veya dier veritabanlar zerinde balant amak ve kapatmak iin kullanlan snftr. OleDbDataAdapter; Access veya dier veritabanlarndan ekilen verileri DataSet ierisine ve DataSete evrimd eklenmi verileri ilgili veritabanna aktarmak iin kullanlan snftr.
ADO.NET
60
ADO.NET
Modul 3
61
Balant cmlesi, veri kaynana balanmak iin gerekli bilgileri tutar.. Bu cmle, veri kaynana balant kurmak iin gerekli balant parametrelerin birleiminden oluur. Bu parametrelerin listesi Tablo 2.1de gsterilmitir.
Parametre Provider Tanm
Sadece OleDbConnection nesnelerinde kullanlr. Balant salaycsnn ismini tutar. Salayc isimleri Tablo 2.2 de belirtilmitir. Veritaban balant iin beklenmesi gereken maksimum saniye saysdr. Varsaylan deger 15 saniye dir. Veri taban ad SQL Server ad, veya MS Access veri taban iin dosya ad SQL Server login(giri) parolas SQL Server login(giri) ad SQL sunucusuna Windows hesab ile balant yaplacan belirtir. True, False veya SSPI girilebilir. SSPI, True ile e anlamldr ve bu durumda Windows hesab kullanlr. Varsaylan deeri False olur. Bu durumda gvenlik iin hassas bilgileri geri dndrmez. True olduunda ise gvenlik risk tamaya balar. Workstation veya client(istemci) adn belirtir. Client(istemci)-server(sunucu) aras veri transferinde kullanlan paketlerin boyutunu belirtir. Veritabann Read-only(Sadece okunur) ya da Write(Yazlabilir) modunu belirtir. SQL Server balantlarnda kullanlmaz.
ConnectionTimeout veya Connect Timeout Initial Catalog Data Source Password (pwd) User Id (uid) Integrated Security veya Trusted Connection
Mode
Tr
SQLOLEDB MSDAORA Microsoft.Jet.OLEDB.4.0
Aklama
SQL Server iin Microsoft OLE DB Provider ORACLE iin Microsoft OLE DB Provider Microsoft Jet iin OLE DB Provider
ADO.NET
62
Yeni balant oluturmak ve ynetmek iin OleDbConnection, SqlConnection gibi XXXConnection snflar kullanlr. Veri kaynana balanmak iin oluturulan Balant Cmlesi, XXXConnection snfnn ConnectionString zelliine atanr. rnekte SQL Server veritaban iin balant cmlesi oluturulmutur. London isimli sunucuda bulunan Northwind veritabanna, sa kullanc ismi ve 2389 parolas ile balanlyor. Eer veritaban sunucusundan 60 saniye iinde cevap alnamazsa balant iptal ediliyor.
System.Data.SqlClient.SqlConnection cnNorthwind; cnNorthwind = new System.Data.SqlClient.SqlConnection(); cnNorthwind.ConnectionString ="Data Source=London;Initial Catalog=Northwind;User ID=sa;Password=2389;Connection TimeOut=60";
rnekte Microsoft Access veritaban iin balant cmlesi oluturulmutur. OleDb balants yapld iin Provider zelliinin Microsoft.Jet.OleDB.4.0 olarak belirtilmesi gerekir. Balantnn yaplaca Northwind veritabannn local makinede C:\Samples dizini altnda bulunduu belirtiliyor.
System.Data.OleDb.OleDbConnection cnNorthwind; cnNorthwind = new System.Data.OleDb.OleDbConnection();
ADO.NET
Modul 3
63
rnekte Sql Server 6.5 veri taban iin balant cmlesi oluturulmutur. SQL Server 7.0 srmnden eski bir veritaban sunucuna balant yapld iin Provider zellii SQLOLEDB olarak belirtiliyor. ProdServ isimli sunucudaki Pubs veritabanna, Windows hesab (SSPI) ile balanlyor.
System.Data.OleDb.OleDbConnection cnNorthwind; cnNorthwind = new System.Data.OleDb.OleDbConnection(); cnNorthwind.ConnectionString = Provider=SQLOLEDB;Data Source=ProdServ;Initial Catalog=Pubs;Integrated security=SSPI;
DKKAT:
Microsoft Access veri kayna, tek veri tabanndan oluur. SQL Server veri
kayna ise birden fazla veri tabanndan oluur. Bu yzden SQL Server veritaban balant cmlesinde Initial Catalog parametresi kullanlr.
ADO.NET
64
Tablo 2.3 de OLEDB ile Accesse balanmak iin gerekli, rnek Balant Cmleleri gsterilmektedir.
Accesse Balant Accesse alma Grubu dosyas zerinden Balant Accesse Parola Korumal Balant Networkteki Accesse Balant Remote Server(Uzak Server) zerindeki bir Accesse Balant "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=DB_Name.mdb; " "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Db _Name.mdb; Jet OLEDB:System Database=Db _Name.mdw" "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Db _Name.mdb; Jet OLEDB:Database Password=sifreniz" "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\Server_Name\Share_Name\Share_Path\Db _Name.mdb" "Provider=MS Remote; Remote Server=http://Your-RemoteServer-IP; Remote Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Db_Name.mdb"
ADO.NET
Modul 3
65
Tablo 2.4 de ODBC ile SQL Servera balanmak iin gerekli, rnek Balant Cmleleri gsterilmektedir.
SQL Server sunucusuna SQL Authentication ile balanmak "Driver={SQL Server};Server= Server_Name;Database=Db_Name;Uid=Username;Pwd= sifreniz;"
"Driver={SQL Server}; Server= Server_Name; Database=DB SQL Server sunucusuna Windows Authentication ile _Name;Trusted_Connection=yes;" balanmak
ADO.NET
66
Tablo 2.5 de OLEDB ile SQL Servera balanmak iin gerekli, rnek Balant Cmleleri gsterilmektedir.
SQL Server sunucusuna SQL Authentication ile balanmak "Provider=SQLOLEDB;Data Source= Server_Name;Initial Catalog=Db_Name;User Id= Username;Password=sifreniz;"
"Provider=SQLOLEDB;Data Source= Server_Name;Initial SQL Server sunucusuna Windows Authentication ile Catalog=DB_Name;Integrated Security=SSPI;" balanmak
ADO.NET
Modul 3
67
Tablo 2.6 de SQLClient ile SQL Servera balanmak iin gerekli, rnek Balant Cmleleri gsterilmektedir.
SQL Server sunucusuna SQL Authentication ile balanmak SQL Server sunucusuna SQL Authentication ile balanmak SQL Server sunucusuna Windows Authentication ile balanmak SQL Server sunucusuna SQL Authentication ile balanmak "Data Source=_Server_Name;Initial Catalog=Db _Name;User Id= Username;Password=sifreniz;" "Server= Server_Name;Database=Db_Name;User ID= Username;Password=sifreniz;Trusted_Connection=False "Data Source= Server_Name;Initial Catalog=Db_Name;Integrated Security=SSPI; "Server=Server_Name;Database=Db_Name;Trusted_Connecti on=True;"
Tablo 2.6: SQL Server ile SQL Server Balant Cmleleri UYARI :
Balant cmle paramerelerinin benzer edeerleri vardr. Bu edeerler hem
OLEDB hemde SQLClient veri salaycalarda kullanlabilir. Tablo 2.7. de bu edeerler gsterilmektedir.
ADO.NET
68
ADO.NET
Modul 3
69
Balant cmlesini oluturduktan sonra, balanty amak ve kapamak iin Connection snfnn iki nemli metodu kullanlr. Open
ADO.NET
70
Close Open metodu, balant cmlesinde belirtilen veri kaynan amak iin kullanlr. Close metodu, alan balanty kapatmak iin kullanlr. Close metodu ile kullanlmayan balantlar kapatmak, kaynak tketimini azaltr.
Open metodu; uygulama ile veri kayna arasndaki balanty, balant
cmlesinin Timeout parametresinde belirtilen sre ierisinde kurmaya alr. Eer belirtilen sre ierisinde balant gereklemiyorsa, uygulama hata retir. Bu sre iin herhangi bir deer belirtilmemise, varsaylan deer 15 saniyedir. Daha nceden alm bir balant; kapatlmadan tekrar almaya allrsa, uygulama yine hata retecektir. Kapatlan balantnn yeniden kapatlmas hataya yol amaz.
Open metodu ile alan balantnn kapatlmamas durumunda, Garbage Collector ad verilen p toplayc devreye girerek balantnn kapatlmasn salar. Bu durum balant deikeninin geici bir sre bellekte yer tutmasna neden olur.
NOT: Balant nesnesinin Dispose metodu da balanty kapatmak iin kullanlabilir. rnekte Northwind.mdb isimli Access veritaban zerinde, Open ve Close metotlarnn kullanm gsterilmektedir.
cnNorthwind.ConnectionString = @"Provider=Microsoft.Jet. OLEDB.4.0;Data Source=C:\Samples\Northwind.mdb"; //Balanty amak cnNorthwind.Open(); //Veritaban ilemleri bu arada gerekletirillir. //Balanty kapatmak cnNorthwind.Close(); Open metodu ile veri kayna alrken, eitli alma zaman hatalarndan
dolay balant almayabilir ve uygulama hata retebilir. Bu alma zaman hatalar Sunucunun bulunamamasndan, Veritabannn bulunamamasndan, Hatal kullanc ad veya parola girilmesinden, Donanm veya yazlmdan kaynaklanabilir.
Try, Catch, Finally deyimlerini kullanarak bir blou oluabilecek potansiyel hatalardan korunur. Try blou iinde, hata retebilecek kodlar yazlr. rnein tm veritaban ilemleri bu blok iersine yazlmaldr.
ADO.NET
Modul 3
71
Catch bloklar, uygulamann rettii hatalar, tiplerine gre sral bir ekilde
iler. Bu blok iersine, yakalanan hataya gre yaplacak ilemler yazlmaldr. rnein balantnn almad bir durumda veritaban ilemleri gerekletirilmeye alld zaman, kullancya balantnn almasn bildiren mesaj kutusu karlabilir. Finally blounda, Try ve Catch bloklarndan herhangi biri ilendikten sonra alr. Bu blokta, hatann retildii veya retilmedii iki durumda da yaplmas gereken ilemler yazlr. rnein, balantnn kapatlmas her iki durumda da yaplmas gereken bir ilemdir.
System.Data.OleDb.OleDbConnection cnNorthwind; try { cnNorthwind = new System.Data.OleDb.OleDbConnection(); cnNorthwind.ConnectionString = @"Provider=Microsoft.Jet. OLEDB.4.0;Data Source=C:\Samples\Northwind.mdb"; cnNorthwind.Open(); // Veritaban ilemleri gerekletirilir. } catch (InvalidOperationException XcpInvOp) { // lk nce bu tipte hata yakalanr. MessageBox.Show("nce veri taban balantsn kapatn"); //Hata Mesajnn ieriini grmek iin kullanlr. MessageBox.Show(XcpInvOp.ToString()); } catch (Exception Xcp) { //Dier hatadan farkl bir tipte hata burda yakalanr. MessageBox.Show(Xcp.ToString()); } finally { cnNorthwind.Close(); //ya da cnNorthwind.Dispose(); }
ADO.NET
72
Balant snfnn durumu hakknda bilgi almak iin, balant snfnn State zellii kullanlr.
State zelliinin alabilecei deerler tablo 3.1.1de belirtilmitir. sim Broken Closed Connecting Executing Fetching Open Aklama
Yalnzca, ak bir balantnn kopup tekrar balanld durum Balant kapal Veri kaynana balanma aamasnda Balant zerinden bir komutu altrlyor Balant zerinden veri ekiliyor Balant ak
Deeri
16 0 2 4 8 1
} Balant nesnelerinin durumu deitii zaman StateChange olay tetiklenir. Bu olay ile balantnn hangi durumlarda alp kapand renilebilir.
ADO.NET
Modul 3
73
Balantnn eski ve yeni durumlar StateChangeEventArgs parametresi ile renilir. Tablo 3.1.2de bu parametrenin CurrentState ve OriginalState zellikleri grlr.
Property CurrentState OriginalState Aklama
Balantnn yeni durumu hakknda bilgi verir. Balantnn deimeden nceki durumu hakknda bilgi verir.
ADO.NET
74
Modl zeti:
1. Veri salayclar ne ie yarar? SQL Server 6.5 veri tabanna balanmak iin hangi veri salaycnn kullanlmas gerekir. 2. Connection nesnelerinin kullanlmas iin gereken temel zellik hangisidir? 3. Balant akken tekrar almaya alldnda ne olur? Bu durum nasl engellenir? 4. Try Catch blou ne iin kullanlr? Finally blounda hangi kodlar yazlr? 5. Balant durumu Connection nesnesinin hangi zellii ile anlalr? Durum deitii zaman hangi olay tetiklenir?
ADO.NET
Modul 3
75
Bu labda, kullancn girdii deerlere gre Connection String oluturulur. Bu balant cmlesi ile yeni bir Connection nesnesi oluturarak, balantnn durumu incelenir. Bu lab tamamlandktan sonra: Farkl veritabanlarna gre balant cmlesi oluturabilecek, Veritabanna balant ap kapayabilecek, Balantlarn State zellii ile durumunu gzlemleyebileceksiniz.
Kontrollerin eklenmesi
VeriTabaniBaglantisi isminde yeni bir Windows projesi an. Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.
Kontrol Kontrol smi TextBox txtVeriTabani TextBox txtSunucu TextBox txtKullaniciAdi TextBox txtParola TextBox txtTimeOut Label lblConnectionString Label lblConnectionState zellik Text Text Text Text Text Text Text
ADO.NET
Deer
Closed
76 GroupBox ComboBox ComboBox1 Button Button1 Button Button2 Button Button3 Button Button4 Text DropDownStyle Text Text Text Text
Balant lemleri:
DropDownList
String
Connection Olutur
Kodlarn yazlmas
Veritaban balants oluturmak iin ncelikle balant cmlesi oluturulmas gerekir. Bu balant cmlesi, kullancnn girecei bilgilere gre oluturulur. 1. Balant cmlesi iin gerekli bilgileri tutan deikenleri tanmlayn.
private private private private private private private string string string string string string String ConnectionString; Provider; Database; Server; KullaniciAdi; Parola; TimeOut;
// Sql veritabanna balanmak iin private System.Data.SqlClient.SqlConnection sqlCon; // Access veritabanna balanmak iin private System.Data.OleDb.OleDbConnection oleDbCon;
Modul 3
77 comboBox1.Items.Add("Microsoft SQL Server 2000"); comboBox1.Items.Add("Microsoft SQL Server 6.5"); // Varsayilan olarak Sql Server 2000 seili olur comboBox1.SelectedIndex = 1;
3. ComboBox kontrolnden veritaban seildii zaman, Provider ismini deitirin. Seilen veritaban Access ise, kullanc ad, parola, sunucu ve timeout TextBox kontrollerini pasif duruma getirin.
private void comboBox1_SelectedIndexChanged(System.Object sender, System.EventArgs e) { // Farkli Veritabani seildigi zaman tetiklenir. switch (comboBox1.SelectedIndex) { case 0: Provider = "Microsoft.Jet.OleDB.4.0"; EnableTextBoxes(false); break; case 1: Provider = ""; EnableTextBoxes(true); break; case 2: Provider = "SQLOLEDB"; EnableTextBoxes(true); break; } } private void EnableTextBoxes(bool SQLVeriTabaniSecili) { txtKullaniciAdi.Enabled = SQLVeriTabaniSecili; txtParola.Enabled = SQLVeriTabaniSecili; txtTimeOut.Enabled = SQLVeriTabaniSecili; txtSunucu.Enabled = SQLVeriTabaniSecili; // Access veritabani seili ise if (! SQLVeriTabaniSecili) { txtKullaniciAdi.Text = ""; txtParola.Text = ""; txtTimeOut.Text = ""; txtSunucu.Text = ""; } }
4. Connection String oluturma dmesine basld zaman, girilen deerleri aln ve balant cmlesi oluturun.
private void Button1_Click(System.Object sender,System.EventArgs e) { ConnectionString = ""; // Access Veritabani seili ise if (comboBox1.SelectedIndex == 0) { Database = txtVeritabani.Text;
ADO.NET
78 ConnectionString = "Provider= " + Provider + ";Data Source= " + Database ; } else { KullaniciAdi = txtKullaniciAdi.Text; Parola = txtParola.Text; TimeOut = txtTimeOut.Text; Server = txtSunucu.Text; Database = txtVeritabani.Text; if (Provider != "") { ConnectionString = "Provider=" + Provider + ";"; } ConnectionString ConnectionString ConnectionString ConnectionString ConnectionString } lblConnectionString.Text = ConnectionString; } += += += += += "Data Source=" + Server; ";Initial Catalog=" + Database; ";User ID=" + KullaniciAdi; ";Password=" + Parola; ";Connection TimeOut=" + TimeOut;
5. Balant cmlesi oluturulduktan sonra, bu cmleyi kullanarak Connection nesnesi oluturun. Burada dikkat edilmesi gereken nokta, kullancnn setii veritaban tipine gre farkl balant nesnesi oluturulmasdr.
private void Button2_Click(System.Object sender, System.EventArgs e) { // Access veritabani seili ise if (comboBox1.SelectedIndex == 0) { oleDbCon = new System.Data.OleDb.OleDbConnection(ConnectionString); oleDbCon.StateChange+= new StateChangeEventHandler(DurumDegisti); } else { sqlCon = new System.Data.SqlClient.SqlConnection(ConnectionString); sqlCon.StateChange += new StateChangeEventHandler(DurumDegisti); } } // Balant durumu deitii zaman, DurumDegisti // yordamndaki kodlar alr. private void DurumDegisti(Object sender, System.Data.StateChangeEventArgs e) { // Balantnn durumu kullancya bildirilir. lblConnectionState.Text = e.CurrentState.ToString(); }
ADO.NET
Modul 3
79
6. Balant nesnesi oluturulduktan sonra, Connection A dmesine baslnca balant Open metodu ile an. Ancak kullancnn baz deerleri yanl girmesi durumu gz nne alnarak Try Catch bloklar kullanlmaldr.
private void Button3_Click(System.Object sender, System.EventArgs e) { if (oleDbCon != null) { // OleDB baglantisi olusturulduysa try { oleDbCon.Open(); } catch (InvalidOperationException ex) { MessageBox.Show(ex.Message.ToString()); } catch (System.Data.OleDb.OleDbException ex) { MessageBox.Show(ex.Message.ToString()); } } else { // Sql baglantisi olusturulduysa try { sqlCon.Open(); } catch (InvalidOperationException ex) { MessageBox.Show(ex.Message.ToString()); } catch (System.Data.SqlClient.SqlException ex) { MessageBox.Show(ex.Message.ToString()); } } } }
Modul 5:
Konu: 4
81
Bu modln sonunda: Balantl veri ortamlaryla almay renecek, Command oluturabilecek, Command ile geriye tek deer veya kayt kmesi dndrebilecek, Command ile altrabilecek, INSERT, UPDATE ve DELETE sorgularn
82
Konu: 4
83
Balantl veri ortamlar, uygulamalarn veri kaynana srekli bal kald ortamlardr. Bu ortamlarda veri alma ve deitirme ilemleri uygulama ile veri kayna arasnda balant kurulduktan sonra gerekletirilir. Balantl veri ortamlar ile veritaban zerinde, gerekli tm veritaban ilemleri yaplabilir. Veritabanndan tek deer ekme Sadece okunabilir kayt kmeleri dndrme Kayt ekleme Kayt silme Kayt gncelleme
Aklama
Balant amak ve kapatmak iin kullanlan nesnedir. Veritaban zerinde Stored Procedure (Sakl Yordam) veya SQL Cmleleri altrmak iin kullanlan nesnedir. Veritabanndan sadece okunur ve ileri hareketli kaytlar ekmek iin kullanlan nesnedir. Kaytlar XXXCommand nesnesinin ExecuteReader metodu ile XXXDataReader ierisine aktarlr.
XXXDataReader
84
Commmand Nedir?
Konu: 4
85
altrmak iin kullanlr. Command Nesneleri ile veritaban tablolarnda; sorgu, ekleme, silme ve gncelleme ilemleri yaplabilir. Tablo 4.2 de hangi veri salayc iin hangi Command Nesnesinin kullanld gsterilmektedir. Tablo 4.2. Command Nesneler
Veri Salayclar SQL Server .NET Veri Salaycs OLE DB .NET Veri Salaycs
System.Data.OleDb.ODBCCommand ODBC .NET Veri Salaycs Veritaban zerinde Stored Procedure ve Sorgu altrmak iin Command Nesnelerinin belirli zelliklerini kullanmak gerekir. Command Nesnelerinin bu zellikleri aada belirtilmitir.
Name: Command nesnesinin kod ierisindeki ismidir. Bu isim Command nesnesine bavurmak iin kullanlr. Connection: Command nesnesinin hangi Connection zerinde alacan belirler. CommandType: altrlacak komutun trn belirtir. Text, Stored Procedure ve TableDirect olmak zere deeri vardr. TableDirect SQL Server tarafndan desteklenmez. CommandText: Stored Procedure adn veya Sorgu cmlesini tutar.
86
Parameters: Command ierisinde altrlacak Stored Procedure veya Sorgu cmlesine, dardan deer almak ve darya deer gndermek iin kullanlr. Her bir Command Nesnesi iin bir veya birden ok parametre tanmlanabilir.
Command zelliklerine deer girildikten sonra, Command altrmak iin Tablo 4.3 deki metotlardan uygun olan seilir.
Command Metodu ExecuteScalar ExecuteReader ExecuteNonQuery Aklama
altrlan Command nesnesinden geriye tek deer dndrmek iin kullanlr. altrlan Command nesnesinden geriye kayt kmesi dndrmek iin kullanlr. Command Nesnesi zerinde veri gncelleme, deitirme ve silme ilemleri yapmak iin kullanlr. Bu ilemin sonucunda etkilenen kayt says geriye dndrr. altrlan Command Nesnesinden geriye XML dndrmek iin kullanlr. Sadece SQL Server 7.0 ve sonraki versiyonlar iin kullanlr.
ExecuteXmlReader
Konu: 4
87
Command Oluturmak
Command, kod ierisinden veya ToolBox zerinden oluturulabilir. Bu yntemler ile kullanlan veritabanna gre, OleDbCommand veya SqlCommand nesneleri oluturulur. rnekte Access veritabanna balanmak iin, OleDbCommand snf tanmlanm ve bu Command snfnn gerekli zelliklerine deer atanmtr.
//Access Veritabanna balanmak iin Command tanmlanr. System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(); //Command Snfnn CommandText zelliine universiteler cmd.CommandText="select * from universiteler"; //Command Snfnn Connection zelliine aktif connection //aktarlr cmd.Connection=conn; //Command Snfna, sorgu cmlesi yazlacan belirler. cmd.CommandType=CommandType.Text;
ToolBox zerinden Command nesnesi oluturmak iin belirtilen admlar takip edin. 1- Veri kaynana balant kurmak iin Connection tanmlanr. 2- ToolBox iinden Data paneli seilir. 3- Data panelindeki OleDbCommand veya SqlCommand nesnesi form zerine srklenir.
88
CommandType
CommandText
Command nesnesinin altrlacak komutudur. Seilen CommandTypea gre CommandText belirlenir. Text: altrlacak SQL Cmlesi. StoredProcedure: altrlacak Stored Procedure ad. TableDirect: Veritabanndaki Tablo ad
Parameters
Command nesnesinin CommandText komutuna dardan deer almak veya komuttan geriye deer dndrmek iin kullanlr. Parameters zellii Collection olduu iin bir veya birden ok deer alabilir veya gnderebilir.
Konu: 4
89
Parametre Kullanmak
Stored Procedure ve SQL Cmleleri parametre alabilir veya gnderebilir. Ayrca Stored Procedure geriye tek deer bile dndrebilir. Stored Procedure ve SQL Cmlelerinin parametre deerlerini saklamak iin, XXXCommand nesnesinin Parameters zellii kullanlr. Ayn zamanda bu zellik XXXParameters nesnesinin koleksiyonudur. Command nesnesi altrlmadan nce, komuttaki her giri parametresi iin bir deer girilmelidir. Ayrca Command nesnesi altrldktan sonra, sonu parametrelerinin deerleri geriye dndrlebilir. Command nesnesine parametre eklemek iin aadaki yntemler kullanlr. XxxParameter nesneleri oluturulur ve Command nesnesinin Parameters koleksiyonuna bu nesneler eklenir. Properties penceresi kullanlarak Command nesnesinin Parameters zelliine tasarm aamasnda parametreler eklenir. parametre eklemek iin aadaki
1- Yeni bir OleDbParameter veya SqlParameter nesnesi oluturulur. 2- Eklenen Parameter nesnesinin zellikleri Tablo 4.5 gre ayarlanr.
Parametrenin ismi, @Ad gibi gre SqlDbType veya OleDbType enumeratorlerinden seilir.
Size Direction
Parametredeki verinin byte olarak maksimum boyutu. Parametrenin tr. ParameterDirection deerlerinden biri ile belirtilir. Bu zelliin alabilecei deerler:
ParameterDirection.Input (varsaylan
deer)
ParameterDirection.InputOutput ParameterDirection.Output ParameterDirection.ReturnValue
Tablo 4.5: XxxParameter zellikleri 3- XxxParameter nesnelerini Command nesnesine eklemek iin, Command nesnesinin Parameters koleksiyonunu ierisindeki Add metodu kullanlr. Eer bu komut sonu dndrecek bir stored procedure aryorsa, herhangi bir parametre eklemeden nce ParameterDirection.ReturnValue parametresini eklenmelidir. Parametrelerin eklenme sras nemli deildir.
Konu: 4
Tablo 4.6 Direction zelliinin Enumeratrleri rnekte EmployeeLogin isminde bir stored procedure iin, paramUser, ve paramPass isminde iki OleDbParameter tanmlanm ve bu parametreler Command nesnesinin Parameters koleksiyonuna eklenmitir.
System.Data.OleDb.OleDbParameter paramUser = new System.Data.OleDb.OleDbParameter("@userName", System.Data.OleDb.OleDbType.Char, 50); paramUser.Direction = ParameterDirection.Input; System.Data.OleDb.OleDbParameter paramPass = new System.Data.OleDb.OleDbParameter("@userPass", System.Data.OleDb.OleDbType.Char, 20); paramPass= ParameterDirection.Input; cmd.Parameters.Add(paramUser); cmd.Parameters.Add(paramPass);
ToolBox kontrollerini kullanarak parametre eklemek iin, aadaki admlar takip edilir. 1- Toolbox zerinden OleDbCommand veya SqlCommand nesnesi seilir ve forma eklenir. 2- Properties penceresinden, bu Command nesnesinin Connection, CommandType ve CommandText zelliklerine deerler atanr. 3- CommandText zelliine deer girildikten sonra, ekrana kan Bu komut nesnesi iin parametre eklemek ister misiniz? ileti kutusuna Evet denir. 4- Visual Studio .NET ortam Command nesnesi iin parametre oluturacak kodlar otomatik olarak ekler.
92
altrlan stored procedure ya da SQL cmlesinden geriye tek deer dndrlebilir. Bu tr durumlar iin DataSet yerine Command nesnesi kullanlmaldr. Command ile geriye tek deer dndren senaryolara, aadaki rnekler verilebilir. Stok tablosundaki toplam stok miktarn geriye dndrmek iin rn tablosundaki toplam kayt saysn geriye dndrmek iin rn kategorisine gre toplam rn saysn geriye dndrmek iin
OleDbCommand veya SqlCommand nesnesi ile geriye deer dndrmek iin, ExecuteScalar metodu kullanlr.
rnekte OleDbCommand nesnesinin ExecuteScalar metodu ile Universiteler tablosundaki toplam kayt says geri dndrlmektedir.
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(@"provider = Microsoft.JET.OLEDB.4.0; Data source=..\universiteler.mdb"); System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("select count(*) from"+ "universiteler", conn); conn.Open(); MessageBox.Show(cmd.ExecuteScalar.ToString()); ExecuteScalar metodu ile geriye deer dndrmek iin, sadece Sum veya Count gibi fonksiyonlar kullanlmaz. Ayn zamanda Select cmlesi veya Stored
Konu: 4
93
Procedure ile geriye tek deer dndrlebilir. rnekte rn Tablosundaki Stok Miktar SqlCommand nesnesi ile geriye dndrlmektedir.
string sql ="SELECT StokMiktari FROM Urun WHERE UrunID=" + "@UrunID"; System.Data.SqlClient.SqlCommand cmUrun = new System.Data.SqlClient.SqlCommand(sql,cnAlisveris); System.Data.SqlClient.SqlParameter prmID = new System.Data.SqlClient.SqlParameter("@UrunID",System.Data.Sql DbType.Int, 4); cmUrun.Parameters["@UrunID"].Value = 42; cnAlisveris.Open(); int adet = Convert.ToInt32(cmUrun.ExecuteScalar()); cnAlisveris.Close(); MessageBox.Show("Quantity in stock: " + adet.ToString());
altrlan stored procedure ya da SQL cmlesi, geriye birden ok deer veya kayt kmesi dndrlebilir. Bu tr durumlar iin DataAdapter veya DataReader nesneleri kullanlr. Bu nesnelerin genel fark, DataReader balantl, DataAdapter Balantsz veri ortamlar iin kullanlr.
DataReader nesnesinin kullanld senaryolara, aadaki rnekler verilebilir.
94
Tablodan tek kayt dndrmek.(Msteri tablosundan MsteriID ye gre kayt dndrmek) Sadece okunur sonular dndrmek. (Web Form zerinde aranan rnlerin, sonularn dndrmek )
OleDbCommand veya SqlCommand nesnesi ile geriye kayt dndrmek iin, ExecuteReader
zelliklere sahiptir. DataReader nesnesinin bu zellik ve metotlar aada ilemleri yapar. Kayt kmesi iindeki kaytlar tek tek okur. Kaydn belirli bir kolonunu veya tm kolonlarn okur. Kolonlarn ierisinde deer olup olmadn kontrol eder. Kolonlarn ema bilgilerini okur. (ColumnName, ColumnOrdinal,
ColumnSize, NumericPrecision, NumericScale, Datatype,ProviderType, Islong,AllowDBNull)
Konu: 4
95 Metot Close GetBoolean GetByte GetBytes GetChar GetChars GetDataTypeName GetDateTime GetDecimal GetDouble GetFieldType GetFloat GetGuid GetInt16 GetInt32 GetInt64 GetName GetOrdinal GetSchemaTable GetString GetTimeSpan GetValue GetValues NextResult Aklama DataReader nesnesini kapatlr ve hafzadan
kaldrr. Belirli bir kolonun deerini boolean olarak geri dndrr. Belirli bir kolonun deerini byte olarak geri dndrr. Belirli bir kolonun deerini byte dizisi olarak geri dndrr. Belirli bir kolonun deerini char olarak geri dndrr. Belirli bir kolonun deerini karakter dizisi olarak geri dndrr. Belirli bir kolonun veri trn verir. Belirli bir kolonun deerini DateTime olarak geri dndrr. Belirli bir kolonun deerini Decimal olarak geri dndrr. Belirli bir kolonun deerini Double olarak geri dndrr. Belirli bir kolonun veri trn geri dndrr. Belirli bir kolonun deerini Float olarak geri dndrr. Belirli bir kolonun deerini Globally-unique identifier(GUID) olarak geri dndrr. Belirli bir kolonun deerini 16-bit tamsay(Short) olarak geri dndrr. Belirli bir kolonun deerini 32-bit tamsay(Integer) olarak geri dndrr. Belirli bir kolonun deerini 64-bit tamsay(Long) olarak geri dndrr. Belirli bir kolonun ismini geri dndrr. Belirli bir kolonun sra numarasn geri dndrr.
96
gibi alnabilir.
Read
DataReader nesnesinde okunacak kayt olduu srece okuma yapar. Kayt varsa True, yoksa False deeri geri dndrr.
baldr. Bundan dolay veri al ilemi bittikten sonra Connection ya da DataReader nesnesi kapatlarak, bellein daha etkin kullanlmas salanr.
Aklama
DataReader iinde tutulan stun saysn belirtir. DataReader balantsnn durumunu belirtir. Balant ak ise FALSE , kapal ise TRUE dndrr. DataReader ile gelen verilere eriim salar. DataReader ile gelen kayt saysn verir.
Konu: 4
97
1- Balanlacak veritabanna gre Connection nesnesi eklenir 2- Balanlacak veritabanna gre OleDbCommand veya SqlCommand nesnesi eklenir ve gerekli zellikleri ayarlanr. 3- Veritaban balants alr. 4- DataReader tanmlanr. Command nesnesinin ExecuteReader metodu ile arlan kaytlar DataReader nesnesine atanr. 5- DataReader nesnesinin Read metodu False oluncaya kadar, kaytlar dng ile okunur ve Form kontrollerine aktarlr. 6- DataReader kapatlr. rnekte rn Tablosundaki tm rnler, OleDbDataReader ile form zerindeki ListBox kontrolne eklenir.
System.Data.OleDb.OleDbCommand cmUrun = new System.Data.OleDb.OleDbCommand("SELECT UrunAdi, StokMiktari" +"FROM Urun", cnAlisveris); cnAlisveris.Open(); System.Data.OleDb.OleDbDataReader rdrUrun; rdrUrun = cmUrun.ExecuteReader(CommandBehavior.CloseConnection); while (rdrUrun.Read()) { listBox1.Items.Add(rdrUrun.GetString(0)+" - "+ rdrUrun.GetInt16(1)); } rdrUrun.Close();
98
Command ile veritaban yapsnda deiiklik yaplabilir (Tablo, View ve Stored Procedure oluturmak, deitirmek ve silmek), gvenlik seenekleri ayarlanabilir (Tablo ve View izinleri) ve veritaban ierisindeki veri deitirilebilir (Kayt ekleme, silme ve gncelleme). OleDbCommand veya SqlCommand nesnesi ile bu tr ilemlerin yaplabilmesi iin, ExecuteNonQuery metodu kullanlr.
ExecuteNonQuery Metodu ile Select hari SQL (Structured Query Language)
ve T-SQL (Transact- Structured Query Language) komutlar kullanlr. SQL "Structured Query Language" (Yaplandrlm Sorgulama Dili) veritaban sorgu dilidir. SQL ile veritabanna kayt ekleme, silme, var olan kayd dzenleme ve kayt sorgulama ilemleri yaplabilir. SQL standart bir veritaban sorgu dilidir ve Oracle, db2, Sybase, Informix, Microsoft SQL Server, MS Access gibi veritaban ynetim sistemlerinin temelini oluturur. En sk kullanlan SQL komutlar SELECT, INSERT, UPDATE ve DELETE komutlardr. SQL Servern sorgulama ve programlama diline T-SQL denir. Transact-SQL ile ilikisel veritaban sistemi ynetilebilir. TransactSQL komutlar kullanm amalarna gre genel kategoriye ayrlr. Bunlar: SQL Veri leme Dili (Data Manipulation Language-DML)
Konu: 4
99
SQL Veri leme Dili; veri girmek, deitirmek, silmek ve verileri almak iin kullanlr. En sk kullanlan DML komutlar ve kullanm amalar Tablo 4.9 gsterilmitir.
DML Komutu
SELECT DELETE UPDATE INSERT
Aklama
Veri semek Veri silmek Veri gncellemek Veri girmek
Tablo 4.9 DML Komutlar SQL Veri Tanmlama Dili (Data Definition Language-DDL) SQL Veri Tanmlama Dili; Veritaban nesnelerini yaratmak, silmek ve baz temel zelliklerinin dzenlemek iin kullanlr. En sk kullanlan DDL komutlar ve kullanm amalar Tablo 4.10da gsterilmitir.
DDL Komutu
CREATE ALTER DROP
Aklama
Yeni bir veritaban nesnesi yaratmak. rnek CREATE TABLE, CREATE TRIGGER Veritaban nesnelerinde deiiklik yapmak. rnek ALTER TABLE, ALTER TRIGGER Veritaban nesnelerini silmek. rnek DELETE TABLE, DELETE TRIGGER
Tablo 4.10 DDL Komutlar SQL Veri Kontrol Dili (Data Control Language-DCL) SQL Veri Kontrol Dili; bir veritaban kullancs veya rol ile ilgili izinlerin dzenlenmesini salar. Aadaki tablo DCL komutlarn ve fonksiyonlarn gstermektedir.
DCL Komutu
GRANT DENY REVOKE
Aklama
Kullancya yetki vermek Kullanc, grup veya rol herhangi bir eylem iin engeller. Daha atanm olan yetki veya engeli kaldrr.
admlar takip edin 1- Balanlacak veritabanna gre Connection nesnesi eklenir 2- Balanlacak veritabanna gre OleDbCommand veya SqlCommand nesnesi eklenir ve gerekli zellikleri ayarlanr. 3- Veritaban balants alr. 4- Command nesnesinin ExecuteNonQuery metodu kullanlr. 5- Veritaban balants kapatlr.
100
gncellenmitir.
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("Update Urun Set" + "StokMiktari = @StokMiktari Where UrunID = @UrunID", connAlisveris); cmd.Parameters.Add("@UrunID", 1); cmd.Parameters.Add("@StokMiktari", 30); try { connAlisveris.Open(); int kayitSayisi = cmd.ExecuteNonQuery(); connAlisveris.Close(); MessageBox.Show(kayitSayisi+" kayt deitirildi.");
Konu: 4
101 } catch(Exception ex) { MessageBox.Show(ex.Message); } rnekte ExecuteNonQuery metodu altrlarak, rn tablosundan kayt
silinmitir.
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("Delete Urun Where"+ "UrunID= @UrunID", connAlisveris); cmd.Parameters.Add("@UrunID", 1); try { connAlisveris.Open(); int kayitSayisi=cmd.ExecuteNonQuery(); connAlisveris.Close(); MessageBox.Show(kayitSayisi+" kayt silindi."); } catch(Exception ex) { MessageBox.Show(ex.Message); }
Modl zeti
1. 2. 3. 4. 5.
Balantl veri ortam hangi .NET nesneleri ile gerekletirilir? Command nesnesinin ka farkl altrlma biimi vardr? Aklayn. Command nesnesinin Parameters zellii ne iin kullanlr? DataReader nesnesinin alma modelini bir rnekle aklayn. Ka farkl SQL sorgu tr vardr?
102
Bu uygulamada, veritabanndaki Personel tablosu zerinde kayt ilemleri gerekletirilir. Personel kaytlarnn okunup TextBox kontrollerine doldurulmas, yeni personel kaydnn eklenmesi, bir personelin bilgilerinin gncellenmesi veya silinmesi ilemleri yaplr. Bu lab tamamlandktan sonra: Access veritabanna balant oluturabilecek, Command nesnesinin ExecuteNonQuery metodu ile INSERT, DELETE sorgusu altrabilecek, Sorgulara parametre ekleyebilecek, Command nesnesinin ExecuteReader metodu ile DataReader oluturabilecek,
DataReader nesnesi ile kayt okuyabileceksiniz.
Veritabannn oluturulmas
Bu uygulamada kullanlacak Personel tablosu iin bir veritaban oluturulmas gerekir. 1. Microsoft Access ile kisi isminde bir veritaban oluturun. 2. Veritabanna Personel isminde bir tablo ekleyin ve tabloda belirtilen kolonlar ekleyin.
Konu: 4
Kontrollerin eklenmesi
Personel isminde yeni bir Windows projesi an. Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.
Kontrol Kontrol smi TextBox txtAd TextBox txtSoyad TextBox txtDTarihi TextBox txtSehir TextBox txtAdres zellik BorderStyle BorderStyle BorderStyle BorderStyle BorderStyle Multiline ComboBox cbNo Button btnYeni Button btnIptal Button btnKaydet Button btnSil ScrollBars DropDownStyle Text Text Text Text Deer FixedSingle FixedSingle FixedSingle FixedSingle FixedSingle True Vertical DropDownList
104
Kodlarn yazlmas
Personel tablosu zerinde ilem yaplmas iin veritabanna balant almas gerekir. Bu balant iin gereken Connection String ifadesinin merkezi bir yerden alnmas, deiiklik durumunda kolaylk salayacaktr. 1. Projeye bir modl ekleyin ve balant dizisini tanmlayn.
public string connStr=@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Samples\kisi.mdb";
ExecuteNonQuery metodu
2. Veritabanna yeni bir Personel kayd eklemek iin gereken kodlar bir yordam altnda yazn.
public void Kaydet() { System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); conn.ConnectionString = Module1.connStr; System.Data.OleDb.OleDbCommand comm = new System.Data.OleDb.OleDbCommand(); comm.Connection = conn comm.CommandType = CommandType.Text; comm.CommandText = "INSERT INTO"+ "Personel(Ad,Soyad,DogumTarihi,Adres,Sehir)"+ "values(@ad,@soyad,@tarih,@adres,@sehir)"; comm.Parameters.Add("@ad", txtAd.Text); comm.Parameters.Add("@soyad", txtSoyad.Text); comm.Parameters.Add("@tarih", txtDTarihi.Text); comm.Parameters.Add("@adres", txtAdres.Text); comm.Parameters.Add("@sehir", txtSehir.Text); try { conn.Open(); comm.ExecuteNonQuery(); } catch(Exception ex) { MessageBox.Show(ex.Message); }
Konu: 4
105
finally { conn.Close(); } }
3. Verilen bir Personel numarasna gre tablodan kayt silme ilemini gerekletiren kodlar yazn.
public void Sil(int ID) { System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); conn.ConnectionString = Module1.connStr; System.Data.OleDb.OleDbCommand comm = new System.Data.OleDb.OleDbCommand(); comm.Connection = conn; comm.CommandType = CommandType.Text; comm.CommandText = "Delete from Personel Where"+ "Numara=@No"; comm.Parameters.Add("@No", ID); try { conn.Open(); comm.ExecuteNonQuery(); } catch(Exception ex) { MessageBox.Show(ex.Message); } finally { conn.Close(); } }
ExecuteReader ve DataReader
4. ComboBox kontrolne personel numaralarn dolduran kodlar yazn. Bu ComboBox, personel kaytlarn numaraya gre semek iin kullanlacaktr.
public void IDDoldur() { cbNo.Items.Clear(); System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); conn.ConnectionString = Module1.connStr; System.Data.OleDb.OleDbCommand comm = new System.Data.OleDb.OleDbCommand(); comm.Connection = conn; comm.CommandType = CommandType.Text; comm.CommandText = "Select Numara from Personel"; System.Data.OleDb.OleDbDataReader dr; try { conn.Open(); dr = comm.ExecuteReader();
106
5. ComboBox kontrolnden seilen personel numarasna gre formdaki kontrollerin doldurulmasn salayan kodlar yazn.
public void IDyeGoreFormDoldur(int ID) { System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(); conn.ConnectionString = Module1.connStr; System.Data.OleDb.OleDbCommand comm = new System.Data.OleDb.OleDbCommand(); comm.Connection = conn; comm.CommandType = CommandType.Text; comm.CommandText = "Select Ad,Soyad,Adres, Sehir, "+ "DogumTarihi from Personel Where Numara=@No"; comm.Parameters.Add("@No", ID); System.Data.OleDb.OleDbDataReader dr; try { conn.Open(); dr = comm.ExecuteReader(); if(dr.Read()) { txtAd.Text = dr.GetString(0); txtSoyad.Text = dr.GetString(1); txtAdres.Text = dr.GetString(2); txtSehir.Text = dr.GetString(3); txtDTarihi.Text = dr.GetString(4); } } catch(Exception ex) { MessageBox.Show(ex.Message); } finally { dr.Close(); conn.Close(); } }
Konu: 4
107
7. Kayt eklenmeden nce, tm deerlerin doru girilmesini kontrol eden kodlar yazn.
public bool Kontrol() { if(txtAd.Text == "") { MessageBox.Show("Ad Giriniz"); txtAd.Focus(); return false; } else if(txtSoyad.Text == "") { MessageBox.Show("Soyad Giriniz"); txtSoyad.Focus(); return false; } else if(txtDTarihi.Text = "") { MessageBox.Show("Doum Tarihini Giriniz"); txtDTarihi.Focus(); return false; } else if(txtAdres.Text = "") { MessageBox.Show("Adresi Giriniz"); txtAdres.Focus(); return false; } else if(txtSehir.Text = "") { MessageBox.Show("ehiri Giriniz"); txtSehir.Focus(); return false; } else { return true; } }
108 {
Kaydet(); btnYeni.Enabled = true; btnKaydet.Enabled = false; btnIptal.Enabled = false; IDDoldur(); cbNo.SelectedIndex = cbNo.Items.Count - 1; } }
9. btnYeni dmesinin Click olaynda formu, yeni kayt eklemek iin hazrlayan Temizle yordamn kullann.
private void btnYeni_Click(System.Object sender, System.EventArgs e) { Temizle(); btnYeni.Enabled = false; btnKaydet.Enabled = true; btnIptal.Enabled = true; cbNo.SelectedIndex = - 1; }
10. btnIptal dmesine basld zaman kontrolleri temizleyen ve ilk kayta dnen kodlar yazn.
private void btnIptal_Click(System.Object sender, System.EventArgs e) { Temizle(); btnYeni.Enabled = true; btnKaydet.Enabled = false; btnIptal.Enabled = false; cbNo.SelectedIndex = 0; }
11. btnSil dmesine basld zaman kayt silme ilemleri gerekletiren yordam kullann.
private void btnSil_Click(System.Object sender, System.EventArgs e) { if(MessageBox.Show[cbNo.SelectedItem + " nolu kayd silmek istiyor musunuz?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2] == DialogResult.Yes) { Sil(cbNo.SelectedItem); IDDoldur(); cbNo.SelectedIndex = cbNo.Items.Count - 1; } }
12. Formun Load olaynda ComboBox kontroln personel numaralar ile dolduran yordam kullann.
private void frmPersonel_Load(System.Object sender, System.EventArgs e) { IDDoldur(); cbNo.SelectedIndex = 0; } 13. ComboBox kontrolnde bir personel numaras seildiinde, bu
Konu: 4
109
Modul 6:
Balantsz veri ortamlar, uygulamalarn veritabanndan bamsz alt ortamlardr. Veritaban sunucusunun uzak olmas, veri ilemlerinin uzun
Konu: 5
111
srmesi ve mobil alma ihtiyac, balantsz veri ortamlarna olan ihtiyac artrmtr. Bu modl tamamlandktan sonra: Balantsz veritaban mimarisini renecek,
DataAdapter nesnesinin yapsn tanyacak DataSet nesne modelini renecek DataTable nesne modelini renecek
Balantsz veri ortam, uygulamann veri kaynana srekli bal kalmad veri ortamdr. Bu modelde, veri kaynann istenen blm ekilerek bellee alnr. Veri zerinde gerekli ilemler gerekletirildikten sonra, veri kaynana aktarlarak gncelleme yaplr.
112
Aklama
Connection, Command ve DataReader snflarn kullanarak, verilerin DataSete doldurulmasn ve DataSet de yaplan deiikliklerin veri tabanna kaydedilmesini salar. rnein SqlDataAdapter snf SQL Server ile DataSet arasndaki etkileimi salar. Balant amak ve kapatmak iin kullanlan nesnedir. rnein SqlConnection SQL Server a balant salar. Veritaban zerinde Stored Procedure (Sakl Yordam) veya SQL Cmleleri altrmak iin kullanlan nesnedir. rnein SqlCommand SQL Server zerinde Stored Procedure veya SQL Cmleleri altrmay salar. Veritabanndan sadece okunur ve ileri hareketli kaytlar ekmek iin kullanlr. rnein SqlDataReader ile SQL Server zerinden kaytlar okunur. Kaytlar SqlCommand nesnesinin ExecuteReader metodu ile DataReadera aktarlr.
XXXConnection XXXCommand
XXXDataReader
Konu: 5
113
Veri kaynandan DataAdapter ile ekilen verilerin, ekirdek bellee atlan kopyas DataSet ierisinde saklanr. DataSet ile bu veriler zerinde gerekli dzenlemeler yapldktan sonra, veriler ayn DataAdapter ile veritabanna aktarlr. DataSetin temel zellikleri aada listelenmitir: Veri salayc trnden bamsz alr: DataSet tm verisalayclar ile kullanlabilir. Tamamen trden bamsz alr. Srekli evrimddr: DataAdapter nesnesi ile veriler DataSet ierisine aktarlr ve balant kapatlr. Balant kesildikten sonra yaplan tm deiiklikler DataSet ierisine kaydedilir. Bu durum uygulamann evrimd almasn salar. Deiikliklerin kaydn tutar: DataSet ierisinde yaplan tm deiiklikler, DataAdapter nesnesi ile veri kaynana aktarlr. Birden fazla tablo bulundurabilir: likisel veri tabanlarnda olduu gibi, birden fazla tablo ve ilikileri hafzada tutmann tek yolu DataSet kullanmaktr.
114
DataSet, Sanal bir veritaban yapsn temsil eder. DataTable nesnelerinden oluur. Bu tablolar arasnda ilikiler tanmlanabilir. DataSeti oluturan nesneler: DataTable, DataColumn, DataRow, DataRelation nesneleridir.
DataTable
Konu: 5
115
Veritaban tablolarn temsil eder. DataColumn, DataRow nesnelerinden oluur. Primary Key alan tanmlanabilir. DataColumn DataTable nesnelerini oluturmak iin gereken kolonlar temsil eder.
DataRow
DataTable nesneleri iin veri satrlarn temsil eder.
DataRelationship Tablolar arasndaki ilikileri temsil eder. DataView DataTable nesneleri zerinde filtreleme, veri gncellemeleri ilemleri yapmak iin kullanlr.
rnekte ds isminde yeni bir DataSet, New anahtar szc tanmlanmaktadr. Tanmlamada DataSete parametre olarak girilen YeniDataSet deeri, DataSet nesnesinin DataSetName argmandr. Eer hibir isim verilmezse varsaylan olarak NewDataSet ismi verilir.
DataSet ds = new DataSet(Yeni DataSet);
DataSet, dier bir DataSet nesnesinden kopyalanarak oluturulabilir. DataSet kopyalamak iin iki yntem kullanlr. Birinci yntem Copy metodu ile dier bir DataSet nesnesinin, veri ve ilikileri (eme bilgileri) kopyalanarak yeni bir DataSet oluturmak. kinci yntem Clone metodu ile dier bir DataSet nesnesinin ema bilgilerini kopyalanarak, yeni bir DataSet oluturmak. Bu yntem ablon kopyalamak iin kullanlr.
116
rnekte ds ismindeki DataSet nesnesinin tm tablo, iliki ve verileri dsCopy ismindeki DatasSet nesnesinin ierisine aktarlmtr
DataSet dsCopy; dsCopy = ds.Copy();
rnekte ds ismindeki DataSet nesnesinin tm tablo ve ilikileri, dsClone ismindeki DataSet nesnesinin ierisine aktarlmtr.
DataSet dsClone; dsClone = cd.Clone();
rnekte Stok veritabann ierisindeki tm kitaplar, DataAdapter nesnesi ile DataSete aktarlmtr.
OleDbConnection conn = new OleDbConnection ("provider= + microsoft.jet.oledb.4.0; data source=../stok.mdb"); OleDBDataAdapter da = new OleDbDataAdapter("select * from + kitaplar", conn); DataSet ds = new DataSet(Set); Da.Fill(ds,Kitaplar) DataGrig1.DataSource = ds.Tables[Kitaplar];
DataSet snfnn Tables koleksiyonu ile DataSet ierisine bir veya birden ok DataTable eklenebilir. DataSet snfnn Relations koleksiyonu ile DataSet ierisine bir veya birden ok DataRelation eklenebilir. rnekte dtKitaplar isminde yeni bir DataTable oluturulmaktadr.
Oluturulan tabloyu DataSet ierisine eklemek iin DataSet nesnesinin Tables koleksiyonu kullanlr.
Ds.Tables.Add(dtKitaplar);
DataTable nesnesinin ierisine kolon eklenebilir. rnekte dtKitaplar ismindeki DataTable nesnesinin ierisine, yeniId isminde yeni bir kolon eklenmektedir. Yeni kolon eklemek iin, DataTable nesnesinin Columns koleksiyonu kullanlr.
DataColumn colKitapId = dtKitaplar.Columns.Add("yeniId");
Konu: 5
117
rnekte DataTable nesnesi iin Ucret, KDV ve Tutar isminde 3 adet kolon oluturulmutur. rnekteki KDV kolonu, Ucret kolonun %17 deeri zerinden hesaplanr. Tutar kolonu ise Ucret ve KDV deerinin toplam ile hesaplanr.
DataColumn colUcret DataColumn colKdv = colKdv.Expression = DataColumn colTutar colTutar.Expression = new DataColumn("Ucret"); new DataColumn("KDV"); "Ucret * 0.17"; = new DataColumn("Tutar"); = "Ucret + KDV";
DataAdapter snf, DataSet ile veri kayna arasnda kpr oluturur. Veri kaynana yaplan balant ile verilerin DataSet nesnesine aktarlmasn salar. DataAdapter ayrca DataSet zerinde yaplan deiikliklerin veri kaynana aktarlmasn salar. rnekte OleDbDataAdapter ile ekilen veriler, ds ismindeki DataSet nesnesine aktarlr. DataSet ierisindeki veriler, DataGrid ile ekranda gsterilir.
OleDbConnection conn = new OleDbConnection ("provider = " + "microsoft.jet.oledb.4.0; data source=C:\Stok.mdb"); OleDbDataAdapter da = new OleDbDataAdapter("select * from kitaplar", conn); DataSet ds = new DataSet(); da.Fill(ds,Kitaplar);
118
DataGrid1.DataSource= ds.Tables[Kitaplar];
DataAdapter ile veri ekmek iin DataAdapter nesnesinin balang fonksiyonuna, SELECT sorgu ve balant nesnesi parametre olarak gnderilir.
OleDbDataAdapter da = new OleDbDataAdapter("select * from " + "kitaplar", conn);
DataAdapter ile veri ekmenin dier bir yntemi SELECT sorgu ile Command nesnesi oluturmaktr. Oluturulan Command, DataAdapter nesnesinin SelectCommand zelliine atanr. rnekte Command ile DataAdapter nesnesinin beraber kullanm gsterilmektedir.
OleDbConnection conn As = new OleDbConnection ("provider = " + "microsoft.jet.oledb.4.0; data source=C:\Stok.mdb"); OleDbCommand cmd = new OleDbCommand("select * from kitaplar"); cmd.CommandType = CommandType.Text; cmd.Connection = conn; OleDbDataAdapter da = new OleDbDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds, "kitaplar"); DataGrid1.DataSource = ds.Tables["kitaplar"];
DataAdapter nesnesinin Fill metodu veri kaynandaki veriyi DataSet veya DataTable nesnesini doldurmak iin kullanlr. rnekte da isimli DataAdapter ile ekilen veriler, Kitaplar tablosuna doldurulmaktadr.
da.Fill(ds, "kitaplar");
Bir DataSet iinde birden fazla tablo bulunabilir. Bu durumda DataAdapter nesnesinin Fill metodunu birden ok kez arlr. Fill metodu ile belirli kayt aral DataSet ierisine aktarlabilir. rnekte da isimli DataAdapter ile ekilen ilk alt kayt, Kitaplar tablosuna aktarlr.
da.Fill(ds, 0, 5, "kitaplar");
DataSet zerinde yaplan deiiklikleri veri kaynana aktarmak iin, DataAdapter snfnn Update metodu kullanlr. DataAdapter nesnesinin DeleteCommand, UpdateCommand ve InsertCommand nesneleri iinde tutulan sorgular ile gncelleme ilemi gerekletirilir. rnekte Sipari tablosundaki tm deiiklikler veri kaynana aktarlmaktadr.
da.Update(ds, "siparisler");
Konu: 5
119
DataSet nesnesi ile veritabannn bir kopyas ekirdek bellee atldktan sonra, bu veriler eitli Windows Kontroller ile gsterilebilir veya deitirilebilir. Bu kontrollerin en nemlisi DataGrid bileenidir.
120
DataSet nesnesin ierdii veri, Windows Form ierisindeki herhangi bir kontrolun herhangi bir zelliine balanabilir. rnein DataSet ierisindeki bir tablonun ilk satr ve stunundaki veri, TextBox kontrolunun Text zelliine balanabilir. DataSet ierisindeki veriyi Windows kontrollere balamann iki yntemi vardr. Bu yntemler basit (simple data binding) ve karmak (complex data binding) veri balama olarak adlandrlr. Basit veri balama; DataSet ierisindeki bir veri elemann (DataTable kolonunu) Windows kontrolere balama ilemidir. TextBox, Label, RadioButton gibi kontroller bu gruba girer. rnein DataSet tablosundaki herhangi bir kolonu TextBox, Label gibi Windows kontrollere balamak. Karmak veri balama; DataSet iersindeki birden fazla veri elamann Windows kontrollere balama ilemidir. DataGrid, ListBox, ErrorProvider gibi kontroller bu gruba girer. rnekte Dataset ierisindeki kitap_baslik kolonun deeri, TextBox ve Label kontrollerin Text zelliine aktarlr.
Konu: 5
ComboBox ve ListBox gibi kontrollere veri balamak iin DataSource ve DataMember zellii kullanlr. DataSouce zellii DataSet ierisindeki tablo ismini DisplayMember ise Tablo kolonunu belirtir. rnekte ComboBox ve ListBox kontrolunun DataSource ve DisplayMember zellikleri kullanlmaktadr.
ComboBox1.DataSource = ds.Tables["kitaplar"]; ComboBox1.DisplayMember = ds.Tables["kitaplar"].Columns["kitap_baslik"].ToString(); ListBox1.DataSource = ds.Tables["kitaplar"]; ListBox1.DisplayMember = ds.Tables["kitaplar"].Columns["kitap_baslik"].ToString();
TreeView kontrolne veri balamak iin, TreeNode nesnesinin Text zellii kullanlr.
TreeView1.Nodes[0].Text = ds.Tables["kitaplar"].Rows[1].Item["kitap_baslik"];
122
DataGrid, veriyi satrlar ve stunlar halinde grntler. DataGrid ile ilikisiz DataSet Tablolar kolay bir ekilde grntlenebilir. Bu grnt excel tablolarna benzemektedir. DataGrid ilikili DataSet tablolarda gsterebilir. Bu durumda istenilen tabloya DataGrid zerindeki gezinti kprlerinden eriilebilir. DataSet tablolarn DataGrid kontrolune balamak iin iki yntem kullanlr. Bu yntemler grafiksel ve programlama yntemleridir. Grafiksel yntem ile balant salamak iin aadaki admlar takip edin. Ara kutusu zerindeki DataGrid kontrolu form zerine srkleyin. DataGrid kontrolnn DataSource zelliini, nceden oluturulmu DataSet nesnesine balayn. DataGrid kontrolnn DataMember zelliini , DataSet tablolarnn herhangi biri ile balayn.
Programlama yntemi ile balant salamak iin DataGrid nesnesinin DataSource zellii kullanlr. rnekte, DataSet ierisindeki Kitaplar tablosu DataGrid kontrolune balanr.
DataGrid1.DataSource = ds.Tables["Kitaplar"];
Konu: 5
123
DataTable, veritaban tablolarn temsil eder. DataColumn, DataRow nesnelerinden oluur. DataSet ierisinde yeni bir DataTable oluturduktan sonra, veritaban zerinde ilem yapyormu gibi veri zerinde dzenlemeler yaplabilir. DataTable, bu evrimd dzenlemeleri kabul veya iptal etme olana sunar. DataTable nesnesine, yeni bir satr eklemek iin DataRow nesnesi kullanlr. DataTable nesnesinin NewRow metodu ile oluturulan yeni satr, DataRow nesnesinin deikenine atanr. rnekte dtKitaplar tablosuna drNew isminde yeni bir kolon eklenmitir.
DataRow drNew = dtKitaplar.NewRow();
DataRow nesnesi tanmlandktan sonra, index veya kolon isimleri zerinden kolonlara deer girilir. rnekte birinci kolona kitabn ISBN numaras, ikinci kolona ise yazar adi bilgileri girilmitir.
drNew[0] = 975-8725-14-9; drNew[1] = Tamer ahiner;
veya
drNew[kitap_ISBN] = 975-8725-14-9;
Kolanlara bilgi girildikten sonra, tanmlanan DataRow nesnesi DataTable nesnesinin Rows koleksiyonuna eklenir. rnekte drNew nesnesi, dtKitaplar nesnesinin Rows koleksiyonuna eklenir.
dtKitaplar.Rows.Add(drNew);
DataTable nesnesine DataRow kullanmadan kayt eklenebilir. rnekte dtKitaplar ismindeki DataTable nesnesine bu yntem ile kayt eklenmitir.
dtKitaplar.Rows.Add(New Object[] {975-8725-14-9, Tamer ahiner});
DataRow ile DataTable ierisindeki kaytlar deitirilebilir. DataRow nesnesi ile satr dzenleme ilemleri iin aadaki metodlar kullanlr. BeginEdit EndEdit CancelEdit
dzenlemek iin Items koleksiyonu kullanlr. EndEdit metodu ile, askya alnan olaylar yeniden aktif edilir. CancelEdit metodu ile deiikliklerden ve askya alnan olaylardan vazgeilir. rnekte DataTable ierisindeki drdnc kayt iin gncelleme ilemi yaplmtr.
Konu: 5
125 DataRow drNew = dtKitaplar.Rows[3]; drNew.BeginEdit(); drNew["kitap_baslik"] = "yeni hayat"; drNew["kitap_yazar"] = "can dndar"; drNew.EndEdit();
DataRow ile DataTable ierisindeki belirli bir satr silinebilir. rnekte DataTable ierisindeki drdnc kayt silinmitir.
DataRow drSil = dtKitaplar.Rows[3]; dtKitaplar.Rows.Remove(drSil);
Verileri dzenlemeden nce, hangi veri zerinde dzenleme yaplacann tespit edilmesi gerekir. Windows Form uygulamalar, veri iinde hareket salanan nesneler ile verilerin bal olduu katman ynetebilir. DataSet, DataTable veya DataView ile kaytlar zerinde hareket salayan nesneye CurrencyManager denir. DataSet iinde oklu veri kayna CurrencyManager nesnesi ierebilir. tutulabildii iin, birden fazla
126
Belirli bir satra gidebilmek iin, CurrencyManager nesnesinin Position zellii kullanlr. rnekte dtKitaplar tablosunun kaytlar arasnad ilk, son, nceki ve sonraki satra hareket salanmtr.
CurrencyManager cmKitaplar = new CurrencyManager(); private void Form1_Load() { txtKitapAdi.DataBindings.Add("Text", dtKitaplar, _ "kitap_baslik"); cmKitaplar = (CurrencyManager)BindingContext[dtKitaplar]; cmKitaplar.Position = 0; } private void btnMoveNext() { If (cmKitaplar.Position != cmKitaplar.Count) { cmKitaplar.Position += 1; } } private void btnMoveFirst() { cmKitaplar.Position = 0; } private void btnMovePrevious() { If (cmKitaplar.Position != 0) { cmKitaplar.Position -= 1; } } private void btnMoveLast() { cmKitaplar.Position = cmKitaplar.Count-1; }
Konu: 5
127
Bu uygulamada, veritabanndaki Personel tablosu zerinde kayt ilemleri gerekletirilir. Personel kaytlarnn okunup DataGrid kontrolune doldurulmas, kaytlar arasnda gezinti, yeni personel kaydnn eklenmesi, bir personelin bilgilerinin gncellenmesi veya silinmesi ilemleri yaplr. Bu lab tamamlandktan sonra: Access veritabanna balant oluturabilecek, DataGrid kontrolne kayt doldurabilecek, DataGrid kontroln biimlendirebilecek, Kaytlar arasnda dolaabilecek, Kayt ekleme, gncelleme ve silme ilemlerini DataSet ierisinde gerekletirebilecek. DataSet ierisindeki deiiklikleri veritabanna kaydedebileceksiniz.
Veritabannn oluturulmas
Bu uygulamada kullanlacak Personel tablosu iin bir veritaban oluturulmas gerekir. 3. Microsoft Access ile kisi isminde bir veritaban oluturun. 4. Veritabanna Personel isminde bir tablo ekleyin ve tabloda belirtilen kolonlar ekleyin.
Kontrollerin eklenmesi
Baglantsz_Personel isminde yeni bir Windows projesi an. Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.
Kontrol Kontrol smi DataGrid dgPersonel TextBox txtAd TextBox txtSoyad TextBox txtDogumTarihi TextBox txtSehir TextBox txtAdres zellik ReadOnly BorderStyle BorderStyle BorderStyle BorderStyle BorderStyle Multiline Button btnYeni Button btnIptal Button btnKaydet Button btnSil Button btnVDoldur Button btnVKaydet Button btnCikis ScrollBars Text Text Text Text Text Text Text Deer True FixedSingle FixedSingle FixedSingle FixedSingle FixedSingle True Vertical
Konu: 5
129
130
Balantnn Oluturulmas
Kisi veritabanna balant salamak iin OleDbConnection oluturun. 1. Ara kutusu zerindeki OleDbConnection kontrolu form zerine srkleyin. 2. OleDbConnection kontrolunun ConnectionString zellii iin oluturduunuz balant cmlesini sein.
yazn ve Next butonunu tklayarak, bir sonraki adma gein. 6. Finish butonunu tklayarak Data Adapter Configuration Wizard sihirbazn sonlandrn.
Konu: 5
131
Kodlarn Yazlmas
14. btnDDoldur kontrolunun Click olayna kaytlar DataGrid kontrolne dolduran kodlar yazn.
try { conn.Open(); da.Fill(Ds1, "Personel"); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } finally { conn.Close(); }
15. btnDKaydet kontrolunun Click olayna. DataSet kontrolundeki tm deiiklikleri veritabanna kaydeden kodu yazn
16. btnYeni kontrolunun Click olayna. DataSet tablosu iin yeni satr oluturan kodu yazn.
BindingContext(Ds1, "Personel").EndCurrentEdit(); BindingContext(Ds1, "Personel").AddNew();
17. btnIptal kontrolunun Click olayna. DataSet tablosu iinde eklenen yeni satr iptal eden kodu yazn.
BindingContext(Ds1, "Personel").CancelCurrentEdit();
18. btnKaydet kontrolunun Click olayna. DataSet tablosuna yeni kayt ekleyen kodu yazn.
BindingContext(Ds1, "Personel").EndCurrentEdit();
19. btnSil kontrolunun Click olayna. DataSet tablosundan aktif kayd silen kodu yazn.
BindingContext(Ds1, "Personel").RemoveAt(BindingContext(Ds1, "Personel").Position);
20. btnIlk kontrolunun Click olayna. ilk kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position = 0;
21. btnOnceki kontrolunun Click olayna. nceki kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position -= 1;
22. btnSonraki kontrolunun Click olayna. sonraki kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position += 1;
23. btnSon kontrolunun Click olayna. son kayda giden kodu yazn.
BindingContext(Ds1, "Personel").Position = BindingContext(Ds1, "Personel").Count-1;
Konu: 5
133
DataSet ierisinde veri arama ve sralama ilemleri yapmak iin, DataTable ve DataView snfnn arama ve sralama metotlar kullanlr. DataTable snfnn Find metodu, birincil anahtar deerine gre arama yaplmasn salar. Select metodu ise, belirli bir arama kriterine gre arama yaplmasn salar. Select metodu ile geriye satr koleksiyonlar dndrlr. rnekte DataTable snfnn Find metodu ile kitap barkod numarasna gre arama yaplmaktadr. Bu aramann sonucunda yazar ad geriye dndrlr.
OleDbConnection conn = new OleDbConnection("provider =" + microsoft.jet.oledb.4.0;data source=c:\Proje\stok.mdb"); OleDbDataAdapter da = new OleDbDataAdapter("select * from" + "kitaplar", conn); DataTable tbl = new DataTable; da.Fill(tbl); tbl.PrimaryKey = new DataColumn() { tbl.Columns("kitap_ISBN"); } DataRow row = tbl.Rows.Find("975-12-53-3"); if (row==null) { MessageBox.Show("Kayt Bulunamad!"); } else
134 {
MessageBox.Show(row["kitap_yazar"].ToString()); }
rnekte Tbl ismindeki DataTable nesnesine, DataAdapter nesnesinden gelen kaytlar doldurulur. Tbl tablosunun Kitap_ISBN kolonu birincil anahtar olarak atanr. Row isminde yeni bir DataRow tanmlanr. DataTable nesnesinin Find metoduna kitabn barkod numaras girilir ve sonu Row deikenine aktarlr. Son olarak Row deikeni ierisindeki sonu ekrana yazlr. Arama ilemlerinde zel karakter kullanlabilir. rnein yazar ismi E harfi ile balayan kaytlar sorgulamak iin aadaki komut kullanlr.
Select * from kitaplar Where kitap_yazar Like 'E%'
DataTable snfnn Select metodu ile DataRow nesnelerinden oluan bir koleksiyon geri dndrr. Select metodu aslnda orjinal DataSet iindeki satrlar iaret eden iaretiler kmesi olarak da alglanabilir. Veri kopyalama yapmaz ancak deiimleri grntler. rnekte DataTable snfnn Select metodu kullanlarak, kitap fiyat sekizden farkl kaytlar gsterilmektedir. Bu kaytlar Kitap isimlerine gre sralanmtr.
DataRow selRows = tbl.Select("kitap_fiyat != 8", "kitap_baslik ASC", DataViewRowState.CurrentRows); foreach (DataRow row In selRows) { MessageBox.Show("kitap: " + row["kitap_baslik", DataRowVersion.Original].ToString()); }
Select metodunun filterExpression, Sort ve recordStates isminde parametresi bulunur. filterExpression, filtreleme yaplacak ifadeyi ierir.
Konu: 5
Veriler artan ve azalan olmak zere iki ekilde sralanabilir. Sralanacak kolonun sonuna; azalan sralama iin DESC, artan sralama iin ASC anahtar szc yazlr. recordStates ise, kaytlarn durumuna gre, (Deleted, Modified gibi) seim yapar.
ADO.NET ile veri kaynandan alnan bilgileri, sralamak ve filtrelemek iin DataView nesnesi kullanlr. DataView nesnesi ile DataTable nesneleri zerinde arama veya sralama ilemleri yaplabilir. DataView, dier kontrollere balanabilen bir nesnedir. DataView nesnesi oluturmak iin iki yntem kullanlr. Bu yntemler grafiksel ve programlama yntemleridir. Grafiksel yntem ile balant salamak iin aadaki admlar takip edin. Ara kutusu zerindeki DataView kontrolu form zerine srkleyin.
136
DataView kontrolunun Table zellii ile kullanlacak DataTable sein. DataView kontrolnn Sort zelliine, sralanacak kolon bilgilerini girin. DataView kontrolnn RowFilter zelliine arama sorgusunu girin.
Programlama yntemi ile DataView kullanm aada gsterilmektedir. rnekte fiyat 8 YTL den byk kaytlar gsterilmektedir. Bu kaytlar yazar adna gre sralanarak gsterilir.
DataView dvProducts = new DataView(ds.Tables["kitaplar"]); dvProducts.Sort = "kitap_yazar"; dvProducts.RowFilter = "kitap_fiyat > 8"; DataGrid1.DataSource = dvProducts;
DataView snfnn Sort zelliine, sralanacak kolonun ad girilir. RowFilter zelliine ise arama veya filtreleme sorgusu girilir. rnekte Sipari Numaras 10300 den byk kaytlar sorgulanmaktadr
dv.RowFilter = ("SiparisID >10300") ;
Tarihi
08/25/1996
tarihinden
byk
olan
kaytlar
Konu: 5
rnekte mteri ad V ile balayan veya Sipari Numaras 10300 den byk kaytlar sorgulanmaktadr.
dv.RowFilter = ("MusteriADi like 'V*' Or SiparisID >10300");
Modl zeti
6. 7. 8. 9. 10.
Balantsz veri ortam hangi .NET nesneleri ile gerekletirilir? DataSet nedir? DataSet hangi nesnelerden oluur? DataTable nedir? Hangi durumlarda kullanlr ? DataColumn nedir? Hangi durumlarda kullanlr ? DataView Nedir ? Hangi durumlarda kullanlr ?
138
Bu uygulamada ayn form zerinde farkl DataTable ile allacaktr. Bu uygulama ile Bolum tablosundaki kaytlarn alan kutuya doldurulmas, seilen blme gre rencilerin DataGrid doldurulmas ve seilen renciye gre ders bilgilerinin DataGrid kontrolune doldurulmas gerekletirilir. Form zerindeki filtreleme ilemleri DataView kontrolu ile salanr. Personel kaytlarnn okunup DataGrid kontrolune doldurulmas, kaytlar arasnda gezinti, yeni personel kaydnn eklenmesi, bir personelin bilgilerinin gncellenmesi veya silinmesi ilemleri yaplr Bu lab tamamlandktan sonra: Access veritabanna balant oluturabilecek, DataSet zerinde birden fazla DataTable ile alabilecek, DataView ile filtreleme ilemleri yapabilecek, DataGrid kontrolne kayt doldurabileceksiniz.
Konu: 5
139
Kontrollerin eklenmesi
Dershane isminde yeni bir Windows projesi an. Form zerine, tablodaki kontrolleri ekleyin belirtilen zelliklerini ayarlayn.
Kontrol Kontrol smi DataGrid dgOgrenci DataGrid dgKurs ComboBox cbBolum Button btnListele Label Label1 zellik ReadOnly ReadOnly DropDownStyle Text Text Deer True True DropDownList
Listele Bolm
140
Dershane uygulamas iin yeni balant oluturmak. 1. Server Explorer penceresi zerinde farenin sa butonunu tklayn. Alan menden Add Connection komutunu tklayn. 2. Alan Data Link Properties penceresinin Provider sekmesini tklayn. 3. Provider sekmesinden Microsoft.Jet.OLEDB.4.0 Provider i seerek Next butonunu tklayn.
Balantnn Oluturulmas
Dershane veritabanna balant salamak iin OleDbConnection oluturun. 3. Ara kutusu zerindeki OleDbConnection kontrolu form zerine srkleyin. 4. OleDbConnection kontrolunun ConnectionString zellii iin oluturduunuz balant cmlesini sein.
Konu: 5
141
6. Finish butonunu tklayarak Data Adapter Configuration Wizard sihirbazn sonlandrn. 7. Eklediiniz OleDbDataAdapter kontrolunun ismini daBolum olarak deitirin. Ogrenci tablosunu DataSet ierisine aktarmak iin OleDbDataAdapter oluturun. 1. Ara kutusu zerindeki OleDbDataAdapter kontrolu form zerine srkleyin. 2. Karnza kan Data Adapter Configuration Wizard penceresi zerinde Next butonunu tklayarak, bir sonraki adma gein. 3. Choose Your Data Connection penceresi zerinde, oluturduunuz balant cmlesini sein ve Next butonunu tklayarak, bir sonraki adma gein. 4. Choose a Query Type penceresinden Use Sql statements seeneini sein ve Next butonunu tklayarak, bir sonraki adma gein. 5. Generate the Sql statements penceresindeki metin kutusuna 6.
SELECT OgrenciID, Ad, Soyad, Adres, BolumID, Sehir FROM Ogrenci yazn ve Next butonunu tklayarak, bir sonraki adma gein. Finish butonunu tklayarak Data Adapter Configuration Wizard
sihirbazn sonlandrn. 7. Eklediiniz OleDbDataAdapter kontrolunun ismini daOgrenci olarak deitirin. Kurs ve OgrenciDersKayit tablolarn DataSet ierisine aktarmak iin OleDbDataAdapter oluturun. 1. Ara kutusu zerindeki OleDbDataAdapter kontrolu form zerine srkleyin. 2. Karnza kan Data Adapter Configuration Wizard penceresi zerinde Next butonunu tklayarak, bir sonraki adma gein. 3. Choose Your Data Connection penceresi zerinde, oluturduunuz balant cmlesini sein ve Next butonunu tklayarak, bir sonraki adma gein. 4. Choose a Query Type penceresinden Use Sql statements seeneini sein ve Next butonunu tklayarak, bir sonraki adma gein. 5. Generate the Sql statements penceresindeki metin kutusuna
SELECT OgrenciDersKayit.OgrenciID, Kurs.KursAdi, OgrenciDersKayit.KursBasTarihi, Kurs.Kredi, Kurs.KursNo FROM (Kurs INNER JOIN OgrenciDersKayit ON Kurs.KursNo = OgrenciDersKayit.KursNo)yazn ve Next butonunu tklayarak, bir
sonraki adma gein. 6. Finish butonunu tklayarak Data Adapter Configuration Wizard sihirbazn sonlandrn. 7. Eklediiniz OleDbDataAdapter kontrolunun ismini daKurs olarak deitirin.
142
8. 9. 10. 11.
Ok butonunu tklayn. daKurs zerinde farenin sa butonunu tklayn. Alan ksayol mensnden Generate DataSet mensn tklayn Choose a Dataset mensnden Existing seeneini sein ve alan
Kodlarn Yazlmas
1. Form kontrolunun Load olayna kaytlar DataSet tablolarna dolduran kodlar yazn.
try { Conn.Open(); daBolum.Fill(Ds1, "Bolum"); daOgrenci.Fill(Ds1, "Ogrenci"); daKurs.Fill(Ds1, "Kurs"); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } finally { Conn.Close(); }
Konu: 5
143
2. btnListele kontrolunun Click olayna dvOgrenci kontrolunu DataGrid kontrolune balayan kodu yazn.
dvOgrenci.RowFilter = "BolumID='" + cbBolum.SelectedValue + "'"; dgOgrenci.DataSource = dvOgrenci;
3. dgOgrenci kontrolunun CurrentCellChanged olayna dvKurs kontrolunu DataGrid kontrolune balayan kodu yazn.
dvKurs.RowFilter = "OgrenciID='" + dgOgrenci.Item(dgOgrenci.CurrentRowIndex, 0) + "' "; dgKurs.DataSource = dvKurs;
Modul 6:
ASP.NET, .Web sunucusu zerinde alan ve .NET altyapsn kullanan gelitirme platformudur. ASP.NET Web Form nesneleri, dinamik Web uygulamalar gelitirmeyi kolaylatrr. Bu modl tamamladktan sonra:
Konu: 1
145
ASP.NET alma modelini renecek, ASP.NET teknolojisinin .NET Framework atsndaki yerini renecek, IIS Web sunucusunun yapsn renecek ve ynetebileceksiniz.
ASP.NET teknolojisinden nce, web zerinde dinamik sayfalarla alabilmek iin ASP teknolojisi kullanlrd. ASP teknolojisi, .NET ats ile yeni zelliklere eklendi. ASP.NET ile web uygulamas gelitirmek, Windows Form tabanl uygulama gelitirmeye olduka benzemektedir. Web Server tarafnda alan, HTML kodlarn ve ASP kontrollerini ieren, temel ASP .NET bileenine Web Form denir. Bir web uygulamasnda birden fazla Web Form bulunabilir. ASP.NET sayfalar ile yazlan kodlar sunucu tarafnda alr, istemci tarafnda eitli ilemleri gerekletirebilmek iinse Script ad verilen kodlar kullanlr. Web uygulamasnn gvenlii ise yine sunucu tarafnda alan .NET bileenleri ile salanr. ASP.NET Web Formlar sunucu tarafl kodlar altrd iin, kullanc tarafndaki taraycya ve iletim sistemine bal deildir. Dolaysyla ASP.NET ile yazlan uygulamalar, internet eriimi olan herhangi bir aygtta alabilir.
146
HTML(Hyper Text Markup Language) web sayfas hazrlamak iin kullanlan temel web programlama dilidir. HTML, kullanc ile sunucu arasnda dinamik veri alverii salamaz. HTMLin bu an kapatmak iin ilk olarak CGI arabirimi (Common Gateway Interface) gelitirilmitir. CGI arabirimi C dilinde hazrlanan kodlar ile altrlr. CGI arabiriminin dezavantaj, en ufak bir deiiklikte tm kaynak kodun yeniden derlenmesidir. Bu durum zaman ve kaynak kullanmn olumsuz ynde artrr. CGI arabirimininden sonra, sununu ile haberleen ilk dil olan PERL(Practical Extraction and Reporting Language) gelitirilmitir. Bu dil C ve C++ ile yazlan scriptler ierir. PERL, CGIn yeniden derlenme dezavantajn ortadan kaldrmtr. PERL halen aktif olarak kullanlmaktadr. Microsoft NT teknolojisini ile birlikte Internet Information Server (IIS) sunucusunu gelitirmitir. IIS, Windows NT 3.51 ile gelen web sunucusudur. IIS sunucusunun Windows NT 3.51 ile gelen ilk srm CGI arabirimini desteklemektedir. Microsoft IIS sunucusunu gelitirdikten sonra, Internet Server Application Programming Interface (ISAPI) arabirimini gelitirmitir. Microsoft ilk defa ISAPI ile birlikte ASP teknolojisini duyurmutur. ASP teknolojisi, IIS ve ISAPI alt yapsn birletirir. ASP, statik HTML sayfalar ierisinde, dinamik veri alverii iin Microsoft tarafndan gelitirilmitir
Konu: 1
147
ASP.NET, multi-tier (ok katmanl) veri eriim modelini kullanr. Bu veri eriim modeli stemci, ve Veri katmanlarndan oluur.
148
ASP.NET, ASP ve dier web platformlarna gre daha yksek performans ile alr. ASP.NET bu performans artn Visual Studio .NET ile gelen, .NET Framework ve CLR (Common Language Runtime) ile salar. ASP.NET platformunu en verimli ekilde kullanmay salayan CLR bileenleri aadaki gibidir. Type Management Memory Management JIT Compilation Exception Manager
Konu: 1
149
Gvenli olmayan bilgilere ve balatlmam deikenlere izin vermez Bu ynetim, ASP.NETi ASPden tamamen ayran bir zelliktir.
150
ASP.NET Web sayfalar, kullanlan dilin editrnde derlenerek, MSIL (Microsoft Intermediate Language) diline evrilir. MSIL kodu alma zamannda, JIT ile native code ad verilen dile evrilir.
Konu: 1
151
CLR ile hafza ynetimi otomatik olarak ilenir. New anahtar szc ile oluturulan nesneler iin, CLR hafzada yer ayrr. Nesneler referanslarn kaybettikten sonra Garbage Collection mekanizmas ile bellekten silinir.
152
CLR, ASP.NET uygulamalar iin yapsal hata yakalama altyaps sunar. ASP.NET uygulamalarnda Try...Catch...Finally bloklar kullanlarak ,hata yakalama altyaps kolayca devreye sokulur. ASP.NET uygulamalarn konfigrasyon ayarlar, XML dosyalar ierisinde saklanr. Bu dosyalar kolayca okunur ve yazlabilir. Her web uygulamann kendisine ait bir konfigrasyon dosyas vardr. ASP.NET uygulamalarn konfigrasyon dosyalar web.config dir. Sunucuya ait konfigrasyon ayarlar ise machine.config ierisinde saklanr. Her web sunucusunda tek machine.config dosyas bulunur. Visual Studio .NET, web uygulamalarnn performansn arttrmak ve gvenliini salamak iin pek ok servis sunar.
Konu: 1
153
Bir ASP.NET uygulamasn oluturan bileenler aadaki gibidir. Web Formlar: Web uygulama iin kullanc arayz salar. Code-behind sayfalar: Web Formlarn sunucu tarafnda alan kodlarn ierir. Konfigrasyon dosyalar: Web uygulama ve sunucu ayarlarnn tutulduu XML dosyalardr. Global.asax dosyalar: Web uygulamann genel olaylarn ierir. rnein Web uygulamann balatlmas veya durdurulmas. Global.asax dosyas ASP deki global.asa dosyasnn gelimi versiyonudur.
154
XML Web Servis balantlar: Web uygulamann, XML web servisi zerinden veri alveriini salar. Veritaban balantlar, Web uygulama ile veri kayna arasnda veri alveriini salar. Caching (n Bellee Alma): Uygulamann ilk alt anda n bellee atlmasn salar. Bu durum uygulamann bellekten almasn salayarak, performans artrr.
Konu: 1
155
Microsoft .NET platformu, geni apl web uygulamalar gelitirebilmek iin, gerekli her trl ara ve teknolojiye sahiptir. Dilden bamsz alabilme, eski teknolojiden yeni teknolojilere kolayca gei imkan salar. Tamamen nesne ynelimli programlamay destekleyen bir platform olan Visual Studio .NET, web uygulamalarnda da nesne ynelimli programlama modelini destekler.
ekil 5.1de belirtildii gibi en st katman, kullanc ve program arayzlerini gsterir. Bu arayzler Windows Form, Web Form, Web Service ve uygulama servislerinden oluabilir. Orta katmanda .NET Framework snflar, alt katmanda ise CLR bulunur.
156
.Net Framework, ASP.NET ile uygulama gelitirmek iin birok avantaj salar. Bu avantajlar aada listelenmitir. Visual Studio .NET ortamnn en byk avantaj, birden fazla dili destekliyor olmasdr. ASP.NET ile gelitirilen uygulamalarda, farkl .NET dilleri bir arada kullanlabilir. rnein VB.NET ile gelitirilen bir uygulama ierisine C# ile yazlan kod bloklar eklenebilir. Visual Studio .NET, web uygulamalarn gvenliini salayan eitli snflar ierir Bu snflar System.Web.Security isim alan ierisinde bulunur. ASP .NET sayfalar ierisinde, HTML ve Kaynak kod birlikte altrlr. Bu durum tasarm ve programlama kolayl salar. ASP.NET ierisinde kodlar satr satr derlenmez. Bunun yerine Web formlar derlenir. Bu durum performansn artn salar Gl hata yakalama aralar sunar. Web servisleri ile birlikte alabilir. ASP.NET, ADO.NET kullanmn kolaylatran web nesneleri ierir.
Konu: 1
157
ASP.NET ile gelitirilen uygulamalarn; Internet, Extranet veya Intranet zerinde alabilmesi iin Web Sunucularna ihtiya duyulur. IIS (Internet Information Services) Windows iletim sistemleri iin gelitirilmi web sunucusudur.
158
IIS Nedir?
IIS(Internet Information Services), Windows sistemler iin web tabanl uygulama gelitirme ve yaynlama amacyla kullanlan web sunucusudur.
Konu: 1
159
IIS Kurulumu
Web uygulamalar gelitirmek iin IIS 5.0 veya daha st versiyonu kurulmaldr. IIS, Windows 2000 Server iletim sistemi ile varsaylan bileen olarak gelir.
160
Windows 2000 Professional, Windows XP Professional ve sonraki sistemlerde ise, bu aracn kullanc tarafndan kurulmas gerekir. IIS kurulumu iin aadaki admlar takip edilir. 1- Denetim Masas (Control Panel) penceresinde Program Ekle/Kaldr (Add or Remove Programs) simgesini sein. 2- Alan pencerenin sol panelinden Windows Bileeni Ekle/Kaldr (Add/Remove Windows Components) bileenini sein. 3- Windows Bileeni Ekle/Kaldr penceresinden Internet Information Services (IIS) seerek ykleme ilemini balatn. DKKAT:
Windows NT 4.0 ve Windows XP Home Edition iletim sistemleri ile ASP.NET
uygulamas gelitirilemez.
.NET Framework kurulmadan nce IIS sunucusunun kurulmu olmasna dikkat edilmelidir. Aksi halde ASP.NET dosyalar, ilgili ktphane dosyalar ile dzgn bir ekilde kullanlamaz. Eer IIS kurulmadan .NET Framework kurulmaya allra, uyar mesaj ile karlalr. Bu uyar mesaj nemsenmeden kuruluma devam edilebilir. Framework kurulumu tamamlandktan sonra IIS kurulmaldr. Ancak IIS yklendikten sonra, sistemin ASP.NET sayfalar ile uyum iinde alabilmesi iin Visual Studio .NET komut satrnda aspnet_regiis.exe -I komutu altrlmaldr.
Konu: 1
161
IIS Ynetimi
Information
Services
(IIS)
Manager ile
IIS Manager amak iin aadaki admlar takip edilir. Bilgisayarm(My Computer) ikonuna sa tklanr. Alan ksayol mensnden Ynet (Manage) komutu seilir. Alan Computer Manager penceresinin Services and Applications mensnden Internet Information Services (IIS) seilir. Denetim Masas (Control Panel) ierisinden Administrative Tools simgesi seilir. Alan pencereden Internet Information Services Manager seilir.
IIS ierisinde aadaki altkklasrler bulunur. Application Pools Web Sites Web Service Extensions
162
Web Sites alan web uygulamalarn lisleler. Web Sites klasr altndaki Default Web Site sekmesi zerinden web sunucu seenekleri ayarlanabilir. Web sunucu zelliklerini deitirmek iin aadaki admlar takip edilir.
1. Internet Information Services zerinden Web Sites seilir. 2. Web Sites zerinde farenin sa tuu tklanr. Alan menden Properties mens seilir.
Home Directory kategorisinde Local Path alannda c:\inetpub\wwwroot
Konu: 1
163
Resim 6.3: IIS Ynetimi ASP.NET web uygulamalar wwwroot klasr altnda tutulur. Bu klasr altnda tutulan klasrlerin dierlerinden fark Virtual Directory (sanal klasr) olmalardr. .NET ile alan her yeni web uygulamas iin, wwwroot altnda yeni bir Virtual Directory oluturulur. Visual Studio .NET kullanmadan yeni bir Virtual Directory oluturmak iin Default Web Site zerinde sa tklanr. kan menden New alt mensne iaret edilir ve Virtual Directory seilir. Virtual Directory Creation Wizard ile yeni bir Virtual Directory oluturulur.
164
ASP.NET ile uygulama gelitirmek iin .NET Frameworkn kurulu olmas gerekir. Frameworkn,. SDK olarak isimlendirilen 130MBlk full versiyonu ve yalnzca temel bileenleri kapsayan 20MBlk iki farkl kurulum dosyas bulunmaktadr. Framework versiyon ve yamalar (Service Pack) http:// msdn.microsoft.com/netframework/downloads/updates/default.aspx
adresinden cretsiz olarak indirilebilir. Framework kurmak iin aadaki admlar takip edilir. 1. Framework kurulum dosyas altrlr. 2. Alan penceredeki Would you like to Install Mictosoft .NET Framework Package? sorusuna Yes cevab verilir. 3. Next butonlar tklanarak kurulum tamamlanr. PUCU:
.Net Framework kurabilmek iin iletim sisteminin Windows NT tabanl olmas
Konu: 1
165
Modl zeti
ASP nedir? ASP alma modelini aklayn. ASP .Net uygulamasn oluturan bileenler nelerdir? IIS nedir?
166
Bu uygulamada IIS(Internet Information Services) kurulumu reneceksiniz. Aynu zamanda IIS ile web tabanl uygulamalarn yaynlanmasn reneceksiniz.
Uygulama Yaynlamak
Default.htm ismindeki HTML sayfay IIS zerinden yaynlayn. 3. C:\Inetpub\wwwroot klasorne gidin. 4. wwwroot penceresi ierisinden Dosya mensn tklayn. 5. Dosya mens ierisinden Yeni alt mensn tklayn.
Konu: 1
167
6. Yeni alt mens ierisinden Metin Belgesi komutunu vererek Yeni Metin Belgesi oluturun. 7. Oluturduunuz metin belgesi ierisine aadaki HTML(Hyper Text Markup Language) kodlar ekleyin ve dosyay kaydedin.
<html> <head> <title>HTMLPage1</title> </head> <body> <p>Ho Geldiniz.</p> </body> </html>
8. Metin belgesinin ismini Default.htm olarak deitirin. 9. Intrernet Explorer an ve aadaki adreslerden herhangi birini adres ubuuna yazn. a. http://localhost b. http://127.0.0.1 c. http://MakinaAd d. http://IpNumaras Localhost: Lokal makina ad. 127.0.0.1 : Lokal IP numaras. Makina Ad: A ierisindeki bilgisayar ad. Ip Numaras: A ierisindeki Ip Numaras. pucu :
Web uygulamann yayn, wwwroot ierisindeki herhangi bir alt klasrden ASP.NET Web Application
Modul 8:
Konu: 1
169
ASP.NET ile uygulama gelitirirken kullanlan temel bileenler Web Formlar ve Web kontrolleridir. Web Form, IIS tarafndan altrlan HTML kod ve
170
Modl 7:
kontrollerin birleiminden oluur. Bu formlara eklenen kontroller, sunucu veya istemci tarafl alabilirler. Bu modl tamamlandktan sonra: Web Form yapsn ve bileenlerini renecek, Sunucu ve istemci tarafl kontrollerin farklarn renecek, Web kontrollerini tanyacak,
ViewState ve PostBack kavramlarn reneceksiniz.
Web Form, ASP.NET uygulamalarnn yap tadr. Visual Studio .NET ortam aracl ile eklenen kontrollerin ve Visual Basic .NET kodlarnn birleimi Web Formu oluturur. Web formlar, .aspx uzantl arayz dosyas ve. aspx.cs uzantl kod dosyalarndan oluur. rnein default.aspx isimli ASP.NET sayfasnn, sunucu tarafl Visual Basic .NET kodlar default.aspx.cs isimli dosyada tutulur. Kullanc arayz sayfas ve kod sayfasnn ayr tutulmasnn yarar, web programcsna ve web tasarmcsna ayr kaynaklar sunarak bamsz alma ortam salamaktr.
Konu: 1
171
Web Formlar Visual Studio ile iki farkl ekilde tasarlanabilir. Design sekmesi, web kontrollerinin grsel olarak dzenlenmesini salar. HTML sekmesi ise, kontrollerin HTML kodlar ile eklenmesini salar. Grsel ksmda Web Form kontrolleri ve bu kontrollere ait HTML kodlar, kod sayfasnda da bu kontrollerin davranlarn belirleyen Visual Basic .NET kodlar bulunur.
Web Formlarn genel zellikleri aadaki gibidir. @Page zellii Body zellii Form zellii
172
Modl 7:
Page zellii
Tm sayfa iinde tanmlanacak fonksiyonlarn deerlerini ierir. <@Page> etiketi ile gsterilir ve her .aspx uzantl dosyada bulunmas gerekir. <@Page> etiketinde, sayfann yaps ile ilgili zellikler bulunur. Language Sayfa iinde kullanlacak dil seeneini bildirilir. ASP.NET uygulamalarnda genellikle VB ve C# dilleri tercih edilir.
<@Page Language=c# <@Page Language=vb > >
CodeBehind Web formlarn, Visual Basic .NET veya C# uzantl kod dosyasn belirtir.
<@Page CodeBehind=WebForm1.aspx.vb > <@Page CodeBehind=WebForm1.aspx.cs >
SmartNavigation SmartNavigation zelliine True deeri ayarlanrsa, sayfa yeniden yklendii zaman, kaydrma ubuklarnn sayfa ierisindeki yeri korunur. Bylece sayfa ilk konumunda kalr. Bu zellik Internet Explorer 5.5 ve st tarayclar tarafndan desteklenir.
Konu: 1
ViewState ASP.NET teknolojisi ile gelen yeniliklerden biridir. EnableViewState zellii ile objenin ierisine girilen bilgi ne olursa olsun, sunucu bunu bir deikende tutup tekrar kullancya geri dndrr. Bu durum sunucuya gnderilen veriler zerinde hata olumas durumunda, billgilerin kaybolmamasn salar. Bu zelliin tm kontrolleri iermesi iin, Page ynerge satrnda tanmlanmas gerekir. Bu zellik True veya False deeri alabilir.
<@Page EnableViewState=True >
Ayrca kontrol dzeyinde EnableViewState zellii kullanlabilir. Bu durumda, Page ynerge satrnda belirtilen deer geersiz olur.
<asp:Button EnableViewState=false >
Body zellii
Web sayfasnn ana blmdr. <body> etiketi ile web formun gvdesi oluturulur. Kullanlan her kontrol <body> ... </body> etiketleri arasnda bulunmaldr.
body etiketi ierisinde PageLayout(ms_positioning) zellii tanmlanabilir.
174
Modl 7:
PageLayout(ms_positioning) Web form iinde kullanlan nesnelerin, grntlenme biimini ayarlar. Bu zellik iki deer alabilir: FlowLayout: Sayfaya eklenen kontroller eklenme srasna gre sralanr. Kontrollerin yerleri srkleme ile deitirilemez. Nesneler iin style tanmlamaz.
GridLayout: Kontroller form zerindeki herhangi bir yere eklenebilir. Kontrollerin yerleri srkleme ile deitirilebilir. Bu grnmde nesneler iin style tanmlanr. Bu grnm Windows Uygulamalardaki Form grnmne benzemektedir.
Form zellii
Web kontrolleri gruplandrmak iin kullanlr. Her web form iin tek Form etiketi tanmlanr. Tm kontroller <form> </form> etiketleri arasna eklenir. Form etiketi iinde tanmlanabilecek birok zellik vardr.
Konu: 1
175
Method Web kontrol zelliklerinin, sunucuya gnderilme eklini belirler. ki deer alabilir: Post: sim ve deer bilgilerini, HTML bilgisinin st bilgisine yazarak gnderir.
Id Formun isim bilgisini verir. CodeBehind sayfas ierisinde, forma ilem yaptrmak iin kullanlr.
<form id=deneme >
Runat Web formlarda kullanlan kontrollerin sunucu ile haberleerek alabilmesi iin runat=server bildirimi kullanlr. Bu zellik sadece server deerini alabilir.
<form runat=server >
176
Modl 7:
Web sunucu zerinde alan kontrollerdir. ki tr server .kontrolu vardr. Bunlar: HTML Server Kontrolleri Web Server Kontrolleri (ASP.NET Kontrolleri)
ASP.NET server kontrolleri System.Web.UI.Control snfndan tretilir. Her ASP.NET server kontrol <asp:KontrolIsmi> etiketi ile bildirilir. HTML kontrolleri ise System.Web.UI.HtmlControls isim alannda bulunur.
Button, TextBox, DropDownList gibi server kontrollerinin alma modeli, istemci tarafl HTML kontrollerinin alma modelinden olduka farkldr. ASP.NET server kontrolleri, tamamen sunucu zerinde alr ve geri plandaki tm ileyileri ara yzle gizlenerek gerekletirilir.
Konu: 1
177
Bu kontroln sunucu tarafnda almas iin, kontrole runat zellii eklenmelidir. Bylece kontrol HTML server kontrol haline getirilir.
<INPUT type=button id=button1 value=Bu Bir Html Button > runat=server _
ASP.NET Web kontrolleri drt grupta listelenir. Bunlar; 1- Standart Kontroller (ListBox, Button, CheckBox, Table vs.) 2- Dorulama Kontrolleri (RequiredFieldValidator, RangeValidator, CompareValidator, RegularExpressionValidator, CustomValidator, ValidationSummary)
3- Zengin Kontroller (Calendar, Adrotator) 4- likisel Liste Tabanl Kontroller (DataGrid, DataList, Repeater)
Standart Kontroller
Bu kontroller, HTML kontrollere alternatif olarak tasarlanmtr. Eski tip HTML kontrolleri ile yeni ASP.NET kontrolleri arasndaki en belirgin fark, her Web kontrolnden nce asp: n ekinin kullanlyor olmasdr.
<asp:TextBox runat=server id=giris Text=Ho Geldiniz> </asp:TextBox>
178
Modl 7:
Benzer kontrollere dzenli biimde isimler verilir. Tm kontroller ayn genel zelliklere sahiptir. Tarayc iin zel kodlar kendiliinden retilir.
Bu grupta bulunan kontrollerin tm id, text, backcolor, runat zelliklerine sahiptir. Ancak CheckBox kontrolnn Checked ve ListBox kontrolnn SelectedItem zellikleri vardr. Tablo 8.1de Html ve Standart sunucu kontroller gsterilmektedir.
Web kontrol <asp:Button> <asp:CheckBox> <asp:HyperLink> <asp:image> <asp:imageButton> <asp:LinkButton> <asp:Label> <asp:ListBox> <asp:Panel> <asp:TextBox> <asp:RadioButton> <asp:DropDownList> <asp:Table>
Html Kontrol <input type=submit> <input type=checkbox> <a href=...> </a> <img src=..> <input type=image> Yok <span> </span> <select size=5> </select> <div> </div> <input type=text> <input type=radiobutton> <select> </select> <table> </table>
Dorulama Kontrolleri
Kullancnn girdii deerleri kontrol etmek iin kullanlr. Kontroln yaplaca alana ve veriye gre, farkl dorulama kontrolleri kullanlr. ASP.NET, belirli bir aralkta veri girii salayan, karlatrma yapan ve belirli deerlerin bo geilmemesini salayan eitli dorulama kontrolleri sunar.
RequiredFieldValidator, RangeValidator, CompareValidator, RegularExpressionValidator, CustomValidator, ValidationSummary
Zengin Kontroller
AdRotator ve Calendar zengin kontroller grubunda yer alr. AdRotator, Web
sayfalar zerinde reklam yayn yapmak iin kullanlr. Calendar ise Web saylar zerinde Takvim gstermek iin kullanlr.
Konu: 1
179
Label
Label,kullancya bilgi vermek iin kullanlr. <asp:Label runat="server" Text="Label Control" FontItalic="true" />
TextBox
TextBox, kullancnn bilgi giriini salar. En sk kullanlan giri .kontroludr. <asp:TextBox id="userName" type="text" runat="server">
180
Modl 7:
Web kontroller, WebControl snfndan tremilerdir. Bu yzden Web kontroller BackColor, BorderColor, Enabled, Font, Height, Width zelliklerine sahiptir.
Button
Button, form zerindeki olaylar sunucuya yollamak iin kullanlr. En sk
kullanlan onay kontroludr. rnekte Dugme1 isimli button tklandnda, Label kontrolune mesaj yazlr.
<asp:Button id="Dugme1" runat="server" Text="Tklaynz" OnClick="Dugme1_Click" runat="server"/> <span id="Message" runat="server" /> private void Dugme1(object sender, System.EventArgs e) { Message.InnerHtml="Beni Tkladn." ; }
CheckBox
seim yapma imkn sunar. Onay kutusu iaretlenmi ise True, iaretlenmemi ise False deerini alr. Onay kutusunun durumu CheckedChanged metodu ile takip edilebilir. rnekte CheckBox kontrolnn onay kutusu tkland anda Seili, seim ilemi geri alnd anda Seili deil mesaj yazlr. Seim yapld anda mesajn yazdrlmasn salayan AutoPostBack zelliinin, True deeridir.
void Check_Clicked(Object Sender, EventArgs e) { If (checkbox1.Checked ) { Message.InnerHtml="Seili" ; } else { Message.InnerHtml="Seili Deil" ; } } <asp:CheckBox id="checkbox1" runat="server" AutoPostBack="True" Text="ye Olmak ster misiniz?" TextAlign="Right" OnCheckedChanged="Check_Clicked"/> <br> <span id="Message" runat="server" /> CheckBox, kullancya seenekler arasndan
Konu: 1
181
RadioButton
RadioButton, CheckBox kontrolne benzerlik gsterir. Ancak RadioButton
kontrolunun GroupName zellii ile, birden fazla RadioButton arasnda grup oluturulur. Ayn grup ierisinden sadece bir RadioButton seilebilir. Birden fazla seenein iaretlenmesine izin verilmez. Onay kutusunun durumu Checked metodu ile takip edilebilir. rnekte, RadioButton kontrolleri arasnda muzik isminde bir grup oluturulmutur. Bu grup ierisindeki Pop, Jazz ve Classic RadioButton kontrollerinden sadece bir tanesi seilebilir. BtnOnay isimli button tklandnda, seilen RadioButton kontrolunun deeri Message isimli Label kontrolune yazlr.
void BtnOnay_Clicked(Object Sender,EventArgs e) { if (Radio1.Checked) { Message.InnerHtml = "Seiminiz" + Radio1.Text; } else if (Radio2.Checked) { Message.InnerHtml = " Seiminiz " + Radio2.Text; } else if (Radio3.Checked) { Message.InnerHtml = " Seiminiz " + Radio3.Text; } } <h4>Beendiiniz mzik trn seiniz:</h4>
182 <asp:RadioButton id=Radio1 Text="Pop" Checked="True' GroupName="muzik" runat="server"/> <br> <asp:RadioButton id=Radio2 Text="Jazz" GroupName="muzik" runat="server"/> <br> <asp:RadioButton id=Radio3 Text="Classic" GroupName="muzik" runat="server"/> <br> <asp:button text="Seiniz" id=BtnOnay OnClick="BtnOnay_Clicked" runat=server/> <br><br> <span id="Message" runat="server" />
Modl 7:
HyperLink
Hyperlink, sayfalar aras dolam salar. Hyperlink kontrolunun grnm
metin veya resim olabilir. ImageUrl zellii ile grntlenecek resim dosyas belirlenir. NavigateUrl zellii ile gidilecek sayfa belirlenir. rnekte Hyperlink kullanm gsterilmektedir.
<asp:HyperLink id="hyperlink1" runat="server" ImageUrl="image1.gif" NavigateUrl="http://www.bilgeadam.com" Text="Bilge Adam BTA" Target="_blank"/> Target zellii, alacak sayfann ayn sayfa zerinde veya yeni bir sayfada
Image
Image, sayfa iinde resim grntlemek iin kullanlr. ImageUrl zellii ile
grntlenecek resim dosyas belirlenir. ImageAlign zellii resmin hizalanmas iin kullanlr. AlternateText resime alternatif metin gstermek iin kullanlr. rnekte Image kullanm gsterilmektedir.
<asp:Image id="Image1" runat="server" AlternateText="Logomuz"
Konu: 1
ImageButton
ImageButton resimli button kontroludur.
kontrolnn ImageClickEventArgs argman kullanarak, kontroln bulunduu yerin koordinat deerleri alnabilir.
ImageButton
nesnesi
LinkButton
grnml Button kontroldr. LinkButton kontrolnn HyperLink kontrolnden fark ise olaylarnn olmasdr.
LinkButton, HyperLink
184
Modl 7:
DropDownList
DropDownList, alan kutuda veri grntlemek iin kullanlr. DropDownList eleri Items koleksiyonunda tutulur. Items koleksiyonunun Count zellii ile toplam e says bulunur. DropDownList kontrolune tasarm veya alma zamannda e eklenebilir.
Konu: 1
185 LEFT: 128px; POSITION: absolute; TOP: 160px" runat="server" Width="152px"/> void Page_Load(System.Object sender, System.EventArgs e) { for (int i=0;i<=5;i++) { DropDownList1.Items.Add(i.ToString); } } alma zamannda eleman eklemek iin, Items koleksiyonunun Add metodu
kullanlr.
ListBox
ListBox, DropDownList kontrolne benzer. Elemanlar liste halinde gsterilir
ve SelectionMode zelliine Multiple deeri atanarak, oklu seim yapma imkn salanr. rnekte ListBox kontrolunn oklu seim zellii kullanlmaktadr. ListBox kontrolu ierisinde seilen tm elemanlar Label kontrolune yazdrlr.
public void SubmitBtn_Click(object sender, EventArgs e) { ListItem item; Message.Text = ""; foreach(ListItem item in ListBox1.Items) { if(item.Selected == true) { Message.Text += item.Text + " "; } } } <asp:ListBox id=ListBox1 Rows=4 SelectionMode="Multiple" Width="100px" runat="server"> <asp:ListItem>Trke</asp:ListItem> <asp:ListItem>ngilizce</asp:ListItem> <asp:ListItem>Almanca</asp:ListItem> <asp:ListItem>talyanca</asp:ListItem> </asp:ListBox> <br> <asp:button Text="Submit" OnClick="SubmitBtn_Click" runat="server" /> <br> <asp:Label id="Message" runat="server"/>
Panel
Panel, dier kontrolleri gruplandrmak iin kullanlr. rnekte panel kullanm gsterilmektedir.
public void Button1_Click(object sender, EventArgs e) {
186
Modl 7:
// Label kontrol oluturalm Label label; label = new Label(); label.Text = "Etiket"; label.ID = "Label1"; Panel1.Controls.Add(label); Panel1.Visible = true; } <asp:Panel id="Panel1" runat="server" BackColor="blue" Height="150px" Width="200px" Visible=false> Panel1 <p> </asp:Panel> <asp:Button id="Button1" onClick="Button1_Click" Text="Paneli Gster" runat="server"/>
Panel1 isimli panel kontrol balangta gsterilmemektedir Button1 dmesi tklannca, panel kontrolunun ierisine label kontrolu eklenir ve grnr hale. getirilir. BackImageUrl zellii ile panele arka plan resmi verilir.
Table
Table, satrlarna ve stunlarna programlama yoluyla mdahale edilebilen
tablo kontroldr. Table kontrol iinde TableRow ve TableCell nesneleri kullanlr. TableCell, tabloda bir hcreyi temsil eder. TableRow ise tabloda bir satr temsil eder. rnekte Tabel kullanm gsterilmektedir.
private void Page_Load(object sender, System.EventArgs e) { //Satr ve Stun Oluumu int nrows = 3; int ncells = 2; int i; int j; for(j=0;j<=nrows - 1;j++) { TableRow r; r = new TableRow(); for(i=1;i<=ncells;i++) { TableCell c; c = new TableCell(); c.Controls.Add(new LiteralControl("Satr " + j.ToString() + ", hcre " + i.ToString())); r.Cells.Add(c); } Table1.Rows.Add(r); }
Konu: 1
187 <asp:Table id="Table1" GridLines="Both" HorizontalAlign="Center" Font-Name="Verdana" Font-Size="8pt" CellPadding=15 CellSpacing=0 Runat="server"/>
Web forma girilecek verinin doruluunu kontrol etmek iin sklkla JavaScript fonksiyonlar veya uzun ASP kodlar kullanlrd. Bu durum uygulama gelitirme srecinin artmasna neden olurdu. ASP.NET ile birlikte verinin doruluunu kontrol etmek iin dorulama kontrolleri gelitirildi. ASP.NET, belirlsi bir aralkta veri girii salayan, karlatrma yapan ve belirli deerlerin bo geilmemesini salayan eitli dorulama kontrolleri sunar. Tablo 7.1 de dorulama kontrolleri listelenmitir.
Validation Kontroller RequiredFieldValidator Grevi
Bir kontrol ierisine deer girilip girilmediini kontrol eder. Veri girilmesi zorunlu alanlarda kullanlr. Kontrol ierisine girilen deeri, sabit deerle veya baka bir kontrole girilen deerle karlatrr. Kontrol ierisine girilen deerin, ki sabit deer arasnda olmasn salar.
CompareValidator
RangeValidator
Modl 7:
Dorulama kontrollerinin ortak zellikleri aadaki gibidir. ControlToValidate: Hangi kontroln dorulanacan belirtir. ErrorMessage: Geerli giri yaplmamsa grntlenecek hata mesajn verir. Text: ErrorMessage ve Text zellii birlikte kullanlabilir. Bu durumunda Text zelliindeki mesaj grntlenir. Dorulama kontrollerin ErrorMessage zelliine girilen tm mesajlar ValidationSummary ierisinde listelenir. Display: Validation kontroln nasl grntlenecei bilgisini tutar. Static, Dynamic ve None deerleri alr.
RequiredFieldValidator
RequiredFieldValidator, belirtilen kontroln bo geilmemesini salar.
Dorulama yaplacak web kontrolnn ismi ControlToValidate zelliine girilir Geerli giri yaplmadnda ortaya kacak hata mesaj ErrorMessage zellii ile belirtilir. rnekte RequiredFieldValidator kullanm gsterilmektedir..
<asp:RequiredFieldValidator id="RequiredFieldValidator1" style="Z-INDEX: 103; LEFT: 224px; POSITION: absolute; TOP: 48px" runat="server" ErrorMessage="Adnz Girmelisiniz!!!" ControlToValidate="txtad"> </asp:RequiredFieldValidator>
CompareValidator
Kontrol ierisine girilen deeri, sabit deerle veya baka bir kontrol ile karlatrmak iin kullanlr. Dorulama yaplacak web kontrolnn ismi ControlToValidate zelliine girilir. Karlastrma yaplacak sabit deer ValueToCompare zelliine girilir. Type zelliine girilen deerin veri tr, Operator zelliine ise mantksal operatr girilir. rnekte txtYas kontrolune yirmi veya yirmiden byk tamsay girii salayan dorulama ilemi yaplmaktadr.
Konu: 1
189
<asp:CompareValidator id="CompareValidator1" style="Z-INDEX: 109; LEFT: 232px; POSITION: absolute; TOP: 88px" runat="server" ErrorMessage="Yanz 20 ye eit veya byk olmaldr." ValueToCompare="20" ControlToValidate="txtYas" Type="Integer" Operator="GreaterThanEqual" Width="128px"> </asp:CompareValidator>
Dorulama yaplacak web kontrolu, baka bir karlatrlacaksa ControlToCompare zellii kullanlr.
web
kontrol
ile
RangeValidator
Kontrol ierisine girilen deerin, belirli bir deer aralnda olmasn salar. Dorulama kontrollerinin ortak zelliklerine ek olarak MinimumValue, MaximumValue ve Type zellikleri vardr. rnekte txtYas kontrolune girilen deerin, otuzbe ile elli arasnda olamasn salayan dorulama ilemi yaplmaktadr. Bu zel karakterler Tablo 7.4
<asp:RangeValidator id="RangeValidator1" style="Z-INDEX: 109; LEFT: 240px; POSITION: absolute; TOP: 128px" runat="server" ErrorMessage="Yanz 35 ile 50 arasnda olmaldr." ControlToValidate="txtYas" Type="Integer" MaximumValue="50" MinimumValue="35"> </asp:RangeValidator>
190
Modl 7:
RegularExpressionValidator
Kontrol ierisine girilen deerin, istenilen formatta girilmesini salar. ValidationExpression zelliine girilen zel karakterler ile veri giri format salanr. Bu zel karakterler Tablo 7.4 de gsterilmektedir. rnekte RegularExpressionValidator kontrolu ile txtMail metin kutusu iin geerli e-mail girii salanmaktadr.
<asp:regularexpressionvalidator id="RegularExpressionValidator1" style="Z-INDEX: 111; LEFT: 256px; POSITION: absolute; TOP: 168px" runat="server" ErrorMessage="Mail giri hatas" ControlToValidate="txtMail" ValidationExpression= "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"> </asp:regularexpressionvalidator>
Karakter
a 1 ? * +
Tanm
Bir harf kullanmn zorunlu klar. 1 says kullanlmak zorunda. 0 veya 1 e olmak zorunda 0dan ne kadar bir deer 1den ne kadar bir deer
Konu: 1 [0-n] {n} | \ \w \d \. 0dan ne kadar say deer dizisi N ile belirtilen deer uzunluunda olmal Farkl geerli dizinler. Bir komut karakterini devam ettiren karakter Bir karakter olmak zorunda. Bir rakam olmak zorunda. Bir nokta olmak zorunda.
191
Tablo 7.4: Kontrol Karakterleri rnekte ValidationExpression zelliine girilen zel karakterler ile e-mail format oluturulmaktadr.
ValidationExpression= "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"> \w+ : En az bir karakter ieren metin anlamna gelir. ([-+.]) : -, +, . karakterlerinden herhangi biri anlamna gelir. * : 0dan ne kadar bir deer girilmesi gerektii anlamna gelir. @ : @ iaretinin kullanlmas gerektiini belirtir.
rnekte ValidationExpression zelliine girilen zel karakterler ile e-mail format oluturulmaktadr.
ValidationExpression =\w+@\w+\.\w+
CustomValidator
Ayn anda birden fazla nesnenin deerini kontrol etmek veya kullanc tanml kontrol yazmak iin CustomValidator kontrol kullanlr.
192 zellik ClientValidationFunction ControlToValidate Display EnableClientScript Enabled ErrorMessage IsValid Text Aklama
Modl 7:
stemci skriptleri aktif hale getirir. Varsaylan deer True dur. Sunucu ve istemci tarafl skriptleri aktif hale getirir. Varsaylan deer True dur. Kontrol hata mesajn gsterir. Kontrol ilemi baar ile sonulanmsa True, deilse False deerini dndrr. Kontrol hata mesajn gsterir. ErrorMessage ve Text zellii birlikte kullanlabilir. Bu durumunda Text zelliindeki mesaj grntlenir.
IsValid: Bu zellik True ise kontrol ierisine girilen deerin doruluu salanmtr. Value: Dorulama kontrolnn deerini verir.
CustomValidator, kredi kart numaralarnn doruluu kontrol etmek iin
kullanlabilir. rnekte metin kutusuna girilen deerin ift olmas kontrol edilmektedir. CustomValidator kontrolunun HTML kodlar aadaki gibidir.
<form id="Form1" method="post" runat="server"> <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 200px; POSITION: absolute; TOP: 96px" runat="server" Text="gonder" onClick=gonder_OnClick> </asp:Button> <asp:CustomValidator id="CustomValidator1"
Konu: 1
193 style="Z-INDEX: 102; LEFT: 312px; POSITION: absolute; TOP: 64px" runat="server" ErrorMessage="ift rakam giriniz." ControlToValidate="txtcustom" Display="Static" OnServerValidate="ServerKontrol"> </asp:CustomValidator> <asp:TextBox id="txtmessage" style="Z-INDEX: 103; LEFT: 200px; POSITION: absolute; TOP: 152px" runat="server"> </asp:TextBox> <asp:TextBox id="txtcustom" style="Z-INDEX: 104; LEFT: 144px; POSITION: absolute; TOP: 64px" runat="server"> </asp:TextBox> </form> CustomValidator kontrolunun C# kodlar aadaki gibidir. public void ServerKontrol(object source, ServerValidateEventArgs args) { try { int num = int.Parse(args.Value); args.IsValid = ((num%2) == 0); } catch(Exception ex) { args.IsValid = false; } } public void gonder_OnClick(object sender, EventArgs e) { if(Page.IsValid) { txtmessage.Text = "Sayfada Hata Yok."; } else { txtmessage.Text = "Sayfa Hatal!"; } }
ValidationSummary
ValidationSummary, dorulama kontrollerin ErrorMessage zelliine girilen tm mesajlar listeler.
194
Modl 7:
DisplayMode zellii ile ValidationSummary kontrolunun grnts deitirilebilir. DisplayMode, BulletList, List ve SingleParagraph deerlerini alr. ShowMessageBox, hata listesinin mesaj kutusu iinde grntlenmesini salar.
AdRotator
AdRotator, Web sayfalar zerinde reklam yayn yapmak iin kullanlr.
Reklam iin kullanlan banner nesneleri XML dosya ierisine kaydedilir. rnekte AdRotator gsterilmektedir. kullanm iin gerekli XML dosya (Ads.Xml)
<Advertisements> <Ad> <ImageUrl>image1.gif</ImageUrl> <NavigateUrl>http://www.bilgeadam.com</NavigateUrl> <AlternateText>BilgeAdam BTA</AlternateText> <Impressions>80</Impressions> <Keyword>Yazlm</Keyword> </Ad> <Ad> <ImageUrl>image2.gif</ImageUrl> <NavigateUrl>http://www.microsoft.com</NavigateUrl> <AlternateText>Microsoft Site</AlternateText> <Impressions>80</Impressions>
Konu: 1
195 <Keyword>microsoft</Keyword> </Ad> </Advertisements> Ad: Her bir banner nesnesini temsil eder. ImageUrl:
NavigateUrl: Gidilecek sayfann adres bilgisini belirtir. AlternateText: Resime alternatif metin gstermek iin kullanlr. Impression: -Banner resimlerinin uygulama sresini belirtir. Keyword:.Banner nesneleri arasnda filtreleme oluturacak kategori adn
belirler.
AdRotator kontrolnn AdvertisementFile zellii, reklm bilgilerinin
bulunduu XML dosyay ierir. KeywordFilter zellii ise reklmlarn filtrelenerek grntlenmesini salar.
Calendar
Calendar, web saylar zerinde Takvim gstermek iin kullanlr..
Calendar kontrolne ait zellikler tablo 7.4de listelenmitir. zellik CellPadding CellSpacing DayNameFormat Aklama
Hcreler ve kenarlklar arasndaki boluk deerini tutar. Hcreler arasndaki boluk deerini tutar. Gn isimlerinin grntlenme biimini tutar. FirstLetter, FirstTwoLetters, Full ve Short deerleri vardr. Varsaylan Short deeridir. Haftann ilk gnn belirtir.
FirstDayOfWeek NextPrevFormat
Next ve Previous linklerinin biimini ayarlar. CustomText, FullMonth, ShortMonth deerleri alr. Varsaylan CustomText
deeridir. Seilen gn bilgisini tutar. Varsaylan deer gnn tarihidir. Calendar nesnesinin seim modunu belirler. Day, DayWeek, DayWeekMonth ve None deerleri
SelectedDate SelectionMode
196
alr. Varsaylan seenek Day deeridir.
Modl 7:
Gn isimlerini kolonlarn zerinde grntler. Gnleri hcreler iinde grntler. nceki ve sonraki ay linklerinin grntlenmesini salar. Takvim baln grntler. Balk yazsnn biimini belirtir.
Konu: 1
197
AutoPostBack zellii, herhangi bir sunucu kontrolnn web sunucuya otomatik olarak bilgi gndermesini salar. Web formu doldurduktan sonra sunucuya gndermek iin genellikle button kontrolu kullanlr.
AutoPostBack zellii, DropDownList, ListBox, CheckBox, CheckBoxList, RadioButton, RadioButtonList, TextBox ve Button kontrolnde bulunur.
Bu zelliin True olmas, seim yapldnda veya TextBox kontrolne yeni bir deer girildiinde sayfann yeniden yklenmesi anlamna gelir. rnekte AutoPostBack kullanm gsterilmektedir.
<%@ Page Language="C#" Debug="true" %> <html> <head></head> <body> <form runat="server"> Bilgiiniz Yabanc Dili Seiniz:<br/><br/> <asp:listbox id="lstDiller" runat="server" rows="3" AutoPostBack="true" onSelectedIndexChanged="secimGoster"/> <br><br> <asp:Label id=lblMesaj runat="server" /> <br/><br/> </form> </body> </html> <script language=c# runat="server">
198 private void Page_Load(object sender, System.EventArgs e) { if(!Page.IsPostBack) { lstFlowers.Items.Add(new ListItem("ngilizce")); lstFlowers.Items.Add(new ListItem("Almanca")); lstFlowers.Items.Add(new ListItem("Franszca")); lstFlowers.SelectedIndex = 0; } } public void showSelection(object source, EventArgs e) { lblMesaj.Text = "Setiiniz Dil " + lstDiller.SelectedItem.Text; } </script> AutoPostBack zelliininin gereksiz yere kullanlmas performans olumsuz
Modl 7:
ynde etkiler.
ViewState, kullanc ve sunucu arasnda tanan verilerinn gizli bir alanda ifrelenerek saklanmasn salar. Forma ait tm kontrollerin deerleri ifrelenir ve VIEWSTATE deikende saklanr. Form sunucuya gnderildikten sonra bir hata olumas halinde kullancdan tekrar ayn verilerin girilmesi istenmez. nk kullancnn girmi olduu deerler bu gizli deikende saklanr ve sayfa alnca tekrar kullancya sunulur.
Konu: 1
199
Modl zeti
15. 16. 17. 18. 19. 20. Web form bileenlerini aklayn? Stardart kontroller nelerdir ? Aklayn. Dorulama kontrolleri nelerdir ? Aklayn. Zengin kontroller nelerdir ? Aklayn. AutoPostBack nedir ? ViewState zelliini aklayn?
200
Modl 7:
Bu uygulamada, e-ticaret uygulamasnn web formlar tasarlanacaktr. E-ticaret uygulamas ierisinde msterilerinin kendi kaytlarn yapabilmesi iin UyeKayit formu tasarlanacaktr. Kayt olan mterilerin rn satn alabilmesi iin sisteme giri yapmalar gerekmektedir. Kaytl mterilerin sisteme girii UyeGiris formu ile salancaktr. Her iki form ierisinde standart ve dorulama kontrolleri kullanlacaktr. Ayrca kullancy ynlendirmek iin Giris, Kayt ve Sat isminde 3 ayr web form tasarlanacaktr. Bu lab tamamlandktan sonra: Access veritabanna balant oluturabilecek, Web Formlar tanyacak, Standart Kontrolleri kullanabilecek, Dorulama kontrollerini kullanabileceksiniz.
Konu: 1
201
12. Veritaban ierisinde EnCokSatanlar isminde sorgu oluturun. 13. Sorgunun ierisine aadaki Select cmlesini ekleyin.
SELECT Kitap.KitapAdi, Kitap.Ucret, Kitap.KitapID FROM Kitap INNER JOIN Siparis ON Kitap.KitapID=Siparis.KitapID GROUP BY Kitap.KitapAdi, Kitap.Ucret, Kitap.KitapID ORDER BY Count(Siparis.Adet) DESC;
rfvAd
RequiredFieldValidator
rfvSoyad
202 RequiredFieldValidator
Modl 7:
txtEmail E-maili bo geemezsiniz * txtSifre ifreyi giriniz. * txtSifreDogrula Dorulama ifresini giriniz * txtEmail Hatal Email *
\w+([+.]\w+)*@\w+([.]\w+)*\.\w+([.]\w+)*
rfvEmail
RequiredFieldValidator
rfvSifre
RequiredFieldValidator
rfvSifre2
RegularExpressionValidator
revEmail
CompareValidator
cvSifreDogrula
Konu: 1
203
<%@ Register TagPrefix="uc1" TagName="yan" Src="yan.ascx" %> <%@ Page Language="C#" AutoEventWireup="false" Codebehind="UyeKayit.aspx.cs" Inherits="AspEticaret.UyeKayit" %> <%@ Register TagPrefix="uc1" TagName="kategori" Src="kategori.ascx" %> <%@ Register TagPrefix="uc1" TagName="Ust" Src="Ust.ascx" %> <%@ Register TagPrefix="uc1" TagName="Alt" Src="Alt.ascx" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>UyeKayit</title> <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> <meta content="C#" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body bgColor="#f0fff0"> <form id="Form1" method="post" runat="server"> <TABLE id="Table1" cellSpacing="0" cellPadding="0" width="700" align="center" border="0"> <TR> <TD bgColor="#99ccff" colSpan="3"><uc1:ust id="Ust1" runat="server"></uc1:ust></TD> </TR> <TR> <TD vAlign="top" width="150"><uc1:kategori id="Kategori1" runat="server"></uc1:kategori></TD> <TD width="400" height="100%"> <P> <TABLE id="Table2" cellSpacing="0" cellPadding="0" width="300" align="center" border="0"> <TR> <TD style="HEIGHT: 48px" colSpan="2"> <P align="center"><FONT face="Tahoma" size="2"><STRONG>yelik Bilgileri</STRONG></FONT></P> </TD> </TR> <TR> <TD style="WIDTH: 100px"><FONT face="Tahoma" size="2">Ad*</FONT></TD> <TD><asp:textbox id="txtAd" runat="server" Width="176px"></asp:textbox><asp:requiredfieldvalidator id="rfvAd" runat="server" ControlToValidate="txtAd" ErrorMessage="Ad bo geemezsiniz">*</asp:requiredfieldvalidator><FONT face="Tahoma" size="2"></FONT></TD> </TR> <TR> <TD style="WIDTH: 100px"><FONT face="Tahoma" size="2">Soyad*</FONT></TD> <TD><asp:textbox id="txtSoyad" runat="server"
204 Width="176px"></asp:textbox><asp:requiredfieldvalidator id="rfvSoyad" runat="server" ControlToValidate="txtSoyad" ErrorMessage="Soyad bo geemezsiniz.">*</asp:requiredfieldvalidator><FONT face="Tahoma" size="2"></FONT></TD> </TR> <TR> <TD style="WIDTH: 100px"><FONT face="Tahoma" size="2">E-Mail*</FONT></TD> <TD><asp:textbox id="txtEmail" runat="server" Width="176px"></asp:textbox><asp:requiredfieldvalidator id="rfvEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="E-maili bo geemezsiniz. " Display="Dynamic">*</asp:requiredfieldvalidator><asp:regu larexpressionvalidator id="revEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="Hatal Email" Display="Dynamic" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([.]\w+)*">*</asp:regularexpressionvalidator><FONT face="Tahoma" size="2"></FONT></TD> </TR> <TR> <TD style="WIDTH: 100px"><FONT face="Tahoma" size="2">ifre*</FONT></TD> <TD><asp:textbox id="txtSifre" runat="server" Width="176px" TextMode="Password"></asp:textbox><asp:requiredfieldvalidato r id="rfvSifre" runat="server" ControlToValidate="txtSifre" ErrorMessage="ifreyi giriniz.">*</asp:requiredfieldvalidator><FONT face="Tahoma" size="2"></FONT></TD> </TR> <TR> <TD style="WIDTH: 100px"><FONT face="Tahoma" size="2">ifre Dorula*</FONT></TD> <TD><asp:textbox id="txtSifreDogrula" runat="server" Width="176px" TextMode="Password"></asp:textbox><asp:requiredfieldvalidato r id="rfvSifre2" runat="server" ControlToValidate="txtSifreDogrula" ErrorMessage="Dorulama ifresini giriniz." Display="Dynamic">*</asp:requiredfieldvalidator><asp:comp arevalidator id="cvSifreDogrula" runat="server" ControlToValidate="txtSifreDogrula" ErrorMessage="ifreler uyumsuz." Display="Dynamic" ControlToCompare="txtSifre">*</asp:comparevalidator></TD> </TR> <TR> <TD style="HEIGHT: 47px" colSpan="2"> <P align="center"><asp:button id="btnKaydet" runat="server" Text="Kaydet"></asp:button></P> </TD> </TR> <TR> <TD style="WIDTH: 100px" colSpan="2"><asp:validationsummary id="vsHata" runat="server" Width="286px"></asp:validationsummary></TD> </TR> <TR>
Modl 7:
Konu: 1
205 <TD style="WIDTH: 100px; HEIGHT: 15px" colSpan="2"></TD> </TR> <TR> <TD style="WIDTH: 100px"></TD> <TD></TD> </TR> </TABLE> </P> </TD> <TD vAlign="top" width="150" bgColor="#0099ff"><uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR> <TD bgColor="#99ccff" colSpan="3"> <uc1:Alt id="Alt1" runat="server"></uc1:Alt></TD> </TR> </TABLE> </form> </body> </HTML>
* Giri
206
Modl 7:
Konu: 1
colSpan="2">
<P align="center"> <asp:Button id="btnGiris" runat="server" Text="Giri"></asp:Button></P> </TD> </TR> <TR> <TD colSpan="2"> <asp:Label id="lblMesaj" runat="server"></asp:Label></TD> </TR> </TABLE> </P> </TD> <TD width="150" bgColor="#0099ff" vAlign="top"> <uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR> <TD bgColor="#99ccff" colSpan="3"> <uc1:Alt id="Alt1" runat="server"></uc1:Alt></TD> </TR> </TABLE> </form> </body> </HTML>
208
Modl 7:
Konu: 1
209 <asp:HyperLink id="lnk2" runat="server" NavigateUrl="UyeKayit.aspx">tklaynz</asp:HyperLink></P> </TD> <TD width="150" bgColor="#0099ff" vAlign="top"> <uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR> <TD bgColor="#99ccff" colSpan="3"> <uc1:Alt id="Alt1" runat="server"></uc1:Alt></TD> </TR> </TABLE> </form> </body> </HTML>
UyeGiris.aspx tklaynz
210 <HEAD> <title>Kayit</title> <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body bgColor="#f0fff0"> <form id="Form1" method="post" runat="server"> <TABLE id="Table1" cellSpacing="0" cellPadding="0" width="700" align="center" border="0"> <TR> <TD bgColor="#99ccff" colSpan="3"> <uc1:Ust id="Ust1" runat="server"></uc1:Ust></TD> </TR> <TR> <TD width="150" vAlign="top"> <uc1:kategori id="Kategori1" runat="server"></uc1:kategori></TD> <TD width="400" vAlign="top"> <P><BR> Kayt ilemi baaryla tamaland.<BR> Giri yapmak iin <asp:HyperLink id="lnk1" runat="server" NavigateUrl="UyeGiris.aspx">tiklayiniz</asp:HyperLink></P> </TD> <TD width="150" bgColor="#0099ff" vAlign="top"> <uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR> <TD bgColor="#99ccff" colSpan="3"> <uc1:Alt id="Alt1" runat="server"></uc1:Alt></TD> </TR> </TABLE> </form> </body> </HTML>
Modl 7:
Default.aspx tklaynz
Konu: 1
211
212 <uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR> <TD bgColor="#99ccff" colSpan="3"> <uc1:Alt id="Alt1" runat="server"></uc1:Alt></TD> </TR> </TABLE> </form> </body> </HTML>
Modl 7:
Modul 9:
Bu modlde Visual Studio .NET ortam ierisinde ASP.NET uygulamalarnn kullanm yollarn reneceksiniz. Bu modl tamamlandktan sonra: Inline ve Code Behind kod yazmay renecek,
214
Client Side Server Side olay prosedrlerini renecek, Page Event yaam dngsn tanyacaksnz.
Web Form ierisinde kullanlan kontrollere ait HTML kodlar ve bu kontrollere ait Visual Basic .NET kodlar bulunur. Web Formlarn en nemli zellii ise, tasarm ve kod ara yzlerinin ayr tutulmasdr. Web Forma kod eklemek iin yol izlenir: Mixed Code: Bu metotta web ierii ile kod ayn sayfa ierisinde yazlr. Bu metot pek tercih edilmez nk okunmas ve dzenlenmesi zordur. Inline Code: Web ierii ile kod ayn sayfa ierisinde yer alr. ASP.NET kodu Script etiketi ierisine yazlr. Code-behind: HTML ierii ve Visual Basic .NET kodu tamamen ayr dosyalarda tutulur. Kod dosyasna code-behind sayfas denir. Bu metot Visual Studio .NET ortamnn varsaylan alma eklidir.
Konu: 1
215
Ayn .aspx dosyas iinde HTML kodu ve Visual Basic .NET kodu ayr blmlere yazlr. Blmlerin ayr tutulmas okunabilirlii arttrr. Server tarafl kodlar Script etiketi iersine yazlmaldr ve runat=server zellii belirtilmelidir.
Kod 8.1: Inline Kod Yazmak <%@ Page Language="C#" %> <html> <head> <title>My First Web Form</title> <script runat="server"> private void Page_Load (Sender As Object , e As EventArgs ) { Message.Text = "Inline Kod Yazdk"; } </script> </head> <body> <form runat="server"> <asp:Label id="Message" runat="server" /> </form> </body> </html>
216
Visual Studio .NET ortamnn kulland varsaylan model code-behind tasarm modelidir. Programlama ve tasarm sayfalar ayr tutularak alma mantna gre ayrm yaplm olur. Code-behind sayfalar, .aspx uzantl sayfann sonuna .cs eklenerek isimlendirilir. Webform1.aspx sayfasnn code-behind sayfas, WebForm1.aspx.cs eklindedir. Form zerinde bir kontrole ift tklandnda code-behind sayfas alr ve o kontrole ait olay iin metot tanmlanr. Code-behind sayfasnn .aspx sayfasyla birlikte alabilmesi iin, .aspx sayfasnn Page bildiriminde, CodeBehind ve Src zelliklerine ilgili deerlerin girilmesi gerekir.
Kod 8.2: WebForm.aspx - Code-behind kod yazmak <%@ Page Language="c#" AutoEventWireup="false" Codebehind="WebForm1.aspx.cs" Inherits="ilkAspNet.WebForm1"%> <HTML> <HEAD> <title>BilgeAdam</title> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:TextBox id="txtAd" runat="server"/> <asp:Button id="btnGonder" runat="server" Text="Gnder"></asp:Button> <asp:Label id="lblMesaj" runat="server"></asp:Label>
Konu: 1
Kod 8.3: WebForm.aspx.cs Code-Behind Sayfas using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.TextBox txtAd; protected System.Web.UI.WebControls.Label lblMesaj; protected System.Web.UI.WebControls.Button btnGonder; private void Page_Load(object sender, System.EventArgs e) { Response.Write("Selam"); } private void Button1_Click(object sender, System.EventArgs e) { lblMesaj.Text = "Hogeldin " + txtAd.Text.ToString(); }
Codebehind Code-behind sayfasnn ismini temsil eder. Visual Studio .NET platformunun dosyay birletirebilmesi iin gereklidir. Src Code-behind sayfasnn n derleme ileminden gemedii durumlarda bu zellik kullanlr. Code-behind sayfasnn ismini temsil eder.
218
Client-side olay prosedrleri, web forma istekte bulunan kullanc bilgisayar zerinde ilenen olaylardr. Kullanc tarafnda oluan bu olaylar, sunucuya hibir bilgi gndermezler. nk istemci tarafndaki Internet taraycs kodu alr ve iler. Client-side olay prosedrleri yalnzca HTML kontrolleri tarafndan kullanlr. Client-side olay prosedrleri hibir zaman sunucu kayna kullanmaz. rnein SQL Server veritabanna erimek iin client-side kod kullanlamaz. Client-side olay prosedrlerini, istemci tarafnda ksa zamanda olumas istenilen olaylar iin kullanlr. rnein, metin kutusuna girilen deerin doruluunu kontrol etmek iin client-side kod kullanlabilir. Client-side kodlar <Script> bloklar ierisinde tanmlanr. rnekte JavaScript ile istemci tarafl kod tanmlanmaktadr.
<SCRIPT language=JavaScript> </SCRIPT>
Konu: 1
219
Server-side olay prosedrleri, sunucu zerinde alan olaylardr. Server-side olay prosedrleri client-side olay prosedrlerinden olduka gldr. Server-side olay prosedrleri, web sunucusu zerinde bulunan derlenmi kodlardan oluur. Web ve HTML server kontrolleri tarafndan oluturulan olaylarn, ilenmesinde kullanlr. Client-side olay prosedrleri sunucu kaynaklarn kullanamazken, server-side olay prosedrleri sunucu kaynaklarn kullanr. Server-side olay prosedrleri iin aadaki tanmlama yaplr.
<SCRIPT language=c# runat=server>
Client-side olay prosedrleri ile fare ve klavye olaylarna kod yazlabilir. Serverside olay prosedrleri Click ve Change gibi olaylar iin kullanlr. Fare ve klavye olaylar gibi ok sk gerekleebilecek olaylar desteklenmez.
220
Visual Studio .NET ierisinde server-side olay prosedrleri iki adm ile oluturulur. Birinci adm olay retecek kontrolu web form zerine eklemektir. kinci adm ise code-behind sayfasna olay prosedurn eklemektir. Olay prosedrleri kontrolun ID zelliine girilen deerden faydalanarak oluturulur. Handles anahtar szc kontroln hangi olay ile ilikilendirileceini belirler. Handles anahtar szc ile tek bir olay iin birden fazla olay prosedr oluturulabilir. rnekte Web form ierisine btn1 isminde bir button yerletirilmitir. Eklenen btn1 kontrolunun, retilen HTML kodu ve code-behind sayfasna eklenen olay prosedr kod 8.4 belirtilmitir.
Kod 8.4: Button Kontrolne Click Olay ile likilendirmek <asp:Button id=btn1 runat=server/> ... protected System.Web.UI.WebControls.Button btn1 private void btn1_Click(object sender, System.EventArgs e) { // } Server olay prosedrlerinin almasn salamak iin kontrollerin WithEvents
Konu: 1
221
222
Bir ASP.NET sayfas belirli olaylar sras ile alr. Bu sraya Sayfa Yaam Dngs denir Bu dng olaylar aadaki srada gerekleir. 1- Page_Init (Page Initialize Sayfann olumaya balamas): Bu aamada sayfa balatlr ve sayfadaki kontroller oluturulur. 2- Page_Load (Sayfann yklenmesi): Bu olay, sayfa yklendii zaman tetiklenir. 3- Control Events (Kullanc kontrol olaylar): Click ve Change olaylardr. Bu olaylar kontrollerin tklanmas veya kontrol deerlerinin deiimi ile tetiklenir. TxtAd_Changed ve Btn1_Click gibi. 4- Page_Unload (Sayfann Kapanmas): Bu olay, sayfa kapand zaman tetiklenir. Page Event yaam dngs sonlandnda sayfaya ait bilgiler hafzadan silinir. Kontrol olaylarnn ou, sayfa sunucuya geri gnderilene kadar gereklemez. rnein Click olay ile form sunucuya gnderilmeden Change olaylar gereklemez.
Konu: 1
223
Response.Redirect
Kullancy bir sayfadan baka bir sayfaya ynlendirmek iin kullanlr. HyperLink kontrol gibi sayfalar arasnda dolamay salar. Parametre olarak gidilecek sayfann adresini belirtilir. rnekte Response.Redirect gerekletirilmektedir.
Kod 8.6: Response.Redirect private void ListBox1_SelectedIndexChanged(object sender, System.EventArgs e) { } Response.Redirect(ListBox1.SelectedValue);
metodu
ile
ynlendirme
ilemi
<asp:ListBox id="ListBox1" runat="server" AutoPostBack="True"> <asp:ListItem Value="http://www.yahoo.com">yahoo </asp:ListItem> <asp:ListItem Value="http://www.google.com">google </asp:ListItem> </asp:ListBox>
224
Postback lemleri
Sunucuya veri gnderme ilemine postback denir. rnein Button kontrol tklannca otomatik olarak sunucuya veri yollanr. Varsaylan olarak veri yollayan tek kontrol Button kontroldr. Dier kontroller iin AutoPostBack zelliinin True yaplmas gerekir. rnekte DropDownList kontrolunun AutoPostBack zelliine True deeri girilmitir. Bu durum liste kutusundan seilen deerin sunucuya gnderilmesini salar.
Kod 8.7 DropDownList Kontrolunun Sunucuya Gnderilmesi <asp:DropDownList id="DropDownList1" runat="server" AutoPostBack=True> <asp:ListItem>Trke </asp:ListItem> <asp:ListItem>ngilizce</asp:ListItem> </asp:DropDownList> <asp:TextBox id=mesaj runat=server/>
Konu: 1
225
Page.IsPostback
Page Load olay, sayfa yklendii zaman gerekleir. Sayfaya yaplan her
istekte Page Load olay iindeki kodlar alr. Ayn sayfann her seferinde yeniden altrlmas, istenilen bir durum deildir.
Page.IsPostback zellii ile, sayfann Load olay iindeki kodlar sadece bir kez altrlr. Bylece sayfa yeniden arldnda bu ilemler gereklemez.
Modl zeti
226
Web form ierisinde kod yazmak iin hangi yntemler kullanlr? Code-Behind kod yazma tekniini aklayn? Sayfa yaam dngsn aklayn? Response.Redirect niin kullanlr? Page.IsPostBack niin kullanlr?
Bu uygulamada, Code Behind ve Inline kod yntemlerinin kullanmn reneceksiniz. Ayrca istemci tarafl skriptlerin yazlmn reneceksiniz. Bu lab tamamlandktan sonra: Code Behind kod yazma yntemini renecek, Inline kod yazma yntemini renecek, stemci tarafl skriptlerin kullanmn reneceksiniz.
Konu: 1
227
Kodlarn yazlmas
1- btnCodeBehind kontrolunun Click olayna Code Behind yazan kodu yazin. Bu kod code behind yntemi ile btnCodeBehind kontrolunun click olayn altrr.
Response.Write("Code Behind")
2- Test web formunun HTML blmne aadaki kodlar yazn. Bu kod, inline kod yntemi ile btnInline butonunun Click olayn altrr. Bu kodu <Body>..</Body> etiketleri arasna ekleyin.
<script language="c#" runat="server"> private void btn_Click(object sender, System.EventArgs e) { Response.Write("Inline");
228 } </script>
3- Test web formunun HTML blmne aadaki kodlar yazn. Bu kod, Java Script ile istemci tarafl kod tanmlamaktadr. . Bu kodu <Head>..</Head> etiketleri arasna ekleyin.
<script language="javascript"> function mesaj() { alert('Hello World') } </script>
Modul 9:
Web uygulamalarn zenginletiren birok programlama dili bulunur. Web sayfalarn gelitirmek iin HTML dilinin kullanlmas gerekir. Sadece HTML kullanm statik (sabit) sayfalar gelitirmek iin yeterlidir. Ancak ierii kolayca ekillendirmeyi salayan CSS dili, istemci tarafl alan kodlarn yazlmas iin Javascript VBScript dilleri de Web uygulamalarn zenginletirir.
230
Bu modl tamamlandktan sonra: HTML nesnelerini renecek, Javascript ve VBScript dilleri ile istemci tarafl kod yazabilecek, CSS ile sayfalara zel stiller kazandracaksnz.
Konu 2: HTML
HTML (Hyper Text Markup Language), bir iaretleme dilidir. stemci tarafnda alan Internet taraycs tarafndan okunur, yorumlanr ve alnan iaretler neticesinde ekrana ilgili grnt yanstlr. HTML, HTTP (HyperText Transfer Protocol) ile bir arada alr. Bu iaretleme dili ile oluturulmu dkmanlar yalnzca istemci tarafnda alr.
Konu: 1
231
HTML dkmanlarnn tm ASCII karakterlerinden oluur ve herhangi bir metin editrnde yazarak oluturulabilir.
HTML Yaps
HTML dilini oluturan bileenler
Tag (etiket) Attribute (nitelik) Value (deer) olarak tanmlanr.
HTML kodlarnn temeli etiketlerdir. Bir etiket, HTMLe yaplmas istenen bir olayn bildirimini temsil eder. Etiketlerin ierisine attribute ad verilen deerler girilir. Etiketlere ait deiik zellikler, attribute nesnelerinde saklanr. Attribute deerleri, olaylara ait ayrntlar tutar. Value ise, bir attribute deerinin davranaca tarz belirler.
Tag
boluk yoktur.
<Html>
Bir etikete ait ama ve kapatma ifadeleri vardr. Ama ifadesi <Html>,kapatma ifadesi ise </Html> eklinde bildirilir. Yani alan bir etiket, ayn isim bana / iareti getirilerek kapatlr. rnein <P> etiketi,bir paragraf amaya yarar. </P>
232
Kapatma ifadesi kullanldnda ise bu kapatma ifadesinin kullanld yere kadar olan blm paragrafn , iine dahil edilir. Ancak baz istisnalarda vardr. <Img> ve <Br> etiketi gibi baz etiketler iin bir kapatma ifadesi yoktur. HTML etiketlerinde byk harf, kk harf duyarll yoktur.
Attribute
znitelikler (Attribute), bir etikete ait zellikleri belirler. <html> etiketi ve </html> kapatma etiketi, HTML belgesinin balad ve bittii yeri belirtir ve Attribute deerine ihtiyac yoktur. Attribute olmadan alan etiketlerin
yan sra, attribute ile birlikte alan etiketler de vardr. <body> etiketi, grntlenecek alann balangcn ve bitiini bildirir. Bu etiket, hibir attribute tanmlanmadan alabilir. Grntlenecek alana bir arka plan rengi tanmlamak istediinizde bgcolor veya grntlenecek yaz tipini tanmlamak istediinizde text zniteliklerine deerler atanmaldr.
</body> kapatma ifadesi ile
Konu: 1
233
Value
Bir olayn ne ekilde gerekleecei value ile bildirilir. rnein bir paragraflk metinin hizalanmas, <DIV> etiketi kullanlarak yaplr. DIV etiketinin align attribute deeri, left, right, center ve justify deerlerinden birini alr.
234
HTML belgeleri tag, attribute ve value bileenleri kullanlarak oluturulur. Bir HTML belgesi en basit ekilde kod 9.1de gsterilmitir.
Kod 9.1:Temel HTML Belgesi <html> <head> <title> Temel HTML Belgesi </title> </head> <body> Sayfada kullanlacak herey burada bildirilir. </body> </html> <html></html>, Taraycya HTML belgenin balad ve bittii alan bildirir. <head></head>, Taraycya HTML belge hakknda bilgi verir. <title> ve <meta> etiketleri <head></head etiketleri arasnda yer alr. <title></title>, belgenin balk yazsn tutar. <body><body>, belgenin gvde blmdr. Sayfada grntlenmesi istenen
Konu: 1
235
En Sk Kullanlan Etiketler
Balklar
Bir sayfadaki yaznn balklarn standart ekilde tutmak iin HTML balklar kullanlr. Balklar 1 ve 6 aras deerler alr.
Kod 9.2: HTML Balk Etiketleri <html> <head> <title>Balk Etiketleri</title> </head> <body> <h1>html balklar</h1> <h1>Bu balk H1 tag'i ile <h2>Bu balk H2 tag'i ile <h3>Bu balk H3 tag'i ile <h4>Bu balk H4 tag'i ile <h5>Bu balk H5 tag'i ile <h6>Bu balk H6 tag'i ile </body> </html>
236
Kod 9.3: Sayfa iinde Balant Vermek <a href="http://www.bilgeadam.com" target="_blank">BilgeAdam BTA</a>
Listeler
Belge iinde metine liste grnm vermek iin listeleme etiketleri kullanlr. Srasz ve sral listeler oluturulabilir. Srasz listeler, <ul>...</ul> etiketleri arasnda oluturulur. Her bir liste nesnesi iin <li> etiketi kullanlr. Sral listeler, <ol>...</ol> etiketleri arasnda oluturulur. Her bir liste nesnesi iin <li> etiketi kullanlr.
Kod 9.4: Liste Oluturmak <h4> Sral liste</h4> <ol> <li>nesne 1 <li>nesne 2 </ol> <h4>Srasz Liste</h4> <ul> <li>nesne 1 <li>nesne 2 </ul>
Sral ve srasz listelerin dnda programc tarafndan tanml listeler oluturulabilir. <dl>...</dl> etiketleri arasnda listelenecek metinler girilir. Bu etiketler arasna, bal tutan <dt> etiketi ve balk altnda grntlenecek metini tutan <dd> etiketi yerletirilir.
Konu: 1
237 Kod 9.5: Tanml Liste Oluturmak <dl> <dt> Balk 1: <dd> Balk 1'e ait aklama bu paragrafta girilir.Balk 1'e ait aklama bu paragrafta girilir. <dt> Balk 2: <dd> Balk 2'ye ait aklama bu paragrafta girilir. Balk 2'ye ait aklama bu paragrafta girilir. </dl>
Resim Grntleme
HTML sayfalarnda resim grntlemek iin <img> etiketi kullanlr. src attribute deeri, grntlenecek resmin adresini tutar. Kod 9.6da <img> kullanm gsterilmektedir.
Kod 9.6: Resim Grntlemek <a href="http://www.bilgeadam.com"> <img src="c:\resimler\resim1.jpg"> </a> img etiketinin sonlandrma ifadesi yoktur.
Tablolar
Satr ve stnlardan oluan yaplara tablo denir. Bir Web sayfas ierisinde, grnm belirli snrlarda tutmak iin tablolardan yararlanlr.
<table>...</table> etiketleri ile tablonun balang ve biti alan bildirilir. Bu
etiketler arasndaki, <tr> satrlar, <td> ise stunlar temsil eder. Tablonun
align , border, width, height bgcolor attribute deerleri ile tabloya
eitli nitelikler verilebilir. Align attribute nesnesi center, left veya right hizalama deerini alr. Border tablo kenarlklarnn kalnlk deerini tutar.
Kod 9.7: 4x3 Boyutlarnda Tablo oluturmak <table width="140" border="2" bgcolor="#6633CC" align="left"> <tr> <td>1. satr 1. stun</td> <td>1. satr 2. stun </td> <td>1. satr 3. stun </td> </tr> <tr> <td>2. satr 1. stun </td> <td>2. satr 2. stun </td> <td>2. satr 3. stun </td> </tr> <tr>
238 <td>3. <td>3. <td>3. </tr> <tr> <td>4. <td>4. <td>4. </tr> </table> satr 1. stun </td> satr 2. stun </td> satr 3. stun </td> satr 1. stun </td> satr 2. stun </td> satr 3. stun </td>
HTML dosyas iine gmlm kodlara script denir. Yorumlanmas iin internet taraycsna ihtiya vardr. HTML dilinin karlayamad baz ihtiyalara zm retmek iin scriptler kullanlr.
Konu: 1
239
JavaScript
JavaScript dili, Netscape firmas tarafndan oluturulmutur. Yazm biimi olarak C dili esas alnarak tasarlanmtr. Ama olarak HTMLin yetmedii yerlere scriptler ile destek vermesi dnlmtir. Web programclna dinamik bir yap kazandran JavaScript, istemci tarafnda alr. Kullanm giderek yaygnlaan JavaScript, daha sonra Microsoft firmasnn Internet Explorer web taraycsnda da kullanlabillir hale geldi. Gnmzde tm tarayclarn destekledii bir script dilidir. JavaScript kodlar yazmak iin Notepad gibi bir metin editr yeterlidir. Kodlar <script>...</script> etiketleri arasnda yazlmaldr. Bu kod alan iinde yorum satrlar iin // ve /* ... */ ifadeleri kullanlabilir. Sadece bir satr yorum satr yaplacaksa // ifadesi kullanlr.
// bu satr yorum satrdr.
Birden fazla satr yorum satr yaplacaksa, satrlarn balad yere /*, bittii yere */ ifadeleri yerletirilir.
/* yoruma alnan 1. satr 2. satr ...
*/
JavaScript kodlar HTML sayfalar iine <head> etiketlerine gml olarak veya .js uzantl dosyalara referans gnderilerek HTML iinden arlabilir.
240
JavaScript dilinde nesneler, nesnelere uygulanan olaylar ve olaylara ilikin grevler vardr. Bir nesneyi tklamak, zerine gelmek, zerinde dolamak gibi ilemler, sayfa ile kullancnn etkileimli olarak almasn salar. JavaScript, ayn bir programlama dilinde olduu gibi deikenlere, klavyeden bilgi alma, ekrana kt verme ilemlerine, koul ve dng yaplarna, fonksiyon, nesne ve olay kavramlarna sahiptir.
Kod 9.8: rnek JavaScript <html> <head><title>onClick</title> <script language="javascript"> function merhaba() { alert ("beni tikladiniz"); } </script> </head> <body> <input type="button" name="tikla" value="tikla" onClick=merhaba()> </body> </html> script etiketinin language attribute deeri ile kullanlacak script dili belirtilir. Javascript kullanlmas iin burada language=javascript bildirimi yaplr. Kod 9.9: rnek JavaScript <html> <head> <title>JavaScript rnei</title> </head> <body> <br> Bu yaz html ile yazld. <br> <script language="JavaScript"> document.write("te bu ise JavaScript ile yazld!") </script> <br> Bu yaz yine HTML ile yazld. </body> </html>
Buradaki script ifadesi head etiketleri arasnda bir fonksiyon olarak deil, body etiketleri arasnda satr halinde kullanlmtr.
Deikenler
var anahtar szc ile yeni bir deiken oluturulur. Tr bilgisi saklanmaz.
Saysal deerler verildiinde ilem yapma yeteneine sahip olurlar. ift trnak ierisinde deer verildiinde ise metin ifadesi olarak anlalr.
Konu: 1
241
Dikkat edilmesi gereken nokta deikenlerin kk byk harf duyarl olmasdr. Baz tarayclar iin deiken isimlerinde bu duyarllk gz nnde bulundurulmazken, ou taraycda kk byk harf duyarllna dikkat edilir. Bu nedenle her deiken ad bu durum gz nnde bulundurularak verilmelidir.
var var var var var deger1; deger2=20; deger3=30; ay=Mays; yil=2005;
Satrn sonunda sonlandrma karakteri olarak ; kullanlr. degerToplam isimli deikende 20 ve 30 deerleri toplanarak elde edilen 50 deeri tutulurken, tarih isimli deikende, ay ve yil deikenlerinden gelen metin ifadeleri birletirilir ve Mays2005 deeri oluturulur. Koul Operatr
[koul ifadesi] ? koul_doru_ise : koul_yanl_ise
Deiken tanmlarken aritmetik, karlatrma ve mantksal operatrler kullanlabilir. Bunlara ek olarak C dilinden gelen koul operatrleri kullanlabilir. Bir if deyiminin tek satrda yazlm haline benzeyen bu operatrn kullanm kod 3.1.1de gsterilmitir. Genel kullanm biimi ise
[koul ifadesi] ? koul_doru_ise : koul_yanl_ise
eklindedir.
Kod 9.10: Koul Operatrnn Kullanm var var var var var a=5; b=7; c=14; d=23; e;
e = (a + b < c) ? d : a+b ;
Bu kodda, (a + b < c ) ifadesi ile elde edilen sonuca gre, e deerine d veya a + b deerleri atanr. a + b ileminin sonucu olan 12 deeri, c deerinden kk olduu iin ifade doru olarak sonulanr. Bu durumda d deeri, e deikenine atanr ve e deikeni 23 deerini tar. Bu koulu if deyimi ile yazlabilir.
if (a + b < c) e = d; else
242 e = a+ b;
Operatrler
JavaScript operatrleri, Visual Basic .NET dilinde kullanlan operatrlerden biraz farkldr. rnein mod almak iin Mod anahtar szc yerine % mod alma operatr kullanlr. Atama Operatr ( = ) Deikenlere deer atamak iin = karekteri kullanlr. Aritmetik Operatrler Deikenler zerinde aritmetik ilemler yapmak iin tanmlanm operatrlerdir.
Operatr + * / % ++ -Aklama
Saysal deikenleri toplar. String deikenlerini birbirine ekler. Saysal deikenlerde karma ilemi yapar. Saysal deikenlerde arpma ilemi yapar. Saysal deikenlerde blme ilemi yapar. Saysal deikenlerde mod alma ilemini yapar. Saysal deikenlerde artma ilemini yapar. Saysal deikenlerde azalma ilemini yapar.
Visual Basic .NET aritmetik operatrlerinden farkl olan ++ ve -- operatrleri, C dili operatrlerindendir. Deikeni bir arttrma veya bir azaltma yeteneine sahiptir. Prefix (deiken isminin nnde) ve subfix (deiken isminin arkasnda) olmak zere iki kullanm ekli vardr. Deikenin prefix kullanm kod 9.11 de gsterilmektedir.
Kod 9.11: Prefix ++ operatr var x = 5; // x deikeni bir arttrlr ve ekrana 6 deeri yazlr document.write(++x);
Konu: 1
243
Deikenin subfix kullanmnda ise nce deer alnr, ak bir sonraki satra getikten sonra deikenin deeri bir arttrlr.
Kod 9.12: Subfix ++ operatr var x = 5; /* x deikeni nce yazlr, sonra bir arttrlr. Yani ekrana 5 yazlr. */ document.write( x++); // Ekrana 6 deeri yazlr. document.write(x);
Karlatrma Operatrleri JavaScript kodlar ierisinde de karlatrma ilemleri yaplabilir. Ancak bu operatrler Visual Basic .NET karlatrma operatrlerinden biraz farkldr.
Operatr == != Aklama
Eit midir? operatr. ki deer de birbirine eit ise true sonucu verir. Eit deil midir? operatr. ki deer birbirine eit deilse true sonucunu verir. Kk operatr. Sol taraf deeri, sa taraf deerinden kkse true sonucunu verir. Byktr operatr. Sol taraf deeri, sa taraf deerinden byk ise true sonucunu verir. Kk eittir operatr. Byk eittir operatr.
<
>
<= >=
Mantksal Operatrler Mantksal operatrler ise Visual Basic .NET mantksal operatrlerinden tamamen farkldr.
||
Visual Basic .NET programlamada And operatrnn karl && operatrdr. Or operatrnn karl ise || operatrdr. Bir deerin deili anlamna gelen Not operatrn karl ise ! operatrdr.
JavaScript dilinde HTML sayfasna yaz yazdrmak iin write komutu kullanlr.
document.write(Yazlmak istenen deikene ilikin aklama, degisken);
Konu: 1
245
Koulun doru olmas halinde yaplacak ilemler bir satrdan fazla yer tutuyorsa, bu satrlar {} parantezleri ile gruplanr. Visual Basic .NET dilindeki gibi End if ifadesi kullanlmaz.
if (koul) { //koul doru ise } else { //koul yanl ise }
Tekrarlanan belirli bir ilemi yaptrmak iin kullanlan dnglerin JavaScript dilindeki kullanm tamamen C dilinin yapsna gre tasarlanmtr. for dngsnn genel kullanm biimi;
for(balang_deeri; dng_ifadesi; deiecek_deiken_ad) { //yaplacak ilemler }
eklindedir.
Kod 9.14: For Dngsnn Kullanm var a; var b = 10; for (a = 1; a <= b; a++) { document.write( a , . say, <br>); }
Visual Basic .NET dilindeki Select Case dngsne karlk olarak JavaScript dilinde switch-case ifadesi vardr. Genel kullanm:
switch (parametre) { case ifade1: // ifade1 koulu doru ise yaplmas istenenler break; //break ile dier koullarn da almas //engellenir ve dngden klr. case ifade2: //ifade2 koulu doru ise yaplmas istenenler break; }
Fonksiyonlar
JavaScript dilinde, kodlarn yeniden kullanlabilmesi iin kullanlr. Genel kullanm:
246
Topla fonksiyonuna gnderilen deger1 ve deger2 deikenleri toplanarak, fonksiyon iinde oluturulan sonuc deikenine atanr. return sonuc; ifadesi ile topla fonksiyonunda elde edilen sonu geri dndrlr.
JavaScript Nesneleri
JavaScript iinde baz ilemler, baz nesnelerin fonksiyonlar arlarak yaplr. rnein document.write komutu, aslnda document nesnesinin write metodunu arr. Window Nesnesi Genel pencere zelliklerini tutan nesnedir. Pencere ama ve kapama ilemleri iin bu nesne kullanlr. Genel kullanm:
window.open( url ,pencere_ismi,pencere_ozellikleri); window.close(); Open komutu ile yeni bir pencere alrken, close komutu ile pencere kapatlr. Yeni bir pencere amak iin open komutuna ilk parametrenin girilmesi zorunludur. Pencere_ismi, birden fazla pencere ile ilem yapld durumlarda kullanlabilir. Pencereye ait zellikler tablo 9.4te belirtilmitir. zellik Menubar Toolbar Location Status Aklama
Menu ubuunun grntlenmesini salar. Ara ubuun grntlenmesini salar. Adres ubuunun grntlenmesini salar. Durum ubuunun grntlenmesini salar.
Konu: 1
Top
Kod 9.16: Yeni bir pencere ama window.open("http://www.bilgeadam.com", "bilgeadam" , "menubar=no, toolbar=no, scrollbars=yes, location=yes, width=300, heigt=300";)
Internet taraycs ile daha nce ziyaret edilmi sayfalara tekrar ulaabilmek iin window.history.go(-1) komutu kullanlabilir. -1 ifadesi ile bir nceki sayfaya gidilir. Say arttrlarak daha nceki sayfalara da gidilebilir. Internet taraycsnn en alt ksmnda bulunan status penceresine erimek iin
window.status komutu kullanlr. window.status =JavaScript reniyoruz!;
Navigator (tarayc) Nesnesi JavaScript, tarayclar da bir nesne olarak deerlendirir. Kullancnn taraycsna ilikin bilgileri almak iin tablo 3.1.5te belirtilen deikenler kullanlabilir.
Deiken smi appname appversion appCodeName userAgent Aklama
Tarayc ad Tarayc versiyonu Taraycnn kod ad Taraycnn sunucuya kendini tantrken verdii isim.
248
<head> <title>Browser'mz tanyalm</title> <METAcontent=text/html;CHARSET=iso-8859-9 httpequiv=Content-Type> <script language="Javascript"> function Tarayici() { var browseradi=" "; browseradi +="Browser:"+navigator.appName +"\r ; browseradi +="Surumu:"+navigator.appVersion +"\r ; browseradi +="Kodadi:"+navigator.appCodeName+"\r ; browseradi +="Useragent:"+navigator.userAgent+"\r ; alert(browseradi); } </script> </head> <body onLoad="Tarayici()"></body> </html>
Olaylar
Bir Web sayfas zerinde kullancnn her trl hareketi kontrol edilebilir. Bir kontroln zerine gelmesi, dolamas ve zerinden ayrlmas gibi hareklere olay denir. Bu olaylar ise onClick, onMuoseOver, onMouseOut,
onSubmit,onReset, onChange, onLoad, onUnLoad, onError, onAbort, onFocus, onBlur olarak belirtilebilir.
onClick Internet sitelerinin ounda en sk kullanlan JavaScript olaydr. Sayfa zerinde bir nesnenin fare ile tklanp braklmas sonucunda gerekleen olaydr. Link, button ve resim nesneleri tklanarak onClick olay tetiklenebilir. Nesnelerin etiketlerinde ise onClick olaylarn tetikleyen fonksiyonlarn ismi bildirilmelidir.
Kod 9.18: onClick Olay function tikla() { alert(Tklama ilemi gerekleti); } <input type="button" name="tikla" value="tikla" onClick=tikla()>
Butona tklanp brakldnda, onClick olay tetiklenir ve bu olayla ilikilendirilen tikla fonksiyonu devreye girer. alert komutu ile ekrana bir mesaj kutusu kar. Ayrca onDblClick, ift tklanma olayn tetikler. onMouseOver, onMouseOut Fare nesnenin zerindeyken onMouseOver, fare nesne zerinden ayrlnca onMouseOut olaylar devreye girer.
Konu: 1
249 Kod 9.19: onMouseOver ve onMouseOut Olay function nesneUzerinde() { window.status="u anda nesne zerindesiniz."; } function nesneDisinda() { window.status="nesnenin dna ktnz." ; } <a href="http://www.google.com" onMouseOver = nesneUzerinde() onMouseOut = nesneDisinda()> Google </a>
onSubmit Web safyalarnda ziyaretinin forma bilgi girip sunucuya gndermesi durumlarnda onSubmit devreye girer. Gnderilecek forma girilen verilerin uygunluunun kontrol bu olayn tetikledii fonksiyonlara yaptrlabilir.
Kod 9.20: onSubmit Olay function dogrula() { confirm (Formu doldurduysanz OK'i tklaynz'); } <form action="mail.pl" method="post" onSubmit="dogrula()"> confirm komutu, kullancya Ok ve Cancel butonlarndan oluan bir diyalog penceresi aar.
onReset Form iinde kullanlan tm metin alanlarnn temizlenmesini salar. Doldurulan formda yanllk olduunda bu olay tetiklenir. Kullancya onay penceresi kartmak iin de kullanlabilir.
Kod 9.21: onReset Olay function sil() { return confirm('Silmek istediginize emin misiniz?'); } <form onReset="return sil()"> <input type="text" name="mail"> <input type="reset" value="sil"> </form>
onChange Bilgi girii yaplan alanlarda, deiikliin gerekletii bilgisi onChange olay ile tetiklenir.
<form method="post"> <p> <select name="degistir" size="1" onChange="degisti()"> <option>Istanbul <option>Ankara <option>Antalya </select> </form>
Sunulan seeneklerden herhangi biri seidiinde uyar penceresi kacaktr. onLoad, onUnLoad
onLoad olay sayfaya giri yapldnda gerekleir. onUnLoad olay sayfadan
kldnda gerekleir.
Kod 9.23: onLoad ve onUnLoad Olay function giris() { alert(Sayfaya Giri Yaptnz!"); } function cikis() { alert("Sayfadan ktnz.."); } <body onLoad="giris()" onUnload="cikis()"> </body>
onError, onAbort Ziyaret edilen sayfadaki nesneler, eitli nedenlerden dolay tam olarak yklenememi olabilir. Genellikle resim nesnelerinin yklenmesinde problem kabilir. Bu tr durumlar ziyaretiye bildirmek iin onError veya onAbort olaylar kullanlr.
Kod 9.24: onError ve onAbort Olay <img src="resim.gif" onError="alert(Resim dosyas yklenemedi')">
onFocus, onBlur onFocus olay kullanc kontrollerine giri yaplrken gerekleir. OnBlur olay ise ve kullanc kontrollerinden k yaplrken gerekleir.
Kod 9.25: onFocus ve onBlur Olay function dogru() {
Konu: 1
251 document.form1.mesaj.value="Ltfen hata yapmayn!"; } function sor() { document.form1.mesaj.value="isminiz alnd"; } <form name="form1" method="post"> <p><h3>Ltfen isminizi yaznz!</h3></p> <input type="text" size="20" name="isim" onfocus="dogru()" onblur="sor()"> <p> <input type="text" name="mesaj"></p> </form>
VbScript
VbScript , Microsoft tarafndan gelitirilmitir. Ancak, VbScript tm tarayclar tarafndan desteklenmez. Bu nedenle tm tarayclarda alacak script yazlmak isteniyorsa, JavaScript kullanlmaldr. Vbscript dilinin kullanlabilmesi iin script etiketi ierisindeki language zniteliine vbscript deeri atanr.
<script language="vbscript">...</script> Kod 9.26: lk VbScript rnei <html> <body> <script language="vbscript"> document.write("lk VBScript!") </script> </body> </html>
Metot tanmlamas Visual Basic.NET diline benzer. Geriye sonu dndrmeyen metotlar Sub, geriye sonu dndren metotlar ise function anahtar szc ile tanmlanr. Bu tanmlanm metotlar call MetotAd() anahtar szc ile arlabilirler.
252 Kod 9.28: Sub Tanmlamas <html> <head> <script language="vbscript"> sub mySub() msgbox("sub procedure") end sub </script> </head>
<body> <script language=vbscript"> call mySub() </script> <p> sub procedure geri dn deeri tamaz.</p> </body> </html>
Kod 9.29: Function Tanmlamas <html> <head> <script language=vbscript"> function sehir() sehir = "Trabzon" end function </script> </head> <body> <script language=vbscript"> document.write("En sevdiim sehir: " & sehir()) </script> <p> function procedure geri dn deerine sahiptir.</p> </body> </html>
Konu: 1
253
Konu 4: CSS
CSS (Cascading Style Sheets), HTML sayfalar ierisinde zel stiller tanmlamak iin kullanlr. Sayfann yaz tr, arka plan rengi, link renkleri, nesnelerin sayfa zerindeki yerleimi birer stil eleridir. Bir sitedeki tm sayfalara ayn stili vemek iin CSS dosyalar hazrlanr. Bu CSS dosyalar HTML sayfalarna dahil edilir. Stiller HTML sayfalarna yntem ile dahil edilebilir:
Inline (i) Embedded (gml) Linked (balantl)
(Inline)
Herhangi bir HTML etiketi iinde stil kullanlabilir. rnein paragraf etiketine style=x attribute deeri eklenebilir. Ve o paragrafa zel tasarm zellikleri bildirilebilir.
<p style=font: 12pt arial> Bu paragraftaki tm yazlar arial 12 stilidedir.</p> Gml (Embedded)
Gml stiller, HTML sayfasnn Head etiketi ierinde tanmlanr. Bu stilleri tanmlamak iin <Style>..</Style> etiketleri kullanlmaldr.
254 Kod 9.30: Gml stillerin Tanmlanmas <html> <head> <style> body { background:#ff0000; color:#ffffff; } </style> </head> <body> Krmz zemin zerine beyaz renkle yaz </body> </html> Balantl (linked)
Stil verileri .css uzantl dosyalarda tanmlanr. En gl tasarm zellii balantl stil dosyalarndadr. Tasarm zellikleri bu dosyada tanmlanr ve her sayfa iinden bu stil dosyasna balant verilerek etiketlere gerekli stiller uygulanr. HTML sayfalarda stil dosyas ile balant kurmak iin aadaki tanmlama yaplr. Bu tanmlama head etiketleri ierisinde yaplr.
<link rel=stylesheet href=stil.css type=text/css>
zellikler ve deerler birleerek bir tanm oluturur. Seici ve tanm ise bir kural oluturur. Sayfa dzeni ,kenar boluklar, girinti ve hizalama deerleri kontrol edilerek hazrlanm bir site profosyonel bir grnme sahip olabilir. En ok kullanlan yaz zellik ve deerleri tablo 4.1de listelenmitir.
Konu: 1
Sa kenar boluunu belirlemek iin kullanlr. st kenar boluklarn belirlemek iin kullanlr. Bir yaz iin girinti bilgisini belirler. Yaznn hizalanmasn salayan deeri tutar. left,
center, right underline, overline, line-through, none deerleriyle yazya ekil verir.
Yaznn byk veya kk harflerle grntlenmesini salar. Uppercase, lowercase
p { font-size: 20; color: blue; font-weight: bold; font-style: italic; font-family: Times New Roman; }
Liste elemanlar iin bir sembol almaz. Liste imleri yerine resim kullanr.
indise: Listenin ikinci satrn en soldan balatr. outside: kinci satr bir ncekinin dikey
hizasndan balatr.
repeat: tm ynlerde repeat-x: x ekseni boyunca repeat-y: y ekseni boyunca no-repeat: tekrar edilmez backgroundposition left: Resmi pencerenin sol kenarna yaklatrr. right: Sa kenara yakaltrr. center: Resmi ortalar.
Tablo 9.9: Background zellik ve deerleri
Seiciler
Seiciler, oluturulan <H1>, <P> gibi etiketlerin mevcut zelliklerini ayn tutarak onlara yeni zellikler ekleme olana verir. Ayrca istenilen bir kelimeye stil zellii atayp istenilen zamanda arlmasn salar.
h1 { background:green; color:white; font-weight:bold; font-family:arial; } h1.kirmizi{color:red}
Konu: 1
257
Linkler ve CSS
Sayfalarda ziyaret edilen linklerin mavi alt izgilerini ortadan kaldrmak veya baka stiller vermek iin CSS dilinden yararlanlabilir. <A> etiketinin stilini belirlemekte kullanlan drt ifade vardr:
active: Tklanan linkin stilini belirler. link: Link yaz stilini belirler. visited: Ziyaret edilmi linkin sitilini belirler. hover: Fare linkin zerindeyken nasl bir stil alacan belirler.
a:link{text-decoration:none; color:teal} a:active{text-decoration:none; color:red} a:visited{text-decoration:none; font-family:Times New Roman; color:green} a:hover{background-color:teal; color:white; fontfamily:arial}
Snf ve Gruplama
Snf (class), stil kurallarnn kk paralara ayrlmasn salar. Sayfadaki herhangi bir yaznn dier yazlardan farkl grnmesi istendii durumda, istenilen sayda zel HTML etiketi oluurulabilir. rnein sayfada iki farkl trde H1 etiketi kullanlmak istensin.
H1.serif { font: 14pt Century Schoolbook; } H1.sans{ font: 20pt Arial; }
Bu stilleri kullanmak iin kod iine serif veya sans snf ismi vermek yeterlidir. Gruplama, stil zellikleri ve deerleri younlatrldnda oluur. rnein;
P.1 { font: verdana; font-size: 12pt; line-height: 18pt; }
1 snfndaki tm paragraflar 12 punto Verdana fontuyla ve 18 punto satr yksekliiyle grntlenir. Snf yerine gruplama yaplabilir.
P.1{font:12pt/18pt verdana}
Her iki gsterimde de ayn grnt elde edilir. Ancak gruplamada deerler girerken font-size, font-height ve font sralamasna uyulmas gerektiine dikkat edilmelidir.
258
Modl zeti
26. 27. 28. 29. 30. HTML nedir? En sk kullanlan HTML etiketlerini aklayn. Script Nedir? Java Script nedir? Java Script niin kullanlr? CSS nedir? CSS, Html sayfalara nasl dahil edilebilir?
Konu: 1
259
Bu uygulamada, Java Script .ile sanal klavye yapmasn reneceksiniz. Ayrca Java Script ile popup pencere oluturmay reneceksiniz. Bu lab tamamlandktan sonra: Java Script ile Sanal Klavye oluturabilecek, Java Script ile popup pencere oluturabileceksiniz.
260
Konu: 1
261 </tr> <tr> <td><input type="button" id="br" onClick="HarfR()" value="R" NAME="br"></td> <td><input type="button" id="bs" onClick="HarfS()" value="S" NAME="bs"></td> <td><input type="button" id="bt" onClick="HarfT()" value="T" NAME="bt"></td> <td><input type="button" id="bu" onClick="HarfU()" value="U" NAME="bu"></td> <td><input type="button" id="bv" onClick="HarfV()" value="V" NAME="bv"></td> <td><input type="button" id="by" onClick="HarfY()" value="Y" NAME="by"></td> <td><input type="button" id="bz" onClick="HarfZ()" value="Z" NAME="bz"></td> </tr> </table> </div> <br> <form name="form1" method="post" ID="Form1"> <table width="268" border="1" cellpadding="1" cellspacing="2" bordercolor="#99ff66" bgcolor="#0099cc" ID="Table2"> <tr> <td width="85">Kullanici Adi</td> <td width="167"><input name="text" type="text" id="user"></td> </tr> <tr> <td>Parola</td> <td><input type="password" id="password" readonly NAME="password"></td> </tr> <tr> <td> </td> <td><input name="button2" type="button" id="giris" value="Giris Yap" onClick="hosgeldin()"> <input name="button2" type="reset" id="temizle" value="Sil"></td> </tr> </table> </form>
Kodlarn yazlmas
SanalKlavye Html sayfasnn HTML blmne aadaki kodlar yazn. Bu kod, Java Script ile istemci tarafl fonksiyonlar eklemektedir. Bu kodu <Head>..</Head> etiketleri arasna ekleyin.
<script language="javascript"> function HarfA() { form1.password.value += "A"; } function HarfB() { form1.password.value += "B"; }
262 function HarfC() { form1.password.value += "C"; } function HarfD() { form1.password.value += "D"; } function HarfE() { form1.password.value += "E"; } function HarfF() { form1.password.value += "F"; } function HarfG() { form1.password.value += "G"; } function HarfH() { form1.password.value += "H"; } function HarfI() { form1.password.value += "I"; } function HarfJ() { form1.password.value += "J"; } function HarfK() { form1.password.value += "K"; } function HarfL() { form1.password.value += "L"; } function HarfM() { form1.password.value += "M"; } function HarfN() { form1.password.value += "N"; } function HarfO() { form1.password.value += "O"; } function HarfP() {
Konu: 1
263 form1.password.value } function HarfR() { form1.password.value } function HarfS() { form1.password.value } function HarfT() { form1.password.value } += "P";
+= "R";
+= "S";
+= "T";
function HarfU() { form1.password.value += "U"; } function HarfV() { form1.password.value += "V"; } function HarfY() { form1.password.value += "Y"; } function HarfZ() { form1.password.value += "Z"; } function hosgeldin() { alert("hosgeldiniz sayin: " + form1.user.value) } </script>
264
Konu: 1
265
Kodlarn yazlmas
Popup, Html sayfasnn HTML blmne aadaki kodlar yazn. Bu kod, Java Script ile istemci tarafl fonksiyon eklemektedir. Bu kodu <Head>..</Head> etiketleri arasna ekleyin.
<script language="javascript"> function pencereac() { window.open('acilan_pencere.htm','acilan','width=500,heig ht=300') } </script>
Modl 10:
Web uygulamalar gelitirirken, her sayfada grntlenecek sabit paneller gerekebilir. Bu panelleri her sayfa iin tekrar oluturmak zaman ve performans
Modul 10:
267
kaybna yol aar. Bu paneller, User Controls (kullanc kontrolleri) biminde oluturulup, proje iinde birok yerde kullanlabilir. Bu modl tamamlandktan sonra : Kullanc kontrollerin yapsn renecek, Kullanc kontrol oluturabilecek, Kullanc kontrollerini proje iinde kullanabileceksiniz.
Sk kullanlan kontroller bir araya getirilerek yeni bir kontrol oluturulur. Bu kontroller uygulama ierisinde her sayfada kullanlabilir. rnein sayfalar aras dolam salayan men paneli, kullanc kontrol haline getirilebilir. Web kontrollerinde olduu gibi kullanc kontrolleri de sunucu tarafnda alr. Kullanc kontrolleri System.Web.UI.UserControl snfndan tretilmitir.
268
Kullanc kontrolleri, uygulama iindeki tm sayfalara eklenebilir. Ancak dier uygulamalardaki kullanc kontrolleri sayfalara direk eklenemez. Dier uygulamalardaki kullanc kontrolleri, kullanmadan nce uygulamaya eklenmelidir.
Projeye yeni bir kullanc kontrol eklemek iin aadaki admlar takip edin. 1. Solution Explorer penceresi an. 2. Proje ad zerinde farenin sa butonunu tklayn. 3. Alan penceredeki Add mensnden Add Web User Control komutunu sein. 4. Name metin kutusuna kullanc kontrolune verilecek ismi girin.
Modul 10:
269
Kullanc kontrol formlar, normal Web formlar gibi tasarlanr. Kullanc kontrol dosyalar .ascx ve bu kontrollere ait code-behind sayfas ise ascx.cs uzantldr. Kullanc kontrollerinde HTML ve Visual Basic .NET kodu birlikte kullanlabilir. Ancak kullanc kontrolleri web formlar tarafndan kullanld iin <head>, <body>, <form> gibi HTML elementleri bulundurmaz. Web form direktifi olan @Page yerine kullanc kontrollerinde @Control ifadesi kullanlr. Bu direktif @Page direktifinin AspCompat ve Trace dndaki tm attribute deerlerine sahiptir.
270
Kullanc kontrollerini Web form ierisine eklemek iin @Register ifadesi kullanlr. Bu ifade kullanc kontrollerinin web forma balanmasn salar.
<%@ Register TagPrefix=deneme TagName=Login src=login.ascx %> TagPrefix attribute deeri kullanc kontrol iin bir namespace oluturur.
Bylece her kontrol ayr bir namespace iinde tanmlanr. TagName, kullanc kontrolnn ismidir. Src ise kullanc kontrolnn bulunduu yolu belirtir. @Register ifadesi ile forma balanan kullanc kontrolu, aada kod ile web form ierisinde grntlenir. Kullanc kontrolleri sunucu zerinde alt iin, runat="server" parametresi ile tanmlanmaldr.
<deneme:Login id="Login1" runat="server"/>
Modul 10:
271
272
Modl zeti
31. Kullanc kontrolleri niin oluturulur? 32. Kullanc kontrollerinin avantajlar nelerdir?. 33. Web form ierisinde kullanc kontrolleri nasl kullanlr?
Modul 10:
273
Bu uygulamada, e-ticaret uygulamasnn kullanc kontrolleri tasarlanacaktr. Bu uygulamada, btn sayfalarda kullanlacak st ve alt men oluturulacaktr. Ayrca kategori isimli kullanc kontrolu ile tm kategoriler listelenecektir. Kategori deerleri veritaban ierisinden alnr. Bu lab tamamlandktan sonra: Kullanc kontrolu oluturabileceksiniz.
274 HyperLink btnUyeKayit LinkButton btnCikis Label lblAd NavigateUrl Text Text Visible
Ust isimli kullanc kontrolunn code behind kodlar aadaki gibi olacaktr.
Using System.Data.OleDb private void Page_Load(System.Object sender, System.EventArgs e) { If (Session("user") != "") {
Modul 10:
275
lblAd.Text = "Bay / Bayan : " + Session("ad") + " " + Session("soyad"); btnCikis.Visible = true; else { btnCikis.Visible = false; } } private void btnCikis_Click(System.Object sender, System.EventArgs e) { Session.Abandon(); btnCikis.Visible = false; Response.Redirect("Default.aspx"); }
Modul 10:
12345-
Proje ad zerinde farenin sa butonunu tklayn. Alan penceredeki Add mensnden Add New Item komutunu sein. Templates seenei ierisinden DataSet esini sein Name metin kutusuna dsBook ismini girin.
Balant oluturulmas
KitapDB veritaban zerinde ilem yaplmas iin balant kurulmas gerekir. Bu balanty Server Explorer kullanarak oluturun. Bu baglant ile veritaban ierisindeki Kategori tablosu, dsBook isimli dataset ierisine eklenecektir. KitapDb uygulamas iin yeni balant oluturmak. 5. Server Explorer penceresi zerinde farenin sa butonunu tklayn. Alan menden Add Connection komutunu tklayn. 6. Alan Data Link Properties penceresinin Provider sekmesini tklayn. 7. Provider sekmesinden Microsoft.Jet.OLEDB.4.0 Provider i seerek Next butonunu tklayn.
8. Alan Connection sekmesinin grntsn resimdeki gibi dzenleyerek OK butonunu tklayn. 9. Server Explorer penceresinden DataConnections seeneini sein 10. Eklediiniz balant ierisinden Tables seeneini sein. 11. Tables ierisindeki Kategori tablosunu dsBook nesnesinin ierisine srkleyin.
278
Default.aspx
private void Page_Load(System.Object sender, System.EventArgs e) { String connStr = "Provider=Microsoft.Jet.OleDB.4.0; " + "Data Source=" + Server.MapPath("KitapDb.mdb"); OleDbConnection conn = new OleDbConneciton();
Modul 10:
279
conn.ConnectionString = connStr; OleDbCommand comm = new OleDbCommand(); comm.CommandType = CommandType.Text; comm.CommandText = "Select * from Kategori"; comm.Connection = conn; OleDbDataAdapter da =new OleDbDataAdapter(); da.SelectCommand = comm; DataSet ds = new DataSet(); try { conn.Open(); da.Fill(ds, "Kategori"); rptKategori.DataSource = ds.Kategori; rptKategori.DataBind(); catch (Exception ex) { Response.Write(ex.Message); } finally { if (conn.State = ConnectionState.Open) { conn.Close(); } } }
Modul 11:
Modul 11:
281
Web uygulamalar ile veriye eriim, Windows uygulamalarna olduka benzemektedir. Ancak verileri listelemek iin kullanlan kontrollerin alma yaps farkllk gsterir. Veriye ulam ADO.NET nesneleri ile gerekleir.
282
Modl 11:
ASP.Net ile veritaban iindeki veriyi grntlemek ve dzenlemek iin veri balant kontrolleri kullanlr. ListBox, DropDownList kontrolleri dnda CheckBoxList, RadioButtonList kontrolleri veri balantl olarak alabilir. Repeater, DataList ve DataGrid kontrolleri veri listelemek iin kullanlr.
Modul 11:
283
arasnda seim yaplmasn salayan CheckBoxList ve RadioButtonList kontrolleri kullanlabilir. rnein bir sayfada drt tane istee bal seenek varsa drt ayr CheckBox kullanmak yerine, bir CheckBoxList kontrol kullanlr. Ayn ekilde be seenekten sadece bir tanesi seilmesi gerekiyorsa, be ayr RadioButton oluturmak yerine, bir RadioButtonList kontrol kullanlr.
CheckBoxList kontrolnn DataSource, DataMember, DataTextField ve DataValueField zellikleri ile veritaban ilemleri gerekletirilir. DataSource,
balantsz alan DataSet nesnesine balanr. DataMember, bu DataSet ierisindeki tablo ismini temsil eder. DataValueField, value zelliinde tutulmas istenen kolonu, DataTextField ise text zelliinde grntlenmek istenen kolonu temsil eder. rnekte CheckBoxList kontrol ile seilen tm eler, lblMsg isimli etiketin ierisine yazdrlmaktadr.
int i ; for (int i=0;i< checkboxlist1.Items.Count ;i++) { If (checkboxlist1.Items(i).Selected) { lblMsg.Text &= checkboxlist1.Items(i).Text & "<br>"
284 } } CheckBoxList
Modl 11:
kontrol
ile
birden
fazla
seim
yaplabilir.
Fakat
kontrollerdir. Bu kontrol ablonlardan oluur. Ortak ablonlar ise HeaderTemplate, ItemTemplate ve FooterTemplate ablonlardr. ablonlar ierisinde verinin grntlenmesine ynelik tanmlamalar yaplr.
Modul 11:
285
DataList ve DataGrid, veriler zerinde gncelleme yapma imkan sunarken, Repeater sadece veri grntlemeyi salar. Ancak DataGrid, DataList
Repeater
Repeater; veriyi veritabandan alarak istenilen biimde grntlenmesini salayan olduka gl bir kontroldr. Her kaydn grntlenme ekli, HTML etiketleri ile oluturulan bir ablon ile belirlenir. Haber yayn yapan sitelerinin ounda bu kontrol kullanlr.
286
Modl 11:
<td> <asp:Label ID=Lbl2 Runat=server text='<%# Databinder.eval(container.dataitem, "contactname")%> ' > </asp:Label> </td> </tr> </table> </ItemTemplate> <FooterTemplate> <b>BilgeAdam BTA</b> </FooterTemplate> </asp:Repeater> Repeater kontrolnn ItemTemplate ablonda, her kayt iin yaplacak
Repeater kontrolnn en altndaki alandr. Alt balk olarak istenilen stil verilebilir.
Veritabanndan gelen her bir satr dierinden ayran ablondur.
SeperatorTemplate
Modul 11:
ifadesi
yazlarak
veri
balama
ilemi
gerekletirilir.
Burada
Databinder.eval, repeater kontrolne balanan veri kmesi iinden CompanyName ad verilen kolonu bulur ve o kolondaki verileri srasyla repeater
iine alr ve grntler. kinci td etiketinde, Label kontrolnn Text zelliine ContactName kolonunu balar.
text='<%#Databinder.eval(container.dataitem, "contactname")%> '
Code-behind sayfasnda ise, Repeater kontrolnn DataSource zelliine, veri kaynan temsil eden DataSet nesnesinin ismi bildirilir. Ve DataBind metodu ile balantnn ilenmesi salanr.
Sonu olarak Repeater kontrol, HTML kullanmn youn olarak gerektirir ve karlnda, verilerin istenilen ablona uygun biimde grntlenmesini salar.
DataList
288
Modl 11:
grntlemek dnda, verilerin seilip ve zerinde gncelleme ilemleri yapmaya olanak salar. Datalist eklemek iin aadaki admlar takip edin. rnekte DataList kullanm gsterilmektedir. 1. Ara kutusundan DataList kontrol seerek formumuzun zerine srkleyip brakn. 2. Kontrol zerine sa tklayn ve alan menden Edit Template alann sein. 3. Alan yeni pencerede Header and Footer Templates, Item Template ve Seperator Templates alanlar kacaktr. Header and Footer Templates alann seerek, balk ve alt balk alanlarna istenilen form girilebilir. Header alanna iki label ekleyin ve Text zelliine Kitap Ad ve Yazar deerini verin. Footer alanna yine bir Label ekleyin ve Text zelliine Bilge Adam BTA yazn. 4. Kontrol zerinde tekrar sa tklayn ve Item Templates alann sein. ItemTemplate ve AlternatingItemTemplate ablonuna ek olarak, SelectedItemTemplate ve EditItemTemplate ablonlar bulunur. ItemTemplate alannda, grntlemek istenilen alanlar temsil edecek kontrolleri oluturulur. Bu kontrolde repeater kontrolnden farkl olarak, tasarm ekrannda ara kutusundan istenen kontrol ItemTemplate ablonuna eklenebilir. 5. ki tane Label kontroln ItemTemplate alanna ekleyin ve HTML koduna geerek veri balama ilemlerini gerekletirin.
Kod 11.2: DataList kullanmnda code-behind sayfas string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; + Data Source=" & Server.Mappath("./Stok.mdb"); OleDbConnection conn = new OleDbConnection (connStr); OleDbDataAdapter da = new OleDbDataAdapter("select * from kitaplar", conn); DataSet ds = New DataSet(); private void Page_Load(Object sender, EventArgs e) { da.Fill(ds, "kitaplar"); DataList1.DataSource = ds; DataList1.DataBind(); } Kod 11.3: DataList aspx sayfas ve veri balama <form id="Form1" method="post" runat="server"> <asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 88px; POSITION: absolute; TOP: 168px" runat="server"> <HeaderTemplate> <asp:Label id="Label1" runat="server" Width="300px" Font-Bold="True">Kitap Ad</asp:Label>
Modul 11:
289
<asp:Label id="Label2" runat="server" Width="65px" Font-Bold="True">Yazar</asp:Label> </HeaderTemplate> <FooterTemplate> <asp:Label id="Label3" runat="server" FontBold="True">Bilge adam Bta</asp:Label> </FooterTemplate> <ItemTemplate> <asp:Label id=Label5 runat="server" Width="300px" text='<%# databinder.eval(container.dataitem, "kitap_baslik")%>'> </asp:Label> <asp:Label id=Label4 runat="server" text='<%# databinder.eval(container.dataitem, "kitap_yazar")%>'> </asp:Label> </ItemTemplate> </asp:DataList> </form> DataList kontrolnn bir dier fark, kt grnmnn tablo iinde veya dz
bir biimde verilmesidir. RepeatLayout zelliinin Table ve Flow deerlerini kullanarak tablo grnm ve dz grnm verilir. Varsaylan grlm Table biimindedir.
RepeatColums zellii ise verilerin ka stun halinde grntleneceini belirler. RepeatDirection zellii ise tekrarlanan kaytlarn alt alta veya yan yana
ayrr.
DataList ierisinde grnt formunu dzenlemek iin penceresindeki grnme ilikin pek ok zellik sunulmutur.
properties
grntlenmesini salar.
EditItemTemplate ablonu, kullancnn setii kayt zerinde dzenleme yapmasn salayan alana ait kodlarn girildii blmdr.. DataList kontrolnn ablonlar ierisine kullanlan kontrollere, formun
zerinden direk eriilemez. rnein DataList iindeki bir Button kontrolnn Click olayna kod yazlamaz. DataList iinde kullanlan Button kontrolne kod yazmak iin, DataList kontrolnn CommandName zellii kullanlr. Bu zellik, Button kontroln Command nesnesi ile alr ve forma yollar. Ve DataList kontrolnn ItemCommand olaynda, gelecek komutun adna gre kod yazlr.
290
Modl 11:
DataGrid
Verileri sayfalama ve sralama yetenei sayesinde grntleme ilemleri zellemitir. DataGrid, veritabanndan alnan bir tabloyu, tablo biimi ile ekrana yanstlmasn salar. Seilen kayt zerinde deiiklik yapma ve kayt silme olanaklarn salar. Sayfalama, sralama, seme, dzeneleme ve silme ilemlerini destekler. DataGrid kontrolne veri balamak iin ablon kullanmaya gerek yoktur.
Kod 11.4: DataGrid kontrolnn en basit kullanm string connStr = "Provider= Microsoft.Jet.OLEDB.4.0;+ Data Source=" + Server.Mappath("./Stok.mdb"); OleDbConnection conn = new OleDbConnection(connStr); OleDbDataAdapter da = new OleDbDataAdapter("select * from kitaplar", conn); DataSet ds = new DataSet; private void Page_Load(Object sender, EventArgs e) { da.Fill(ds, "kitaplar"); DataGrid1.DataSource = ds; DataGrid1.DataMember = "kitaplar"; DataGrid1.DataBind(); } HTML <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 28px; POSITION: absolute; TOP: 96px" runat="server" Width="432px" Height="203px">
Modul 11:
291
</asp:DataGrid>
oluturun. Bu veritabanndan, kullanmak istediiniz tabloyu srkleyerek form zerine brakn. Formun alt penceresinde iki yeni nesne oluacaktr. (OleDbConnection1 ve OleDbDataAdapter1)
OleDbDataAdapter1 nesnesi sein ve Properties panelinden
Generate DataSet komutunu verin. Alan pencerede Next dmeleri ile ilerleyin. Ara kutusundan DataGrid kontroln srkleyip forma brakn.
Properties penceresinde DataSource alanna oluturulan DataSet
kontrolnn ismi, DataMember alanna, DataSet iine alnan tablolardan birini girin.
DataSet kontroln veri ile dolduran ve balama ilemlerini
iin DataGrid kontrol zerinde sa tklanr ve AutoFormat seilir. Varsaylan olarak DataGrid verileri Grid grnmnde sunar. GridLines zelliine Both, Hortizonal, Vertical ve None deerlerinden biri atanabilir. BackImageUrl zellii sayesinde DataGrid kontrolnde bir arka plan resmi grntlenebilir.
292
Modl 11:
grntlenmesi istenirse, BoundColumn kontrolleri kullanlabilir. Kod 11.5de veri kaynandan alnan tablonun istenilen kolonlar grntlenir.
BoundColumn
private void Page_Load(Object sender, EventArgs e) { string connStr = Provider=Microsoft.Jet.OLEDB.4.0; + Data Source=" & Server.Mappath("./Stok.mdb") OleDbConnection conn =new OleDbConnection(connStr); OleDbCommand cmdSelect = new OleDbCommand("Select * From kitaplar", conn); conn.Open(); DataGrid1.DataSource = cmdSelect.ExecuteReader(); DataGrid1.DataBind(); conn.Close(); } Html <asp:DataGrid ID="DataGrid1" AutoGenerateColumns="False" EnableViewState="False" Runat="Server"> <Columns> <asp:BoundColumn DataField="Kitap_baslik" HeaderText=Kitap Ad /> <asp:BoundColumn DataField="Kitap_yazar" HeaderText=Yazar Ad/> </Columns> </asp:DataGrid> AutoGenerateColumns zellii varsaylan olarak True deerindedir ve tm kolonlarn otomatik olarak grntlenmesini salar. rnekte bu zellie False deeri atanmtr. BoundColumn kolonunun birok zellii vardr. DataField DataFormatString FooterText HeaderImageUrl HeaderText
BoundColumn kolonu, DataGrid kontrolnn Columns etiketi ierisinde tanmlanmtr. DataField zelliinde ise kolon ad belirtilmitir.
Modul 11: PUCU: DataGrid iinde grntlenecek kolonlar seen sql komut tanmlanrken select * from ... ifadesinden kanlmaldr. Bu komut yerine sadece ihtiya duyulan kolonlar tek tek belirtilmelidir. Aksi halde, Web zerinde yayn annda performans kayb ortaya kar. BoundColumnun DataFormatString zellii ise, kolondan alnan ifadenin belirli bir formatta grntlenmesini salar. rnein bir para miktar sz konusuysa bu zellik kullanlabilir.
293
BoundColumnun HeadetText, FooterText ve HeaderImageUrl zellikleri, header, footer alanlarna grntlenmesi istenilen yazlar, ve balkta grntlenecek resimi belirler. HeaderText alanna yazlan yaznn grntlenebilmesi iin DataGrid kontrolnn ShowFooter zellii True yaplmaldr. Bu zellik varsaylan olarak False deerindedir. Ayn anda HeaderImageUrl ve HeaderText zelliklerine deer girildiinde, resim ve yaz beraber grntlenemez. rnekte Header alannda hem resim hem de yaz gsterilir
HeaderText="<img src=myImage.Gif>Balk"
HyperLinkColumn
HyperLinkColumn, kaytlar linkler eklinde grntleyen kolondur. Yani DataGrid kontrolnde grntlenen kaytlar zerinden baka sayfalara ilgili linkler verilmek isteniyorsa, HyperLinkColumn kullanlmaldr. DataGrid kaytlarna ilikin ayrntl bilgi verilmek isteniyorsa master/detail formlar eklinde grnt vermek iin yine bu kolon kullanlabilir.
rnekte HyperLinkColumn kullanm gsterilmektedir. DataGrid nesnesi zerindeki Detaylar kolunu tklanarak, detay bilgileri getirilebilir. Bu bilgiler Detaylar.aspx sayfas zerinde gsterilir.
private void Page_Load(Object sender,EventArgs e) { string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; + Data Source=" & Server.Mappath("./Stok.mdb"); OleDbConnection conn =new OleDbConnection(connStr); OleDbCommand cmdSelect = OleDbCommand("Select * From + musteri", conn); conn.Open(); DataGrid1.DataSource = cmdSelect.ExecuteReader(); DataGrid1.DataBind(); conn.Close(); }
294
Modl 11:
Html <asp:DataGrid ID="DataGrid1" AutoGenerateColumns="False" EnableViewState="False" CellPadding="10" Runat="Server"> <Columns> <asp:BoundColumn HeaderText="Mteri Ad" DataField="musteri_ad" /> <asp:BoundColumn HeaderText="Mteri Soyad" DataField="musteri_soyad" /> <asp:HyperLinkColumn HeaderText="Detaylar" DataNavigateUrlField="musteri_id" DataNavigateUrlFormatString="Detaylar.aspx?id={0}" Text="Detay Grntle" /> </Columns> </asp:DataGrid>
Sayfaya Parametre Yollama Tablodan genel bilgi verilecek alan belirlenir ve tkland zaman o kolona ait veri hakknda daha ayrntl bilgi grntlemek iin detay sayfasna link verilir.
HyperLinkColumn kolonunda grntlenen linkler, DataNavigateUrlField, DataNavigateUrlFormatString ve Text zelliklerine girilen bilgiler ile
yaplandrlr. DataNavigateUrlField linkin adresini, DataTextField link zerinde grntlenecek yazy tutar.
HyperLinkColumn kolonunun zellikleri: DataNavigateUrlField DataNavigateUrlFormatString DataTextField DataTextFormatString FooterText HeaderImageUrl HeaderText NavigateUrl Target Text
farkl etiketler grntlenmesi iin kullanlabilir. rnekte HyperLinkColumn kullanm gsterilmektedir. Site linkleri(link_url) ve balklar(link_title) veritabanndaki linkler tablosundan ekilerek, DataGrid
Modul 11:
295
zerinde gsterilir. Link_title kolonu site balklarnn grntlenmesini salar. Link_title kolunu tklanarak link_url kolonundaki adres bilgisine ynlendirilir.
private void Page_Load(Object sender, EventArgs e) { string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; + Data Source=" + Server.Mappath("./Stok.mdb"); OleDbConnection conn = new OleDbConnection(connStr); OleDbCommand cmdSelect = OleDbCommand ("Select * From linkler", conn); conn.Open(); DataGrid1.DataSource = cmdSelect.ExecuteReader(); DataGrid1.DataBind(); conn.Close(); }
Html <asp:DataGrid ID="DataGridLink" AutoGenerateColumns="False" EnableViewState="False" ShowHeader="False" CellPadding="10" Runat="Server"> <Columns> <asp:HyperLinkColumn DataNavigateUrlField="link_url" DataTextField="link_title" /> </Columns> </asp:DataGrid>
TemplateColumn
TemplateColumn,
ekrana yanstmak iin bu kolon kullanlr. Ancak TemplateColumn, kendi iinde HeaderTemplate, FooterTemplate, ItemTemplate ve EditItemTemplate olmak zere alanlara ayrlr. Kod 11.9 da TemplateColumn kullanm gsterilmektedir. TemplateColumn alannda, kitaba ait yazar ve aklama bilgileri grntlenir. Ancak bu iki kolon bilgileri HTML kodlaryla alnr.
Kod 11.9: DataGrid ierisinde TemplateColumn kullanm private void Page_Load(Object sender, EventArgs e) { string connStr= Provider=Microsoft.Jet.OLEDB.4.0; + Data Source=" + Server.Mappath("./Stok.mdb");
296
Modl 11:
OleDbConnection conn = new OleDbConnection(connStr); OleDbCommand cmdSelect = OleDbCommand("Select * From kitaplar",conn); conn.Open(); DataGrid1.DataSource = cmdSelect.ExecuteReader(); DataGrid1.DataBind(); conn.Close(); } HTML <asp:DataGrid ID="DataGrid1" AutoGenerateColumns="False" EnableViewState="False" ShowHeader="False" CellPadding="10" Runat="Server"> <Columns> <asp:BoundColumn DataField="kitap_baslik" /> <asp:TemplateColumn> <itemTemplate> <table> <tr> <td>Yazar:</td> <td><%# DataBinder.Eval( Container.DataItem, "kitap_yazar" )%></td> </tr> <tr> <td>Aklama:</td> <td><%# DataBinder.Eval(Container.DataItem, "kitap_aciklama" )%></td> </tr> </table> </itemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid>
Modul 11:
297
ButtonColumn
ButtonColumn, Button kontrollerinin grntlenmesini salar. Uygulanacak metot kolon zerinde, button eklinde grntlenir. rnein Sepete Ekle gibi bir i iin Button kullanlr ve ButtonColumn ierisinde tanmlanr. ButtonColumn alan kullanarak Select ismindeki butona tkland zaman
kontroln arka plan rengi ve yaz kalnl deitirilir. UnSelect seildiinde kontrol eski haline getirilir.
Kod 11.9: DataGrid ierisinde ButtonColumn kullanm private void Page_Load(Object sender, EventArgs e) { string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; + Data Source=" + Server.Mappath("./Stok.mdb"); OleDbConnection conn = new OleDbConnection(connStr); OleDbCommand cmdSelect = OleDbCommand("Select * From kitaplar", conn); conn.Open(); DataGrid1.DataSource = cmdSelect.ExecuteReader(); DataGrid1.DataBind(); conn.Close(); } void DataGrid1_ItemCommand(s, DataGridCommandEventArgs e) { if (e.CommandName =="select") { e.Item.BackColor = System.Drawing.Color.LightGreen;
Modl 11:
<asp:DataGrid ID="DataGrid1" OnItemCommand="DataGrid1_ItemCommand" AutoGenerateColumns="False" CellPadding="10" Runat="Server"> <Columns> <asp:BoundColumn HeaderText="Kitap Ad" DataField="kitap_baslik" /> <asp:ButtonColumn CommandName="select" Text="Select!" /> <asp:ButtonColumn CommandName="unselect" Text="UnSelect!" /> </Columns> </asp:DataGrid> Select butonuna basldnda, DataGrid kontrolnn OnItemCommand
zelliinde belirtilen DataGrid1_ItemCommand isimli metot devreye girer. ItemCommand olayn tetikleyen DataGrid1_ItemCommand isimli metot, ilgili ilemleri gerekletirir.
Unselect dmesine tklandnda ise, yine OnItemCommand zelliinde tutulan DataGrid1_ItemCommand metodu devreye girer. Ancak tklanan butonun isimlerine gre yaplacak ilem belirlenir. if (e.CommandName="select") { e.Item.BackColor = System.Drawing.Color.LightGreen; e.Item.Font.Bold = true; } else { e.Item.BackColor = System.Drawing.Color.White; e.Item.Font.Bold = False; } e.CommandName, hangi buttonun tklandn belirtir. Tklanan butona gre hangi metodun uygulanacan belirler.
ButtonColumn zellikleri:
ButtonType: LinkButton veya PushButton
Modul 11:
EditCommandColumn
EditCommandColumn, Edit, Update, Cancel gibi dzenleme komutlarnn
grntlenmesini salar. EditCommandColumn ile sadece bir dzenlenebilir. Dzenlemenin veritaban gemesi ayr ilemler gerektirir.
satr
seen DataGrid nesnesinin EditItemIndex zelliine gre deiecektir. Dzenleme ileminin seili olmad durumda bu kolonda Edit butonu gzkr. Edit seildii anda ise Update ve Cancel butonlar gzkr.
EditCommandColumn zellikleri: ButtonType CancelText EditText FooterText HeaderImageUrl HeaderText UpdateText
300
Modl 11:
vardr. stee gre tm kolonlarda veya sadece belirli kolonlarda sralama yaplabilir.
DataGrid iindeki tm kolonlara sralama yapma izni vermek iin, varsaylan
olarak False olan AllowSorting zellii True yaplr. Ve SortCommand olayn tetikleyecek bir metot yazlr.
Kod 11.10: DataGrid ierisinde Sralama private void Page_Load(Object sender,EventArgs e) { If (! IsPostBack) { BindDataGrid( "kitap_baslik" ); } } void BindDataGrid(string strSortField) { String connStr = "Provider=Microsoft.Jet.OLEDB.4.0; + Data Source=" + Server.Mappath("./Stok.mdb"); OleDbConnection conn = new OleDbConnection(connStr); OleDbCommand cmdSelect = OleDbCommand("Select * From Kitaplar Order By " & strSortField, conn ); conPubs.Open("Select * From kitaplar", conn) conn.Open();
Modul 11:
301
DataGrid1.DataSource = cmdSelect.ExecuteReader(); DataGrid1.DataBind(); conn.Close(); } void DataGrid1_SortCommand (Object s, DataGridSortCommandEventArgs e) { BindDataGrid( e.SortExpression ); } Html <asp:DataGrid ID="DataGrid1" AllowSorting="True" OnSortCommand="DataGrid1_SortCommand" CellPadding="10" Runat="Server" /> BoundColumn kolonunun SortExpression zelliine ilgili kolon isimleri girilerek sralama yaplacak kolonlar belirtilebilir.
Sayfalama Sayfalarca uzunluktaki kaytlar bir seferde gstermek yerine sayfalara ayrmak daha kullanl olur. DataGrid kontrolnde sayfalama yapabilmek iin kontroln AllowPaging zellii True yaplr. Varsaylan deer False deeridir. PageIndexChanged olayn tetikleyecek bir metodun yazlmas gerekir.
Kod 11.11: DataGrid ierisinde Sayfalama private void Page_Load(Object sender, EventArgs e) { if (!Page.IsPostBack) { BindDataGrid(); } } void BindDataGrid() { string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='"+Server.MapPath("./Stok.mdb")+"'"; OleDbConnection conn = new OleDbConnection(connStr); OleDbDataAdapter da = new OleDbDataAdapter("Select * From Kitaplar Order By Kitap_baslik", conn); DataSet ds = new DataSet(); da.Fill(ds); } private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { DataGrid1.CurrentPageIndex =e.NewPageIndex; } html <asp:DataGrid ID="DataGrid1"
Modl 11:
sayfalara linkler verilir. PageSize zellii, bir sayfada ka kayt grntlenecei bilgisini tutar. Sayfalamaya ait stiller, tasarm penceresinde DataGrid kontrolne sa tklanp Property Builder ile seilebilir. DataGrid Kontrol zerinde Kayt Dzenleme lemleri
DataGrid kontrolnn EditCommand, UpdateCommand ve CancelCommand
olaylar kullanlarak DataGrid iinde grntlenen veriler zerinde istenilen deiiklikler yaplabilir. Ayn ekilde kayt silme ilemi de gerekletirilir. Dzenleme yaplacak kayt seildiinde EditCommand olay devreye girer.
EditItemIndex zellii ile dzenleme yaplacak kaydn indeksi alnr ve o
satrdaki tm veriler TextBox kontroll biiminde grnr. zerinde dzenleme yaplmasn istenmeyen kolona, BoundColumn alannn ReadOnly zelliine True deeri verilmelidir.
Update dmesine tklanlnda ise UpdateCommand olay devreye girer. lgili
kaydn Primary Key deeri alnr ve Primary Key ile gncelleme kodu altrlr.
PlaceHolder Kullanm
Programn alma zaman srasnda, kullancdan gelecek istee gre yeni kontroller eklenmek isteniyorsa PlaceHolder kontrol kullanlr. PlaceHolder kontrolnn amac, dinamik olarak eklenen bu kontrollerin bir arada tutulmasdr. Dinamik olarak oluturulan kontroller istenildii gibi dizayn edilebilir.
<asp:PlaceHolder id="PlaceHolder1" runat="server"> </asp:PlaceHolder>
alma zamannda forma yeni bir kontrol eklemek iin Controls.Add() metodu kullanlr.
Kod 11.12: PlaceHolder Eklemek private void Page_Load(Object sender, EventArgs e) { int i; Button btnNewButton;
Modul 11:
303
for (i = 1;i<=10;i++) { PlaceHolder1.Controls.Add( New LiteralControl("<p>Alan " & i & ": ")); PlaceHolder1.Controls.Add(New TextBox); } btnNewButton = New Button(); btnNewButton.Text = "Tklayn!"; PlaceHolder1.Controls.Add(btnNewButton); }
ADO.NET ile veriye erimek iin Connected ve Disconnected veri eriim yntemi kullanlr. Bu yntemler ile ASP.NET sayfalarnda veri alverii yaplr.
304
Modl 11:
ASP.NET uygulamalar web sunucular zerinde ilem yapaca iin performans ok nemlidir. Dolaysyla, alma modelinin yerinde seilmesi gereklidir. rnein veriler sadece grntlenmek amacyla alnacaksa Connected balant modeli kurulmal ve kaynaklar mmkn olan en az seviyede tketilmelidir. Ancak veri zerinde gncelleme ilemleri sz konusuysa disconnected balant modeli uygulanmaldr.
Modul 11:
305
Namespace
ADO.NET snflarn, ASP.NET uygulamas iinde kullanabilmek iin System.Data isimalan using yaplmaldr. Ayrca Access veri tabanna balant iin System.Data.OleDb isimalan import edilmelidir. Code behind sayfasnda using ilemi, Windows uygulamalarnda kullanlan biimdedir.
using System.Data; using System.Data.OleDb;
Inline kod yazmnda <%@ %> ifadeleri arasnda isim alanlar using yaplr.
<%@ using Namespace=System.Data %> <%@ using Namespace=System.Data.OleDb %>
306
Modl 11:
Modl zeti
Veri balant kontrolleri nelerdir? Aklayn Repeater niin kullanlr? Aklayn DataList niin kullanlr? Aklayn DataGrid niin kullanlr? Aklayn DataGrid ile sayfalama nasl yaplr?
Modul 11:
307
Bu uygulamada, e-ticaret uygulamas ile Connected ve Disconnected veritaban ilemleri gerekletirilecektir. Bu uygulamada Uye kayt ve Uye giri ilemlerini gerekletirebileceksiniz. Ayrca kategoriye gre tm kitaplar listeleyecek ve kitap satn alma ilemini gerekletirebileceksiniz. Bu lab tamamlandktan sonra: Connect ve Disconnect veritaban ilemlerini reneceksiniz. DataSet ierisindeki veriyi Repeater, kontrollerinei balayabileceksiniz. DataGrid ve DataList
private void btnKaydet_Click(System.Object sender, System.EventArgs e) { string connStr= "Provider=Microsoft.Jet.OleDB.4.0;+ Data Source=" & Server.MapPath("KitapDb.mdb");
308
Modl 11:
OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connStr OleDbCommand comm = new OleDbCommand(); comm.Connection = conn; comm.CommandType = CommandType.Text; comm.CommandText = "INSERT INTO Musteri(Ad,Soyad,Email,Sifre) values(@ad,@soyad,@email,@sifre)" ; comm.Parameters.Add("@ad", txtAd.Text); comm.Parameters.Add("@soyad", txtSoyad.Text); comm.Parameters.Add("@email", txtEmail.Text); comm.Parameters.Add("@sifre", txtSifre.Text); int sonuc; try { conn.Open(); sonuc = comm.ExecuteNonQuery(); } catch (Exception ex) { Response.Write(ex.Message); } finally { conn.Close(); } if (sonuc == 1) { Response.Redirect("Kayit.aspx"); } }
Modul 11:
309 comm.Parameters.Add("@email", txtEmail.Text); comm.Parameters.Add("@sifre", txtSifre.Text); bool sonuc; OleDbDataReader dr = OleDbDataReader(); try { conn.Open(); dr = comm.ExecuteReader(); if (dr.HasRows == true) { sonuc = true; if (dr.Read = true) { Session["user"] = dr.Item("Email"); Session["ad"] = dr.Item("Ad"); Session["soyad"] = dr.Item("Soyad"); Session["musteriId"] = Item("MusteriID"); } } else { sonuc = false; } dr.Close(); } catch (Exception ex) { Response.Write(ex.Message); } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } } if (sonuc == true) { Response.Redirect("Default.aspx"); } Else { lblMesaj.Text = "Hatali kullanici adi veya sifre"; } }
310 Label lblYazarAdi Label lblFiyat Label lblAciklama Label lblMesaj Image imgResim TetxBox txtAdet Button btnSatinAl Text
Modl 11:
Satn Al
Modul 11:
311
</TR> <TR> <TD width="150" vAlign="top"><uc1:kategori id="Kategori1" runat="server"></uc1:kategori></TD> <TD vAlign="top" width="400"> <P><BR> </P> <P> <TABLE id="Table2" borderColor="#000033" cellSpacing="0" cellPadding="0" width="300" align="center" border="0"> <TR> <TD width="100" rowSpan="5"> <P align="center"><asp:image id="imgResim" runat="server"></asp:image></P> </TD> <TD> <P align="center"><asp:label id="lblKitapAdi" runat="server"></asp:label></P> </TD> </TR> <TR> <TD> <P align="center"><asp:label id="lblYazarAdi" runat="server"></asp:label></P> </TD> </TR> <TR> <TD> <P align="center"><asp:label id="lblFiyat" runat="server"></asp:label></P> </TD> </TR> <TR> <TD> <P align="center"><asp:label id="lblAciklama" runat="server"></asp:label></P> </TD> </TR> <TR> <TD> <P align="center">Adet: <asp:textbox id="txtAdet" runat="server" Width="68px"></asp:textbox> <asp:button id="btnSatinAl" runat="server" Text="Satn Al"></asp:button></P> </TD> </TR> <TR> <TD colSpan="2"> <P align="center"> <asp:Label id="lblMesaj" runat="server"></asp:Label></P> </TD> </TR> </TABLE> </P> </TD> <TD width="150" bgColor="#0099ff" vAlign="top"> <uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR>
312
Modl 11:
<TD bgColor="#99ccff" colSpan="3"><uc1:alt id="Alt1" runat="server"></uc1:alt></TD> </TR> </TABLE> </form> </body> </HTML>
string kID; private void Page_Load(System.Object sender, System.EventArgs e) { If (Session["user"] == "") { Response.Redirect("Giris.aspx"); } kID = Request.Params("kID"); 'Response.Write(kID) string connStr= "Provider=Microsoft.Jet.OleDB.4.0;+ Data Source=" + Server.MapPath("KitapDb.mdb"); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connStr; OleDbCommand comm =new OleDbCommand(); comm.CommandType = CommandType.Text; comm.CommandText = "Select * from Kitap Where KitapID =@kitapID"; comm.Connection = conn; comm.Parameters.Add("@kitapID",Convert.ToInt32(kID)); OleDbDataReader dr = OleDbDataReader(); try { conn.Open(); dr = comm.ExecuteReader(); if (dr.Read = True) { lblKitapAdi.Text = dr.Item("KitapAdi"); lblYazarAdi.Text = dr.Item("Yazar"); lblFiyat.Text = dr.Item("Ucret"); lblAciklama.Text = dr.Item("Aciklama"); imgResim.ImageUrl = "resimler/" + dr.Item("Image"); } dr.Close(); } catch (Exception ex) { Response.Write(ex.Message); } finally { If (conn.State == ConnectionState.Open) {
Modul 11:
313 conn.Close(); } } }
private void btnSatinAl_Click(System.Object sender, System.EventArgs e) { if (txtAdet.Text == "") { lblMesaj.Text = "Adet Giriniz"; return; } string connStr = Provider=Microsoft.Jet.OleDB.4.0;+ Data Source=" + Server.MapPath("KitapDb.mdb"); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connStr; OleDbCommand comm = new OleDbCommand(); comm.Connection = conn; comm.CommandType = CommandType.Text; comm.CommandText = "INSERT INTO Siparis(MusteriID,SiparisTarihi,KitapID,Adet) values(@MusteriID,@SiparisTarihi,@KitapID,@Adet)"; comm.Parameters.Add("@MusteriID", Session["musteriId"]); comm.Parameters.Add("@SiparisTarihi", DateTime.Now.ToShortDateString); comm.Parameters.Add("@KitapID", CInt(kID)); comm.Parameters.Add("@Adet", txtAdet.Text); int sonuc try { conn.Open(); sonuc = comm.ExecuteNonQuery(); } catch (Exception ex) { Response.Write(ex.Message); } finally { conn.Close(); } if (sonuc = 1) { Response.Redirect("Satis.aspx"); } }
314
Modl 11:
Modul 11:
315
<uc1:Ust id="Ust1" runat="server"></uc1:Ust></TD> </TR> <TR> <TD width="150" vAlign="top"> <uc1:kategori id="Kategori1" runat="server"></uc1:kategori></TD> <TD width="400" vAlign="top"> <P> <TABLE id="Table2" cellSpacing="0" cellPadding="0" width="350" align="center" border="0"> <TR> <TD style="HEIGHT: 55px"> <P align="center">En ok Satanlar</P> </TD> </TR> <TR> <TD> <DIV align="center"> <asp:DataGrid id="dgEncokSatanlar" runat="server" AutoGenerateColumns="False" Width="253px" BorderWidth="1px" BorderColor="#003333"> <HeaderStyle FontBold="True"></HeaderStyle> <Columns> <asp:HyperLinkColumn DataNavigateUrlField="KitapID" DataNavigateUrlFormatString="Kitapdetay.aspx?KID={0}" DataTextField="KitapAdi" HeaderText="Kitap Adi"> <HeaderStyle Width="275px"></HeaderStyle> </asp:HyperLinkColumn> <asp:BoundColumn DataField="Ucret" HeaderText="Fiyati"> <HeaderStyle Width="75px"></HeaderStyle> </asp:BoundColumn> </Columns> </asp:DataGrid></DIV> </TD> </TR> <TR> <TD></TD> </TR> </TABLE> </P> </TD> <TD width="150" bgColor="#0099ff" vAlign="top"> <uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR> <TD colSpan="3" bgColor="#99ccff"> <uc1:Alt id="Alt1" runat="server"></uc1:Alt></TD> </TR> </TABLE> </form> </body> </HTML>
316
Modl 11:
DataSet ierisine DataTable Eklenmesi 12. Server Explorer penceresinden DataConnections seeneini sein 13. Veritaban tablo ve sorgularna erimek iin oluturduumuz, balant ierisinden Views seeneini sein. 14. Views ierisindeki EnCokSatanlar sorgusunu dsBook nesnesinin ierisine srkleyin. Default web formunun Code Behind kodlar aadaki gibi olacaktr.
using System.Data.OleDb; private void Page_Load(System.Object sender, System.EventArgs e) { if(!Page.IsPostBack) { string connStr = "Provider=Microsoft.Jet.OleDB.4.0;Data Source=" + Server.MapPath("KitapDb.mdb"); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connStr; OleDbCommand comm = new OleDbCommand(); comm.CommandType = CommandType.Text; comm.CommandText = "SELECT Kitap.KitapAdi, "+ "Kitap.Ucret, Kitap.KitapID FROM Kitap INNER JOIN Siparis "+ "ON Kitap.KitapID = Siparis.KitapID GROUP BY "+ "Kitap.KitapAdi, Kitap.Ucret, Kitap.KitapID ORDER BY"+ "Count(Siparis.Adet) DESC"; comm.Connection = conn; OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = comm; DataSet ds = new DataSet(); try { conn.Open(); da.Fill(ds, "EnCokSatanlar"); dgEncokSatanlar.DataSource = ds.Tables["EnCokSatanlar"]; dgEncokSatanlar.DataBind(); } catch(Exception ex) { Response.Write(ex.Message); } finally { if(conn.State == ConnectionState.Open) { conn.Close();
Modul 11:
317 } } } }
318
Modl 11:
</HEAD> <body bgColor="#f0fff0"> <form id="Form1" method="post" runat="server"> <TABLE id="Table1" cellSpacing="0" cellPadding="0" width="700" align="center" border="0"> <TR> <TD bgColor="#99ccff" colSpan="3"><uc1:ust id="Ust1" runat="server"></uc1:ust></TD> </TR> <TR> <TD width="150" vAlign="top"><uc1:kategori id="Kategori1" runat="server"></uc1:kategori></TD> <TD vAlign="top" align="center" width="400"> <asp:datalist id="dlKitap" runat="server" RepeatColumns="2"> <ItemTemplate> <table width="180"> <tr align="center"> <td> <a href='KitapDetay.aspx?kID=<%# databinder.eval(Container.dataitem,"KitapID") %>'><img border=0 src='resimler/<%# databinder.eval(Container.dataitem,"Image") %>'> </a> </td> </tr> <tr align="center"> <td> <%# databinder.eval(Container.dataitem,"KitapAdi") %> </td> </tr> <tr align="center"> <td> <%# databinder.eval(Container.dataitem,"Yazar") %> </td> </tr> <tr align="center"> <td> <%# databinder.eval(Container.dataitem,"Ucret") %> </td> </tr> </table> </ItemTemplate> </asp:datalist> </TD> <TD width="150" bgColor="#0099ff" vAlign="top"> <uc1:yan id="Yan1" runat="server"></uc1:yan></TD> </TR> <TR> <TD bgColor="#99ccff" colSpan="3"><uc1:alt id="Alt1" runat="server"></uc1:alt></TD> </TR> </TABLE> </form> </body> </HTML>
Modul 11:
319
DataSet ierisine DataTable Eklenmesi 1. Server Explorer penceresinden DataConnections seeneini sein 2. Veritaban tablo ve sorgularna erimek iin oluturduumuz, balant ierisinden Tables seeneini sein. 3. Tables ierisindeki Kitap tablosunu dsBook nesnesinin ierisine srkleyin. Kitap web formunun Code Behind kodlar aadaki gibi olacaktr.
using System.Data.OleDb private void Page_Load(System.Object sender, System.EventArgs e) { string kategoriID = Request.Params["KategoriID"]; Session["KategoriID"] = kategoriID; //Response.Write(kategoriID) string connStr = "Provider=Microsoft.Jet.OleDB.4.0;Data Source=" + Server.MapPath("KitapDb.mdb"); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connStr; OleDbCommand comm = new OleDbCommand(); comm.CommandType = CommandType.Text; comm.CommandText = "Select * from Kitap Where" + "KategoriID =@kID"; comm.Connection = conn; comm.Parameters.Add("@kID", Convert.ToInt32(kategoriID)); OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = comm; DataSet ds = new DataSet(); try { conn.Open(); da.Fill(ds, "Kitap"); dlKitap.DataSource = ds.Kitap; dlKitap.DataBind(); } catch(Exception ex) { Response.Write(ex.Message); } finally { if(conn.State == ConnectionState.Open) { conn.Close(); } } }
320
Modl 11:
Modul 12:
Bu modlde ASP.NET Web uygulamalarnda kullanlan durum ynetimi zerinde durulacaktr. Durum ynetim alt yaps kullanlarak uygulama seviyesinde veri paylam gerekletirilebilir.
322
Modl 12:
Bu modl tamamlandktan sonra: ASP.NET Web uygulamalarnda kullanlan durum ynetim alt yapsn tanmlayabilecek,
Application ve Session ile web uygulamalarn ynetebilecek, Cookies ve Cookieless Session kavramlarn aklayabileceksiniz.
Durum Ynetimi
Web formlar stateless alr. Yani kullanclardan gelen isteklerin nereden geldii anlalmaz. Web sunucusuna yaplan her istekte web formlar yeniden oluturulur. ASP.NET, sunucuda uygulamaya ait zel bilgileri tutan ve sayfalar aras veri aktarm gerekletiren bir altyap salar.
Modul 12:
323
Sayfalar aras state ynetimi sayesinde sunucuda tutulan bilgiler yeniden kullanlabilir. Bylece veriler sunucuya gnderilip geri geldiinde kullancnn yeniden veri girii yapmasna gerek kalmaz. rnein bir Login sayfasna Bilge kullanc ismiyle giri yapldktan sonra, dier sayfalarda Merhaba Bilge mesajn verilebilir. Bu mesaj gstermek iin Bilge kullanc ad State ynetimi ile bir deikende tutulmaldr. Sunucu tarafl durum ynetimi birden fazla ynetim seenei sunar. Application state Session state Kullanc tarafl durum ynetimi ise genellikle cookie nesneleri ile salanr.
324
Modl 12:
Konu 1: Session
Kullanc bilgisayar ve web sunucusu arasnda kurulan balantya session denir. Bir session, birden fazla web sayfasn kapsayabilir. Kullancnn web uygulamasna girii ile k arasnda tutulan deikenlerdir ve bu deikenler kullancya zeldir. Session deikenlerine, uygulama sresince eriilip gerekli bilgiler hzl bir ekilde kullanlabilir. Sayfalar aras bilgi aktarmak iin pratik bir yntemdir. Veritabanna balant kurularak alnan ve uygulama iinde srekli kullanlan bilgiler session deikenleri iinde tutulur. ASP.NET session deikenlerini ynetirken HttpSessionState snfn kullanr.
Modul 12:
325
Kullanc web sunucusuna balanp bir ASP.NET sayfas grntlemeyi talep ettii zaman, sunucu, kullancya bir SessionID atar ve bu deeri kullancya gnderir. Kullanc uygulamadan kana kadar bu SessionID deikeni sunucuda tutulur.
Kod 12.1: SessionID private void Page_Load(Object sender,EventArgs e) { Response.Write(Session.SessionID); } Kod 12.2: Session Nesnesini kullanmak Login.aspx sayfas private void BtnGiris_Click(Object sender, EventArgs e) { Session[ad] = TxtAd.Text; Response.Redirect(Sayfam.aspx); } Sayfam.aspx sayfas private void Page_Load(Object sender,EventArgs e) { lblAd.Text = Session[ad] + Ho Geldiniz; }
ASP.NET uygulamalarnn, Session deikenlerine ait eitli zellikleri, web.config dosyas iinde tanmlanr.
Modl 12:
Mode: session deerlerinin nerede tutulacan belirler. InProc, deerler IIS iinde saklanr. StateServer deerler sunucuda arka planda alan ASP.NET state servisinde saklanr. SqlServer, deerler SQL Server iindeki tablolarda saklar. Cookieless: Varsaylan olarak False deerini alr. Session deikenlerinin kullanc bilgisayarnda cookie iinde tutulmasn belirler. True deeri verildiinde ise SessionID deeri URLye eklenerek kullancya geri yollanr. Timeout: Session deikenlerinin yaam sresini belirler. Varsaylan olarak 20 dakikadr. Baz tarayclarn cookie destei olmad dnldnde, kullancya ait bilgileri session deikenlerinde tutmak daha geerli olacaktr.
Kod 12.3: Session_Start void Session_Start(Object Sender,EventArgs e) { Session[ArkaPlan] = blue; Session[Yazi] = gray; }
Konu 2: Cookie
Kullanc tarafl durum ynetimi iin cookie deikenleri kullanlr. Internet sitelerinin ou istemci bilgisayarda cookie denilen kk metin dosyalar
Modul 12:
327
oluturur. Microsoft XP, Windows 2000 sistemlerinde cookie nesneleri C:\Documents And Settings\Kullanc Ad\Cookies klasrnde saklanr. Bir siteye ilk defa giri yapldnda cookie oluur. Daha sonra tekrar giri yapldnda cookie iindeki deerler okunur ve bu deerlere gre gerekli ilemler yaplr. rnein yelik sistemi ieren web sitelerindeki Beni Hatrla seenei bu mantkla alr. ASP.NET Cookie deikenlerini ynetirken HttpCookie snfn kullanr.
Cookie deikenleri iin yazma ve okuma ilemleri yaplrken Response ve Request nesneleri kullanlr.
rnek: Kullanc ad girilip Cookie yap butonuna tklannca kullanc tarafnda bir cookie oluturuluyor. Cookie oku butonuna tklandnda ise oluturulan cookie nesnesinden veri alnyor.
Kod 12.4: Cookie oluturup okumak private void btnYap_Click(System.Object sender, System.EventArgs e) { // Cookie oluturmak iin verilen direktif. HttpCookie mycookie = new HttpCookie("sitem"); // Formdan Gelen Bilgileri Anahtarlara Yazar. mycookie["ad"] = txtad.Text; // Cookie'nin Biti Sresi. mycookie.Expires = DateTime.Now.AddDays(30); // Cookie'yi Gnder. Response.Cookies.Add(mycookie); } private void btnOku_Click(System.Object sender, System.EventArgs e) { ' Cookie'yi oluturur. HttpCookie mycookie; ' Cookie'yi kullanc tarafndan alr. myCookie = Request.Cookies("sitem"); ' Cookie'den gelen deerlerle formu doldurur. txtad2.Text = mycookie("ad");
328 }
Modl 12:
Cookie Trleri
ki tr Cookie vardr: Temporary (Geici)
Temporary
tutulup, tarayc kapatldnda tm temporary cookie nesneleri hafzadan atlrlar. Persistent (Kalc)
Modul 12:
329
Persistent
olarak hafzadan silinecei zaman tutan bir deikene sahiptirler. Tarayc, kalc bir cookie isteinde bulunan bir sayfa atnda, cookie sabit diske yazlr. Bu tr cookie nesneleri kullanc bilgisayarnda istenilen srede tutulabilir.
Cookie nesnelerinin diskte tutulacann garantisi yoktur. Kullanc sabit diskinden bu dosyalar silmi olabilir.
330
Modl 12:
Konu 3: Application
Application nesnesinin tanmlanmas session nesnesine benzer. Ancak kullanm alan ok farkldr. Web uygulamasna giri yapan ilk kullancdan son kullancya kadar devam eder. Tm kullanclara ait olan bir deikendir. rnein sitenin ka kii tarafndan ziyaret edildii, Application nesnesinde bir deiken tanmlanarak belirlenebilir. Application deikenini kullanrken lock yaparak baka kullanclarn kullanmas engellenir ve deiken ile iiniz sonra unlock yaplmaldr.
Modul 12:
331
kendisine ait deikenleri tutar. ASP.NET Application deikeni kullanrken HttpApplicationState snfn kullanr.
Kod 12.4: Application Deikeni Void Session_Start (Object sender, EventArgs e) If (Application("ziyaret") == null) { Application("ziyaret") = 0; } Application.Lock(); Application("Ziyaret") = Application("Ziyaret") + 1; Application.UnLock(); TextBox1.Text = "Ziyaret Says: " + Application("ziyaret").ToString(); }
Bu rnekte her bir yeni session aldnda, yani siteye her istek yapldnda ziyareti says birer artrlmaktadr. Application deikeni doldurulduktan sonra uygulama iinden armak iin Application(degisken_ismi) ifadesi kullanlr.
332
Modl 12:
baladnda ve ilk istek geldiinde alr. Application deikeni Web uygulamas kaldrldnda sonlanr. Kod 12.5de Application_Start olaynn kullanmna rnek verilmitir.
Kod 12.5: Application_Start void Application_Start(Object sender,EventArgs e) { Application(ziyaret) = 0; }
Konu 4: Global.asax
Sadece sunucu zerindeki uygulama zerinde alabilen bir dosyadr. Global.asax, ASP.NET web uygulamasnn alt srada, eitli olaylar ele alacak bir dosyadr. Bu dosyann birok zellii vardr. Her bir web uygulamasna ait bir global.asax dosyas vardr. Global.asax dosyas, web uygulamasna ait sanal dosya iinde saklanr. Uygulamaya ait application ve session deikenlerine ilk deer vermek iin kullanlan balang ve biti olaylarn tutar. Bu dosyann tanmlanmas istee baldr. Eer bu dosya projede bulunmuyorsa, ASP.NET hibir application ve session olay prosedr tanmlanmam varsayar.
Modul 12:
333
Sayfaya bir istekte bulunulduunda stekte bulunan sayfa istemciye yollandnda Koullu application olaylar gerekletiinde
334
Modl 12:
Modl zeti
39. Session niin kullanlr? 40. Cookie niin kullanlr? 41. Cookie trleri nelerdir? 42. Application niin kullanlr?
Modul 12:
335
Bu uygulamada session nesnesi ile KitapDetay sayfasna eriim engelenecektir. KitapDetay sayfasna sadece sisteme giri yapan kullanclar eriebilecektir. Bu lab tamamlandktan sonra: Session kullanmn reneceksiniz.
Session kullanmak
AspEticaret isimli projeyi an.
336
Modl 12:
string connStr = Provider=Microsoft.Jet.OleDB.4.0;Data Source=" + Server.MapPath("KitapDb.mdb"); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connStr; OleDbCommand comm = new OleDbCommand(); comm.CommandType = CommandType.Text; comm.CommandText = "Select * from Musteri + Where Email=@email and Sifre=@sifre"; comm.Connection = conn; comm.Parameters.Add("@email", txtEmail.Text); comm.Parameters.Add("@sifre", txtSifre.Text); Boolean sonuc; OleDbDataReader dr; try { conn.Open(); dr = comm.ExecuteReader(); if (dr.HasRows == True) { sonuc = True; if (dr.Read == True ) { Session["user"] = dr.Item("Email"); Session["ad"] = dr.Item("Ad"); Session["soyad"] = dr.Item("Soyad"); Session["musteriId"] = dr.Item("MusteriID"); } } else { sonuc = False; } dr.Close(); } catch (Exception ex) { Response.Write(ex.Message); } finally { If (conn.State == ConnectionState.Open) { conn.Close(); } } if (sonuc == True ) { Response.Redirect("Default.aspx") } else { lblMesaj.Text = "Hatali kullanici adi veya sifre"; } }
Modul 12:
337
string kID private void Page_Load(System.Object sender, System.EventArgs e) { if (Session["user"] == "" ) { Response.Redirect("Giris.aspx"); } kID = Request.Params("kID"); 'Response.Write(kID) string connStr = "Provider=Microsoft.Jet.OleDB.4.0;Data Source=" + "Server.MapPath("KitapDb.mdb"); OleDbConnection conn ; conn.ConnectionString = connStr; OleDbCommand comm = new OleDbCommand(); comm.CommandType = CommandType.Text; comm.CommandText = "Select * from Kitap Where KitapID =@kitapID" ; comm.Connection = conn ; comm.Parameters.Add("@kitapID",Convert.ToInt32(kID)); OleDbDataReader dr = new OleDbDataReader(); Try { conn.Open(); dr = comm.ExecuteReader() If (dr.Read == true) { lblKitapAdi.Text = dr.Item("KitapAdi"); lblYazarAdi.Text = dr.Item("Yazar"); lblFiyat.Text = dr.Item("Ucret"); lblAciklama.Text = dr.Item("Aciklama"); imgResim.ImageUrl = "resimler/" + dr.Item("Image"); } dr.Close(); Catch (Exception ex) { Response.Write(ex.Message); } finally
Modl 12: