BİLGİSAYARLI KONTROL SİSTEMLERİ. İçindekiler

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "BİLGİSAYARLI KONTROL SİSTEMLERİ. İçindekiler"

Transkript

1 BİLGİSAYARLI KONTROL SİSTEMLERİ İçindekiler 1. GÖRSEL PROGRAMLAMA Programlamaya GiriĢ Programlama Dilleri Programlama Dillerinin Tarihçesi Programın Derlenmesi Microsoft.NET Platformu Yazılım GeliĢtirme Dünyası Sorunun Temeli Microsoft Visual Studio Arayüzü Solution Explorer Paneli Toolbox(Araç Kutusu) Paneli Properties (Özellikler) Paneli Visual Basic.NET ile Windows Tabanlı Programlama Ġlk Uygulama (Merhaba!. ġu anda tarih ve saat ) Özellikler, Metotlar ve Olaylar Özellikler Metotlar Visual Basic.NET'e Kontrollerin Eklenmesi Form Button TextBox Label ComboBox ListBox Timer Yazı iģlemleri: KULLANICIDAN VERĠ ALMAK VE KULLANICIYA BĠLGĠ GÖSTERMEK (Inputbox() ve Messagebox()) Inputbox: MessageBox DeğiĢken Ve Sabitler DeğiĢkenler: Sabitler Veri Tipleri Structure (Kullanıcı tanımlı) veri tipi Diziler Debug Operatörler

2 Aritmetiksel Operatörler KarĢılaĢtırma Operatörleri String Operatörleri Karar Yapıları ve Döngüler If If Then Else ElseIf KoĢul Operatörleri (And, Or, Not, AndAlso, OrElse) And Or XOr Not AndAlso OrElse Select Case To Kullanımı Is Kullanımı Hangi Karar Cümlesi Nerede Kullanılır? Döngüler For Next For Döngülerinin Ġç Ġçe Kullanımı While Do - Loop Do While Do Until Sonsuz Döngüler Hangi Döngü Nerede Kullanılır? Hata Yakalama Try Catch Finally Fonksiyonlar ve Yordamlar Sub Parametre Kullanımı ParamArray Function ByVal ve ByRef Ġncelemesi Windows Programlama Form Nesnesi Label TextBox Button CheckBox RadioButton

3 GroupBox ListBox ComboBox NumericUpDown TabControl DateTimePicker MonthCalendar Timer ProgressBar ErrorProvider PictureBox ImageList ListView Dinamik Kontroller UYGULAMA: Hesap Makinesi Menü Tasarımı ve MDI Formlar Menü Tasarımı MenuStrip ContextMenu ToolStrip ToolTip StatusStrip NotifyIcon RichTextBox Notepad Uygulaması MDI Formlar Fare Olayları BÖLÜM: Veri Yapıları Access' e GiriĢ Access Ortamı Tablo Tabloya yeni alan ekleme veya tabloda yeni alan oluģturma Veri türleri SQL (Structured Query Language) SELECT Sorgusu Hesaplama Fonksiyonları INSERT UPDATE DELETE Aritmetiksel ĠĢlemler BÖLÜM: VERĠTABANI ĠLE ÇALIġMAK Tablodan özel veri çekmek için sorgu çalıģtırmak

4 3.2. Bindingsource BindingSource metotları: BindingSource 'ta Navigasyon(Gezinme iģlemleri) BindingSource "Position" yöntemi BindingSource'ta index kullanımı: BindingSource "RemoveCurrent" Yöntemi: BindingSource "RemoveFilter" Yöntemi: BindingSource "Sort" ve "RemoveSort" Yöntemleri: Tabloya yeni kayıt ekleme silme düzenleme BÖLÜM: VISUAL BASIC.NET ĠLE RAPORLAMA BÖLÜM: SERĠ ĠLETĠġĠM ASENKRON SERĠ ĠLETĠġĠM ÖZELLĠKLERĠ SFR SĠZ SERĠ ĠLETĠġĠM RS232 SEVĠYE ÇEVĠRĠCĠSĠ DONANIM ÖZELLĠKLERĠ SERĠ HABERLEġME PORTLARI RS232 ASENKRON SERĠ ĠLETĠġĠM VE DALGA FORMLARI USART (UNĠVERSAL SYNCRONOUS / ASYNCRONOUS RECEĠVER / TRANSMĠTTER) Modülü Ve Özellikleri ÖZEL YAZMAÇLAR VE BĠTLERĠ TXSTA YAZMACI RCSTA YAZMACI USART iletiģim hızı (BRG: Baud Rate Generator) USART ın Kullanımı USART ile asenkron veri göndermek UYGULAMA 1- USART Kullanılarak PIC den PC ye doğru tek yönlü Asenkron Seri veri transferi USART ile Asenkron veri almak UYGULAMA 2- USART Kullanılarak PC den PIC e doğru tek yönlü Asenkron Seri veri transferi UYGULAMA 3: USART Kullanılarak iki yönlü Asenkron Seri iletiģim UYGULAMA 4: PIC kartında LM35 ısı sensörü ile ölçülen sıcaklık bilgisini USART Kullanılarak PC ye aktaran Asenkron Seri iletiģim UYGULAMA 5: PIC PC Arası HaberleĢme Programı

5 1. GÖRSEL PROGRAMLAMA 1.1. Programlamaya Giriş Program Nedir? : Program, bilgisayarın belli bir iģi yapması için tasarlanan komutların tümüdür. Kullanım amaçları ve yerlerine göre birçok değiģik program türü vardır: Sistem programları: Her program, bir iģletim sistemi üzerinde çalıģır. ĠĢletim sistemi, diğer programların çalıģması için gerekli olan kaynakları ve ortamı sağlar. Sürücüler (Driver): ĠĢletim sistemi ile donanım aygıtları arasında iletiģim sağlayan programlardır. Klavye ile yazılan yazıların algılanması için, klavyenin sürücü programı kullanılır. Uygulamalar: ĠĢletim sistemi üzerinde çalıģan, kullanıcıların ihtiyaç duyduğu iģlevleri sağlayan programlardır. Bir Internet sitesini gezmek istediğimizde, Internet Explorer tarayıcısı kullanılabilir. Bu uygulama, iģletim sisteminden sitenin istenen sayfasındaki yazı ve resimleri almasını ister. ĠĢletim sistemi, ağ kartıyla (Ethernet) sürücü programı sayesinde Internet sitesinin sunucusuna isteği gönderir. Programların Çalışma Modeli Programların kullanılmasındaki amaç, girilen bilgilerin iģlenip sonuçların istenen Ģekilde üretilmesidir. Veri girişi: Program, kullanıcıların veri girmesi ile baģlar. Girilen veriler daha sonra iģlenmek üzere hafızada saklanır. İşlem: Veriler, programın yazılma Ģekline göre bir dizi iģlemden geçirilir. Sonuç: ĠĢlenen veriler kullanıcıya aktarılır. Programlar, belli kurallar çerçevesinde yazılır. Bu yazım kuralları sayesinde bilgisayar, programın iģleyiģini anlar ve gerekli sonuçları çıkartır. Yazılan programlar, belirtilen yazım kuralları kontrol edilerek derlenir. Bu derleme iģlemi sonunda, yazılan kaynak kodlar bilgisayarın anlayacağı tek dile çevrilir. Makine dili denilen bu dil, sadece 1 ve 0 sayılarından oluģur. Programcı Kimdir? Programcı, belirli iģlevlere sahip programlar geliģtirebilen bir uzmandır. Bir programcının, üzerinde çalıģtığı platformu, kullandığı teknolojileri iyi tanıması ve bilgisayarın anlayacağı mantıksal dilde düģünebilmesi gerekir. Programcıların çoğu genellikle aynı iģi gerçekleģtirse de, üstlendikleri görevlere göre programcılar üç gruba ayrılabilir: Mimar. Programların yazılması için gerekli teknolojileri belirleyen, gerekli durumlarda programın daha kolay yönetilmesi için küçük parçalara ayıran programcıdır. Geliştirici. Programı yazan kiģidir. Test mühendisi. Programın geliģtirilmesi aģamasında, hataların kaynaklarını bulan ve geliģtiricilere raporlayan programcıdır. 5

6 1.2. Programlama Dilleri Dünyada konuģulan her dilin amacı iletiģim sağlamaktır. Farklı kültürlerden insanların anlaģabilmesi için ortak konuģtukları bir dil gerekir. Programlama dillerinin amacı da bilgisayar ile programcının haberleģmesidir. Programcı, bilgisayara hangi komutların çalıģtırması gerektiğini bilgisayarın anlayacağı dilden konuģarak söyler. Bilgisayarda, programlar makine diline çevrildikten sonra çalıģır. 1 ve 0 sayılarından oluģan bu makine dili, en alt seviye dildir. Dolayısıyla programların bu dilde yazılması oldukça zordur. Programcılar konuģma diline daha yakın, kolay anlaģılabilecek diller kullanır. Bu dillere yüksek seviye programla dilleri denir. Programlama dillerinin seviyeleri, makine diline yakın olup olmamaları ile ölçülür. ġu ana kadar 2500'den fazla programlama dili yazılmıģtır. Bunlardan bazıları Pascal, Basic, C, C++, Java, JavaScript, Cobol, Perl, Python, Ada, Fortran, Visual Basic.NET, Microsoft Visual C# programlama dilleridir. Yüksek seviye programlama dillerine Visual Basic.NET ve Microsoft Visual C++ dillerini örnek verebiliriz. C ile iģletim sistemi yazılabildiğinden, daha alt seviye bir dil olarak değerlendirilir Programlama Dillerinin Tarihçesi Bilgisayarlar, icat edilmeleriyle birlikte belli bir iģi yapmak için bir dizi komuta ihtiyaç duymuģlardır. En baģta çok basit iģlemler yapan bu komutlar, zamanla nesne yönelimlilik (object orientation) gibi ileri seviyede özellikler kazanmıģtır. Ġlk programlama dilleri, bilgisayarların üzerinde bazı araçların yerlerini değiģtirerek veya yeni bileģenler eklenerek yapılıyordu. Programın iģlemesi için bir devinime ihtiyaç vardı. Eskiden programlar fiziksel olarak yazılıyordu. Daha sonra, fiziksel programlama yerini elektrik sinyallerine bıraktı. Artık, kurulan elektronik devrelere düģük ya da yüksek voltajda akım gönderilerek bilgisayarın davranıģı belirlenmeye baģlanmıģtı. Yüksek voltaj 1, düģük voltaj 0 sayılarını ifade ediyordu. Böylelikle bugün de kullanılan makine dilinin ortaya çıkması için ilk adımlar atılmıģ oldu. Ancak bu Ģekilde programlar yazmak, sistemi oluģturan elektronik devrelerin her program için baģtan kurulmasını gerektiriyordu. Böylelikle programlar bazı kavramlar çerçevesinde yazılmaya baģlandı. Öncelikle bilgisayar donanımı her program için baģtan kurulmamalı, bunun yerine basit bir donanımın üzerine yazılan komutlar kullanılmalıdır. Daha sonra, programlar tek bir komutlar zinciri yerine, küçük parçalar halinde yazılmalıdır. Bu parçaların programın içinde defalarca kullanılabilmesi yordam (subroutine) kavramını ortaya çıkarmıģtır. Bu modelin kullanılması ise mantıksal karģılaģtırmaları, döngülerin kullanılmasını ve yazılan kodlar tekrar kullanıldığı için kütüphane (library) mantığını ortaya çıkarmıģtır yılında IBM, düģük seviye (makine diline yakın) bir programlama dili olan FORTRAN dilini ortaya çıkardı. FORTRAN ile beraber basit mantıksal karģılaģtırmalar, döngüler, lojik (true-false) ve sayısal (integer, double) değiģkenler kullanılmaya baģlandı yılında, bu programlama dilinin özelliklerini alıp, giriģ çıkıģ (Input/Output - IO) gibi yeni iģlevler sağlayan COBOL dili ortaya çıktı. Daha sonra 1968 yılında, COBOL ve FORTRAN dillerinin en iyi özelliklerini alarak Pascal ortaya çıktı. Ayrıca Pascal dili, hafızadaki adresler üzerinde iģlem yapmaya olanak veren iģaretçi (pointer) kavramını da beraberinde getirdi yılında C, Pascal dilindeki birçok hatayı gidererek ortaya çıktı. C dili ilk defa Unix iģletim sistemini yazmak için kullanılmaya baģlanmıģtır. C, düģük seviye bir dil olması, kuvvetli giriģ çıkıģ iģlemleri sağlaması gibi birçok özelliği ile iģletim sistemlerinin yazılmasında tercih edilmiģtir. 6

7 Bütün programlama dilleri birçok özelliğe sahip olmasına rağmen, modüler programlamanın birçok eksiğini gidermek amacıyla, yeni bir programlama modeli olan nesne yönelimli programlama (Object Oriented Programming - OOP) ortaya çıkarıldı. C dilinin ve OOP modelinin tüm özellikleriyle C++ dili oluģturuldu. C++ dilini, Sun Microsystems tarafından çıkartılan Java takip etti. Java dilinin kullanım alanları, nesneye yönelimli bir programlama dili olması ve beraberinde getirdiği artık toplama (Garbage Collection - GC) gibi performans artırıcı özellikleri ile büyük ölçüde geniģledi. Microsoft, 2000 yılında.net platformunu sunarak, otuzdan fazla programlama dilini aynı çatı altına topladı. VisualBasic.NET ve Visual C# günümüzde.net platformunu kullanan en güçlü yüksek seviyeli programlama dilleri arasında yer alır. Programlar yazıldıktan sonra, çalıģmaya uygun hale getirilene kadar bir dizi iģlemden geçer. Bu iģlemi gerçekleģtiren, programlama dilinin derleyicisidir. (Compiler) Programlar bir programlama dilinin gramer ve söz dizimi yapısına uygun bir Ģekilde yazılır. Yaz ılan kodlar o dilin derleyicisi tarafından kontrol edilir. Kontrol iģleminden sonra, bu kodlar bilgisayarın anlayacağı makine diline çevrilir. Ancak bir yazım veya mantık hatası varsa, programcıya gerekli hata mesajı verilerek derleme iģlemi iptal edilir Programın Derlenmesi Programlar yazıldıktan sonra, çalıģmaya uygun hale getirilene kadar bir dizi iģlemden geçer. Bu iģlemi gerçekleģtiren, programlama dilinin derleyicisidir. (Compiler) Programlar bir programlama dilinin gramer ve söz dizimi yapısına uygun bir Ģekilde yazılır. Yazılan kodlar o dilin derleyicisi tarafından kontrol edilir. Kontrol iģleminden sonra, bu kodlar bilgisayarın anlayacağı makine diline çevrilir. Ancak bir yazım veya mantık hatası varsa, programcıya gerekli hata mesajı verilerek derleme iģlemi iptal edilir. Makine diline çevrilen kodlar çalıģtırılır Microsoft.NET Platformu Microsoft.NET, uygulama geliģtiricilerin yazılım geliģtirme sürecinde altyapı iģlemleri için harcadığı eforu en aza indirgemek ve daha güvenli, güvenilir ve sağlıklı uygulamalar geliģtirebilmelerini sağlamak için geliģtirilmiģ bir altyapıdır Yazılım Geliştirme Dünyası Microsoft 1975 yılında Bill Gates ve Paul Allen tarafından kurulduğunda, vizyonu "Her eve, her masaya bir PC" idi. Donanım ve yazılım alanlarındaki geliģmelerin hızı ve birbirlerini sürekli tetiklemesinin sonucunda bilgisayar kullanıcılarının sayısı hızla arttı. Artan kullanıcı sayısı beraberinde yeni gereksinim ve talepleri getirdi. Bu taleplerin doğal sonucu olarak da farklı platformlar ve farklı servis sağlayıcıları ortaya çıktı. ĠletiĢim, finansal hizmetler, ticaret ve eğlence kullanıcıların (özellikle Internet'in yaygınlaģmasıyla birlikte) en yoğun talep gösterdiği hizmetler halini aldı. Günümüze baktığımızda, Microsoft'un çıkıģ noktasındaki hedefine büyük oranda ulaģtığını görebiliyoruz. Ancak geldiğimiz noktada hızla artan bilgisayar ve Internet kullanıcısı sayısı, beraberinde güvenlik, iletiģim ve entegrasyon gibi alanlarda çeģitli engelleri de getirdi. 7

8 GeliĢmelere kendi açımızdan, yani yazılım geliģtiriciler açısından baktığımızda iģlerin çok daha zor ve zahmetli durumda olduğunu görürüz. Kurumsal uygulamaların geliģtirilmesinde performans, güvenlik ve süreklilik gibi konularda belirli bir seviyeyi yakalamak için oldukça fazla efor sarf etmemiz gerekiyor. Örneğin, elektronik cihazlarla soket iletiģimi kuracak uygulamaları geliģtirebilmek için iki alternatifimiz var. Birincisi, 3. parti firmalar tarafından geliģtirilmiģ olan bileģenler satın almak ve uygulamamıza entegre etmektir. Diğer alternatifimiz ise, oldukça uzun sürecek bir kodlama ile benzer bir iletiģim katmanını geliģtirmektir. Her ikisi de firmaların birinci tercihi olmayacaktır. Sorunumuz, sadece soket iletiģimi noktasında değil elbette. Bölümün baģında da belirttiğimiz gibi uygulama geliģtiriciler, güvenlik, performans ve yetkilendirme gibi pek çok konuda oldukça zahmetli altyapı kodlarını geliģtirmekle uğraģmak zorunda kalıyor. ĠĢin kötü yanı, geliģtirilen bu altyapı kodlarının çoğu zaman istenen verimliliği sunmaktan oldukça uzak kalmasıdır. Kabul etmemiz gereken Ģey, bu altyapı kodlarını geliģtirecek bilgiye sahip olmadığımız; sahip olsak bile, altyapı kodlarını yazacak zamana ve iģgücüne sahip olmadığımız; zaman ve iģgücü konusundaki ihtiyaçlarımızı karģılayabilsek bile, bu kodların testi, güvenliği, güvenilirliği, performansı ve uygulamalara entegrasyonu konusunda hiçbir zaman istenen düzeye ulaģamayacağımızdır. KeĢke ihtiyaç duyduğumuz tüm altyapı iģlemleri için hazır, kullanımı kolay ve esnek bir platform olsaydı. Hayalini kurduğumuz, aslında Ģöyle bir sistem: "Bir sanal mağazada cep telefonlarından sorumlu departmanda satıģ müdürü olarak çalıģıyorsunuz. ĠĢ dıģındasınız ve akıllı cihazınıza bir mesaj geliyor: 'Piyasaya henüz çıkmıģ olan telefonumuz inanılmaz satıģlar yapıyor, telefon çok popüler ve stoklarımız da oldukça azalmıģ durumda.' Bu mesajın hemen ardından, akıllı cihazınız üzerinden, Ģirketiniz için fiyat ve teslim zamanı açısından en uygun olan tedarikçiyi bulup, ihtiyacınız kadar telefonu sipariģ edebiliyorsunuz. Peki ya bu koģullar altında çalıģmıyor olsaydınız? ġirketiniz, sizi cep telefonunuzdan arayacak ve problemi iletecekti. Sonra da siz ancak Ģirketinize dönebildiğiniz zaman tedarikçilerle teker teker irtibata geçerek hangisinin Ģirketiniz için en yararlı olduğuna karar verecektiniz. SipariĢ ve teslimat bilgileri üzerinde anlaģtıktan sonra iģleminizi tamamlamıģ olacaktınız. Yani sadece birkaç dakikada yapabileceğiniz basit bir iģlem için, belki de bütün bir gününüzü kaybedecektiniz. Verimliliğiniz düģerken, zamanınızı etkili Ģekilde kullanamayacaktınız. Oysa akıllı cihazınız üzerinden tüm bu iģlemleri kısa bir Ģekilde çözebildiğinizden, iģe gitmenize bile gerek kalmadan çok kısa bir zamanda Ģirketiniz için en iyi olan seçimi yapabilirsiniz." ĠĢler kesinlikle çok daha verimli ve kolay ilerlerdi. Elbette bu, kurulabilecek hayallerin sadece mobil platforma yönelik bölümünden bir kesit Sorunun Temeli Microsoft, vizyonu doğrultusunda attığı adımların yazılım geliģtiricilere yansıyan sonuçlarını sürekli izliyordu ve yazılım geliģtiricilerin sorunlarını Ģu baģlıklar altında ele alıyordu. Uygulamalar, sistemler ve kurumdaki birimler arasındaki ve farklı kurumlar arasındaki iletiģim sorunu. ÇalıĢanların ihtiyaç duydukları verilere, ihtiyaç duydukları anda, kesintisiz, hatasız ve güvenli bir Ģekilde ve istedikleri platformdan eriģebilmeleri gereksinimi. Uygulama geliģtirme sürecinde, geliģtiricilerin altyapı kodları ile uğraģması ve bunun sonucunda, uygulama geliģtirme ve test süresinin uzaması. Bir uygulamanın farklı platformlarda çalıģtırılabilmesi için, aynı iģlemleri gerçekleģtirecek kodların tekrar tekrar yazılması gereksinimi.çözüm Platformu Microsoft 1990 yılında, yaģanacak 10 yılı da öngörerek, bu ve benzeri sorunlara çözüm sunacak, uygulama geliģtiricilerin ve son kullanıcıların iģlerini kolaylaģtıracak bir platform geliģtirmeye baģladı. Microsoft bu platforma öylesine inanıyordu ki, kaynaklarının %80'inden daha fazlasını, yani kaderini bu platforma 8

9 bağlamıģtı. Çok geniģ bir analiz ve geliģtirme ekibinin çalıģmaları sonucunda ortaya çıkan ürün 2000 yılında dünyaya sunulduğuna, insanların karģılarında gördükleri yapı karģısında hissettiklerini tanımlamak için kullanılabilecek en uygun kelime "hayranlık" idi. Microsoft.NET platformu, her türlü yazılım geliģtirme ihtiyacına yönelik hazır bir altyapı sunarak, uygulama geliģtiricilerin Windows, Web ve mobil platformlara yönelik uygulamaları çok daha hızlı, kolay ve güçlü bir Ģekilde geliģtirebilmelerine olanak tanıyordu. Uygulama geliģtiriciler Ģifreleme, kimlik doğrulama, yetkilendirme, soket iletiģimi, her türlü veri kaynağına yönelik veritabanı iģlemleri, XML ve Web servisi teknolojilerine kadar burada saymadığımız (editörler bir modülün 100 sayfayı geçmesine pek sıcak bakmıyorlar) pek çok teknolojiyi ve hatta milyonlarca hazır sınıf ve fonksiyonu karģılarında gördüler. Bugüne kadar günler, haftalar ve hatta aylar harcayarak geliģtirmeye çalıģtıkları bu yapıların hepsini, karģılarında kullanıma hazır bir Ģekilde görmekten de son derece memnunlardı Microsoft Visual Studio Arayüzü Solution Explorer Paneli Visual Studio çalıģma ortamında projeler bir çözüm (solution) altında açılır. Bir çözüm içine farklı dilde ve tipte projeler dahil edilebilir. Visual Studio ile bir çözüm açıldığında, Solution Explorer panelinde çözüm içinde bulunan tüm projelerle, ilgili dosya ve klasörler görüntülenir. Panelde koyu yazı tipinde gözüken proje, çözüm içindeki baģlangıç projesidir Toolbox(Araç Kutusu) Paneli Toolbox (Araç kutusu) paneli, projelerde kullanılan çeģitli bileģenlerin listelendiği paneldir. Buradaki öğeler, sekmeler içinde gruplanmıģtır. Her sekme, ortak platformlarda çalıģan veya benzer iģlevleri olan nesnelere sahiptir. Örneğin, Data sekmesinde veritabanı iģlemlerinde kullanılan bileģenler vardır. Windows Forms bileģenleri Windows platformunda çalıģan projelerde, Web Forms bileģenleri ise Web tabanlı projelerde kullanılan nesnelerdir. Nesnenin silik gözükmesi, o anda çalıģılan sayfada kullanılamayacağı anlamına gelir. Toolbox panelinde nesneler, sık kullanılmasına göre ya da alfabetik olarak sıralanabilirler. Nesneler, yerleri ve sıraları taģınarak değiģtirilebilir, ayrıca baģka bir sekmeye de taģınılabilir. Visual Studio çalıģma ortamı, Toolbox panelindeki nesnelere yeni isim verme, nesneleri silme veya panele yeni sekmeler ve nesneler ekleme imkânlarını da sağlar Properties (Özellikler) Paneli Properties (Özellikler) paneli, seçilen bir nesnenin özelliklerini görüntüler. Paneldeki görünüm, "Özellik adı - değeri" Ģeklindedir. Silik olarak gözüken özellikler salt okunurdur ve değiģtirilemez. Panelin üzerindeki açılır liste, çalıģma sayfasındaki nesneleri listeler. Buradan istenen nesne seçilerek özellikleri görüntülenir. Paneldeki özellikler kategorilere göre gruplanmıģtır, ancak alfabetik olarak da dizilebilir. Panelin üstünde bulunan araç kutusundan Categorized (KategorileĢtirilmiĢ) veya Alphabetic (Alfabetik) seçenekleri iģaretlenerek özelliklerin görünümleri değiģtirilebilir. 9

10 Panelin en altında bulunan bölümde, her özelliğin açıklaması bulunur. ĠPUCU Bir nesnenin üzerindeyken F4 tuģuna basınca, Properties paneli görüntülenir Visual Basic.NET ile Windows Tabanlı Programlama Windows tabanlı uygulamalar, Windows iģletim sistemi üzerinde çalıģan uygulamalardır. Windows uygulamaları Windows formları ve kontrollerinden oluģur. Visual Studio bu formların ve üzerindeki kontrollerin tasarımını ve kodların yazılmasını büyük ölçüde kolaylaģtırarak, uygulama geliģtirme sürecini daha hızlı ve kolay hale getirir İlk Uygulama (Merhaba!. Şu anda tarih ve saat ) Visual Basic.NET ile yazacağımız Windows uygulaması ekrana, "Merhaba " yazısını ve o anki zamanı gösteren bir bilgi mesajını çıkartır. 1. Visual Studio çalıģma ortamını açın. 2. Dosya menüsünden, Yeni Proje komutunu seçin. 3. Açılan iletiģim kutusu, yazılacağı dile, çalıģacağı ortama göre değiģen proje tiplerini listeler. Proje tiplerinden Visual Basic Project ve Windows Application tipinin seçili olduğunu kontrol edin. 4. Name özelliğine Merhaba yazın ve OK düğmesini tıklayın. Açılan Windows projesinde baģlangıç olarak bir adet Windows Form, tasarım görünümünde açılır. 5. Toolbox panelinden Button kontrolünü formun üzerine sürükleyip bırakın. Properties panelini açarak Button kontrolünün Text özelliğine "Merhaba" yazın. 6. Eklenen Button kontrolünü çift tıklayarak kod sayfasına geçin. Button kontrolü tıklandığında çalıģtırılacak kodu yazın: MsgBox("Merhaba! ġu anda tarih ve saat: " & Now) NOT: Yazdığınız kodun ne anlama geldiğini belirtmek için yorum satırları kullanmak, kodları okumayı kolaylaģtırır. Yorum satırları tek tırnak ' ile baģlayarak yazılmalıdır. 7. MsgBox metodunun yazıldığı kodun üstüne, yapılmak isteneni belirten bir yorum satırı yazın. 8. F5 tuģuna basarak projeyi çalıģtırın. İPUCU: ÇalıĢma sayfaların isimlerinin yanında yıldız iģaretinin gözükmesi, o sayfada değiģiklik yapıldığını, ancak henüz kaydedilmediğini belirtir. Proje dosyalarınızı CTRL+S tuģlarına basarak sıkça kaydedin Özellikler, Metotlar ve Olaylar.NET kontrolleri üç temel kavramdan oluģur. 10

11 Özellikler Özellikler, kontrollerin görünümü, yerleģimi veya davranıģlarına özgü niteliklerdir. Örneğin, bir Button kontrolünün Text özelliği, üzerinde yazan yazıya eriģmemizi sağlar. Kontrollerin özellikleri, tasarım anında Properties panelinden ulaģılabileceği gibi, kod tarafında da okunup değiģtirilebilir. Kontrollerin birçok özelliği hem okunabilir, hem de değiģtirilebilir. Ancak bazı özellikler salt okunur (ReadOnly) ve salt yazılır (WriteOnly) olabilir. Bu tip özellikler Properties panelinde gözükmezler. Kontrollerin birçok ortak özellikleri vardır. Text (Yazı): Kontrollerin Text özelliği, üzerinde görüntülenen yazıdır. Bu özellik, çalıģma anında sıkça okunup değiģtirilerek kullanıcıyla iletiģim sağlanır. TextBox kontrolüne girilen bir değerin okunup Label kontrolüne yazılması için, kontrollerin Text özellikleri kullanılır. Name (İsim): Name özelliği kontrollere ulaģmak için kullanılan özelliktir. Birçok kontrolün Text özelliği aynı olabilir. Ancak her biri ayrı birer nesne olduğu için, Name özelliklerinin benzersiz olması gerekir. TextBox2.Text = TextBox1.Text Ġki TextBox kontrolünün yazıları aynı, fakat isimleri farklıdır. Size (Büyüklük): Kontrollerin büyüklük özelliğidir. Height (yükseklik) ve Width (geniģlik) özelliklerinden oluģur. Genellikle tasarım anında belirlenen bu özellik, çalıģma anında da değiģtirilebilir. Label1.Height = 10 Label1.Width = 20 BackColor (Arka plan rengi): Kontrollerin arka plan renginin ayarlandığı özelliktir. Bu özelliğin değeri, Color (renk) nesnesinde tanımlı değerlerle belirlenir. ForeColor (Önalan rengi): Kontrollerin üzerindeki yazıların rengini belirler. Visible (Görünür): Kontrollerin ekranda görünüp görünmediklerini belirleyen özelliktir. True ve False olmak üzere iki değer alabilir. 11

12 Metotlar Metotlar kontrollerin yaptığı iģlemlerdir. Metotlar parametreyle veya parametresiz çağrılabilir. Parametreyle çağırmak, metodun girilen değere göre iģlem yapacağını belirtir. Örneğin Focus (Odaklan) metodu, parametre beklemeden çalıģır ve kontrolün seçilmesini sağlar. Kontrollerin bazı ortak metotları vardır. Select (Seç): Select metodu Focus ile aynıdır, ama TextBox kontrolünün Select metodunun diğerlerinden bir farkı vardır. TextBox içindeki yazının belli bir kısmını ya da tamamını, verilen parametrelere göre seçer (Resim 4.3). BringToFront (Öne Getir): Kontrolü, üst üste duran kontroller arasından en öne getirir. SendToBack (Arkaya Gönder). Kontrolü, üst üste duran kontrollerin en arkasına gönderir. Hide (Sakla): Kontrolün gözükmesini engeller. Show (Göster): Kontrolün gözükmesini sağlar Olaylar Olaylar kontrollerin baģına gelen iģlemlerdir. Olayların metotlardan farkı, bu iģlemlerin kontrollerin elinde olmadan gerçekleģmesidir. Örneğin bir Button kontrolünün tıklanması, o kontrolün isteği dıģında yapılmıģtır. Bu olayın tetiklenmesinde kontrolün bir rolü yoktur. Bu olaylar gerçekleģtiği zaman yapılması gereken iģlemler, ilgili olayın yordamına yazılır. Button1 isimli kontrol tıklandığı zaman gerçekleģtirmek istenen eylemler Button1_Click yordamına yazılır. Visual Studio ortamı, kontrollerin olaylarını kolay bir Ģekilde seçmeyi sağlar. Kod sayfalarında kontrollerin bulunduğu listeden, istenen kontrol seçilir. Kontrolün olaylarının listelendiği diğer listeden de istenen olay seçilir. 12

13 RESĠM: Kontrollerin olaylarının seçilmesi. Visual Studio, olayların yordam isimlerini Kontrolİsmi_Olayİsmi biçiminde yazar. Kontrollerle çalıģırken benzer olaylar kullanılır. Click (Tıklandığında). Kontrol tıklandığı zaman tetiklenen olaydır. Windows tabanlı programlamada en sık kullanılan olaylardan biridir. MouseDown (Fare düğmesi basıldığında). Fare, kontrolün üzerindeyken herhangi bir düğmesine basıldığı zaman gerçekleģen olaydır. Bu olay, Click olayından önce çalıģır. MouseUp (Fare düğmesi bırakıldığında). Fare, kontrolün üzerindeyken basılan düğme bırakıldığı zaman çalıģır. Enter (Girildiğinde). Kontrol seçildiği veya üzerine odaklanıldığı zaman gerçekleģen olaydır. Leave (Çıkıldığında). BaĢka bir kontrol seçilmek üzere çıkıldığında, bu kontrolün Leave olayı tetiklenir. VisibleChanged (Görünürlüğü değiştiğinde). Kontrolün görünüp görünmediğini belirten Visible özelliği değiģtiği zaman tetiklenir. İPUCU: Olayların çalıģma sıralarını test etmek için tüm olay yordamlarına, mesaj kutusu çıkaran (MsgBox) kod yazın. Daha sonra projeyi çalıģtırıp kontroller üzerinde yapılan değiģikliklere göre olayların çalıģma sıralarına bakın 1.8. Visual Basic.NET'e Kontrollerin Eklenmesi Windows tabanlı uygulamalar geliģtirirken sıkça kullanacağımız bir grup kontrol vardır. Form kontrolü hariç diğer bütün kontroller Toolbox panelinden seçilir. Bu kontroller sürüklenip form üzerinde istenen pozisyona bırakılır Kontroller, Toolbox panelinde çift tıklanarak da eklenebilir. RESĠM: Kontrollerin eklenmesi. Kontrollerin tasarım anında büyüklükleri ve yerleri Size ve Location özellikleri ile değiģtirilebileceği gibi, fare ile de istenen Ģekilde ayarlanabilir. 13

14 Form Windows uygulamaları, Windows kontrollerinin tutulduğu pencereler olan formlardan oluģur. Bir Windows projesi açıldığı zaman Form kontrolü otomatik olarak eklenir. Ġkinci bir form eklemek için Proje (Project) menüsünden Windows Formu Ekle (Add Windows Form) komutunu seçilir. Proje çalıģtığı zaman baģlangıç formu görüntülenir. BaĢlangıç formu projenin özelliklerinden değiģtirilir. Projenin özellikler penceresi, çözüm gezgininde proje üstüne sağ klik yapılarak açılan menüden özellikler seçilerek ulaģılabildiği gibi, proje menüsünden de ulaģılabilir. RESĠM: BaĢlangıç formunun değiģtirilmesi. Visual Studio ortamında formlar, tasarım sayfası ve kod sayfası olmak üzere iki farklı sayfada görüntülenir. Tasarım sayfası, formun ve üzerindeki kontrollerin görünümlerini kolay bir Ģekilde değiģtirmeyi sağlar. Visual Studio bu sayfada yapılan değiģiklikleri kod sayfasında eģzamanlı olarak günceller. Örneğin, bir Button kontrolünün geniģliğini fare ile değiģtirdiğimiz zaman, kod sayfasında bu kontrolün Width özelliği yapılan değiģikliğe göre güncellenir. Aynı değiģiklikler Properties panelinde de görülebilir. Formların, diğer kontrollerin özelliklerinden farklı bazı özellikleri vardır. ControlBox (Denetim kutusu): Form üzerindeki simge durumuna küçültme, ekranı kaplama ve formu kapatma (Minimize / Maximize / Close) kutularının görünümünü ve eriģilebilirliğini kontrol eder. NOT: Formun ControlBox özelliği False iken uygulama, Hata Ayıkla (Debug) menüsünden Hata Ayıklamayı Durdur (Stop Debugging) komutu seçilerek kapatılabilir. StartPosition (Başlangıç pozisyonu): Form açıldığı zaman nerede gözükeceğini belirler. CenterScreen seçeneği formu ekranın ortasında gösterir. Formlar açıldığı zaman Load olayı gerçekleģir. Eğer form, baģlangıç formu olarak seçilmiģse, proje baģladığı zaman çalıģtırılmak istenen kodlar bu olayın yordamına yazılır Button Bir Windows düğmesini temsil eder. Button kontrolü tıklandığında Click olayı tetiklenir. Bu olay gerçekleģtiği zaman yapılacak iģlemler, ButtonĠsmi_Click yordamında yazılır. 14

15 TextBox Bir Windows metin kutusunu temsil eder. Kullanıcıların değer girerek programla haberleģmesini sağlamak amacıyla kullanılır. TextBox kontrolündeki yazı değiģtiği zaman TextChanged olayı gerçekleģir Label Bir Windows etiketini temsil eder. Kullanıcıya, form üzerinde bir yazıyı göstermek amacıyla kullanılır. Bu yazının görünümü, Label kontrolünün bazı özellikleri ile değiģtirilir. TextAlign (Yazı hizalama): Yazının Label kontrolü üzerinde nerede duracağını belirler RESĠM: TextAlign özelliği. Font (Yazı Tipi): Font özelliği birçok alt özellik taģır. Bunlardan bazıları en sık kullanılan özelliklerdir. Name: Yazı tipinin ismini belirler. Varsayılan durumda Microsoft Sans Serif seçilidir. Size: Karakterlerin büyüklüğünü belirler. Varsayılan büyüklük 8,5 değerindedir. Bold (Kalın): Yazının kalın tipte olmasını belirler. Italic (İtalik): Yazının italik tipte olmasını belirler. UnderLine (Altı çizgili): Yazının altı çizgili olmasını belirler. RESİM: Font özelliği ComboBox Bir Windows açılan kutusunu temsil eder. ComboBox kontrolü, kullanıcıların bazı değerleri açılan bir listeden seçmesini sağlar. Listeye tasarım anında veya çalıģma anında öğe eklenebilir. Listeye öğe eklemek için kontrolün Items özelliğinden faydalanılır. Tasarım anında öğe eklemek için Properties panelinden Items özelliği seçilir. String Collection Editor penceresinde, her öğenin değeri tek bir satırda yazılır. RESİM: String Collection Editor penceresi. ÇalıĢma anında öğe eklemek için kod sayfasında, kontrolün Items özelliğinin Add metodu kullanılır. 15

16 RESĠM: ComboBox kontrolünün çalıģması ListBox Bir Windows liste kutusunu temsil eder. Kontroldeki öğeler sabit bir liste olarak görüntülenir. ListBox kontrolüne öğe ekleme iģlemi, ComboBox kontrolündeki iģlemlerle aynıdır. ListBox kontrolünün ComboBox kontrolünden farkı, birden fazla öğenin seçilebilir olmasıdır. RESĠM: ListBox kontrolünün çalıģması Timer Bir Windows sayacını temsil eder. Sayaç çalıģmaya baģladığı zaman, belirli zaman aralıklarında Tick olayı gerçekleģir. Timer kontrolünün Interval değeri, Tick olayının kaç milisaniyede bir gerçekleģeceğini belirler. Örneğin, Interval değeri 2000 olan bir sayaç, Tick olayında yazılan kodları iki saniyede bir çalıģtırır. Sayacı baģlatmak için kontrolün Start metodu, durdurmak için ise Stop metodu kullanılır. Enabled özelliği, sayacın aktif olup olmadığını belirler. 16

17 UYGULAMA: Kronometre Uygulaması "Kronometre" isminde yeni bir Windows projesi açın. Properties panelinden, Form1 nesnesinin BackColor özelliğini "Menu" olarak seçin. Font özelliğini, yanındaki + simgesini tıklayarak geniģletin. Font özelliğinin alt özellikleri listelenir. o Yazı Tipi özelliğini Tahoma, o Text özelliğini "Kronometre Uygulaması", o Size özelliğini 10 olarak ayarlayın. Form görünüm özellikleri, eklenecek kontrollerin (değiģtirilmedikleri sürece) görünümlerini de etkiler. Toolbox panelinden form üzerine bir Label ekleyin. Özelliklerini atayın: o Text: Kronometrem o Font - Name: Forte, Font - Size:28 o Dock: Top o TextAlign: BottomCenter o Autosize: False Bir Label kontrolü ekleyin. Özelliklerini atayın: o Text:0 o Font - Size: 30 o TextAlign: MiddleCenter o Name: lblsure Forma bir Timer kontrolü ekleyin. Name özelliğini tmrkronometre olarak değiģtirin. İPUCU Kod tarafında kullanacağınız kontrollerin isimlerini değiģtirmek, daha sonra ulaģmak istediğinizde zaman kazandıracaktır. Bir ComboBox ekleyin. Text özelliğini "Hız Seçin" olarak, Name özelliğini de cmbinterval olarak değiģtirin. Items Collection içine sırayla 1000, 2000, 3000, 4000 değerlerini girin. Bu kontrol, çalıģma anında Timer kontrolünün Interval özelliğini değiģtirmeyi, dolayısıyla kronometrenin hızını ayarlamayı sağlayacaktır. Eklenen kontrolleri, Resimde görünen Ģekilde düzenleyin. Kodların yazılması Text özellikleri birinde "Dur", diğerinde "BaĢla" olan iki Button ekleyin. Kontrollerin Name özelliklerini sırayla btndur ve btnbasla olarak değiģtirin. Bir ListBox kontrolü ekleyin ve Name özelliğini lbkayit olarak değiģtirin. Bu kontrol kronometrenin baģlama ve durma zamanlarını kaydetmeyi sağlayacaktır. Bir TextBox kontrolü ekleyin. Name özelliğini txtsure olarak değiģtirin ve Text özelliğinde yazan yazıyı silin. Form üzerinde sağ tıklayın ve Kodu Görüntüle komutunu seçin. Açılan kod sayfasında, KalanSure isimli bir değiģken tanımlayın. Dim KalanSure As Integer 17

18 Formun tasarım görünümüne dönün ve BaĢla isimli Button kontrolünü çift tıklayın. btnbasla_click yordamı içine Timer kontrolünü ayarlayıp baģlatan, ListBox kontrolüne kayıtları giren, kalan süreyi Label kontrolünde görüntüleyen kodları yazın. Dur isimli Button kontrolünü çift tıklayın. btndur_click yordamı içine Timer kontrolünü durduracak ve ListBox kontrolüne kayıtları ekleyecek kodları yazın. Tasarım görünümünde tmrkronometre isimli Timer kontrolünü çift tıklayın. tmrkronometre_tick yordamı içine kalan süreyi azaltacak ve süre sıfırlandığında kronometreyi durduracak kodları yazın. Projeyi baģlatın, metin kutusuna 5 değerini girin. Hız Seçin açılan kutusundan 1000 değerini seçin ve BaĢla düğmesini tıklayın. o Süre baģladıktan ve bittikten sonra ListBox kontrolündeki değiģiklikler nelerdir? o Hız 3000 olarak seçildiğinde baģlama ve bitiģ zamanları arasındaki süre ne kadardır? Hazır Fonksiyonlar Visual Basic.NET dilindeki hazır fonksiyonlar, program yazarken en çok kullanılan iģlemleri programcılara sunar. Bu fonksiyonlar Microsoft. VisualBasic isimuzayı (namespace) altında gruplanmıģtır. Örneğin, metin kutusuna girilen bir yazının soldan ilk üç karakterini almak için Microsoft.VisualBasic.Left hazır fonksiyonu kullanılır. Label1.Text = Microsoft.VisualBasic.Left(TextBox1.Text, 3) Farklı iģlemler için hazırlanmıģ birçok fonksiyon vardır Tarih işlemleri: Verilen tarihin gününü almak: MsgBox(Day(Now)) 18

19 Verilen tarihin ayını almak: MsgBox(Month(Now)) Verilen ay numarasının ismini almak: MsgBox(MonthName(7)) Verilen tarihin saatini almak: MsgBox(Hour(Now)) Verilen tarihe, ilk parametrede belirtilen zaman cinsinden bir değer eklemek: MsgBox(DateAdd(DateInterval.Day, 20, Now)) Günün saat, dakika, saniyesini almak: MsgBox(TimeOfDay) Yazı işlemleri: Yazının baģındaki ve sonundaki boģlukları atmak: Label1.Text = Trim(" Arapgir MYO ") 'sonuç: Arapgir MYO Tüm yazıyı küçük harfe çevirmek: arapgir myo Tüm yazıyı büyük harfe çevirmek: ARAPGİR MYO Label1.Text = LCase("ARAPGİR myo") ' Sonuç: Label1.Text = UCase("arapgir MYO") ' Sonuç: Yaz ının belirli bir bölümünü almak. Ġkinci parametrede verilen pozisyondan baģlayarak, üçüncü parametredeki değer kadar karakter alınır: Label1.Text = Mid("Arapgir MYO ", 9, 3) ' Sonuç: MYO Yaz ının parametrede belirtilen sıradaki karakteri almak: Label1.Text = GetChar("Arapgir MYO", 9) ' Sonuç: M Verilen karakter koduna karģılık gelen karakteri almak: Label1.Text = Chr(65) ' Sonuç: A Sayı işlemleri: Rasgele sayı üretmek: 'Maximimum 400 değerini alan bir sayı üretir Rnd() * 400 Parametrede verilen bir değerin sayı olup olmadığını kontrol etmek. Geriye dönen değer True ya da False mantıksal değeridir: IsNumeric(TextBox1.Text) 1.9. KULLANICIDAN VERİ ALMAK VE KULLANICIYA BİLGİ GÖSTERMEK (Inputbox() ve Messagebox()) Inputbox: InputBox, kullanıcının veri girmesi için açılan bir mesaj kutusudur. Formlarda TextBox kontrolüne ihtiyaç duymadan veri almayı sağlar. InputBox("Bir sayı giriniz: ", "Sayı Girişi", 1, 350, 350) InputBox metodunun ilk parametresi, mesaj kutusunun gövdesinde gözükecek yazıdır (Prompt). Diğer tüm parametreler isteğe bağlıdır. Title (Başlık): Mesaj kutusunun baģlığıdır 19

20 DefaultResponse (Varsayılan cevap): Kullanıcı veri girmediğinde varsayılan değerdir. XPos (X pozisyonu): Mesaj kutusunun sol kenarının, ekranın sol kenarına olan uzaklığıdır. YPos (Y pozisyonu): Mesaj kutusunun üst kenarının, ekranın üst kenarına olan uzaklığıdır. RESĠM: InputBox MessageBox MessageBox, kullanıcıya bilgi göstermek için açılan mesaj kutusudur. Bu mesaj kutusu dört öğeden oluģur. Text (Yazı): Mesaj kutusunda verilmek istenen bilgiyi tutan yazıdır. Caption (Başlık): Mesaj kutusunun baģlığıdır. Buttons (Düğmeler): Mesaj kutusunda hangi düğmelerin gösterileceğini belirler. Icon (Simge): Mesaj kutusunda gösterilecek olan simgeyi ve açıldığı zaman çıkartılacak sesi belirler. MessageBox.Show("Devam etmek istiyor musunuz?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) RESĠM: MessageBox. Mesaj kutusu, kapanırken hangi düğmenin tıklandığını DialogResult nesnesi ile programcıya bildirir Değişken Ve Sabitler Değişkenler: Program yazarken, bazı verilerin daha sonra kullanılmak üzere bir yerde tutulması gerekebilir. Örneğin, bir hesaplama yapılırken, önceden hesaplanmıģ verilerin kullanılması istenirse, bu verileri tekrar hesaplamak yerine hafızada tutmak performansı artırır. Veya veritabanından alınan bir kullanıcı isminin hafızada tutulması, bu değer her istendiğinde veritabanına bağlanıp alınmasına tercih edilmelidir. Verilerin bu Ģekilde hafızada tutulması değiģkenlerle sağlanır. DeğiĢkenler farklı türlerde verileri tuttukları için, farklı tiplere sahip olabilir. Bir negatif veya pozitif sayıyı tutan değiģken ile yazı tutan bir değiģken farklı tiplere sahiptir. 20

21 DeğiĢkenler Dim anahtar kelimesi ile tanımlanır. Dim sayi NOT Dim sözcüğü, "boyut" anlamına gelen Dimension kelimesinin kısaltmasıdır. Bu Ģekilde tanımlanan değiģkenler Object (nesne) tipindedir, yani her türden veriyi tutabilirler. Nesne tipindeki değiģkenler, tanımlanmalarının kolay olması ve istenen tipte değer tutabilmeleri açısından avantajlı olsa da, performansı önemli ölçüde düģürürler. Tuttukları değerlerin tipleri biliniyorsa, değiģkenleri tanımlarken tiplerini belirlemek gerekir. Dim sayi As Integer Dim kelime As String Tanımlanan değiģkenlerin tipleri As anahtar kelimesinden sonra belirtilir. DeğiĢken isimlerini belirlerken bazı noktalara dikkat etmek gerekir: BoĢluk, nokta, soru iģareti, noktalı virgül, çift tırnak, tek tırnak, aritmetik operatörler, karģılaģtırma operatörleri ve atama operatörleri ile parantezler kullanılamaz. Sayı ile baģlayamaz. Visual Basic.NET dilinde tanımlı anahtar kelimeler kullanılamaz. Dim DeğişkenAdı As VeriTipi kuralına uyulmalıdır. İPUCU DeğiĢken isimlerinde Türkçe karakter kullanılırsa, farklı dil seçenekli iģletim sistemlerinde çalıģma anında hata üretecektir. Hatalı bazı değişken tanımları: Dim dim As Double Dim (sayi) As Short Dim 333sayisi As Integer Dim "kelime" As String Dim <isim> As String Aynı tipteki değiģkenler tek bir satır içinde tanımlanabilir. Dim sayi1, sayi2 As Integer DeğiĢkenlere değer atamak = operatörü ile yapılır. EĢitliğin sağ tarafındaki değer, sol tarafta bulunan değiģkene atanır. Dolayısıyla sağ taraftaki ifadenin değeri değiģmez. sayi1 = 10 sayi2 = sayi1 DeğiĢkenler tanımlandıkları sırada baģlangıç değeri alabilirler. Dim isim As String = "Ahmet METIN" Uygulama geliģtirirken, değiģkenlerin tanımlanarak kullanılması, yazım yanlıģlarından kaynaklanan karıģıklıkları engeller. DeğiĢkenlerin tanımlanmadan kullanılması için Option Explicit seçeneğinin kapalı olması gerekir. Option Explicit seçeneğini projenin özelliklerindeki Build sekmesinden değiģtirilebileceği gibi, kod sayfalarının en üstünde de değiģtirilebilir. ġekilden de görüleceği gibi; sayı isimli değiģken, daha önce tanımlanmadığı halde, msgbox fonksiyonuna parametre olarak verildiğinde derleyici hata vermeden programı derliyor ancak, değiģkenin içeriği NULL olduğundan mesaj penceresinde herhangi bir bilgi görünmemektedir. RESĠM: Option Explicit seçeneği kapalı. 21

22 Option Explicit seçeneğinin On olması, tanımlanmamıģ değiģkenlerin kullanılmasına izin vermez, tasarım anında hata üreterek programcıya bildirir. Varsayılan durumda On değeri seçilidir. Yukarıdaki uygulamada, option explicit on (varsayılan durum) yapıldığında derleyicinin verdiği hata, yandaki Ģekilde görülmektedir. DeğiĢkenler program içinde, tuttukları verilere ulaģmak için kullanılır. Ancak değiģkenlere ulaģmak, tanımlandıkları yerde veya alt bloklarda mümkündür. Bu kavrama değiģkenlerin kapsam alanı (Scope) denir. Kapsam alanı dıģındaki bir yerden değiģkene ulaģılamaz. Namespace NameSpace1 Module Module1 Dim ModulDegiskeni As Integer Class Class1 Dim SinifDegiskeni As Integer Sub Sub1() Dim YordamDegiskeni As Integer Do Dim DonguDegiskeni As Integer Loop Sub Sub2() Dim YordamDegiskeni2 As Integer End Class End Module End Namespace AĢağıdakitabloda kod bloklarından hangi değiģkenlere ulaģılabildiği görülüyor. Module1 Class1 Sub1 Sub2 Loop ModulDegiskeni Evet Evet Evet Evet Evet SinifDegiskeni Evet Evet Evet Evet YordamDegiskeni Evet Evet YordamDegiskeni2 Evet Evet DonguDegiskeni Evet Uygulamanın çalıģması değiģkenlerin kapsam alanlarındayken, bu değiģkenler bellekte tutulur. Dolayısıyla değiģkenlerin tanımlandıkları yer, kullanılacağı amaca göre seçilmelidir. Örneğin bir değiģken birden fazla yordamda kullanılacaksa, bir üst düzeyde (sınıf düzeyinde) tanımlanmaları gerekir. Ancak sadece bir yordam içinde kullanılan değiģkenler sınıf düzeyinde tanımlanırsa, bellekte fazladan yer tutar ve performans düģer Sabitler Sabit, sürekli aynı değeri tutan değiģkendir. Uygulamanın çalıģması boyunca değiģmeyen bir değer kullanılıyorsa, sabit kullanılması kodun kolay okunmasını sağlayacaktır. Sabitler tanımlandıktan sonra değiģtirilemeyeceği için, tanımlandıkları anda değerlerinin verilmesi gerekir. Const PI As Double = 3.14 Sabitlerin kapsam alanları değiģkenler ile aynıdır. 22

23 1.11. Veri Tipleri Veri tipi, değiģkenlerin tuttukları değerlerin türünü ve bellekte tutulacak büyüklüğünü tanımlar. DeğiĢkenleri veri tipleri ile tanımlarken verinin büyüklüğüne göre bir veri tipi seçilmelidir. Visual Basic.NET veri tipleri Tabloda listelenmiģtir. Veri Tipi Büyüklük Değer Boolean 2 Bayt True - False Byte 1 Bayt Char 2 Bayt Tek bir Unicode karakteri tutar Date 8 Bayt tarihi 00:00:00 saati tarihi 23:59:59 saati Decimal 16 Bayt Maksimum 29 haneli sayı tutar. +/-79,228,162,514,264,337,593,543,950,335 arasında değer alır Double 8 Bayt Negatif sayı aralığı: E+308 ile E-324 Pozitif sayı aralığı: E-324 ile E+308 Int32 4 Bayt -2,147,483,648-2,147,483,647 Int16 2 Bayt 32,768-32,767 Int64 8 Bayt -9,223,372,036,854,775,808-9,223,372,036,854,775,807. Single 4 Bayt Negatif sayı aralığı: E+38 ile E-45 Pozitif sayı aralığı: E-45 ile E+38 String Maksimum 2,147,483,647 Unicode karakter tutar Double ve Single veri tiplerinin aralığında belirtilen "E + sayı" ifadesi, 10 ^ sayı ile çarpılacağını belirtir. Örneğin 12 E-3 ifadesi, 12x10-3 = 12 * anlamına gelir. -1.7E-5 = E+10 = E+2 = E-3 = NOT Int16, Int32, Int64.NET veri tipleridir. Visual Basic dilindeki karģılıkları Short, Integer, Long veri tipleridir. Dim yazi As String = "Veri tipleri örnekleri" Dim bool As Boolean = True Dim karakter As Char = "A" Dim tarih As Date = #4/23/2005# Dim numerik As Decimal = Dim cift As Double = E-120 Dim tek As Single = 3.32E+100 Dim bayt As Byte = 255 Dim kisasayi As Short = Dim tamsayi As Integer = Dim uzunsayi As Long = Uygulamalar çalıģırken, çoğu zaman veri tipleri birbirlerine otomatik olarak dönüģtürülür. Örneğin InputBox geriye String tipinde bir değer döndürür. Ancak kullanıcı mesaj kutusuna sayı girerse ve biz bu değeri Integer tipinde bir değiģkene atarsak, veri dönüģtürme iģlemi yapılır. Buna Implicit Conversion (kapalı dönüģtürme) denir. 23

24 Dim rakam As Integer rakam = InputBox("Rakam giriniz") Büyük veri tiplerinden küçük veri tiplerine dönüģüm sırasında, değer kayıpları meydana gelebilir. Örneğin Single tipinden Short tipine yapılacak bir dönüģümde virgülden sonraki sayılar kaybedilecektir. Dim virgullu As Single = 1.12 Dim kisasayi As Short = virgullu ' kisasayi değişkenin son değeri 1 olur NOT Option Strict seçeneği On olarak ayarlanırsa, Implicit Conversion iģlemine izin verilmez. Veri dönüģtürme iģlemlerinin kapalı olarak yapılması sisteme bırakılmıģtır. Bu iģlemde kodların tekrar okunması sırasında dönüģtürme iģlemleri gözden kaçabilir ve değer kayıpları fark edilmez. Bu durumda dönüģtürme iģlemleri hazır fonksiyonlar ile açık olarak yapılmalıdır. Buna Explicit Conversion (açık dönüģtürme) denir. Dim rastgelesayi As Double = Rnd() * 30 MsgBox(rastgeleSayi) Dim rastgeletamsayi As Integer = CInt(rastgeleSayi) MsgBox(rastgeleTamSayi) Dim rastgeletamsayi As Integer = CInt(rastgeleSayi) MsgBox(rastgeleTamSayi) Explicit Conversion fonksiyonları: CStr. Verilen değeri String tipine dönüģtürür. CInt. Integer veri tipinin alabileceği değerler arasında girilen sayıları Integer tipine dönüģtürür. CDbl. Double veri tipinin alabileceği değerler arasında girilen sayıları Double tipine dönüģtürür. CDate. Doğru tarih ve saat biçimde yazılmıģ herhangi bir ifadeyi Date tipine dönüģtürür. CLng. Long veri tipinin alabileceği değerler arasında girilen sayıları Long tipine dönüģtürür. CSng. Single veri tipinin alabileceği değerler arasında girilen sayıları Single tipine dönüģtürür. CDec. Decimal veri tipinin alabileceği değerler arasında girilen sayıları Decimal tipine dönüģtürür. Sayı dönüģtürme fonksiyonları, True Boolean tipini -1, False Boolean tipini 0 olarak dönüģtürürler. Ayrıca tüm fonksiyonlar, düzgün biçimde verilmiģ String tipinde değiģkenleri de ilgili veri tipine değiģtirirler. Dim sayı As Integer = CInt("12345abc") 'InvalidCastException hatası fırlatılır Structure (Kullanıcı tanımlı) veri tipi Structure veri tipleri, programcıların kendilerinin tanımladığı veri tipleridir. Structure, birkaç veri tipinin bir araya getirilmesiyle oluģturulan bileģik bir tiptir. Structure veri tiplerinde yordam tanımları da yapılabilir. Structure Nokta Dim x As Integer Dim y As Integer End Structure Structure Ucgen Dim n1 As Nokta Dim n2 As Nokta Dim n3 As Nokta End Structure Diziler Dizi değiģkenleri, aynı tipte birçok veriyi bir arada tutmayı sağlar. Benzer iģlemlerde kullanılan değiģkenler bir dizi altında listelenebilir. Örneğin kullanıcıdan alınan isimler String tipinde bir dizi içinde toplanabilir. Dim isimler(3) As String 24

25 Diziler tanımlanırken, ismi verildikten sonra parantez içinde kaç eleman içereceğini belirtmek gerekir. Dizilerin indisleri sıfırdan baģlar. Örnekteki isimler dizisinin String tipinde 4 tane elemanı vardır. Dizilerin elemanlarına ulaģmak için, istenen elemanın indisinin verilmesi gerekir. isimler(0) = "Ali" isimler(1) = "Ahmet" isimler(2) = "Mehmet" isimler(3) = "Ayşe" MsgBox(isimler(3)) Dizilere tek tek değer atanabildiği gibi, tanımlarken de değer atanabilir. Dim isimler() As String = {"Ali","Ahmet","Mehmet","Ayşe"} Diziler tek boyutlu olduğu gibi, birkaç boyutlu diziler de tanımlanabilir. 'İlk boyutunda 5, İkinci boyutunda 6 Integer değeri olan 2 boyutlu dizi Dim matris(4, 5) As Integer Burada, dizinin ilk boyutunda 5 tane eleman vardır. Ġlk boyuttaki her eleman için Ġkinci boyutta 6 eleman bulunur. Dolayısıyla dizinin toplam 30 elemanı vardır. Bu dizide bir boyut daha olsaydı, o boyutun her elemanı için diğer boyutlardaki 30 eleman bulunacaktı. Çok boyutlu dizilerin eleman sayıları boyutlarındaki eleman sayıları çarpılarak hesaplanabilir. Dim dizi(boyut1,boyut2,boyut3,...,boyutn) As VeriTipi ' Eleman sayısı: (boyut1 + 1) * (boyut2 + 1) *... * (boyutn + 1) Çok boyutlu dizilere baģlangıç değerleri, dizinin boyutu dikkate alınarak verilmelidir. Boyutlardaki elemanlar küme parantezleri ile gruplanmalıdır. ' İlk boyutunda 2, ikinci boyutunda 4 eleman olan 2 boyutlu dizi Dim matris(,) As Integer = {{1, 2, 3, 4}, {5, 6, 7, 8}} Çok boyutlu dizilerin elemanlarına ulaģmak için, her boyut için indis göstermek gerekir. matris(0, 0) = 1 Dizileri tanımladıktan sonra, eğer boyutun büyüklüğü (eleman sayısı) yetmiyorsa tekrar boyutlandırmaya ihtiyaç duyarız. Aynı Ģekilde boyutun büyüklüğünü azaltmak için de tekrar boyutlandırma kullanılır. Dim dizi() As Double = {0.1, 0.2, 0.3} ReDim dizi(4) ReDim, yeniden boyutlandır anlamına gelir. Burada dizininin boyutu beģ eleman alacak Ģekilde ayarlanır. Ancak ReDim, dizileri boyutlandırırken değerleri korumaz. Preserve anahtar kelimesi kullanılmadan tekrar boyutlandırılan diziler, içerdiği verileri kaybeder. ' (3,0) boyutlu olan bir dizi, ' değerlerini koruyarak (3,1) boyutlu yapılır Dim dizi(,) As Double = {{1.0}, {2.0}, {3.0}, {4.0}} ReDim Preserve dizi(3, 1) Bazı Dizi Özellikleri ve Metotları Diziler,.NET Framework içinde tanımlı Array sınıfı ile temsil edilir. Tüm diziler Array sınıfında tanımlı özellikleri ve metotları kullanırlar. Length. Dizinin bütün boyutlarındaki toplam eleman sayısını veren özelliktir. Dim ComboBoxDizisi(19) As ComboBox MsgBox(ComboBoxDizisi.Length) 'Sonuç = 20 25

26 Dim dizi(1, 4, 4, 5, 6) As Integer MsgBox(dizi.Length()) 'Sonuç = 2 * 5 * 5 * 6 * 7 = 2100 Rank. Dizinin boyut sayısını veren özelliktir. MsgBox(dizi.Rank) 'Sonuç = 5 GetLength. Ġndisi verilen boyutun kaç elemanlı olduğunu gösterir. Burada indisin sıfırdan baģladığına dikkat edilmelidir. Dim dizi(10, 40, 50, 80, 90) As Integer MsgBox(dizi2.GetLength(4)) 'Sonuç = 91 Clear, Reverse ve IndexOf metotları Array sınıfında Shared (paylaģtırılmıģ) olarak tanımlı metotlardır. ĠĢlemin yapılacağı dizi parametre olarak verilmelidir. Clear. Parametre olarak verilen dizinin, belirtilen indis aralığındaki tüm değerlerini temizler. Temizleme iģleminde atanan değer, dizi elemanlarının tiplerine göre değiģir. Örneğin Integer tipinde tanımlı bir dizinin elemanları temizlenirse 0 değerini alacaktır. Buna karģın String tipindeki elemanlar "" (boģ yazı) değerini alır. Dim dizi() As Integer = {12, 13, 14, 15} ' 1. indisten baģlayarak, 3 elemanı temizle Array.Clear(dizi, 1, 3) MsgBox(dizi(2)) 'Sonuç = 0 ' Dizinin tüm elemanlarını temizler Array.Clear(dizi, 0, dizi.length) Reverse. Parametre olarak verilen dizinin eleman sırasını tersine çevirir. Dizinin tüm elemanlarının veya belirli indis aralığındaki elemanlarının sırası tersine çevrilebilir. Dim harfler() As String = {"A", "B", "C"} Array.Reverse(harfler) MsgBox(harfler(2)) 'Sonuç = A Dim harfler() As String = {"A", "B", "C"} Array.Reverse(harfler, 0, 1) MsgBox(harfler(2)) 'Sonuç = C IndexOf. Ġlk parametrede verilen dizide, ikinci parametrede verilen değeri arar. Aranan değer dizide bulunursa indisi, bulunamazsa -1 döndürür. Dim notlar() As Single = {78.1, 99.9, 100, 12.2} Dim maxnot As Single = 100 MsgBox(Array.IndexOf(notlar, maxnot)) ' Aranan maxnot değerinin indisi = Debug Visual Studio Debug aracı, çalıģma anında kodlar arasında satır satır ilerleyerek hataları bulmayı sağlar. Ġncelemeye baģlamak istenen kod satırı üzerinde bir BreakPoint (durma noktası) konarak, hata ayıklayıcının bu satır çalıģtırılmadan önce orada durması sağlanır. 26 RESĠM: Durma noktası.

27 Uygulama çalıģtırıldığında, BreakPoint konulan kod satırına kadar durmaz. Belirtilen satıra sıra gelindiğinde, kod sayfasında, o an üzerinde bulunan satır ok ile gösterilir. Visual Studio ile hata ayıklarken, tanımlanan değiģkenlerin o andaki değerleri incelenerek mantıksal hatalar bulunabilir. Hata ayıklama sırasında bazı Visual Studio panelleri, değiģkenlerin, kontrollerin ve nesnelerin değerlerini listelemek için kullanılabilir. Bu paneller Debug menüsünde Windows alt menüsünden gösterilir. Autos Paneli. ÇalıĢmakta olan satırdaki ifade ile bir önceki ifadede bulunan değiģken ve kontrollerin değerlerini listeler. Locals Paneli. Ġçinde bulunulan kapsam alanındaki tüm değiģkenlerin değerlerini listeler. Watch Paneli. Değeri incelenmek istenen değiģken veya kontroller bu panele elle yazılmalıdır. Kodlar arasında ilerlemek ve hata ayıklamaya devam etmek için dört yol vardır. Bu komutlara Debug menüsünden veya Debug araç çubuğundan ulaģılabilir. Step Into. Kod satırında bir yordam çalıģtırılacaksa, bu yordamın içine girer. Bu yordam farklı bir yerde ise, ilgili sayfa açılır ve hata ayıklamaya devam edilir. Step Over. Herhangi bir yordam içine girmeden, içindeki kapsam alanında çalıģmaya devam eder. Step Out. Bulunan yordamdan çıkarak hata ayıklamaya devam eder. Continue. Birden fazla durma noktası yerleģtirilmiģse, bir sonraki noktaya kadar çalıģmaya devam eder. Hata ayıklama, çalıģtırılacak hiçbir satır kalmadığında durur ve uygulama normal çalıģmasına devam eder. Durma noktaları kaldırılarak ya da pasif hale getirilerek uygulamanın durması engellenebilir. Bütün durma noktalarını kaldırmak için Debug menüsünden Clear All Break- Points komutu, pasif hale getirmek için Disable All BreakPoints komutu verilmelidir. Durma noktalarını aktif hale getirmek için tekrar aynı komut seçilmelidir Operatörler Visual Basic.NET dilinde çalıģırken, değiģkenler üzerinde birçok iģlem yapılır. Hesaplamalarda aritmetik iģlemler, kontrollerde karģılaģtırma iģlemleri veya mantıksal iģlemler yapılır. Bu iģlemler için Visual Basic.NET dilinde tanımlı operatörler kullanılır Aritmetiksel Operatörler Bu operatörler aritmetik iģlemlerinde, sayılarla veya sayı tutan ifadelerle kullanılır. Çarpma 27

28 Bölme Dim sayi As Integer = 100 sayi = 200 * 2 Dim bolum As Double bolum = sayi / 23 Çıkarma Dim sonuc As Integer = bolum Toplama Dim toplam As Integer toplam += sonuc 'Bu ifade, "toplam = toplam + sonuc" ile aynı anlama gelir İPUCU Aritmetik operatörleri, eģittir ifadesi ile beraber kullanılırsa, iģlem değiģkenin kendisi ile yapılır. Üs alma toplam ^= 2 Mod alma Dim kalan As Integer = toplam Mod 42 'Sonuç, toplam değişkenindeki değerin 42 ile bölümünden kalan sayıdır Karşılaştırma Operatörleri Bu operatörler veri tiplerini birbirleriyle karģılaģtırmak için kullanılır. Bu operatörler ile yapılan iģlemlerin sonucunda True ya da False değeri döner. KarĢılaĢtırma operatörleri yalnızca sayı tipleri üzerinde yapılmaz. String tipleri birbirleriyle alfabetik sıraya göre karģılaģtırılabilir. Küçük "A ile başlayan yazı" < "B ile başlayan yazı" 'Sonuç: True Küçük Eşit Dim sayi As Double = 1.5 Dim sayi2 As Single = 1.3 sayi2 <= sayi 'Sonuç: True Büyük sayi2 > sayi1 'Sonuç: False Büyük Eşit sayi2 >= sayi1 'Sonuç: False Eşit "Yazı" = "yazı" 'Sonuç: False Eşit Değil "Yazı" <> "yazı" 'Sonuç: True String Operatörleri String tipleri üzerinde gerçekleģtirilen iģlemler için tanımlı operatörlerdir. String tipindeki değiģkenleri birbirine bağlama iģlemi & operatörü ile gerçekleģir. Dim isim As String Dim soyad As String Dim IsimSoyad As String = isim & " " & soyad 28

29 1.16. Karar Yapıları ve Döngüler Karar yapıları ve döngüler, algoritmaların akıģını yönlendirir. If ve Select Case karar yapıları ile gerekli kontroller yapılarak, uygulama istenen Ģekilde yönlendirilir. Döngüler ile belli bir yol izelenerek birçok kez tekrarlanacak iģlemler bir defa yazılır. Bu iģlem, döngü sonlanana kadar gerçekleģtirilir. Uygulamalar çalıģtırılırken, yazılan kodların çalıģma sırası, satırların teker teker iģlenmesi ile gerçekleģir. Ancak çoğu zaman, bazı kodların sadece belli durumlarda çalıģması istenir. Örneğin uygulama açılırken kullanıcı adı ve parola sorulması, kullanıcıların seviyelerine göre eriģim izinlerinin tanımlanması gibi durumlarda kontrol iģlemleri yapılmalıdır. Bu kontroller de karar yapıları ile gerçekleģtirilir. Algoritmaların akıģını kontrol etmekte en büyük rol, karar yapılarınındır. Visual Basic.NET dilinde farklı Ģekillerde kullanılan, ancak benzer görevlere sahip karar yapıları tanımlıdır If If karar yapısı, bir koģul sağlandığı zaman yapılacak iģlemleri kapsar. Kontrol edilecek koģul ifadesinin sonucu True değerini alırsa, If EndIf bloğu arasındaki kodlar çalıģtırılır. If Koşul Then End If Örnek: Vize ve final notunu kullanıcıdan aldıktan sonra, geçme notunu hesaplayan ve notun 50'den büyük olması durumunda ekrana "geçtiniz" mesajını çıkartan program kodları aģağıdaki gibidir. Dim gecmenotu As Single Dim finalnotu As Short = InputBox("Final Notunu girin:") Dim vizenotu As Short = InputBox("Vize Notunu girin:") gecmenotu = finalnotu * vizenotu * 0.3 If gecmenotu > 50 Then MsgBox("Geçtiniz tebrikler...") End If Örnek: InputBox ile çoğunlukla sayı tipinde bir değer almak istenir. InputBox metodundan dönen değer her zaman String tipinde olacağı için, bu değer Implicit Conversion ile istenen sayı tipine çevrilir. Dim sayi As Integer = InputBox("Sayi giriniz") Ancak InputBox kutusunda Cancel düğmesi tıklandığında ya da sayı tipinde bir Ģey girilmediğinde Resimde görülen hata mesajı alınır. Bu durumda, girilen değerin sayı tipinde olup olmadığı kontrol edilmek zorundadır. Dim sayi As Integer Dim gecici As String = InputBox("Sayi giriniz:") If IsNumeric(gecici) Then sayi = gecici End If If yapısında geçen koģul ifadelerinin sonucu Boolean tipinde bir değerdir. Eğer If deyimindeki bir karģılaģtırma ifadesi kullanılmazsa, buradaki değer Implicit Conversion ile Boolean tipine çevrilir. 29

30 Dim sayi As Integer = InputBox("Sayi girin:") If sayi Mod 2 Then MsgBox(sayi & " tek sayıdır.") End If sayi Mod 2 ifadesinin değeri, girilen sayıya göre 1 ya da 0 olabilir. Bu değerler If kontrolünde Boolean tipine çevrilir. 1 değeri True olarak çevrileceği için, girilen sayı tek ise If bloğunun içine girilir. If blokları içinde iç içe If kontrolleri yapılabilir. Dim SinifKodu As String = InputBox("Açılacak Sınıf Kodunu Girin:") If SinifKodu.Length = 6 Then 'Sınıf kodlarının son 4 harfi ise sayı tipindedir 1 ve sınıf numarasını belirtir Dim sinifnumarasi As String = Mid(SinifKodu, 3, 4) If IsNumeric(sinifNumarasi) Then 'Sınıf kodlarının ilk iki harfi, 1 sınıfın türünü belirler Dim sinifturu As String = Mid(SinifKodu, 1, 2) If sinifturu = "YM" Then Label1.Text = "YM sınıfı açılıyor" End If If sinifturu = "YU" Then Label1.Text = "YU sınıfı açılıyor" End If End If End If If Then Else Else ifadesi, If yapısındaki koģulun sağlanmadığı bütün durumlarda devreye girer. If Koşul Then 'Kodlar Else 'Diğer kodlar End If KoĢul True ise If - Else arasındaki kodlar, koģul False ise Else - End If arasındaki kodlar çalıģır. Örnek: Her 100 milisaniyede bir, formun renginin siyahken beyaz olması, beyazken de siyah olması için, formun renginin kontrolü yapılması gerekiyor. Dim Beyaz As Boolean = True Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Beyaz Then Me.BackColor = Color.Black Beyaz = False Else Me.BackColor = Color.White Beyaz = True End If If kontrolünde formun beyaz olup olmadığı Boolean tipindeki bir değiģkende tutulur. KoĢulda eğer Beyaz adlı değiģken True ise, formun arka planı siyah yapılır. Bu koģulun sağlanmadığı durumda, yani Beyaz değiģkeninin False olduğu durumda, Else içindeki kodlar çalıģır ve formun arka planı beyaz yapılır. Her kontrolden sonra Beyaz değiģkeninin değiģtirilmesinin nedeni, formun bir siyah, bir beyaz olmasının istenmesidir. 30

31 ElseIf If deyimindeki koģul sağlanmadıysa Else deyimindeki kodlar çalıģıyordu. Ancak bazı durumlarda Else içinde de kontrol yapmak gerebilir. If Koşul Then ElseIf Koşul2 Then ElseIf Koşul3 Then End If Koşul Operatörleri (And, Or, Not, AndAlso, OrElse) Veri tipleri ve değiģkenler üzerinde kontrol yapılırken birden fazla koģula ihtiyaç duyulabilir. Bu durumda, koģulları birbirleriyle karģılaģtıracak operatörler kullanılır. Bu kontrollerden dönen değerler Boolean tipinde olduğu için, koģul operatörleri de bu değerler üzerinde iģlem yaparlar And Bu operatör, verilen koģulların kesiģimini alır. Eğer tüm koģulların değeri True ise sonuç da True olur. En az bir tane False değeri olan koģul varsa, sonuç False olur. TABLO: And Operatörü Or KoĢul 1 KoĢul 2 KoĢul 1 And KoĢul 2 True True True True False False False True False False False False Or operatörü, verilen koģulların birleģimini alır. Eğer tüm koģulların değeri False ise sonuç False olur. En az bir tane True değeri varsa sonuç True olur. TABLO: Or Operatörü XOr KoĢul 1 KoĢul 2 KoĢul 1 Or KoĢul 2 True True True True False True False True True False False False XOr operatörü, verilen koģulların farklarını kıyaslar. Eğer her iki data aynı ise False değerini üretir. Eğer iki data birbirinden farklı ise True değerini üretir. TABLO: XOr Operatörü KoĢul 1 KoĢul 2 KoĢul 1 XOr KoĢul 2 True True False True False True False True True False False False Dim x As String = " " Dim y As String = " " MessageBox.Show(x Xor y) 'Sonuç: 1 ya da True 31

32 Not Bir koģulun değerini tersine çevirir. KoĢul False ise True, True ise False olur AndAlso KoĢullardan biri False ise, diğerleri kontrol edilmeden False değeri döndürülür. Bu tip bir kullanım, birçok koģulun kontrol edilmesi gerektiğinde performansı artırır. Dim dizi() As String = {} 'Diziye eleman ekleme işlemleri If dizi.length > 0 AndAlso dizi(1).endswith(".") Then Label1.Text = "Cümle sonundaki kelime: " & dizi(1) End If Bu örnekte, dizinin ilk elemanı üzerinde bir kontrol yapılmak isteniyor. Ancak diziye eleman eklenmemiģse, ilk elemana ulaģırken hata üretilecektir. Dolayısıyla dizinin uzunluğunu da kontrol etmek gerekir. Kontrol And ifadesi ile yapılsaydı, dizi elemanın noktayla bitip bitmediği ve dizinin uzunluğu kontrol edilecekti. Bu durumda iç içe If ifadeleri ile uzun bir kod yazılacaktı. Pek çok kıyaslama gerekecek ve performans düģecekti. Ancak burada, dizi uzunluğu koģulu sağlanmazsa, diğer koģula geçilmeden If kontrolünden çıkılır OrElse KoĢullardan biri True ise, diğerleri kontrol edilmeden True değeri döndürülür. Dim Rol As String 'Veritabanından, kullanıcının rolü alınır. Sadece Administrator, Moderator ve Power User rolündeki 'kullanıcılar dosya silme işlemi yapabilirler. If Rol = "Administrator" OrElse Rol = "Moderator" OrElse Rol = "Power User" Then Kill("C:\VeriTabani.mdb") End If Dosya silme iģlemi için, kullanıcının rolü veritabanından alındıktan sonra, kontrol iģlemi yapılır. Eğer bir kullanıcın rolü Administrator, Moderator veya Power User rollerinden biriyse, diğer kontrollerin yapılması gerekmez. Bu örnekte Rol değiģkeni Administrator değerine eģitse, diğer iki koģul kontrol edilmeden True ifadesi döner Select Case Select deyimi ElseIf ile benzer iģlevi görür, ancak okunması daha kolaydır. Select ile seçilen bir değerin kontrol edilmesi Case ifadelerinde yapılır. Dim dosya As String = TextBox1.Text Select Case ComboBox1.Text Case "Kopyala" Dim yeniyer As String yeniyer = InputBox("Kopyalanacak yeri girin:") FileCopy(dosya, yeniyer) Case "Ad Değiştir" Dim yeniad As String yeniad = InputBox("Dosyanın yeni adını girin:") Rename(dosya, yeniad) Case "Sil" Kill(dosya) Case Else MessageBox.Show("Hatalı seçim") End Select 32

33 Buradaki Select Case kullanımı, ComboBox kontrolünden seçilen öğeye göre bir iģlemin gerçekleģtirilmesini sağlar.. Seçilen öğenin yazısı Case ifadelerinde verilen değerlere eģitse, ilgili kodlar çalıģtırılır. Case Else ise, diğer koģulların sağlanmadığı tüm durumlarda devreye girer. Case ifadelerindeki kontroller, sadece bir tek değere "eģitlik" ile sınırlı değildir. Select ile kontrol edilecek değerin birden fazla olması durumunda, aynı kodların çalıģması istenebilir veya değerlerin belirli aralıklarda olması gibi durumlarla da karģılaģılabilir To Kullanımı To ile değerlerin belirli aralıklarda olup olmadığı kontrol edilir. String tipindeki değerlerin kontrolü alfabetik olarak yapılır. Dim durum As String Select Case UrunStokSayisi Case 0 durum = "Ürün Tükenmiş" Case 1 To 10 durum = "Çok Az" Case 10 To 25 durum = "Az" Case 25 To 50 durum = "Yeterli" Case 50 To 75 durum = "Fazla" Case Else durum = "Çok Fazla" End Select Is Kullanımı Is ifadesi karģılaģtırma operatörleri ile kullanılır. Dim sayi As Integer = Rnd() * 1000 Select Case sayi1 Case Is < 10 MsgBox(sayi & " sayısı tek basamaklıdır") Case Is < 100 MsgBox(sayi & " sayısı iki basamaklıdır") Case Is < 1000 MsgBox(sayi & " sayısı üç basamaklıdır") End Select Burada sayi değiģkeninin kontrolü, küçüktür karģılaģtırma operatörü ile yapılıyor. Burada dikkat edilmesi gereken bir durum da, sayi değiģkeninin tek basamaklı olduğu zamanki durumdur. Örneğin, sayı değiģkeni 6 değerini aldığında, Case ifadelerindeki bütün koģulların sağlandığı görülür. Birden fazla Case içine girilemediğinden, koģulun sağlandığı ilk Case içindeki kodlar çalıģtırılır. Bu örnekte Case Is < 1000 ifadesi en baģa alınsaydı, girilen bütün sayıların üç basamaklı olduğu gösterilirdi. 33

34 Birden Fazla Koşulun Kontrolü Bir Case ifadesine birden fazla koģul kullanılmak isteniyorsa, bu koģullar virgülle ayrılır. Bu koģullardan herhangi biri sağlandığı zaman Case içine girilir. Dolayısıyla virgül, OrElse koģul operatörü görevini görür. Örnek: Select Case ifade Case Koşul1, Koşul2, Koşul3 Case Koşul4, Koşul5 End Select Select MsgBox("Devam etmek istiyor musunuz?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.No, MsgBoxResult.Cancel Label1.Text = "İşlem iptal edildi" Case MsgBoxResult.Yes Label1.Text = "Kayıt işlemi gerçekleştirildi." End Select Dim UzmanlikAlani As String Select Case ProgramlamaDili Case "PHP", "ASP" UzmanlikAlani = "Web" Case "T-SQL" UzmanlikAlani = "Veri Tabanı" End Select Hangi Karar Cümlesi Nerede Kullanılır? If ve Select karar yapıları benzer iģlevler görseler de, kullanım yerlerine ve birbirlerine göre değiģik avantajları vardır. If Else If karar yapılarında, kontrol edilen değiģkenlerin ya da değerlerin her seferinde tekrar yazılması gerekir. Bu durumda Select karar yapısı, kodların yazılıģını ve okunuģunu kolaylaģtırması açısından tercih edilmelidir. Ayrıca, bir Case ifadesinde kontrol edilen koģullar virgülle ayrıldığında OrElse iģlemi yapılır. Select Case karar yapısında And kullanımı yapılamaz. Dim sayi As Integer = 90 Select Case sayi Case Is > 20, Is < 40 MsgBox(sayi & " sayısı, 20 ile 40 arasındadır.") Case Is > 40 MsgBox(sayi & " sayısı, 40 tan büyüktür.") End Select Bu örnekte ilk Case ifadesindeki ilk koģul gerçekleģtiği için diğer koģullar göz ardı edilir. Verilen sayının 20 ile 40 arasında olmasının kontrolü, Case 20 To 40 ifadesi ile ya da If karar yapısı kullanılarak yapılması gerekir. If sayi > 20 And sayi < 40 Then MsgBox(sayi & " sayısı, 20 ile 40 arasındadır.") ElseIf sayi > 40 Then MsgBox(sayi & " 40 tan büyüktür.") End If Bir grup RadioButton kontrolü içinden sadece bir tanesi seçilebildiği için, seçilen kontrolü bulmak için ElseIf yapısının kullanımı yeterli olacaktır. 34

35 If RadioButton1.Checked Then ElseIf RadioButton2.Checked Then ElseIf RadioButton3.Checked Then End If Ancak bu kontroller, CheckBox kontrolünün kullanım yapısına uymaz. Formlarda birden fazla CheckBox kontrolü seçilebildiği için, seçilen kontrolleri bulmak için If EndIf blokları kullanılmalıdır. If CheckBox1.Checked Then End If If CheckBox2.Checked Then End If If CheckBox3.Checked Then End If End If Döngüler Algoritmalarda bazı iģlemlerin tekrar çalıģması için, bu iģlemlerin her seferinde yazılması gerekir. Ancak bu çözüm, çok fazla tekrar için hem yazmayı, hem de okumayı zorlaģtırır. Örneğin, yüz elemanlı bir diziye rasgele sayı atanması için iģlemin yüz defa yazılması gerekir. Döngüler ile iģlem sadece bir defa yazılır ve tekrar sayısına göre bu iģleme geri dönülür. RESĠM: Döngü For Next For döngüsü bir iģlemin belirli sayıda yapılması için kullanılır. Dim sayac As Byte For sayac = 0 To 10 MsgBox("Merhaba") Next DeğiĢken tanımlamaları, For döngüsünün içinde de yapılabilir. Bu durumda, değiģkenin kapsam alanı bu döngüyle sınırlı kalır. 35

36 For sayac As Byte = 0 To 10 MsgBox("Merhaba") Next Bu döngünün avantajı, sayacın tekrar sayısı ile kontrolünü ve artırılmasını kendisi yapmasıdır. Next ifadesi sayac değiģkenini varsayılan durumda bir artırır. For döngüsü içinde kullanılan sayac değiģkeni sayısal bir değer olmalıdır. Döngülerde kullanılan sayaçlar, sadece belli bir sayıda iģlem yapmayı sağlamaz. Sayaçların artma veya azalma adımları belirli olduğu için, kod içinde çoğu zaman bu avantajdan yararlanılır. ListBox1.Items.Add("Karakter - ASCII kod karşılığı") Dim i As Integer For i = 0 To 255 ListBox1.Items.Add(Chr(i) & " - " & i) Next Örneğin dizi iģlemlerinde, dizinin her elamanına ulaģmak için sayaç kullanılabilir. Sayacın artma hızı bir olduğu için dizi(sayac) ifadesi, sırayla dizinin elemanlarına ulaģmayı sağlar. Dim i As Integer Dim dizi(10) As Integer For i = 0 To dizi.length - 1 dizi(i) = Rnd() * 100 Next DİKKAT Döngüler içinde dizi kullanılırken, sayaç sıfırdan baģlamıģsa döngünün biteceği nokta "dizi uzunluğu -1" olmalıdır. DİKKAT DeğiĢken tanımlamaları For döngüsünün içinde de yapılabilir. Bu durumda, değiģkenin kapsam alanı bu döngüyle sınırlı kalır. Döngülerde sayaç değiģkeninin artma veya azalma adımları Step ifadesi ile belirlenir. Dim fahr, derece As Integer For derece = 0 To 100 Step 10 fahr = derece * Label1.Text &= fahr & " Fahrenheit= " Label1.Text &= derece & " Celcius" & vbcrlf Next For Döngülerinin İç İçe Kullanımı Çoğu zaman For döngülerindeki her etap için baģka bir döngünün kurulması gerekir. Örneğin, bir müģterinin birden fazla telefon numarası bir dizi içinde tutuluyorsa, bütün müģterilerin telefonlarını listelemek için iki döngü kullanılması gerekir. Ġlk döngü tek tek müģterileri almak için, alt döngü ise her müģterinin telefonlarını almak için kullanılmalıdır. Birden fazla boyutlu dizilerde iģlem yaparken de For döngüsü iç içe kullanılabilir. Örneğin, iki boyutlu bir tabloda, ilk boyut için bir For döngüsü, diğer boyut için de baģka bir For döngüsü kullanılarak dizinin tüm elemanlarına ulaģılabilir. Exit For ifadesi, o anda bulunan For döngüsünden çıkmayı sağlar. 36

37 While While döngüsü bir koģul gerçekleģtiği sürece çalıģan döngüdür. For döngüsüne göre avantajı, sayı dıģında herhangi bir veri tipi üzerinde karģılaģtırma yapılabilir olmasıdır. Ancak For döngüsünde otomatik yapılan sayaçların artırılması ve kontrol edilmesi iģlemleri bu döngüde yapılmaz. Bunun için kod yazılması gerekir. While Koşullar End While While döngüsünde koģul kontrolleri döngünün içinde yapılır ve gerektiğinde Exit While ifadesi ile döngüden çıkılır. Birden ona kadar olan sayıların toplamını hesaplamak için, bir ve on arasındaki sayılar tek tek yazılıp toplanabilir. Bu, iyi bir yöntem olmasa da sonuç verir. Ancak kullanıcının girdiği bir sayıya kadar toplam almak için bir döngü gerekir. Dim toplam As Integer = 0 Dim sayac As Short = InputBox("Bir sayı girin") While sayac > 0 toplam += sayac sayac -= 1 End While Burada kullanıcının girdiği sayıdan itibaren sıfıra kadar giden bir döngü kurulur. Döngü sayacın sıfırdan büyük olduğu her durum için çalıģır. Sayaç sıfırlandığında ise döngüden çıkılır. AĢağıdaki gibi birden fazla koģul, gene birden fazla mantıksal iģleme sokulabilir. Ancak, hatalı sonuçlar çıkmaması için koģulların parantezle gruplandırılması tavsiye edilir. While koşul1 and koşul2 or koşul3 End While Do - Loop Do ifadesi ile baģlayan döngülerin söz dizimi Loop ifadesi ile sonlanacak Ģekilde yazılır. Loop anahtar kelimesinin görevi, Do ifadesine geri dönmektir. Dolayısıyla koģul kontrolü yapılmayan bir Do Loop döngüsü sonsuza kadar çalıģır. Do Label1.Text = "Bu döngüden çıkılamaz." Loop Do Loop döngüsünde koģul kontrolleri döngünün içinde yapılır ve gerektiğinde Exit Do ifadesi ile döngüden çıkılır. Do Dim kullanici, parola As String kullanici = InputBox("Kullanıcı Adı: ") parola = InputBox("Parola: ") If LCase(kullanici) = "ogrenci" And parola = "MYO" Then Exit Do MsgBox("Hatalı giriş!", MsgBoxStyle.Critical) Loop Label1.Text = "Giriş başarılı." & vbcrlf Exit Do ifadesi ile karģılaģıldığı zaman döngüden çıkılacağı için, If içinde kontrol edilen koģul doğru ise mesaj kutusunun gösterildiği kod bölümüne geçilmez. 37

38 Do While KoĢullar, Do Loop döngüsünün içinde kontrol edilebildiği gibi, döngüye girmeden de kontrol edilebilir. Dim i As Integer = 0 Do While i < 10 i += 1 Loop Döngünün bu Ģekilde kullanımının While - End While döngüsünden farkı yoktur. Ancak Do While döngüsünün yapısı daha esnektir ve kontrol Loop ifadesinde de yapılabilir. Dim yanit As String Do MsgBox("İşlem yapılıyor...") yanit = InputBox("Devam etmek istiyor musunuz?") Loop While (yanit = "e" Or yanit = "E") Buradaki fark, döngü içinde tanımlanan iģlem bir defa yapıldıktan sonra koģulun kontrol edilmesidir. Yani en az bir defa yapılması istenen bir iģlem Do - Loop While yapısı içersinde kullanılabilir Do Until Do Loop döngüsünün, kontrol edilen koģul gerçekleģene kadar devam etmesi isteniyorsa, Do Until yapısı kullanılır. Do While döngüsü, koģul True olduğu sürece devam ederken; Do Until döngüsü, koģul True olduğu zaman sonla nır. Dim dizi(9) As Integer Dim i As Integer = 0 Do Until i = 10 dizi(i) = i * i i += 1 Loop Sonsuz Döngüler While döngüsü sayaç ile kullanılırken, sayacın değiģtirilmesine dikkat edilmesi gerekir. Eğer sayaç değiģtirilmezse, While ifadesindeki koģul hep True değerini alacağı için sonsuz döngüye girilir. Sadece sayacın kontrol edilmediği durumlar değil, koģulların yazılmalarındaki mantık hataları da sonsuz döngüye sebebiyet verir. Dim i As Short = 0 While i < 10 Or i > 5 Label1.Text = "Sonsuz döngüye girildi" i += 1 End While Hangi Döngü Nerede Kullanılır? Visual Basic.NET dilinde While ve Until döngüleri, koģul kontrollerine izin verdiği için For döngüsüne göre daha esnek yapıdadır. For döngüsünde sayacın belli bir değere ulaģmıģ olup olmadığı kontrol edilir. Bu kontrol döngünün içinde otomatik olarak yapıldığı için yazılması daha kolaydır. Örneğin, istenen bir iģlemin sadece belli sayıda yapılması ise, sayaçlar ile uğraģmamak için For döngüsü tercih edilmelidir. 38

39 Dim i As Integer = 0 While i <= TekrarSayisi ' TekrarSayisi + 1 kadar işlem yapılır. i += 1 End While For i As Integer = 0 To TekrarSayisi ' TekrarSayisi + 1 kadar işlem yapılır. Next Döngülerin belli koģullar sağlandığı sürece ya da sağlanana kadar çalıģması, karar yapılarının kullanılmasını gerektirir. For döngüsünde koģul kontrolleri If veya Select karar yapıları ile yapılır. Ancak bu tip durumlarda While ve Until döngülerinin kullanılması kodun yazılımını kolaylaģtırır. For i As Integer = 0 To 0 ' Yapılacak işlemler Dim cevap As String cevap = InputBox("Durmak için Cancel düğmesine basın") If cevap <> "" Then i -= 1 End If Next Do ' Yapılacak işlemler Loop Until InputBox("Durmak için Cancel düğmesine basın") = "" Hata Yakalama Bir uygulama geliģtiricisi program yazarken çok çeģitli hatalarla karģılaģabilir. Visual Basic.NET, ortaya çıkan hata durumlarında uygulama geliģtiricisine çok detaylı hata mesajları verir. Bu hata mesajları, hataların nerede ve nasıl yapıldığını çok detaylı bir Ģekilde gösterir. Hataların en ince ayrıntısına kadar iģlenmesi, uygulama geliģtirmede büyük kolaylık sağlar. Visual Basic.NET hata mesajları, çalışma zamanı (Run Time) ve tasarım zamanı (Design Time) hataları olarak ayrılabilir. Tasarım zamanı hataları, kodların yazılması sırasında derleyici tarafından bulunan ve Task List panelinde gösterilen hatalardır. RESĠM: Tasarım zamanı hataları. Task List panelinde hatanın açıklaması, hatanın projenin hangi dosyasında ve dosyanın kaçıncı satırında bulunduğu gösterilir. 39

40 RESĠM: Task List paneli. ÇalıĢma zamanı hataları, uygulama çalıģırken yapılması imkânsız bir iģlemin gerçekleģtirilmesi sırasında meydana gelir. Örneğin InputBox metodu ile bir sayının alınması sırasında, kullanıcı String tipinde bir değer girerse çalıģma zamanında bir hata oluģur. AĢağıdaki resimdeki hata mesajı, dizinin büyüklüğünün dıģında bir indis verildiğini belirtir. Visual Basic.NET dilinde uygulama geliģtirirken oluģabilecek tüm hatalar.net Framework altındaki Exception sınıfları halinde tanımlanır. Örneğin dizinin büyüklüğünden farklı bir indis verildiğinde IndexOutOfRangeException hatası ortaya çıkar. Tüm hatalar gibi bu hata da Exception taban sınıfından türetilmiģtir Try Catch Finally ÇalıĢma zamanında ortaya çıkan hatalar uygulamanın beklenmedik bir Ģekilde sonlanmasına neden olur. Uygulamanın devam etmesi için bu hataların yakalanıp iģlenmesi gerekir. Try Catch - Finally blokları içinde, çalıģma zamanı hataları meydana geldiği durumlarda çalıģması istenen kodlar yazılır. Try bloğu içine, çalıģırken hata üretebilecek kodlar yazılırken, Catch bloğu içine, hata oluģtuğunda yapılması gereken iģlemler yazılır. Dim sayi As Byte Dim sonuc As Integer Try sayi = Rnd() * 3 sonuc = 100 / sayi MsgBox("Bölme işlemi başarılı, sonuç: " & sonuc) Catch ex As Exception MsgBox("Bölme işlemi başarısız. Hata Mesajı: " & ex.message) End Try Bu örnekte üretilen rasgele bir sayı ile bölme iģlemi yapılıyor. Sayı sıfır değerini aldığında, bölme iģlemi hata üretir. Dolayısıyla bu iģlem Try bloğu içine yazılmalıdır. Catch bloğunda, iģlemin baģarısız olduğunu 40

41 belirten bir mesaj yazılır. Exception nesnesinin Message özelliği, hatanın oluģtuğu zaman üretilen mesajı tutar. Exception nesnesinin özellikleri Catch içinde kullanılmayacaksa, tanımlanmasına gerek yoktur. Try... Catch Label1.Text = "Exception kullanılmıyor." End Try Finally bloğunda, Try Catch içinde yapılan tüm iģlemlerden sonra çalıģtırılacak kodlar yazılır. Finally bloğunda yazılan kodlar hata meydana gelse de, gelmese de çalıģtırılacaktır. 'Dosyayı açmak için kullanılan dosya numarası Dim dosya As Integer = FreeFile() Try Dim kayit As String = "Kayıt Zamanı: " & Now kayit &= vbcrlf & "Uygulama kayıtları..." FileOpen(dosya, "C:\Log.txt", OpenMode.Binary, OpenAccess.Write) FilePut(dosya, kayit) Catch ex As Exception MsgBox(ex.Message) Finally FileClose(dosya) End Try MsgBox("Uygulama akışı buradan devam edecek") Finally bloğunda genellikle, kullanılan kaynaklar serbest bırakılır. Örnekte, bir dosya açılır. Dosya açma veya dosyaya veri yazma iģlemlerinde bir hata meydana geldiğinde, Catch ifadesinde bu hata yakalanıp ilgili mesaj kullanıcıya gösterilir. Finally bloğu her durumda çalıģacağı için, dosya kapatma iģlemi burada yapılır. Uygulama End Try ifadesinden sonra iģlemeye devam eder. Try ve Catch içinde uygulamadan çıkılması belirtilse dahi Finally bloğu içinde yazılan kodlar çalıģtırılır. Ancak End Try ifadesinden sonra uygulama sonlanır Fonksiyonlar ve Yordamlar Uygulama geliģtirirken, bir iģlemin birçok yerde kullanıldığı zamanlar olur. Bu gibi durumlarda bir kere yazılan kodlar, farklı yerlerde tekrar yazılır. Uygulama üzerinde bir değiģiklik yapılmak istenirse, tekrar yazılan kodların tek tek bulunup değiģtirilmesi gerekir. Böylece hem uygulamanın yazımı zorlaģır, hem de değiģik yapmak giderek imkânsız hale gelir. Bu problemler, birçok yerde yapılması istenen iģlemlerin fonksiyonlar ve yordamlar içinde yazılması ile çözülür. Sadece fonksiyon ve yordamların isimleri kullanılarak, istenen yerlerde kodlar çalıģtırılır. Yapılan iģlemin sonucunda oluģan değer isteniyorsa fonksiyonlar kullanılır. Örneğin, veritabanına yeni bir kullanıcı ekledikten sonra, kullanıcının ID numarası isteniyorsa fonksiyon kullanılmalıdır. Eğer yapılan iģlemlerin sonunda bir değer döndürülmüyorsa yordamlar kullanılır. Örneğin bir ComboBox kontrolüne öğe ekleme iģlemi yordam içine yazılabilir..net çatısındaki nesnelerin birçok fonksiyon ve yordamları vardır. Tüm fonksiyon ve yordamların kaç parametre aldığı, geriye dönüģ değerinin ne olduğu, hangi nesneye ait oldukları ezberlenemez. Dolayısıyla Visual Studio yardımının kullanılması kaçınılmazdır. 41

42 Sub Sub yordamları dönüģ değeri olmayan kod bloklarıdır. Bu kodlar Sub ve ifadeleri arasına yazılır. Sub YordamIsmi() Uygulama içinde birçok yerde çalıģacak olan kodlar Sub yordamı içinde yazılır. Bu kodlar, içine yazıldıkları yordamın ismi ile çağırılarak, istenen yerde tekrar çalıģtırılabilir. Örneğin, bir uygulama baģlarken form üzerindeki kontrollerin temizlenmesi gerekiyorsa, bu kodları bir daha yazmamak için yordam kullanılabilir. Sub Temizle() Label1.Text = "" ListBox1.Items.Clear() Yordamı tanımlarken parantezler içine, alabileceği parametreler yazılır. Eğer yordam parametre almıyorsa parantezlerin içi boģ bırakılır. Sub YazilimUrunleriEkle() ComboBox1.Items.Add("Yazılım Uzmanlığı") ComboBox1.Items.Add("Yazılım Mühendisliği") Label1.Text = "Yazılım paketleri eklendi..." Yordamlar, tanımlandıktan sonra baģka bir yordam veya fonksiyon içinde kullanılır. Yordamı kullanmak için, gerekli yere isminin yazılması yeterlidir. Ayrıca Call ifadesi de tercihe bağlı olarak kullanılabilir. Sub DersleriListele() Select Case ComboBox1.SelectedIndex Case 0 Call Temizle() ListBox1.Items.Add("Access - İlişkisel 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 = "Yazılım Uzmanlığı dersleri yüklendi." Case 1 Call Temizle() ListBox1.Items.Add("SQL Server Veritabanı Yönetimi") ListBox1.Items.Add("Visual Studio.NET ile Uygulama Geliştirme") ListBox1.Items.Add("ADO.NET ile Veri Yönetimi ve XML") ListBox1.Items.Add("XML Web Services,.NET Remoting ve COM+") ListBox1.Items.Add("Proje Yönetimi") Label1.Text = "Yazılım Mühendisliği dersleri yüklendi." Case Else Temizle() Label1.Text = "Yazılım paketi seçiniz." End Select Burada ComboBox kontrolünden seçilen değerin kontrolün indisi üzerinden yapılması, YazilimUrunleriEkle yordamında eklenen elemanların sırası değiģirse problem yaratır. Liste kutusuna eklenen dersler yanlıģ paketlerde gözükür. Ancak ComboBox kontrolünün seçili metni üzerinden kontrol yapılırsa da, eklenen isimler değiģtiği zaman bir problem ortaya çıkar. Bu durumda iki yordamın birbirine 42

43 bağımlılığı görülür. Bu örnekte, bir yordamda değiģiklik yapıldığı zaman diğer yordamın çalıģma Ģekli de kontrol edilmelidir. Label ve ListBox kontrollerini temizleyen kodlar sadece iki satır olduğu için Temizle yordamında yazılmayabilirdi. Ancak bu kodlar DersleriListele yordamında üç defa kullanıldığı için, her değiģiklikte kodun yazıldığı üç yer bulunup gerekli düzeltmeler yapılacaktı. Örneğin, temizleme iģlemi, liste kutusunda "Dersler" metni gözükecek Ģekilde değiģtirebilir. Bu durumda, değiģikliği sadece Temizle yordamında yapmak yeterli olur. Sub Temizle() Label1.Text = "" ListBox1.Items.Clear() ListBox1.Items.Add("Dersler: ") Parametre Kullanımı Yordamların bazı değerlere göre farklı iģlem yapması istenebilir. ĠĢlemin bağlı olduğu bu değerlere parametre veya argüman denir. Yordamlar parametre alacak Ģekilde tanımlanıp, çağırıldıkları sırada istedikleri parametreler verilerek kullanılır. Sub YordamIsmi(Parametre1 As VeriTipi, Parametre2 As VeriTipi,...)... Örneğin, uygulamanın birçok yerinde kullanıcıya bilgi vermek amaçlı mesaj kutuları kullanılır. Eğer bu mesajlar bir yordam içine yazılırsa, daha sonra mesajlar bir Label üzerinde gösterilecek Ģekilde kodu değiģtirmek kolay olacaktır. Yordamın göstereceği mesajların parametre olarak verilmesi gerekir. Sub MesajGoster(ByVal mesaj As String) Label1.Text = mesaj Sub Yordam1() '... MesajGoster("1. Yordam içinden çağılır.") Sub Yordam2() '... MesajGoster("2. Yordam içinden çağılır.") Sub Yordam3() '... MesajGoster("3. Yordam içinden çağılır.") Yordamları çağırırken tüm parametrelerin belirtilen veri tipinde verilmesi gerekir. Farklı tipte verilen parametreler Implicit Conversion ile, ilgili veri tipine çevrilir. Yordamları tanımlarken parametrelerin isimleri ve veri tipleri belirtilmelidir. Ayrıca parametrelerin değer tipi olarak mı, yoksa referans tipi olarak mı geçileceği belirtilmelidir. ByVal olarak geçilen parametrelerin değerleri kullanılabilir, ancak değiģtirilemez. ByRef, parametrelerin hafızadaki adreslerine ulaģmayı sağlar. Dolayısıyla parametrelerin değerleri değiştirilebilir. Yordamlar çağırıldıklarında, kodlar ifadesi görülene kadar çalıģtırılır. Yordamın normal akıģından çıkılmak istenirse Exit Sub veya Return ifadeleri kullanılır. 43

44 Sub MusteriBilgisi(ByVal MusteriId As Integer) If Not MusteriId > 0 Then Return End If ' MusteriId değerine göre ' müşteri bilgileri veritabanından çekilir. Return ifadesi Exit Sub ile aynı iģlevi görür. Sub MusteriBilgisi(ByVal MusteriId As Integer) If Not MusteriId > 0 Then Exit Sub End If Parametre olarak diziler kullanıldığında bu dizilerin büyüklükleri verilmez. Fakat parantezler kullanılarak, verilen parametrenin dizi olduğu belirtilmelidir. Sub MatrisTopla(ByVal matris1(,) As Integer, ByVal matris2(,) As Integer) Dim x As Integer = matris1.getlength(0) Dim y As Integer = matris1.getlength(1) If x <> matris2.getlength(0) OrElse y <> matris2.getlength(1) Then MsgBox("Matris boyutlarının büyüklükleri birbiriyle aynı olmalıdır.") Exit Sub End If Dim sonuc(x - 1, y - 1) As Integer For i As Integer = 0 To x - 1 For j As Integer = 0 To y - 1 sonuc(i, j) = matris1(i, j) + matris2(i, j) Next Next Diziler yordamlara parametre olarak geçilirken, sadece isimleri verilir. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim m1(,) As Integer = {{1, 3, 5}, {7, 9, 11}} Dim m2(,) As Integer = {{0, 2, 4}, {6, 8, 10}} MatrisTopla(m1, m2) Opsiyonel Parametreler: Yordamlara parametre verilmesi opsiyonel olabilir. Parametre tanımlarken Optional anahtar kelimesi kullanılırsa, yordam çağırıldığında bu parametrenin girilmesi zorunlu olmaz. Opsiyonel parametreler tanımlanırken baģlangıç değerleri verilmelidir, çünkü bu alan boģ bırakıldığı zaman hangi değerin iģleneceği bilinmelidir. Örneğin, MsgBox kullanımında bazı parametrelerin isteğe bağlı girilebildiği görülür. Girilmeyen parametreler için varsayılan değerler kullanılır. MsgBox("Mesaj") MsgBox("Mesaj", MsgBoxStyle.YesNoCancel) MsgBox("Mesaj", MsgBoxStyle.MsgBoxRight, "Uyarı") MsgBox("Mesaj",, ) MsgBox("Mesaj",, "Dikkat") 44

45 Opsiyonel parametreler, yordamların son argümanları olmalıdır. Bir opsiyonel parametreden sonra ancak baģka bir opsiyonel parametre gelebilir. RESĠM: Opsiyonel parametre. Bir yordamda veya fonksiyonda birçok opsiyonel parametre kullanılıyorsa, istenen parametreler boģ bırakılabilir. BoĢ bırakılan parametrelerin sırası önemli değildir, ancak virgüller ile ayrılarak yerleri belirtilmelidir. Sub Yordam(Optional ByVal param1 As String = "Merhaba", Optional ByVal param2 As Date = #1/1/2005#, Optional ByVal param3 As Boolean = True) ' Çalışacak kodlar... Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Yordam("Hoşgeldiniz",, ) Yordam(,, ) Yordam(, Now, ) ParamArray Yordamları ve fonksiyonları çağırırken parametrelerin mutlaka girilmesi gerekir. Ancak bazı durumlarda yordamlara ve fonksiyonlara girilecek parametrelerin sayısı tasarım zamanında belli olmaz. ParamArray anahtar kelimesi ile yordamlara, aynı veri tipinde bir parametre dizisi verilebilir. ParamArray ile verilen dizi, yordamın son parametresi olarak tanımlanmalıdır. Sub YasOrtalamasi(ByVal sinif As String, ByVal ParamArray Yaslar() As Byte) Dim toplam As Integer = 0 Dim ortalama As Double = 0.0 Dim i As Integer For i = 0 To Yaslar.Length - 1 toplam += Yaslar(i) Next ' Parametre verilmezse i = 0 olur If i > 0 Then ortalama = toplam / i End If MsgBox(sinif & " sınıfının yaş ortalaması: " & ortalama) 45

46 Function Fonksiyonlar bir iģlem yaptıktan sonra geriye değer döndürürler. Örneğin, bir çarpma fonksiyonunun dönüģ değeri, parametre olarak verilen iki sayının çarpımı olacaktır. Fonksiyonların tanımları değiģkenler gibidir. Function FonksiyonAdı(ByVal Param1 As VeriTipi,...) As DönüşVeriTipi... End Function Fonksiyonların geriye dönüģ değerleri Return ifadesi ile ya da fonksiyonun ismi verilerek yapılır. Function Kontrol() As Boolean If TextBox1.Text.Length > 0 And ComboBox1.SelectedIndex > -1 Then Return False End If Return True End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not Kontrol() Then MsgBox("Seçiminizi yaptıktan sonra devam edebilirsiniz.") Exit Sub End If 'Kontrol tamamlandıktan sonra yapılacak işlemler Bu fonksiyonun çalıģması Return ifadesinden sonra yazılan değerin döndürül mesiyle sonlanır. Burada dikkat edilmesi gereken nokta, fonksiyon değer döndürdükten sonra sonlandığı için Return ifadesinden sonra gelen hiçbir kodun çalıģtırılmamasıdır. Eğer dönüģ değerini belirledikten sonra baģka bir iģlemin yapılması isteniyorsa, fonksiyonun ismi kullanılır. Fonksiyonun ismi bir değiģken gibi gözükse de, temsil ettiği değer fonksiyonun dönüģ değeridir. Function GunlukKur(ByVal Cinsi As String) As Single Select Case Cinsi Case "d", "D" Return 1.43 Case "e", "E" Return 1.81 Case "s", "S" Return 2.91 End Select End Function Function KurHesapla(ByVal Miktar As Single, Optional ByVal Cinsi As String = "d") As Double KurHesapla = Miktar * GunlukKur(Cinsi) If KurHesapla < 0 Then ' Pozitife çevrilir. KurHesapla = 0 - KurHesapla MsgBox("Miktar negatif girilmiş.") End If End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = KurHesapla(-1000) 46

47 Bu örnekte, fonksiyonun ismi bir değiģken olarak kullanılır ve hesaplanan değer bu değiģkene atanır. Daha sonra bu değiģkenin değeri, yani fonksiyonun dönüģ değeri üzerinde iģlem yapılabilir. Eğer Return ifadesi kullanılsaydı, kontrol yapılan kodlar çalıģtırılmadan fonksiyondan çıkılacaktı. Function KurHesapla(ByVal Miktar As Single, Optional ByVal Cinsi As String = "d") As Double Return Miktar * GunlukKur(Cinsi) ' Bu satırdan sonra yazılan kodlar işlenmez. End Function Örnek: Sınıf geçme notunun hesaplanması iģleminin, geriye bir sonuç döndürüleceği için fonksiyon ile yazılması gereklidir. Parametre olarak final ve vize notları alınır ve bu değerlerle hesaplanan geçme notu sonuç olarak döndürülür. Vize notlarının girilmesi zorunlu değildir, dolayısıyla bu değerler ParamArray olarak verilebilir. Function NotHesapla(ByVal Final As Integer, ByVal VizeKatSayisi As Single, ByVal ParamArray vizeler() As Integer) As Integer Dim vizetoplam As Integer = 0 Dim vizeortalama As Double = 0.0 Dim i As Integer For i = 0 To vizeler.length - 1 vizetoplam += vizeler(i) Next If i > 0 Then vizeortalama = vizetoplam / i End If Dim finalkatsayisi As Single = 1 - VizeKatSayisi Return finalkatsayisi * Final + VizeKatSayisi * vizeortalama End Function Fonksiyonun ilk parametresi final notudur. Final notu bir tane olacağı için girilmesi zorunludur. Daha sonra vize notlarının ortalaması hesaplanarak final notu ile toplanır. Parametre olarak verilen vize katsayısı, vize notlarının ortalamadaki ağırlıklarını belirler. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim gecmenotu As Integer gecmenotu = NotHesapla(70, 0.6, 90, 80, 86, 75, 90) MsgBox(gecmeNotu) ByVal ve ByRef İncelemesi Fonksiyon ve yordamlara parametre verilirken, varsayılan durumda değiģkenlerin değerleri verilir. Parametre olarak verilen değiģkenler üzerinde değiģiklik yapılması için, bu parametrelerin bulunduğu adres bilgilerine ihtiyaç vardır. Referans tipindeki değerler parametre olarak geçildiklerinde, referansları verilir. Ancak değer tipleri parametre olarak verildiklerinde bu değerler kopyalanır ve asıl değiģkenin tuttuğu değere ulaģılamaz. Bu karıģıklıkları çözmek için, yordamlarda parametreler ByVal ve ByRef olarak belirtilir. ByVal, parametre olarak verilecek değiģkenin değeri ile iģlem yapılacağını belirtir. Dolayısıyla bu parametrenin değeri değiģtirilemez. ' Değişecek olan kelime ByVal olarak verilmiştir Sub Ekle(ByVal Kelime As String, ByVal eklenecek As String) Kelime = Kelime.Insert(0, eklenecek) Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mesaj As String = "Hello" 47

48 Ekle(mesaj, " World") MsgBox(mesaj) mesaj değiģkenin değeri, yordama değer olarak verilmiģtir. Dolayısıyla yordamın üzerinde çalıģtığı değer, mesaj'ın bir kopyasıdır. Bellek alanında fiziksel olarak farklı yerlerde dururlar. Yani değiģiklik yapılan değer, sadece bir kopyadır. Yordam sonlandığında kopya olarak oluģturulan değer silinecek ve asıl değer değiģmemiģ olarak kalacaktır. Bu durumda parametre olarak mesaj değiģkeninin adresi verilmelidir. Dolayısıyla yordamdaki parametrenin ByRef olarak tanımlanması gerekir. Sub Ekle(ByRef Kelime As String, ByVal eklenecek As String) Kelime = Kelime.Insert(0, eklenecek) Windows Programlama Daha önce Windows formlarına ve kontrollerine giriģ yapılmıģtı..net Framework'te, Windows uygulamalarının görünüm ve kullanım zenginliğini artırmak için birçok kontrol vardır. Visual Studio ile varsayılan durumda gelen kontrollerin dıģında birçok kontrol de Windows uygulamalarına eklenebilir. Formlar ve Windows Forms Kontrolleri Windows uygulamalarının temelini Windows Form nesneleri oluģturur. Windows kontrolleri, kullanıcıya zengin uygulamalar geliģtirmek için kolaylık sağlar. Bu kontroller, bir uygulamanın tüm ihtiyacını karģılayacak Ģekilde tasarlanmıģtır. Listeleme kontrolleri, kullanıcıya bir dizi öğeyi değiģik biçimlerde listelemeyi sağlar. Resim ve düzenleme kontrollerinin, forma görsel zenginlik sağlayan birçok özelliği vardır. Zaman ve tarih kontrollerinin yapısı, zaman ve tarih seçme iģlemlerini kolaylaģtırır. Bu Windows kontrolleri, tasarım anında eklenebileceği gibi, çalıģma anında da eklenebilir Form Nesnesi Windows uygulamaları, kullanıcı ile iletiģimi Form nesneleri ile sağlar. Formlar, görünüm özellikleri, pencere stili değiģtirilerek ve üzerine kontroller eklenerek özelleģtirilir. Ayrıca birden çok Form nesnesi kullanılarak, uygulamalar zenginleģtirilir. Birden Fazla Form Oluşturmak Windows uygulamaları birden fazla Form nesnesinden oluģtuğu için, projelere form eklemek her zaman gereklidir. Bir Windows projesine yeni bir form eklemek için aģağıdaki adımları izleyin: 1. Çözüm gezgini (Solution Explorer) panelinden projeyi sağ tıklayarak ya da proje (Project) menüsünden Windows formu ekle (Add Windows Form) komutunu seçin. 2. Açılan menüden Windows Form öğesinin seçili olduğunu kontrol edin ve bir isim vererek formu ekleyin. BaĢlangıç formlarının ayarlanmasının yanı sıra, uygulamada bir formdan baģka bir formun açılması ve ayarlanması sık karģılaģılan bir durumdur. Form nesneleri, System.Windows.Forms ad uzayı içinde bulunan Form sınıfından türetilmiģ sınıflardır. Dolayısıyla yeni bir form oluģturmak için, istenen Form sınıfından bir nesne oluģturulması yeterlidir. Dim yeniform As New frmyeni Yeni oluģturulan formların gösterilmesi, formun Show ve ShowDialog metotları ile yapılır. ShowDialog metodu, form gösterildikten sonra, kapanana kadar diğer formlara eriģimi engeller. ShowDialog metodundan sonra yazılan kodlar, form kapandıktan sonra çalıģtırılır. Dim yeniform As New frmyeni yeniform.showdialog() ' Bu kodlar yeniform kapandıktan sonra çalıştırılır MsgBox("Form kapandı...") ShowDialog ile gösterilen formlar, hangi durum ile kapandıklarını belirten bir DialogResult sonucu döndürürler. Bu kullanım MsgBox hazır fonksiyonu ile aynıdır. 48

49 Dim frm As New frmsatis If frm.showdialog = DialogResult.Yes Then ' Verileri kaydet End If Formun hangi diyalog sonucu ile döneceğini, üzerindeki Button kontrollerinin DialogResult özelliği ile belirlenir. Eğer düğmenin bu özelliği Yes olarak ayar lanmıģsa, bu düğme tıklanıp form kapatıldığı zaman, DialogResult.Yes değerini döndürür. Formların üzerlerindeki kontroller, form sınıflarının birer üyesi oldukları ve Friend eriģim seviyesinde tanımlandıkları için, aynı projeden ulaģılabilirler. Böylece, aynı Windows projesi içinde açılan formlar açılmadan önce kontrollerinin özellikleri değiģtirilebilir. Örneğin, hata formu gösterilmeden önce, üzerindeki Label kontrolünün Text özelliği ilgili hata mesajını gösterecek Ģekilde ayarlanabilir. Form Özellikleri Özellik Değer Tipi Açıklama AcceptButton Button Form üzerinde Enter tuģuna basıldığı zaman "tıklanacak" Button kontrolü CancelButton Button Form üzerinde Esc tuģuna basıldığı zaman "tıklanacak" Button kontrolü Opacity Double Formun Ģeffaflık oranı (0-1 arası) MaximizeBox Boolean Maximize düğmesinin görünürlüğü MinimizeBox Boolean Minimize düğmesinin görünürlüğü ControlBox Boolean Close, Maximize ve Minimize düğmelerinin tümünün görünürlüğü StartPosition FormStartPosition Form açıldığı zaman, ekran üzerindeki konumu TopMost Boolean Formun tüm pencerelerin üzerinde gözükmesi FormBorderStyle FormBorderStyle Formun kenar stili MaximumSize Size Formun alabileceği maksimum büyüklük MinimumSize Size Formun alabileceği minimum büyüklük TABLO: Form Özellikleri Form Olayları Olay Açıklama Click Form üzerine tıklandığı zaman gerçekleģir Closing Form kapanmadan hemen önce gerçekleģir Closed Form kapandıktan sonra gerçekleģir Load Form yüklenirken gerçekleģir KeyDown Form üzerindeyken bir tuģun basılması ile gerçekleģir KeyUp Basılan tuģun kaldırılması ile gerçekleģir TABLO: Form Olayları Form Metotları Metot Açıklama Hide Visible özelliğini False yaparak formu gizler Close Formu kapatır. Eğer form baģlangıç formuysa uygulama sonlanır Show Formu gösterir. Hide ile gizlenmiģse, Visible özelliği True yapılır. ShowDialog Formu iletiģim kutusu olarak gösterir. TABLO: Form Metotları Örnek: Bir Windows formunun kapanmasını yönetmek için, o formun Closing olayına ve Close metoduna ihtiyaç vardır. Kapanmasını yavaģlatmak için bir Timer kontrolü kullanılır ve formun Ģeffaflığı yavaģça azaltılır. Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 49

50 Me.Text = "Hoşgeldiniz... " & TimeOfDay Private Sub Form3_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) ' Kapanma olayı gerçekleşmeden önce iptal edilir e.cancel = True Timer1.Start() Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) ' Shift+Ctrl+F3 tuşlarına basıldığında uygulama kapanır If e.shift And e.control And e.keycode = Keys.F3 Then Me.Close() End If Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' Form görünmez hale gelince uygulama kapanır If Me.Opacity = 0 Then Application.Exit() Else Me.Opacity -= 0.1 End If Label Label kontrolü form üzerinde kullanıcıya bilgi vermek amacıyla kullanılan etikettir. Label Özellikleri Özellik Değer Tipi Açıklama TextAlign ContentAlignment Yazının etiket üzerindeki pozisyonu belirler. BorderStyle BorderStyle Kontrolün kenar stilidir. FixedSingle değeri, kontrolün kenar çizgilerini gösterir. Fixed3D değeri, kenarların üç boyutlu olmasını sağlar. Image Drawing.Image Etiket üzerinde görüntülenmek istenen resmi tutar. ImageAlign ContentAlignment Etiket üzerindeki resmin nerede duracağını belirler. RightToLeft RightToLeft Etiket üzerindeki yazının yönünü belirler. Eğer Yes değerini alırsa, yazılar sağdan sola gösterilir TABLO: Label Özellikleri Label1.BorderStyle = BorderStyle.Fixed3D ' Visual Studio klasörü altındaki simgeler kullanılabilir Label1.Image = Image.FromFile("C:\Flags\FLGTURK.ICO") Label1.ImageAlign = ContentAlignment.MiddleRight Label1.RightToLeft = RightToLeft.Yes Label1.Text = "Türkçe" RESĠM: Label kontrolü örneği. NOT Resmin bulunduğu yer kontrolün sağ tarafında bulunacak Ģekilde ayarlanmasına rağmen, sol tarafta gözükür. Bu durum, RightToLeft özelliğinin Yes olarak atanmasından kaynaklanır 50

51 TextBox Metin kutuları, kullanıcıdan bilgi almak için kullanılır. TextBox Özellikleri Özellik Değer Tipi Açıklama MultiLine Boolean Metin kutusuna birden fazla satırda değer girilebilmesini sağlar. False durumunda ise, metin kutusunun yüksekliği değiģtirilemez ScrollBars ScrollBars Metin kutusunda kaydırma çubuklarının görünmesini kontrol eder. Varsayılan durumda kaydırma çubuğu görüntülenmez, ancak Horizontal, Vertical kaydırma çubukları ya da ikisi birden gösterilebilir. PasswordChar Char Metin kutusuna parola girilecekse, girilen karakterlerin hangi karakter olarak görüneceğini belirler. WordWrap Boolean Metin kutusuna girilen değerlerin, satır sonlandığında bir alt satıra geçmesini belirtir. Eğer MultiLine özelliği False ise, alt satırlar tanımlı olmayacağı için bu özelliğin bir etkisi görülmez. MaxLength Integer Metin kutusunun alabileceği maksimum karakter sayısını belirtir. ReadOnly Boolean Metin kutusunun yazmaya karģı korumalı olduğunu belirtir. CharacterCasing CharacterCasing Metin kutusuna karakterler girilirken büyük veya küçük harfe çevrilmesini sağlar. Upper değeri büyük, Lower değeri küçük harfe çevrimi sağlar. TABLO: TextBox Özellikleri TextBox Olayları Olay Açıklama TextChanged Metin kutusundaki yazı değiģtiği zaman gerçekleģir. TABLO: TextBox Olayları TextBox Metotları Metot Açıklama Cut Seçilen karakterleri siler, ancak hafızada tutar. Copy Seçilen karakterleri kopyalar. Paste Hafızaya alınan karakterleri metin kutusuna yapıģtırır. Clear Metin kutundaki yazıları temizler. SelectAll Metin kutusundaki tüm yazıyı seçer. TABLO: TextBox Metotları Uygulama: Form üzerinde girilen değerlere göre tek sayıların hesaplanması ve gö rüntülenmesi iģlemi için TextBox kontrolünün birçok olayından ve özelliğinden yararlanılır. RESĠM: TextBox kontrolü örneği. 51

52 Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Form yüklenirken 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 kontrolünün ' TextChanged olayında gerçekleşir. ' Handles ifadesinden sonra kontroller virgülle ayrılmıştır Private Sub txtustsayi_textchanged(byval sender As System.Object, ByVal e As System.EventArgs) Handles txtustsayi.textchanged TekSayiYazdir() Function Kontrol() As Boolean ' Metin kutularına sayı girildiyse If IsNumeric(txtUstSayi.Text) And IsNumeric(txtAltSayi.Text) Then ' ve alt limit 0'dan büyük, ve üst limitten küçükse Dim ust As Integer = txtustsayi.text Dim alt As Integer = txtaltsayi.text If ust > alt And alt > 0 Then ' giriş doğru yapılmıştır Return True End If End If ' Kod buraya gelirse, giriş yanlış yapılmıştır Return False End Function Sub TekSayiYazdir() If Not Kontrol() Then Exit Sub txtsayilar.clear() Dim alt As Integer = txtaltsayi.text Dim ust As Integer = txtustsayi.text ' Sayılar metin kutusuna, tek sayıların yazdırılması For i As Integer = alt To ust If i Mod 2 = 1 Then txtsayilar.text &= i & vbcrlf End If Next ' Sayıların txtclipboard isimli metin kutusuna kaydedilmesi: Private Sub btnkaydet_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnkaydet.click txtclipboard.text = txtsayilar.text ' Sayıların kopyalanması için, önce seçilmesi gerekir txtsayilar.selectall() txtsayilar.cut() ' Cut yordamı çağrıldıktan sonra veriler kopyalanır. ' Paste ile bu kopyalanan veriler geri yazdırılır. 52

53 Private Sub btnyukle_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnyukle.click txtsayilar.clear() txtsayilar.paste() Button Windows uygulamalarında, form üzerinde komut düğmeleri olarak kullanılır. Button Özellikleri Özellik Değer Tipi Açıklama DialogResult DialogResult Ait olduğu form ShowDialog metodu ile çağrıldığı zaman, dönüģ değerini belirler FlatStyle FlatStyle Düğme tıklandığında ve düğmenin üzerine gelindiğinde görünen formatı belirler TABLO: Button Özellikleri Button Olayları Olay Açıklama Click Düğme üzerine tıklandığı zaman gerçekleģir Örnek: Bir formun üzerindeki düğmelerin DialogResult özellikleri değiģtirilerek, özel bir mesaj kutusu tasarlanabilir. RESĠM: Button kontrolü örneği. Private Sub btnislemyap_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnislemyap.click Dim onay As New OnayFormu With onay.btnhayir.dialogresult = DialogResult.No.FlatStyle = FlatStyle.Flat End With With onay.btnevet.dialogresult = DialogResult.Yes.FlatStyle = FlatStyle.Flat End With If onay.showdialog = DialogResult.Yes Then ' Kayıt işlemleri... End If CheckBox Kullanıcıya seçenekler sunup birden çok seçeneği aynı anda seçebilmesi için kullanılır. 53

54 CheckBox Özellikleri Özellik Değer Tipi Açıklama Checked Boolean Kontrolün seçili olup olmadığını belirler. CheckAlign ContentAlignment Seçme kutusunun ve üzerinde yazan metnin birbirlerine göre konumlarını belirler. Appearance Appearance Kontrolün seçme kutusu ya da düğme Ģeklinde olmasını belirler. ThreeState Boolean Seçili olup olmaması dıģında, Intermediate durumu da eklenir. Eğer kontrol Intermediate durumun- daysa Checked özelliği True olur. AutoChecked Boolean TABLO: CheckBox Özellikleri Kontrolün tıklandığı zaman seçili duruma geçileceğini belirtir. Eğer bu özellik False ise, kontrolün durumunu değiģtirmek için, Click olayında, Checked özelliğini güncellemek gerekir. CheckBox Olayları Olay Açıklama CheckChanged Seçme kutusunun durumu değiģtiği zaman gerçekleģir. TABLO: CheckBox Olayları Örnek: Bir GSM Ģebekesinden faturalı hat açılıģında toplam tutar hesaplanırken, bazı seçenekler CheckBox kontrolleri ile sunulabilir. RESĠM: CheckBox kontrolü örneği. ' Form üzerindeki tüm seçme kutularının durumu değiştiği zaman, toplam fiyat tekrar hesaplanır Private Sub txtacilistutari_textchanged(byval sender As System.Object, ByVal e As System.EventArgs) Handles txtacilistutari.textchanged, cbkdv.checkedchanged, cbozeliletisim.checkedchanged, cbozeliletisimilkfatura.checkedchanged Dim toplam As Double = txtacilistutari.text ' İlk faturada 22 YTL açılış bedeli eklenir If cbozeliletisimilkfatura.checked Then toplam += 22 End If ' KDV eklenir If cbkdv.checked Then toplam *= 1.18 End If ' Özel İletişim vergisi eklenir If cbozeliletisim.checked Then toplam *= 1.25 End If txttoplam.text = toplam 54

55 RadioButton RadioButton kontrolleri, kullanıcıya sunulan seçeneklerden sadece bir tanesinin seçilmesine izin verir. Form üzerinde birden fazla RadioButton konulduğunda, bu kontrollerin sadece bir tanesi seçili olabilir. Fakat bazı durumlarda, farklı seçenek grupları kullanılarak kullanıcının birden fazla seçim yapması istenebilir. Bu durumda, bazı seçenekler GroupBox kontrolü ile gruplanmalıdır. Bu kontrolün özellikleri ve olayları CheckBox kontrolü ile aynıdır. Sadece bir seçenek iģaretlenebildiği için, kontrollerin yapılması CheckBox kontrolüne göre daha kolaydır GroupBox Bu kontrol, kontrollerin mantıksal bir düzende gruplanması için kullanılır. Ġçinde bulunan kontrollerin iģleyiģlerinde bir farklılık görünmez. Bir grup RadioButton kontrolünün, diğer RadioButton kontrollerinden etkilenmemesi için kullanılır ListBox Kullanıcıya sunulan seçeneklerin bir liste halinde görünmesini sağlar. Liste kutusundan istenen sayıda öğe seçilebilir. ListBox Özellikleri Özellik Değer Tipi Açıklama Items ListBox.ObjectCollection Liste kutusuna eklenen öğelerin tutulduğu koleksiyon nesnesidir. Selectedltem Object Liste kutusundan seçilen öğeyi alır. Selectedltems SelectedObjectCollection Liste kutusundan seçilen öğeleri alır. Seçilen öğeler dinamik bir dizide tutulur. SelectedIndex Integer Liste kutusundan seçilen öğenin indisini alır. Selectedlndices SelectedIndexCollection Liste kutusundan seçilen öğelerin indislerini bir koleksiyon nesnesinde tutar. DataSource Object Listenin öğelerinin tutulduğu veri kaynağıdır. Veri kaynağı boģ geçilirse Items koleksiyonuna eklenen öğeler görüntülenir. TABLO: ListBox Özellikleri TABLO: ListBox Özellikleri Özellik Değer Tipi Açıklama DisplayMember String Veri kaynağından gelen öğelerin, kullanıcıya gösterilecek özelliğidir. ValueMember String Veri kaynağından gelen öğelerin, dönüģ değerini belirleyen özelliğidir. SelectedValue Object Seçilen öğenin, liste kutusunun ValueMember ile belirtilen özelliğidir. SelectionMode SelectionMode Liste kutusundan kaç tane öğe seçilebileceğini belirtir. None değeri 0, One değeri 1, MultiSimple ve MultiExtended değerleri birden fazla öğenin seçilebileceğini belirtir. MultiColumn Boolean Liste kutusundaki öğelerin biden fazla kolonda görüntülenmesini belirler. ListBox Olayları Olay Açıklama SelectedIndexChanged Liste kutusunda bir öğe seçildiği zaman gerçekleģir. TABLO: ListBox Olayları 55

56 ListBox Metotları Metot Açıklama GetItemText Parametre olarak verilen nesnenin liste kutusunda gösterilen yazısını döndürür. GetSelected Parametre olarak verilen indisteki öğenin seçili olup olmadığını döndürür. FindString Parametredeki String ifadesini liste kutusunda arayarak, bul- duğu ilk öğenin indisini döndürür TABLO 9.14: ListBox Metotları ComboBox RESĠM 9.6: ListBox kontrolü örneği. Liste kutusu ile aynı özelliklere sahiptir, ancak listelenen öğeler açılan bir kutuda görüntülenir ve listeden en fazla bir tane öğe seçilebilir. Liste kutusuna göre bir baģka farklılığı ise, isteğe bağlı olarak, kullanıcının açılan kutu üzerinde değer girebilmesidir. Dolayısıyla bir TextBox kontrolü gibi de davranabilir. ComboBox Özellikleri Özellik Değer Tipi Açıklama DropDownStyle ComboBoxStyle Kontrolün listeleme stilini belirler. Simple stili, listedeki sadece bir öğeyi görüntüler. DropDown stili, listenin tüm elemanlarını görüntüleyerek seçilmelerini ve kullanıcının değer girmesini sağar. DropDownList kullanıcının değer girmesini engeller. DropDownWidth Integer ComboBox kontrolünün açılan listesinin geniģliğini belirler. MaxDropDownItems Integer Kontrole eklenebilecek maksimum öğe sayısını belirler. MaxLength Integer Kullanıcının girebileceği maksimum karakter sayısını belirler. SelectedText String Seçilen öğenin görüntülenen yazısını belirler. TABLO 9.17: ComboBox Özellikleri Örnek: Tarih ve sayı formatlarını, kullanıcının seçimine bırakarak bir sayı veya tarih yazdırma iģlemi ComboBox kontrolleri ile yapılabilir. RESĠM: ComboBox kontrolü örneği. ComboBox kontrollerinin özelliklerinin ayarlanması ve format tiplerine öğe eklenmesi. 56

57 Private Sub Form1_Load_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cmbformat.dropdownstyle = ComboBoxStyle.DropDownList cmbformatstring.dropdownstyle = ComboBoxStyle.DropDownList cmbformat.items.add("tarih Formatı") cmbformat.items.add("sayı Formatı") Tarih ya da sayı formatlarından biri seçildiği zaman, ikinci ComboBox kontrolüne değiģik format seçenekleri eklenir. Private Sub cmbformat_selectedindexchanged(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmbformat.selectedindexchanged() cmbformatstring.items.clear() Select Case cmbformat.selectedindex Case 0 cmbformatstring.items.add("dd - MM - yyyy") cmbformatstring.items.add("yyyy*mm*dd hh:mm") cmbformatstring.items.add("dddd dd.mm.yy.hh:mm:ss") Case 1 cmbformatstring.items.add("c") cmbformatstring.items.add("p") cmbformatstring.items.add("n") End Select Format seçildikten sonra metin kutusuna girilen değer alınır ve ilgili formatta gösterilir. Private Sub btngoster_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btngoster.click Select Case cmbformat.selectedindex Case 0 Dim d As Date = txtyazi.text lblsonuc.text = d.tostring(cmbformatstring.text) Case 1 Dim i As Integer = txtyazi.text lblsonuc.text = i.tostring(cmbformatstring.text) End Select NumericUpDown Bu kontrol kullanıcının, sayısal bir değeri girmesini veya yukarı aģağı okları ile seçmesini sağlar. NumericUpDown Özellikleri Özellik Değer Tipi Açıklama HexaDecimal Boolean Sayıların onaltılık tabanda görüntülenmesini belirler. Increment Decimal AĢağı yukarı oklar kullanıldığında, sayıların artma ve azalma adımlarını belirler. Maximum Decimal Kontrolde gösterilen sayıların alabileceği maksimum değeri belirler. Minimum Decimal Kontrolde gösterilen sayıların alabileceği minimum değeri belirler. ThousandSeparators Boolean Sayıların basamak ayracının gösterilmesini belirler. Value Decimal Kontrolün gösterdiği sayı değerini belirler. ReadOnly Boolean True değerini alırsa kullanıcının giriģ yapmasını engeller. TABLO 9.18: NumericUpDown Özellikleri 57

58 NumericUpDown Olayları Olay Açıklama ValueChanged Kontrolün sayı değeri değiģtiği zaman gerçekleģir TABLO 9.19: NumericUpDown Olayları NumericUpDown Metotları Metot Açıklama DownButton AĢağı düğmesine basar ve sayı değerini düģürür. UpButton Yukarı düğmesine basar ve sayı değerini artırır. TABLO 9.20: NumericUpDown Metotları Örnek: Alarm kurarken, tarih ve zaman değerlerinin ayarlanması NumericUpDown kontrolü ile yapılabilir. RESĠM: NumericUpDown kontrolü örneği. Tarih ve zaman değerlerinin alabileceği maksimum ve minimum değerler ayarlanır. Private Sub Form1_Load(ByVal ) Handles MyBase.Load nyil.minimum = 1 nay.minimum = 1 ngun.minimum = 1 nyil.maximum = 2099 nay.maximum = 12 ngun.maximum = 31 nsaat.minimum = 0 ndakika.minimum = 0 nsaat.maximum = 23 ndakika.maximum = 59 nyil.value = Now.Year nay.value = Now.Month ngun.value = Now.Day nsaat.value = Now.Hour ndakika.value = Now.Minute Bu değerlerden herhangi biri değiģtiği zaman, doğru tarih ve zaman değerinin girilmesi kontrol edilir. Private Sub ngun_valuechanged(byval ) Handles ngun.valuechanged, nay.valuechanged, nyil.valuechanged, nsaat.valuechanged, ndakika.valuechanged Dim tarih As String tarih = ngun.value & "." & nay.value & "." & nyil.value If Not IsDate(tarih) Then MsgBox(tarih) End If Dim zaman As String zaman = nsaat.value & ":" & ndakika.value If Not IsDate(zaman) Then MsgBox(zaman) End If 58

59 TabControl TabControl nesnesi, içinde sekme sayfaları tutan yapıdır. Bu sayfalar, TabPage nesneleri olarak oluģturulup yapılandırıldıktan sonra TabControl nesnesinin TabPages koleksiyonuna eklenir. Ekleme iģlemi, Properties paneli ile tasarım anında da yapılabilir. TabControl Özellikleri Özellik Değer Tipi Açıklama HotTrack Boolean Fare ile sekme sayfalarının üzerine gelindiğinde, isimlerinin görsel olarak değiģmesini belirler. ItemSize Size Sekme sayfalarının büyüklüğünü belirler. Multiline True Eklenen sekmelerin birden fazla satırda üst üste gözükmesini belirler. ShowToolTips Boolean Fare sekme sayfalarının üzerindeyken bilgi mesajının gösterilmesini belirler. SelectedTab TabPage Seçilen sekme sayfasını belirler. SelectedIndex Integer Seçilen sekme sayfasının indisini belirler. TabCount Integer Sekme sayısını belirler. TabPages TabPageCollection Kontrolün içinde bulunduğu sekme sayfalarının koleksiyonudur. TABLO: TabControl Özellikleri TabControl nesnesine TabPage sayfaları eklemek için tasarım anında Tab- Page Collection Editor penceresinden yararlanılabilir. RESĠM: TabPage Collection Editor penceresi. RESĠM 9.13: TabPage eklemek. TabPage Özellikleri Sekme sayfaları, normal form tasarımları gibi kontroller eklenerek yapılır. TabPage kontrolü Panel kontrolünden türetilir ve Panel kontrolünün tüm özelliklerini alır. Özellik Değer Tipi Açıklama ToolTipText String Bu özelliğin değeri, fare sayfanın üzerindeyken, bilgi mesajı olarak gösterilir. Ait olduğu TabControl nesnesinin ShowToolTip özelliği True olmalıdır. TABLO: TabPage Özellikleri Örnek: Bir kullanıcı kaydının tek bir formda görüntülenmesi isteniyorsa, bu form TabControl ile küçük sayfalara bölünebilir. RESĠM: TabControl örneği 59

60 DateTimePicker Bir açılan kutudan zaman değeri seçmeyi sağlar. Seçilen değer Date tipinde olur. DateTimePicker Özellikleri Özellik Değer Tipi Açıklama CalendarTrailing Color Bir önceki ve bir sonraki ayın gün lerinin görüntülenme rengidir. ForeColor CalendarTitle ForeColor Color Takvim baģlığının ön plan rengidir. CalendarTitle Color Takvim baģlığının arka plan rengidir. BackColor CalendarMonth Color Takvim arka plan rengidir. Background CalendarForeColor Color Takvimdeki yazıların ön plan rengidir. CalendarFont Font Takvimin gösterileceği yazı tipi ayarlarıdır. ShowCheckBox Boolean Tarih değerinin yanında seçme kutusunun gösterilmesi. Checked Boolean Seçme kutusu görüntülendiği zaman, tarihin seçili olup olmadığını gösterir Format DateTime PickerFormat Kontrolün görüntüleneceği formatı belirler. Long, Short değerleri uzun ve kısa tarih formatını, Time sadece zamanı gösterir. Custom değeri, CustomFormat özelliğine girilen formatta gösterileceğini belirler. CustomFormat String Tarihin hangi formatta gösterileceğini belirler. Value Date Seçilen tarih değerini belirler. MaxDate Date Kontrolün alabileceği maksimum tarih değeridir. MinDate Date Kontrolün alabileceği minimum tarih değeridir. ShowUpDown Boolean Kontrolün formunu açılan kutu ya da yukarı aģağı okları formatında gösterir. Bu özellik True olduğunda, kontrolün formatı, NumericUpDown kontrolünün TABLO: DateTimePicker Özellikleri Örnek: Veritabanından bir kaydın belli tarih aralıkları ile sorgulanması sırasında, kullanıcının baģlangıç ve bitiģ tarihlerini seçmesi için bu kontrol kullanılabilir. RESĠM: DateTimePicker kontrolü örneği. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TarihAyarla(dtBaslangic) TarihAyarla(dtBitis) ' Tarih kontrollerinin ayarlanması Sub TarihAyarla(ByVal dttarih As DateTimePicker) dttarih.format = DateTimePickerFormat.Custom dttarih.customformat = "dd - MM - yyyy" dttarih.maxdate = Now.AddYears(2) dttarih.mindate = Now.AddYears(-2) ' Gerekli kontroller yapıldıktan sonra 60

61 ' Sql cümlesi seçilen tarihlere göre oluşturulur Private Sub btnara_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnara.click Dim bastarih, sontarih As Date bastarih = dtbaslangic.value sontarih = dtbitis.value If Date.Compare(basTarih, sontarih) = 1 Then Exit Sub Dim Sql As String Sql = "Select * From Siparisler Where SiparisTarih Between " Sql &= bastarih & " And " & sontarih ' Sql komutunu çalıştır MonthCalendar DateTimePicker kontrolünün açılan takvimi biçimindedir. Bu kontrol kullanıcıya, tarih alanları üzerinde daha esnek çalıģma olanağı sağlar. MonthCalendar Özellikleri DateTimePicker kontrolünün birçok özelliğini almasına rağmen, bazı özelliklerinde değiģiklikler görülür. Örneğin Value özelliği bu kontrolde yoktur. Bu kontrolden seçilen değerler, bir tarih aralığıdır. Dolayısıyla tek bir Date tipini tutan bir özellik yoktur. Özellik Değer Tipi Açıklama MaxSelect ioncount Integer Bir seferde maksimum kaç gün seçileceğini belirler. SelectionRange SelectionRange BaĢlangıç ve bitiģ tarihlerinden oluģan bir seçim aralığı nesnesidir. SelectionBegin Date Seçilen tarih aralığının hangi tarihten itibaren baģladığını belirler. SelectionEnd Date Seçilen tarih aralığının hangi tarihte bittiğini belirler. ScrollChange Integer Ġleri geri düğmeleri tıklandığı zaman kaç ay atlanacağını belirler. MonthlyBoldedDates Date() Takvimde hangi günlerin kalın yazı tipinde gösterileceğini belirler. ĠĢaretlenen günler, her ay için kalın gösterilir. ShowToday Boolean Takvimin alt kısmında, sistem takvi-mine göre hangi günde olduğunu gösterir. ShowTodayCircle Boolean Takvimde, o günün seçili olmasını belirler. ShowWeekNumbers Boolean Takvimin sol tarafında, yılın hafta numaralarını gösterir. TABLO: MonthCalendar Özellikleri MonthCalendar Olayları Olay Açıklama DateChanged Seçilen tarihten farklı bir tarih seçildiğinde gerçekleģir. DateSelected Yeni bir tarih seçildiği zaman gerçekleģir. DateChanged olayı gerçekleģtikten hemen sonra bu olay gerçekleģir. TABLO: MonthCalendar Olayları Örnek: Yapılacak görevlerin tutulduğu bir Windows uygulamasında, görevin baģlangıç ve bitiģ tarihleri tek bir MonthCalendar kontrolünden kolaylıkla seçilebilir. RESĠM: MonthCalendar kontrolü örneği. 61

62 Görevlerin tanımlanması için bir Gorev sınıfı oluģturulur. Public Class Gorev Public GorevIsmi As String Public BaslangicTarihi As Date Public BitisTarihi As Date ' Liste kontrollerinde görevin isminin görüntülenmesi ' için, ToString metodunu tekrar yazmak gerekir. Public Overrides Function ToString() As String Return GorevIsmi End Function Public Sub New(ByVal Isim As String, ByVal bastarihi As Date, ByVal bittarihi As Date) Me.GorevIsmi = Isim Me.BaslangicTarihi = bastarihi Me.BitisTarihi = bittarihi End Class Görevler ekleneceği zaman, yeni bir Gorev nesnesi oluģturulur ve görevin baģlangıç-bitiģ tarihleri ayarlanır. Private Sub Form1_Load(ByVal ) Handles MyBase.Load ' Maksimum iki hafta seçilsin MonthCalendar1.MaxSelectionCount = 14 Private Sub btnekle_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnekle.click Dim baslangictarihi As Date = MonthCalendar1.SelectionStart Dim bitistarihi As Date = MonthCalendar1.SelectionEnd Dim gorevismi As String = txtyenigorev.text Dim yenigorev As New Gorev(gorevIsmi, baslangictarihi, bitistarihi) ListBox1.Items.Add(yeniGorev) Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged() Dim secilen As Gorev secilen = ListBox1.SelectedItem MonthCalendar1.SelectionStart = secilen.baslangictarihi MonthCalendar1.SelectionEnd = secilen.bitistarihi txtyenigorev.text = secilen.gorevismi Timer Zaman değeri ayarlanabilen sayaçtır. Interval özelliği ile, kaç milisaniyede bir çalıģacağı belirlenir. Windows uygulamalarında sayaç görevini görür. Timer Özellikleri Özellik Değer Tipi Açıklama Enabled Boolean Kontrolün aktif olup olmadığını belirler. Interval Integer Sayacın hangi zaman aralığında bir çalıģması rektiğini belirler. Milisaniye cinsindedir. TABLO: Timer Özellikleri 62

63 Timer Olayları Olay Açıklama Tick Interval özelliğinde belirtilen zaman değeri geçtiğinde gerçekleģir. TABLO: Timer Olayları Timer Metotları Metot Açıklama Start Sayacı baģlatır Stop Sayacı durdurur TABLO: Timer Metotları ProgressBar ProgressBar, belli bir andaki değerin, alabileceği değer aralığına göre yüzdesini gösterir. Yapılan bir iģlemin ilerleyiģini göstermesi açısından oldukça kullanıģlı bir kontroldür. ProgressBar Özellikleri Özellik Değer Tipi Açıklama Minimum Integer Kontrolün alabileceği minimum değeri belirler. Maximum Integer Kontrolün alabileceği minimum değeri belirler. Value Integer Kontrolün verilen değer aralığındaki pozisyonunu belirler. TABLO: ProgressBar Özellikleri Örnek: ProgressBar bir sayım iģleminde kalan durumu göstermek için kullanılabilir. ProgressBar ile durumun gösterileceği ayrı bir form eklenir. Burada sayma iģleminin hızı için bir Timer bulunur. Sayaç her iģlediğinde yeni değer ProgressBar kontrolünde gösterilir. Dim kalan As Integer Private Sub Durum_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load kalan = ProgressBarl.Maximum Timerl.Start() Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timerl.Tick If kalan = 0 Then Timerl.Stop() Me.Close() End If Dim aralik As Integer aralik = ProgressBarl.Maximum - ProgressBarl.Minimum 'Kalan sayım işleminin yüzdesi hesaplanır Dim oran As Integer = (aralik - kalan) / aralik * 100 Labell.Text = oran & "% tamamlandı" ProgressBarl.Value = ProgressBarl.Maximum - kalan kalan -= 1 63

64 RESĠM: ProgressBar kontrolü örneği. OluĢturulan bu form, baģlangıç formundan çağırılarak durum gösterilir. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CheckBox1.Checked = True Private Sub btnbaslat_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnbaslat.click Dim frmdurum As New Durum frmdurum.timer1.interval = TextBox1.Text If CheckBox1.Checked Then frmdurum.showdialog() End If ErrorProvider Form üzerindeki kontrollerin yanında hata mesajları gösterilmesini sağlar. ErrorProvider Özellikleri Özellik Değer Tipi Açıklama BlinkRate Integer Hata simgesinin kaç milisaniyede bir yanıp söneceğini belirler. BlinkStyle ErrorBlinkSytle Hata simgesinin yanıp sönme stilini belirler. Icon Icon Hata mesajlarının gösterilmesi sırasında çıkan simgeyi belirler. TABLO : ErrorProvider Özellikleri ErrorProvider Metotları Metot Açıklama SetError Kontrollerin hata mesajlarının belirlenmesi için kullanılır. TABLO: ErrorProvider Metotları ErrorProvider kontrolü forma eklendiği zaman, Properties panelinde, kontrollerin ekstra özellikleri görünür. Bu özellikler, forma eklenen her ErrorProvider için oluģturulur. Özellik Açıklama IconAlignment On ErrorProviderlsmi Hata simgesinin, kontrolün üzerinde nerde bulunacağını belirler. IconPadding On ErrorProviderIsmi Hata simgesinin, kontrolden kaç piksel uzakta duracağını belirler. Error On ErrorProviderIsmi Varsayılan hata mesajını belirler TABLO: ErrorProvider Ekstra Özellikleri 64

65 Örnek: Kayıt iģlemlerinin yapıldığı sırada, isim soyadı ve TC kimlik numaralarının giriģleri ErrorProvider kontrolü ile denetlenebilir. RESĠM: ErrorProvider kontrolü örneği. Metin kutularının Validating olayında, girilen verilerin kontrolleri yapılır ve gerektiği durumlarda ErrorProvider ile hata mesajları gösterilir. Private Sub txtisim_validating(byval ) Handles txtisim.validating If txtisim.text = "" Then ErrorProvider1.SetError(txtIsim, "İsim alanı boş girilemez") ' Bu komut olayın gerçekleşmesini engeller ' Dolayısıyla veri girilmeden bu alandan çıkılamaz e.cancel = True Else ' Eğer beri doğru girilmişse, Error simgesini ' gizlemek için, hata mesajı boş girilir ErrorProvider1.SetError(txtIsim, "") End If Private Sub txtsoyad_validating(byval ) Handles txtsoyad.validating If txtsoyad.text = "" Then ErrorProvider1.SetError(txtSoyad, "Soyad alanı boş girilemez") e.cancel = True Else ErrorProvider1.SetError(txtSoyad, "") End If Private Sub txttckimlik_validating(byval ) Handles txttckimlik.validating If Not IsNumeric(txtTCKimlik.Text) Then ErrorProvider1.SetError(txtTCKimlik, "Kimlik numarası yanlış girildi") e.cancel = True Else ErrorProvider1.SetError(txtTCKimlik, "") End If PictureBox Form üzerinde bir resim görüntülemek için kullanılır. PictureBox Özellikleri Özellik Değer Tipi Açıklama Image Image Kontrolün resim kaynağını belirler. SizeMode PictureBoxSizeMode Kontrolün, resmi nasıl görüntüleye ceğini belirler. TABLO: PictureBox Özellikleri 65

66 Örnek: Form üzerinde bir resmin değiģik boyutlarda gösterilmesi için PictureBox kontrolü tercih edilir. RESĠM: PictureBox kontrolü örneği. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.Items.Add("Normal") ComboBox1.Items.Add("Ortala") ComboBox1.Items.Add("Sığdır") ComboBox1.Items.Add("Otomatik Boyutlandır") ' ComboBox kontrolünden resmin görüntülenme modu seçilir Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Select Case ComboBox1.SelectedIndex Case 0 PictureBox1.SizeMode = PictureBoxSizeMode.Normal Case 1 PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage Case 2 PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage Case 3 PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize End Select Private Sub btngoster_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btngoster.click PictureBox1.Image = Image.FromFile(txtResimYeri.Text) ImageList ImageList kontrolü, form kontrolleri ve içinde bulunan öğeleri için arka plan resmi sağlayan bir listesi görevini görür. ImageList Özellikleri Özellik Değer Tipi Açıklama Images ImageCollection Kontrolün içinde bulunan resimlerin listelendiği dinamik bir koleksiyondur. Bu özellik bir koleksiyon olduğu için, diğer liste kontrollerinin öğelerinin resmini belirleme iģlemi büyük ölçüde kolaylaģır. ImageSize Size Kontrolün tuttuğu resimlerin büyüklüğünü belirler TransparentColor Color Listedeki resimlerin bu özellikte belirtilen renkteki bölgeleri saydam olur. TABLO: ImageList Özellikleri 66

67 Windows uygulamalarında ImageList kontrolünün kullanımı, diğer kontrollerin ImageList özelliği olarak belirlendikten sonra gerçekleģir. Bu kontrollerin listelediği öğelerin arka plan resimleri ImageList kontrolü ile belirlenir. Örnek: ImageList kontrolünde tutulan resimler bir sayı oyununda rasgele resim göstermek için kullanılabilir. RESĠM 9.20: ImageList kontrolü örneği. Private Sub btnyerlestir_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnyerlestir.click Dim max As Integer = ImageList1.Images.Count - 1 Randomize() PictureBox1.Image = ImageList1.Images(Rnd() * max) PictureBox2.Image = ImageList1.Images(Rnd() * max) PictureBox3.Image = ImageList1.Images(Rnd() * max) PictureBox4.Image = ImageList1.Images(Rnd() * max) ListView Kullanıcıya değiģik listeleme seçenekleri sunan bir kontroldür. Ġçinde bulunan öğeler, tek bir nesne olarak veya detayları ile gösterilebilir. Dolayısıyla öğeler ListViewItem nesnesi, detayları ise ListViewSubItem nesnesi olarak tanımlanır. ListView Özellikleri TABLO 9.47: ListView Özellikleri Özellik Değer Tipi Açıklama View View Listenin görünümünü belirler. LargeIcons değeri listedeki öğelerin büyük resimle, SmallIcons küçük resimle görünmesini sağlar. List değeri, öğelerin küçük resimle, fakat alt alta görünmesini sağlar. Details değeri, alt öğelerin kolonlar altında görüntülendiği detay görünümü sağlar. AllowColumn Reorder Boolean Detay görünümünde, kolonların kullanıcı tarafından düzenlenebilmesini belirler. Activation ItemActivation Öğelerin ne zaman etkinleģtirileceğini belirler. OneClick değeri, öğenin tek tıklamayla, Standard değeri, öğenin çift tıklamayla aktif hale geleceğini belirler. TwoClick değeri seçiliyken, ilk tıklandığında öğe seçilir, daha sonra ikinci defa tıklandığında ise öğe aktif hale gelir. CheckBoxes Boolean Öğelerin yanında seçme kutularının bulunmasını belirler. Columns ColumnHeader Collection Detay görünümündeyken, öğelerin alt öğelerinin gösterileceği kolonları tutan koleksiyondur. FullRowSelect Boolean Detay görünümde, öğenin tüm detay satırının seçilmesini belirler. GridLines Boolean Kolonlar ve satırlar arasında ayırıcı çizgilerin gözükmesini belirler. LabelEdit Boolean ÇalıĢma anında, kullanıcın, liste öğelerinin yazısını değiģtirmesini belirler. Bu özelliğin kullanılması için, Activation özelliğinin Standard olması gerekir. 67

68 ListView Olayları Olay Açıklama AfterLabelEdit Öğenin yazısı değiģtikten sonra gerçekleģir BeforeLabelEdit Öğenin yazısı değiģmeden önce gerçekleģir TABLO: ListView Olayları Örnek: Windows Explorer ile dosya görünümleri, ListView ile gerçekleģtirilir. RESĠM: ListView kontrolü örneği. Form yüklenirken ListView kontrolüne kolon ve öğeler eklenir. Ayrıca ComboBox kontrolüne görünüm seçenekleri eklenir. Private Sub Form1_Load(ByVal ) Handles MyBase.Load ComboBox1.Items.Add("Detay") ComboBox1.Items.Add("Büyük Simgeler") ComboBox1.Items.Add("Küçük Simgeler") ComboBox1.Items.Add("Liste") ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList ListView1.Columns.Add("Adı", 100, HorizontalAlignment.Left) ListView1.Columns.Add("Boyut", 50, HorizontalAlignment.Left) ListView1.Columns.Add("Tür", 170, HorizontalAlignment.Left) ListView1.View = View.Details Dim oge As New ListViewItem("bin") oge.subitems.add("") oge.subitems.add("dosya Klasörü") oge.imageindex = 0 ListView1.Items.Add(oge) oge = New ListViewItem("Form1.vb") oge.subitems.add("11 KB") oge.subitems.add("visual Basic Source") oge.imageindex = 2 ListView1.Items.Add(oge) oge = New ListViewItem("WindowsApplication1.sln") oge.subitems.add("1 KB") oge.subitems.add("microsoft Visual Studio Solution Object") oge.imageindex = 1 ListView1.Items.Add(oge) 68

69 ComboBox kontrolünde seçilen değer değiģtiği zaman, ListView görünümü değiģir. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Select Case ComboBox1.SelectedIndex Case 0 ListView1.View = View.Details Case 1 ListView1.View = View.LargeIcon Case 2 ListView1.View = View.SmallIcon Case 3 ListView1.View = View.List End Select Dinamik Kontroller Kontroller tasarım anında eklenip ayarlanabildiği gibi, çalıģma anında da oluģturulup forma eklenebilir. Kontrollerin, Properties panelinde gözüken tüm özelliklerine kod tarafından ulaģılabildiği için, çalıģma anında önceden oluģturulmuģ bir kontrolün özelliği değiģtirilebilir. Bununla birlikte, yeni bir form oluģturup gösterme iģlemi gibi, çalıģma anında yeni bir kontrol oluģturulup özellikleri atanarak form üzerinde gösterilebilir. Yeni eklenen kontrollerin olaylarına eriģmek için AddHandler anahtar kelimesi kullanılır. Kontrolün olayı gerçekleģtiği zaman çalıģtırılacak kodlar ise AddressOf anahtar kelimesi ile belirtilmelidir. AddHandler b.click, AddressOf ButonaBasildi Bu Ģekilde tanımlanan yordamların, kontrolün olay tanımlayıcısı ile aynı parametrelere sahip olmalıdır. Private Sub ButonaBasildi(ByVal sender As System.Object, ByVal e As System.EventArgs) Örnek: Form üzerinde sürekli düğme eklenen ve düğmelerin tıklandıklarında yok edildiği bir oyunun yazılması için, bu düğmelerin dinamik bir Ģekilde oluģturulması gerekir. RESĠM: Dinamik kontrol örneği. Form üzerindeki bir Timer kontrolü, iki saniyede bir düğme oluģturup forma ekler. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' Yeni bir düğme oluşturulur. Dim b As New Button b.height = 30 69

70 b.width = 30 b.text = "X" Dim maxlocation_y, maxlocation_x As Integer ' Yeni düğmenin yeri form dışında bir yerde olamaz maxlocation_x = Me.Width - b.width maxlocation_y = Me.Height - b.height Randomize() ' Düğmenin bulunacağı yer rasgele ayarlanır. b.location = New Point(Rnd() * maxlocation_x, Rnd() * maxlocation_y) AddHandler b.click, AddressOf ButonaBasildi ' Oluşturulan kontrol, Formun kontroller ' listesine eklenmelidir. Me.Controls.Add(b) OluĢturulan kontroller tıklandığı zaman çalıģtırılacak yordam yazılır. Private Sub ButonaBasildi(ByVal sender As System.Object, ByVal e As System.EventArgs) ' Kontrolün, üzerine basıldığı zaman yok edilmesi sender.dispose() Form yüklendiği zaman Timer nesnesi çalıģmaya baģlar. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Interval = 500 Timer1.Start() UYGULAMA: Hesap Makinesi Bu uygulamada, bir hesap makinesinde kullanılan genel fonksiyonlar gerçekleģtirilecektir. Kullanılan kontroller ve teknikler: Button. Hesap makinesindeki her iģlem ve sayı için bir düğme kullanılır. Try Catch Finally. Hesaplamalar yapılırken, kullanıcın yanlıģ bir değer girmesi durumunda çıkacak hataları yakalamak için kullanılır. RESĠM: Hesap makinesi. Kodların Yazılması ĠĢlemin türünü ve seçildiğini belirleyen, girilen bir önceki sayıyı tutan global değiģkenleri yazın. 70

71 Private IslemSecildi As Boolean = False Private Sayi As Double Private Islem As String Sayı düğmelerinden herhangi biri tıklandığı zaman, metin kutusunun görünümünü değiģtiren iģlemi yazın. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button0.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click If Not IslemSecildi Then txtsayi.text &= sender.text Else txtsayi.text = sender.text IslemSecildi = False End If ĠĢlem seçildiği zaman, bir önceki girilen sayıyı tutan kodları yazın. Private Sub btncarp_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btncarp.click, btnbol.click, btncikar.click, btntopla.click Islem = sender.text Try Sayi = txtsayi.text IslemSecildi = True Catch ex As Exception MsgBox("Sayı düzgün formatta girilmedi") Finally txtsayi.text = "" txtsayi.focus() End Try EĢittir düğmesi tıklandığı zaman aritmetik operasyonu yapan kodları yazın. Private Sub btnesit_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnesit.click Select Case Islem Case "*" Sayi *= txtsayi.text Case "/" Sayi /= txtsayi.text Case "-" Sayi -= txtsayi.text Case "+" Sayi += txtsayi.text End Select txtsayi.text = Sayi C (temizle) düğmesi tıklandığı zaman, metin kutusunu temizleyen ve global değiģkenleri baģlangıç değerlerine getiren kodları yazın. 71

72 Private Sub btntemizle_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btntemizle.click Sayi = 0 IslemSecildi = False txtsayi.text = "" txtsayi.focus() Menü Tasarımı ve MDI Formlar Menü Tasarımı Windows uygulamalarında en çok kullanılan tasarım araçları menülerdir. Dosya, Düzen, Görünüm gibi menüler neredeyse tüm Windows uygulamalarında, belli baģlı iģlerin yapılmasında kullanıcıya kolay eriģim sağlar. Uygulamalarda, menülerde tanımlanan iģlemlere görsel kısayollar sunulur. Bu iģlem araç kutuları ile sağlanır. Windows uygulamalarında kullanılan iki tip menü vardır. MenuStrip, formların baģında duran sabit menüdür. ContextMenuStrip, fare ile sağ tıklandığında çıkan menüdür MenuStrip Windows uygulamasına bir menü eklemek için, Toolbox panelinden bir MenuStrip kontrolünü forma sürükleyin. Eklenen menü bir bileģen olarak formun alt bölümünde gözükecektir. Ancak üstüne gelindiğinde formun baģlığının hemen altında belirir. Menü öğesi eklemek veya ismini değiģtirmek için üstüne gelinir ve baģlık yazısı yazılır. Properties panelinde bu menünün ToolStripMenuItem olarak eklendiği görülür. RESĠM: MenuItem. Menüye MenuItem eklendiğinde hemen altında ve yanında, menü eklemek için bir yer açılır. Bu açılan yere de menü ismi girilip, alt menü öğeleri oluģturulabilir. Menü öğeleri tıklandığı zaman bir iģlemin gerçekleģmesi için, kontrol çift tıklanarak bu öğenin Click olayına geçilir. ÇalıĢtırılmak istenen kodlar buraya yazılır. Private Sub YeniToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles YeniToolStripMenuItem.Click Menü öğelerine isim verirken & iģareti kullanılarak, kullanıcın klavyenin alt tuģuyla bu öğeyi çalıģtırması sağlanabilir. & iģareti hangi karakter ile kullanılırsa, kısayol olarak o karakter kullanılır (Resim 10.2). 72

73 RESĠM: Kısayol tuģunun belirlenmesi. ToolStripMenultem Özellikleri Özellik Değer Tipi Açıklama Checked Boolean Menü öğesinin yanında seçili olduğuna dair bir iģaretin gözükmesini sağlar. Enabled Boolean Menü öğesinin aktif durumda olup olmadığını belirler. RadioCheck Boolean Öğenin seçilme stilinin RadioButton düğmesi olarak gözükmesini sağlar. ShortCut ShortCut Menüye ulaģım için bir kısayol tanımlar. ShowShortCut Boolean Menünün kısayolunun, isminin yanında gözükmesini belirler. Menultems MenultemCollection Alt menülerin tutulduğu koleksiyondur. TABLO: Menultem Özellikleri ContextMenu RESĠM: Menü örneği. ContextMenu, bir kontrol sağ tıklandığı zaman açılan menüdür. RESĠM: ContextMenu özelliği. RESĠM: ContextMenu kullanımı. Bu menü uygulamaya eklendiği zaman Properties panelinde, kontrollerin ContextMenu özelliği olarak bu menü atanabilir. Kontrolün ContexMenu Özelliğini kullanmak için çalıģma zamanında kontrol üzerine sağ tıklanır. 73

74 ToolStrip ToolStrip kontrolü menülerin altında kullanıcıya kısayollar ve kullanım kolaylığı sunan bir kontroldür. Kontroldeki öğeler çoğu zaman ImageList kontrolünün sağladığı resimlerle gösterilir. Resim yerine yazı da gösterilebilir, ancak yazı ile iģlemlerin listelenmesi menülerle sağlanır. ToolStrip kontrolüne pek çok baģka kontrol eklenebilir. Bunu farklı yöntemleri vardır ama en kolay ve dolaysız olanı, forma eklenen ToolStrip kontrolünün üzerine tıklayarak açılan listeden seçmektir. Ġstenirse, ToolStrip kontrolüne sağ tıklanarak açılan menüden insert standart items seçilerek araç çubuğuna standart düğmeler eklenebilir. Ġsimlendirmesi ve imaj eklemesi yapılmıģ bu standart düğmeleri daha sonra istenildiği gibi düzenlenebilir. (istenen silinip, istenirse baģka kontrol eklenebilir) Resim: Standart Düğmeler seçilmiģ ToolStrip kontrolü Seçilen kontrolün özellikleri, özellikler penceresinden düzenlenebilir. Düğmeler tıklandığı zaman çalıģması istenen kodlar, ToolStrip kontrolünün Click olayına yazılır ToolTip Bu kontrol, form üzerindeki kontrollerin üzerine gelindiği zaman ipucu göstermek için kullanılır. ToolTip forma eklendiği zaman, kontrollerin özelliklerinde ToolTip on [ToolTip kontrolünün ismi] Ģeklinde bir özellik belirir. Bu özelliğe verilen yazılar, çalıģma anında kontrollerin ipucunu belirler. ÇalıĢma zamanı Mouse kontrolün üzerinde bekletildiğinde ipucu metni belirli bir süre görünür ve kaybolur. RESĠM: ToolTip kontrolü örneği. 74

75 ToolTip Özellikleri Özellik Değer Açıklama Tipi Active Boolean Kontrolün aktif olup olmadığını belirler. False değerini alırsa, form üzerinde ipuçları görüntülenmez. AutomaticDelay Integer AutoPopDelay, InitialDelay, ReshowDelay değerleri için otomatik süreleri ayarlar. AutoPopDelay Integer Ġpucunun görüntülenme süresini belirler. InitialDelay Integer Ġpucunun gözükmesi için, fare imlecinin kontrol üzerinde durması gereken süreyi belirler ReshowDelay Integer Yeni bir kontrolün üzerine gelindiği zaman, bu kontrole ait ipucunun gösterilmesi için gereken süreyi belirler. ShowAlways Boolean Seçilen kontrol aktif olmadığı zamanlarda dahi ipucunun gösterilmesini sağlar. TABLO: ToolTip Özellikleri StatusStrip Bu kontrol, Windows uygulamalarında formların altında bulunan durum çubuğunu temsil eder. Durum çubuklarında sadece bir yazı görüntülenebildiği gibi, içindeki paneller ile birden fazla durum yazısı görüntülenebilir. StatusStrip kontrolüne panel eklemenin en kolay yolu, kontrole tıklayarak açılan seçeneklerden seçmektir. Seçilen kontrolün özellikleri daha sonra değiģtirilebilir NotifyIcon Windows uygulamalarının Windows görev çubuğunda görüntülenen simgesini belirler. RESĠM: StatusBar kontrolü örneği. RESĠM: NotifyIcon kontrolü örneği. NotifyIcon Özellikleri Özellik Değer Tipi Açıklama Icon Icon Görev çubuğunda gözükecek simgeyi belirler. ContextMenu Menu Simge sağ tıklandığı zaman açılacak menüyü belirler. Text String Simge üzerine gelindiğinde görüntülenecek yazıyı belirler. TABLO: NotifyIcon Özellikleri RichTextBox Normal bir metin kutusundan daha geliģmiģ özelliklere sahip bir kontroldür. TextBox kontrolünde yazının yazı tipi, büyüklüğü gibi ayarlar yapılabilir. Ancak seçilen yazının rengi, yazı tipi, satır baģı geniģliği ve madde iģaretleri kullanımı gibi ayarlar yapmak mümkün değildir. RichTextBox kontrolü, bu tip zengin özelliklerin kullanılmasını sağlar. RESĠM: RichTextBox kontrolü örneği. 75

76 RichTextBox Özellikleri RichTextBox kontrolü kullanıcıya birçok seçenek sunar; dolayısıyla tasarım ve çalıģma sırasında eriģilebilen birçok özelliği bulunur. Tasarım sırasında ulaşılabilen özellikler: Özellik Değer Tipi Açıklama ZoomFactor Single Metnin büyüklüğünü belirler ara bir değer alır. WordWrap Boolean Uzun yazıların bir sonraki satıra geçerek görüntülenmesini sağlar. DetectUrls Boolean Bağlantı olarak girilen yazıların LinkLabel Ģeklinde algılanmasını belirler. Lines String() Satırları String dizisi olarak tutar. BulletIntend Integer Satırların madde iģaretinden kaç piksel açıkta duracağını belirler. AcceptsTab Boolean Tab tuģunun bir karakter olarak algılanmasını, dolayısıyla bu tuģa basıldığında kontrolden çıkılmasının engellenmesini belirler. ShowSelectionMargin Boolean Satır baģındaki boģluğun gösterilmesini belirler. RightMargin Integer Satırların maksimum uzunluğunu pikse cinsinden belirler. TABLO: RichTextBox Tasarım Sırasında UlaĢılabilen Özellikler Çalışma sırasında ulaşılabilen özellikler: Özellik Değer Açıklama Tipi Capture Boolean Kontrol içine yazı yazarken farenin gizlenmesini belirler. UndoActionName String En son yapılabilecek Undo iģleminin tipini tutar. RedoActionName String Undo iģlemi yapıldıktan sonra, en son yapılabilecek Redo iģleminin ismini tutar. SelectedText String Seçilen metni belirler. SelectionBullet Boolean Seçilen satırın madde iģaretli olarak görüntülenmesini belirler. SelectionAlignment Boolean Seçilen satırın hizalanmasını belirler. SelectionColor Color Seçilen metnin rengini belirler. SelectionFont Font Seçilen metnin yazı tipini belirler. SelectionIntend Integer Seçilen satırın, sol kenara olan uzaklığını belirler. SelectionLength Integer Seçilen metnin uzunluğunu belirler. TABLO: RichTextBox ÇalıĢma Sırasında UlaĢılabilen Özellikler RichTextBox Metotları Metot Açıklama Find Metin kutusu içinde, parametre olarak verilen bir yazıyı arar. Yazıyı ilk gördüğü yerin indisini döndürür. LoadFile Bir dosyadan alınan metni yükler. SaveFile Parametre olarak verilen konumdaki dosyaya, metni yazar. Dosyanın*.rtf veya *.doc uzantılarında kaydedilmesi, zengin içeriğin görüntülenmesi açısından önemlidir. Undo Yapılan iģlem geriye alınır. Redo Geri alınan iģlem tekrar yapılır. TABLO: RichTextBox Metotları RichTextBox Olayları Olay Açıklama TextChanged Metin kutusundaki yazı değiģtiği zaman gerçekleģir. LinkClicked Metin içindeki bir bağlantıya tıklandığı zaman gerçekleģir. TABLO: RichTextBox Olayları 76

77 Notepad Uygulaması Bu uygulamada, RichTextBox kontrolünün sağladığı kolaylıklarla bir metin editörü uygulaması geliģtirilecektir. Bu uygulamanın kullanımını kolaylaģtırmak için menüler, araç çubuğu ve durum çubuğundan faydalanılır. Bu uygulamada kullanılan kontroller ve teknikler: RESĠM: Notepad uygulaması. MenuStrip. Dosya, düzen, görünüm ve yardım iģlemleri için kullanılır. ContextMenu. Araç çubuğunu gizlemek ve kopyala, yapıģtır, kes gibi metin iģlemleri için kullanılır. RichTextBox. Yaz ılan metnin tutulması için kullanılır. Notifylcon. Uygulamanın simgesinin görev çubuğunda gözükmesini sağlar. ToolStrip. Kaydetme, dosya açma, hizalama gibi iģlemlere kısayollar sağlamak için kullanılır. SaveFileDialog. Dosyaların kaydedilmesi sırasında kullanılır. OpenFileDialog. Dosyaları açmak için kullanılır. FontDialog. Yazı tipini değiģtirmek için kullanılır. Kontrollerin Eklenmesi Form üzerine Tablo 10.12'deki kontrolleri ekleyin ve belirtilen özellikleri ayarlayın. Kontrol Kontrol İsmi Özellik ContextMenuStrip ContextMenuStrip1 Geri Al, Kes, Kopyala, YapıĢtır, Sil, Tümünü Seç değerlerini içeren menü öğeleri ekleyin. ContextMenuStrip ContextMenuStrip2 Gizle değerini içeren bir menü öğesi ekleyin. ToolStrip ToolStrip1 Kaydet, Aç, Kopyala, Kes, YapıĢtır, Undo, Redo, Madde ĠĢaretle, Sola Hizala, Sağa Hizala, Ortala komutları için düğmeler ekleyin. Her düğmenin Image özelliğine yaptıkları iģi ifade eden görseller tanımlayın. OpenFileDialog OpenFileDialog1 SaveFileDialog SaveFileDialog1 FontDialog FontDialog1 NotifyIcon NotifyIcon1 Text: "Notepad Uygulaması" Icon: Uygulamanız için bir simge seçin RichTextBox RichTextBox1 Uygulamaya son olarak bir MenuStrip ve ilgili alanlara aģağıdaki öğelerini ekleyin. Parantez içinde belirtilen tuģlar, menü öğelerine eriģmek için kullanılacak kısayollardır. Bu değerleri, menü öğelerinin ShortCutKeys özelliğinden ayarlayınız. 77

78 Dosya Düzen Görünüm Yardım Yeni (Ctrl+ N) Aç (Ctrl+O) Kaydet (Ctrl+ S) Farklı Kaydet ÇıkıĢ Geri Al (Ctrl+ Z) Kes (Ctrl+X) Kopyala (Ctrl+C) YapıĢtır (Ctrl+V) Sil Bul Yazı Tipi Tümünü Seç Sola Hizala Sağa Hizala Ortala Madde ĠĢaretle Araç çubuğunu gizle Hakkında Uygulamaya frmbul isminde yeni bir form ekleyin. Bu form, metin kutusunda aranan değeri bulmak için kullanılacaktır. Forma, arama iģlemleri için gereken kontrolleri ekleyin. TABLO 10.13: Eklenecek Kontroller Kontrol Kontrol İsmi Özellik Değer Button Buttonl DialogResult DialogResult.OK Text "Bul" Button Button2 Text "Ġptal" CheckBox cbtumkelimeyisec Text "Bulduktan sonra tüm kelimeyi seç" Checked True TextBox txtaranan Kontrolleri ekledikten sonra Buttonl ve Button2 düğmelerinin Click olayına, formu kapatan kodları yazın: Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() RESĠM: Notepad Bul iģlemi. Uygulamaya frmhakkinda isminde yeni bir form ekleyin. Bu form, uygulama bilgilerini içerir. RESĠM: Notepad Hakkında penceresi. 78

79 Kodların Yazılması Dosya ismini ve dosyanın kaydedilip edilmediğini tutan değiģkenleri tanımlayın. Private Kaydedildi As Boolean = True Private DosyaIsmi As String Menü öğelerine kod eklemeden önce, yapılacak iģlemler yordamlar içine yazılır. Menülerin Click olayları içinden bu yordamlar çağrılır. Böylece kodun karmaģıklığı azalır ve değiģiklik yapmak kolaylaģır. Dosyaya kaydetme ve farklı kaydetme iģlemlerini yazın. Sub Kaydet() ' Kaydetme işlemi If DosyaIsmi = "" Then FarkliKaydet() Else RichTextBox1.SaveFile(DosyaIsmi) Kaydedildi = True End If ' Farklı kaydetme işlemi Sub FarkliKaydet() Dim dosya As String ' Kaydedilecek yeri seçmek için SaveFileDialog kutusu gösterilir ' Dosya yoksa otomatik olarak oluşturulması sağlanır SaveFileDialog1.CreatePrompt = True If SaveFileDialog1.ShowDialog = DialogResult.OK Then dosya = SaveFileDialog1.FileName() RichTextBox1.SaveFile(dosya) DosyaIsmi = dosya Kaydedildi = True End If Yeni bir dosya veya var olan bir dosyayı açma iģlemlerini tanımlayın. Sub DosyaAc(ByVal yenidosya As Boolean) If Not Kaydedildi Then Select Case MsgBox("Dosya kaydedilsin mi?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.Ok ' Kaydetme işlemi yapılır Kaydet() Case MsgBoxResult.Cancel ' İşlem iptal edildi Exit Sub End Select End If If Not yenidosya Then ' Varolan bir dosya açılır. Dim dosya As String If OpenFileDialog1.ShowDialog = DialogResult.OK Then dosya = OpenFileDialog1.FileName RichTextBox1.LoadFile(dosya) DosyaIsmi = dosya End If Else 79

80 ' Yeni bir dosya açılır RichTextBox1.Clear() DosyaIsmi = "" End If Kaydedildi = True Bulma iģlemlerini gerçekleģtiren kodları yazın. Burada yeni bir form açılıp, orda girilen değerlere göre arama iģlemi yapılır. Sub Bul() ' Bulma formu görüntülenir, iptal tuşuna basıldıysa çıkılır Dim bul As New frmbul If Not bul.showdialog = DialogResult.OK Then Exit Sub Dim aranan As String = bul.txtaranan.text If aranan = "" Then Exit Sub ' Bulduktan sonra kelimenin tümünü işaretlenmesi bilgisi alınır Dim TumKelimeyiSec As Boolean = bul.cbtumkelimeyisec.checked ' Bulunan ilk indis alınır. Dim start As Integer = RichTextBox1.Find(aranan) If Not TumKelimeyiSec Then ' Sadece aranan kelime seçilir. RichTextBox1.Select(start, aranan.length) Else Dim son As Integer = start Dim bas As Integer = start While son < RichTextBox1.Text.Length - 1 AndAlso RichTextBox1.Text.Substring(son, 1) <> " " son += 1 End While While bas > -1 AndAlso RichTextBox1.Text.Substring(bas, 1) <> " " bas -= 1 End While RichTextBox1.Select(bas + 1, son - bas - 1) End If ToolBar düğmeleri tıklandığı zaman gerçekleģecek kodları yazın. (Bazı Toolbar öğelerinin yaptıkları iģler, MenuStrip ve ContexMenuStrip öğeleri tarafından da yapılmaktadır. Bu durumda aynı kodları sürekli tekrarlamak yerine, bir tek yordam altında Handles ifadesinden sonra iki menü öğesinin Click olayı yazılır. Private Sub SaveToolStripButton_Click(ByVal ) Handles SaveToolStripButton.Click, KaydetToolStripMenuItem.Click 'Kaydet Kaydet() Private Sub OpenToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenToolStripButton.Click, AçToolStripMenuItem.Click 'Aç DosyaAc(False) 80

81 Private Sub CopyToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopyToolStripButton.Click, KopyalaToolStripMenuItem1.Click, KopyalaToolStripMenuItem.Click 'Kopyala RichTextBox1.Copy() Private Sub CutToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CutToolStripButton.Click, KesToolStripMenuItem1.Click, KesToolStripMenuItem.Click 'Kes RichTextBox1.Cut() Private Sub PasteToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PasteToolStripButton.Click, YapıştırToolStripMenuItem1.Click, YapıştırToolStripMenuItem.Click 'Yapıştır RichTextBox1.Paste() Private Sub UndoToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UndoToolStripButton.Click, GeriAlToolStripMenuItem1.Click, GeriAlToolStripMenuItem.Click 'Geri al RichTextBox1.Undo() Private Sub RedoToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RedoToolStripButton.Click 'Tekrarla RichTextBox1.Redo() Private Sub MaddeisaretleToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MaddeisaretleToolStripButton.Click, MaddeİşaretleToolStripMenuItem.Click 'Madde işaretle RichTextBox1.SelectionBullet = Not RichTextBox1.SelectionBullet Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click, SOlaHizalaToolStripMenuItem.Click ' Sola Hizala RichTextBox1.SelectionAlignment = HorizontalAlignment.Left Private Sub ToolStripButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click, OrtalaToolStripMenuItem.Click ' Ortala RichTextBox1.SelectionAlignment = HorizontalAlignment.Center 81

82 Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click, SağaHizalaToolStripMenuItem.Click ' Sağa Hizala RichTextBox1.SelectionAlignment = HorizontalAlignment.Right Dosya içinde bulunan bir bağlantı tıklandığı zaman, bu bağlantıyı ilgili tarayıcıda açan kodları yazın. ' Linke git Private Sub RichTextBox1_LinkClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.LinkClickedEventArgs) Handles RichTextBox1.LinkClicked System.Diagnostics.Process.Start(e.LinkText) Dosya içine yazılan yazı değiģtiği zaman gereken kodları yazın. Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged Kaydedildi = False Uygulama kapanırken dosyanın kaydedilip kaydedilmeyeceğini soran kodları yazın. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Kapanırken dosyanın kaydedilmesi kontrol edilir. If Not Kaydedildi Then Select Case MsgBox("Dosya kaydedilsin mi?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.Ok ' Kaydetme işlemi yapılır Kaydet() Case MsgBoxResult.Cancel ' İşlem iptal edildi e.cancel = True End Select End If ÇalıĢmayı farklı kaydetmek için gerekli prosedur Private Sub FarklıKaydetToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FarklıKaydetToolStripMenuItem.Click 'Farklı Kaydet FarkliKaydet() ÇıkıĢ düğmesi iģlevi Private Sub ÇıkışToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ÇıkışToolStripMenuItem.Click 'Çık Application.Exit() 82

83 Yazı silme alt programı Private Sub SilToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SilToolStripMenuItem1.Click, SilToolStripMenuItem.Click 'Yazı Sil ' silinecek kelime RichTextBox kontrolünde seçilen kelimedir Dim silinecek As String = RichTextBox1.SelectedText ' secilen kelimenin indisi bulunur Dim i As Integer = RichTextBox1.SelectionStart RichTextBox1.Text = RichTextBox1.Text.Remove(i, silinecek.length) Tümünü seç alt programı Private Sub TümünüSeçToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TümünüSeçToolStripMenuItem1.Click, TümünüSeçToolStripMenuItem.Click 'Tüm yazıyı Seç RichTextBox1.SelectAll() Yazı tipi seç alt programı Private Sub YazıTipiToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles YazıTipiToolStripMenuItem.Click 'Yazı tipi seç ' Font seçerken, renklerin de görünmesi sağlanır. FontDialog1.ShowColor = True If FontDialog1.ShowDialog = DialogResult.OK Then RichTextBox1.SelectionFont = FontDialog1.Font End If Hakkında formunun gösterilmesi Private Sub HakkındaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HakkındaToolStripMenuItem.Click Dim hakkinda As New frmhakkinda hakkinda.showdialog() ' Araç çubuğunun gizlenmesi, MainMenu ve Toolbar kontrolüne atanan ContextMenu yapılır. Private Sub GizleToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GizleToolStripMenuItem.Click ToolStrip1.Visible = Not ToolStrip1.Visible Sözcük bul alt programı Private Sub BulToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BulToolStripMenuItem.Click Bul() 83

84 MDI Formlar Multiple Document Interface formları, içinde birden fazla form barındıran formlardır. Bu sayfalar ana forma bağlıdır. Ana form kapandığı zaman bu sayfalar da kapanır. MDlParent olarak nitelendirilen bu ana formların, MDlChild formlarını açmak ve yönetmek için menülere ihtiyaçları vardır. Formları MDI olarak tanımlamak için IsMdiContainer özelliğinin True olarak ayarlanması gerekir. RESĠM: ismdicontainer özelliği. MDI formlara alt formlar eklemek için, form oluģturma iģlemleri aģağıdaki Ģekilde yapılır. Ancak formun MDIParent özelliği belirlenmelidir. Dim f As New AltForm ' Oluşturulan form, ana forma bağlanır. f.mdiparent = Me f.show() Alt formlar geniģletildiklerinde alt formda tanımlı bir menü, ana formun menüsü ile birleģir. Bu menü birleģim iģlemine Merge denir. Alt Form üzerinde yazan baģlığın ana forma taģınması isteniyorsa, aktif alt formun ActiveMdiChild özelliğiyle text özelliği (baģlığındaki text) Ana Formun Text özelliğine aģağıdaki gibi atanır If Not Me.ActiveMdiChild Is Nothing Then Me.Text = Me.ActiveMdiChild.Text End If Fare Olayları Fare olayları, formlar üzerinde farenin bir tuģunun tıklanması ya da bir kontrolün üzerine gelinmesi gibi olaylardır. Bu olayla ilgili parametreler, olay gerçekleģtiği zaman MouseEventArgs nesnesi ile kullanıcıya bildirilir. MouseEventArgs özellikleri: Button. Hangi fare düğmesinin tıklandığını gösterir. Click. Olay gerçekleģene kadar, düğmeye kaç defa tıklandığını belirler. Örneğin fareye çift tıklanmıģsa 2 değerini alacaktır. Delta. Farenin ortadaki düğmesinin dönme oranını gösterir. X. Kontrole göre, farenin tıklandığı pozisyonun x koordinatını gösterir. Y. Kontrole göre, farenin tıklandığı pozisyonun y koordinatını gösterir. NOT Fare olayları MDI formlar üzerinde gerçekleģmez. MouseDown olayı: Farenin herhangi bir düğmesine basıldığı zaman gerçekleģir. Kontrolün Click olayından önce çalıģır. MouseUp olayı: Farenin basılan düğmesi kaldırıldığı zaman gerçekleģir. MouseMove olayı: Farenin, kontrol üzerinde hareket etmesi ile gerçekleģir. 2. BÖLÜM: Veri Yapıları Birçok Ģirket, kurum ve kayıtlarını tutan yapılar için verilerin önemi çok büyüktür. Verilerin kâğıt üzerinde tutulması, hem aramaların yapılması, hem de kayıt düzeni açısından çok zor bir yöntemdir. Bilgisayarların iģ yaģamında kullanıl- 84

85 maya baģlanması ile verilen yönetimi daha da kolaylaģtı. Ancak bu teknoloji ilerledikçe kullanılması zorlaģmaya baģladı. Verilerin tutulması metin dosyalarından tablolara aktarıldı. Günümüzde veri ve tablo yapılarının yönetimi artık veritabanı yöneticilerin eline bırakılmıģ durumdadır. Windows ve Web uygulamaların çoğu veri üzerine yoğunlaģır. Uygulamalarda veriye hızlı bir Ģekilde ulaģmak ve veriyi yönetmek için tablo yapılarının iyi bir Ģekilde modellenmesi gerekir. Bu kısımda Microsoft Access veritabanı üzerinde veri yapılarının kullanılması iģlenecektir Access' e Giriş Access Microsoft'un iliģkisel veritabanı uygulamasıdır. Ġçindeki birçok sihirbaz yardımı ile kullanım kolaylığı ve tablo tasarımlarının hızlı bir Ģekilde yapılabilmesini sağlar. Access tasarım görünümlerinde, tabloların yapısını analiz etmek için kullanılan sorguların kolay bir Ģekilde oluģturması sağlanır. KarmaĢık bir dosya yapısı olmaması, veritabanının taģınabilirliğini kolaylaģtırır ve her platformda çalıģabilmesini sağlar Access Ortamı Access ortamı, veritabanı geliģtirirken kullanıcıya birçok kolaylık sunar. Access açıldığı zaman kullanıcıyı aģağıdaki gibi bir ekran karģılar. Bu panel birçok iģleme kısayol sağlar. ÇeĢitli amaçlar için hazırlanmıģ pek çok hazır Ģablondan biri seçilebilir. Ya da üstte yer alan boģ veritabanı seçilebilir. Sayfanın sağında görülen dosya yolu ve ismi ayarlanarak çalıģma diske kaydedilir. Office 2003 üyesi bir Access dosyasının uzantısı mdb iken, Office 2007 den itibaren uzantı accdb olarak değiģmiģtir. Yeni veritabanı dosyasını oluģturur oluģturmaz ekrana, henüz kaydedilmemiģ, varsayılan ismi Tablo1 olan bir tablo gelir. 85

86 Ġlk tabloyu oluģturmak için kaydet düğmesine tıklanır ve açılan pencerede tabloya uygun bir isim verilir. Tablodaki kayıtlara bu isimle ulaģılacağından ve bir veritabanı dosyasında birden fazla tablo olabileceğinden isimlendirmeye dikkat etmek gerekir. Tablo adını KiĢiler olarak belirleyip Tamam düğmesiyle onaylanır. Sadece kimlik varsayılan alanına sahip KiĢiler tablosu aģağıdaki gibi görünür Tablo Tablo, çalıģanlar veya ürünler gibi belirli bir konuyla ilgili veriler içerir. Tablodaki her kayıt, belirli bir çalıģan gibi tek öğe hakkında bilgiler içerir. Kayıtlar ad, adres ve telefon numarası gibi alanlardan oluģur. Kayıt genellikle satır olarak, Alan da genellikle sütun olarak bilinir 1. Kayıt veya satır 2. Alan veya sütun Veritabanı, her biri farklı bir konu hakkında bilgiler depolayan birçok tabloyu içerebilir. Her tablo, metin, sayı, tarih ve resimler dâhil olmak üzere farklı türde birçok alan içerebilir. AĢağıdaki listede, oluģturulabilecek bazı genel tablo örnekleri gösterilmektedir. ġirketinizin müģterilerini ve onların adreslerini listeleyen bir müģteri tablosu 86

87 Sattığınız ürünlerin, her öğenin fiyatını ve resmini içeren bir kataloğu Görevleri ve son tarihleri izleyen bir görevler tablosu Donanım stoğu veya eldeki stok Doğruluğunu sağlamak ve sonradan çok fazla değiģiklik yapmak zorunda kalmamak için veritabanını dikkatle planlamak ve tasarlamak gerekir. Tabloda sütunları saptamak için, tabloda kayıtlı konuyu izlemek üzere hangi bilgiye gerek duyduğunuza karar verin. Örneğin, MüĢteriler tablosu için Ad, Adres, Telefon No, E-posta adresi baģlangıç olarak iyi bir sütun listesi oluģturur. Tablodaki kayıtlarda aynı sütun kümesi vardır; böylece her kayıt için Ad, Adres, Telefon No, E-posta bilgileri depolanabilir. Örneğin, adres sütununda müģteri adresleri vardır. Her kayıtta tek müģteri hakkında veri bulunur, adres alanında ise bu müģteriye ait adres vardır. Her tablo için baģlangıç sütun kümesini saptadıktan sonra sütunları daha fazla ayrıntılandırabilirsiniz. Örneğin, müģteri adını iki ayrı sütunda depolamak anlamlı olabilir: Ad ve soyadı; böylece bu sütunlara göre sıralayabilir, arayabilir ve dizin oluģturabilirsiniz. Benzer olarak, adres de adres, Ģehir, posta kodu ve ülke/bölge öğelerini içeren bileģenlerden oluģur; bunları da ayrı sütunlarda depolamak akıllıca olabilir. Bir arama gerçekleģtirmek istiyorsanız, örneğin Ģehir bilgilerinin ayrı bir sütunda depolanmasına gerek duyduğunuzda iģleme Ģehire göre filtre ve sıralama uygulayın. AĢağıdaki listede sütunları saptama için ipuçları veriliyor. Hesaplanan verileri dâhil etmeyin Çoğu durumda, tablolarda hesaplama sonucunu depolamanız gerekmez. Bunun yerine, bu sonucu görmek istediğinizde Access'in hesapları gerçekleģtirmesini sağlayabilirsiniz. Örneğin, bu veritabanında her ürün kategorisi için sipariģteki birimlerin bir alt toplamını görüntüleyen SipariĢteki Ürünler raporu olduğunu düģünelim. Ancak, tablolarda SipariĢteki Birimler alt toplamı sütunu olmasın. Bunun yerine, Ürünler tablosunda her ürün için sipariģteki birimleri depolayan SipariĢteki Birimler sütunu olsun. Bu verileri kullanarak, raporu her yazdırıģınızda Access alt toplamı hesaplar. Alt toplamın kendisinin tabloda depolanması gerekmez. Bilgileri en küçük mantıksal parçalar halinde depolama Tam ürün adları veya ürün tanımlamaları ile birlikte ürün adları için tek alanınız olmasını isteyebilirsiniz. Birden fazla bilgi türünü tek alanda birleģtirirseniz, daha sonra birbirinden bağımsız olguları almanız zor olacaktır. Bilgileri mantıksal parçalara bölmeyi deneyin; örneğin ad ve soyadı için veya ürün adı, kategori ve tanım için ayrı alanlar oluģturun. Veri sütunlarını her tabloda ayrıntılandırdıktan sonra, artık her tablonun birincil anahtarını seçmeye hazırsınız. Birincil anahtarları belirtme Her tabloda, tabloda depolanan her satırı benzersiz bir Ģekilde tanımlayan bir sütun veya sütun kümesi olması gerekir. Bu çoğunlukla, çalıģan no veya seri numarası gibi benzersiz bir kimlik numarasıdır. Veritabanı terminolojisinde bu bilgi tablonun birincil anahtarı olarak adlandırılır. Access birincil anahtar alanlarını birden fazla tablodaki verileri hemen iliģkilendirmek ve verileri sizin adınıza bir araya getirmek için kullanır. Kataloğunuzdaki her ürünü benzersiz olarak tanımlayan ürün numarası gibi tanımlayıcılar tablonuzda zaten varsa, bu tanımlayıcıyı tablonuzun birincil anahtarı olarak kullanabilirsiniz; ancak bu sütundaki değerlerin her zaman, her kayıt için farklı olması gerekir. Birincil anahtarda, yinelenen değerleriniz olamaz. Örneğin, adlar benzersiz olmadığından kiģi adlarını birincil anahtar olarak kullanmayın. Aynı adda iki kiģinin tablonuzda yer alma olasılığı çok yüksektir. 87

88 Birincil anahtarda her zaman bir değer olması gerekir. Bazı noktalarda sütun değeri atanmamıģ veya bilinmeyense (eksik değer), birincil anahtarda bileģen olarak kullanılamaz. Her zaman değeri değiģmeyen bir birincil anahtar seçmeniz gerekir. Birden fazla tablonun kullanıldığı veritabanında, bir tablonun birincil anahtarı diğer tablolarda baģvuru olarak kullanılabilir. Birincil anahtar değiģirse, anahtarın baģvuru olarak alındığı her yerde de değiģikliğin uygulanması gerekir. DeğiĢmeyecek birincil anahtar kullanılması, birincil anahtarın, kendisine baģvuran diğer tablolarla uyumsuzlaģma olasılığını azaltır. Çoğunlukla, rasgele benzersiz bir sayı birincil anahtar olarak kullanılır. Örneğin, her sipariģe benzersiz bir sipariģ numarası atayabilirsiniz. SipariĢ numarasının tek amacı sipariģi tanımlamaktır. Atandıktan sonra, bir daha değiģmez. Aklınızda iyi bir birincil anahtar olacak sütun veya sütun kümesi yoksa Otomatik Sayı veri türüne sahip sütun kullanmayı dikkate alın. Otomatik Sayı veri türünü kullandığınızda Access otomatik olarak size bir değer atar. Böyle bir tanımlayıcının gerçekliği yoktur; kendisini temsil eden satırları açıklayan gerçek bilgileri yoktur. Gerçekliği olmayan tanımlayıcılar değiģmeyeceklerinden birincil anahtar olarak kullanılmak için idealdir. Satır hakkında olguların (telefon numarası veya müģteri adı gibi) yer aldığı birincil anahtar, gerçekliği olan bilgilerin kendileri değiģebileceğinden değiģmeye daha yakındır Tabloya yeni alan ekleme veya tabloda yeni alan oluşturma Veriler tablolarda (konuya dayalı satır ve sütun listeleri) depolanır. Sütunlar, izlemek istenen bilgi öğeleri olan alanlar olarak da adlandırılır. Tabloya yeni alan eklemenin çeģitli yolları vardır ancak en sık kullanılan iki yolu; veri sayfası görünümü ya da tasarım görünümü sayfalarını kullanmaktır. Tasarım görünümü, Veri Sayfası görünümüne göre daha fazla esneklik sağlar; çünkü Tasarım görünümünden çıkmak zorunda kalmadan kullanılabilir tüm veri türlerini ayarlayabilir ve arama alanı oluģturabilirsiniz. Tasarım görünümünde sütun ekleme Alan Adı sütununda boģ bir satır seçin ve yeni alan için yeni bir ad yazın. Veri Türü sütununda, yeni alan adının yanında, yeni sütun için veri türü seçin Veri türleri Veritabanlarında tüm veriler aynı tipte tutulmaz. Bu durum, küçük veriler için fazla yer alanları açmayı engellediği gibi, değiģik formatlardaki verilerin yönetilebilirliğini de artırır. Bir veritabanını ilk kez tasarlar ve oluģtururken, bir veya daha fazla tablo planlarsınız, her tablo için alanları (sütunları) planlar ve her alan için bir veri türü ayarlarsınız. Örneğin, tarih ve saatleri depolamanız gerekiyorsa, bir alanı Tarih/Saat veri türüne ayarlarsınız. Ad ve adresleri depolamanız gerekiyorsa, bir veya daha fazla alanı Metin veri türüne ayarlarsınız ve bu Ģekilde devam eder. 88

89 Office Access farklı veri türü sağlar (Access'in önceki sürümleri dokuz tür sağlamaktaydı) ve bu türlerin her birinin belirli bir amacı vardır. AĢağıdaki tabloda veri türleri listelenmekte, her birinin depoladığı veri türü gösterilmekte ve her tür için söz konusu sınırlamalar açıklanmaktadır. Veri Kullanımı Sınırlamalar/Kısıtlamalar Türü Metin Alfa sayısal veriler En fazla 255 karakter depolar. Not (metin ve sayılar) Alfa sayısal veriler (metin ve sayılar) Alanı programla dolduracaksanız en çok 2GB veri depolar (tüm Access veritabanlarındaki boyut sınırıdır). 2GB veri eklendiğinde veritabanınızın yavaģ çalıģacağını unutmayın. Verileri el ile girecekseniz, tablo alanında ve alanla bağlantılı kıldığınız tüm denetimlerde en fazla karakter girebilir ve görüntüleyebilirsiniz. Office Access 2007 dosya biçiminde veritabanı oluģturduğunuzda, Not alanları zengin metin düzenlemeyi de destekler. Sayı Sayısal veriler Sayı alanları, alanın içerebileceği değerin boyutunu belirleyen bir Alan Boyutu ayarı kullanır. Alan boyutunu 1, 2, 4, 8 veya 16 bayt olarak ayarlayabilirsiniz. Tarih/Saat Tarih ve saatler Access tüm tarihleri 8 baytlık çift duyarlıklı tamsayılar halinde depolar. Para Birimi Otomatik Sayı Evet/Hayır OLE Nesnesi Parasal veriler Yeni kayıt oluģturduğunuz zaman Access tarafından oluģturulan benzersiz değerler Boole (doğru veya yanlıģ) verileri. Office ve Windows tabanlı programlardan gelen görüntü, belge, grafik ve diğer nesneler Verileri dört ondalık basamak duyarlığıyla 8 baytlık sayılar olarak depolar. Parasal veriler depolamak isterseniz ve Access'in değerleri yuvarlamasını istemezseniz, bu veri türünü kullanın. Verileri 4 baytlık değerler halinde depolar; genellikle birincil anahtarlarda kullanılır. Access tüm Evet değerleri için -1 ve tüm Hayır değerleri için 0 kullanır. En çok 2GB veri depolar (tüm Access veritabanları için boyut sınırıdır). 2GB veri eklendiğinde veritabanınızın yavaģ çalıģacağını unutmayın. OLE Nesnesi alanları özgün belgenin veya baģka nesnenin bit eģlem görüntülerini oluģturur ve veritabanınızdaki tablo alanlarında ve form veya rapor denetimlerinde bu bit eģlemi görüntüler. Köprü Web adresleri En çok 1 gigabayt veri depolar. Web sitelerine bağlantıları, bir intranet veya Yerel Ağ'da (LAN) bulunan siteleri ve dosyaları ve bilgisayarınızda bulunan siteleri veya dosyaları depolayabilirsiniz. Ek Desteklenen türde tüm dosyalar Office Access 2007.accdb dosyalarında yenidir. E-posta iletilerine dosya eklemeye çok benzer Ģekilde, veritabanınızdaki kayıtlara görüntü, veri sayfası dosyası, belge, grafik ve desteklenen diğer türlerde dosyalar ekleyebilirsiniz. Veritabanı tasarımcısının Ek alanını ne Ģekilde ayarladığına bağlı olarak, eklenen dosyaları ayrıca görüntüleyebilir ve düzenleyebilirsiniz. Ek alanları OLE Nesnesi alanlarına göre çok daha fazla esneklik sağlar ve özgün dosyanın bit eģlem görüntüsünü üretmedikleri için depolama alanını daha verimli kullanırlar. 89

90 2.2. SQL (Structured Query Language) SQL (Structured Query Language) dili, veritabanları üzerinde sorgu yapmak için kullanılan bir dildir. Sorgular, analiz aģamalarında, veri eklerken, güncellerken ve silerken kullanılır. Sorgular tek bir tablo üzerinde yapılabileceği gibi, birçok tablodan veri okunmasını da sağlar. Sorgular üzerinde konan kriterler, detaylı veri analizi yapmak için kullanılır SELECT Sorgusu SELECT sorgusu tablolardan veri kümesi çekmek için kullanılan sorgudur. Sorgunun yapısı SELECT Alanlar FROM Tabloismi WHERE Kriterler Ģeklindedir. Bu cümlede SELECT kelimesinden sonra gelen alanlar, tabloları oluģturulan kolonlardır. Sonuç kümesinde, tablonun hangi alanlarının olacağını gösterir. Burada yapılan, kolon bazında filtrelemedir. FROM ifadesi, sorgunun hangi tablo veya tablolar üzerinde yapılacağını gösterir. where ifadesinden sonra, sorgu kümesinde, verilen kritere uyan satırlar görüntülenir. Burada yapılan, satır bazında filtrelemedir. SELECT * FROM Kişiler Buradaki yıldız ifadesi, tüm alanların listeleneceği anlamına gelir. SELECT Kişiler.Adı, Kişiler.Soyadı FROM Kişiler select ifadesinde alanların ismi verilirken, hangi tabloya ait olduğu da yazılır. Ancak bu durum tek tablo üzerinden yapılan iģlemler için gerekli değildir. Birkaç tablo üzerinde sorgu yapıldığı zaman, alanları tablo ismiyle belirtmek gerekir. SELECT Adı, Soyadı FROM KiĢiler where ifadesinden sonra yazılan kriterler mantıksal karģılaģtırmalardır. Bu karģılaģtırmalar alanlardaki değerler üzerinde yapılır. KarĢılaĢtırmalar aritmetik olabildiği gibi metinsel de olabilir. Büyük. Alandaki değerin verilen bir değerden veya baģka bir alandan büyük olup olmadığını kontrol eder. SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi > 100 Büyük Eşit. Verilen bir alanın veya değerin, kontrol edilen alandan büyük veya alana eģit olup olmadığını kontrol eder. SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi >= 100 Küçük. Alandaki değerin verilen bir değerden veya baģka bir alandan büyük olup olmadığını kontrol eder. SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi < 100 Küçük Eşit. Verilen bir alanın veya değerin, kontrol edilen alandan küçük veya alana eģit olup olmadığını kontrol eder. SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi <= 100 between - AND. Alandaki değerin iki değer arasında olup olmadığını kontrol eder. Değerlere eģit oldukları durumlar da sonuç kümesine dahil edilir. SELECT Urunler.* FROM Urunler WHERE Urunler.IncelenmeSayisi BETWEEN 100 AND

91 NOT. Verilen kritere uymayan kayıtları döndürür. SELECT Urunler.* FROM Urunler WHERE NOT Urunler.IncelenmeSayisi = 0 LIKE. Alandaki değerin belirli bir metin biçimde olup olmadığını kontrol eder. SELECT Alanlar FROM Tablo WHERE AlanIsmi LIKE 'Pattern' 'Pattern' ifadesinde yazılan karakterler, alanların içinde kesin olarak geçecek karakterlerdir. Örneğin Isim LIKE 'Enis'. Ancak bazı özel karakterler farklı anlam ifade ederler. Örneğin, * karakteri sıfır veya daha fazla karakteri temsil eder. Isim LIKE '*ni*' ifadesi sıfır veya daha fazla karakter ile baģlayan, ni ile devam eden ve yine sıfır veya daha fazla karakter ile biten kelimeleri kontrol eder. Örneğin Deniz, Nil, Seni, Ni değerleri bu biçime uyacaktır Örnek: Microsoft Studio ürünlerin listelenmesi SELECT Urunler.Isim FROM Urunler WHERE Urunler.Isim LIKE '*Studio*' Is null. Bazı alanların değerleri boģ bırakılmıģ olabilir. BoĢ bırakılan alanların değerleri null olarak geçer. Sorgularda boģ alanların kontrolü Is NULL ifadesi ile yapılır. SELECT Urunler.* FROM Urunler WHERE Urunler.Ozellikler Is NULL Bir sorguda birden fazla kriter kullanılabilir. Ancak bu kriterlerin AND veya OR ifadeleri ile ayrılmaları gerekir. and ifadesi ile ayrılan kriterlerin hepsinin sağlandığı satırlar sonuca dahil edilir. OR ifadesi ile ayrılan kriterlerin herhangi biri sağlandığı satırlar sonuca dahil edilir. Örnek: 'den sonra kaydolmuģ, ismi E ile baģlayan kullanıcılar: SELECT * FROM Kullanicilar WHERE Kullanicilar.KayitTarihi > #12/12/2002# AND Kullanicilar.Isim Like 'E*' E-posta adresi veya Web adresi olan firmalar: SELECT Isim, , WebSayfasi FROM Firmalar WHERE ((Not ( ) Is Null)) OR ((Not (WebSayfasi) Is Null)); DISTINCT (Tekrarsız) Bir tablo içinde birbirinin aynı datalar bulunabilir. Aynı satırların listeleme esnasında bir kez yazılması için Distinct sözcüğü kullanılır. ÖRNEK: personel tablosundan soyad'lar tekrarsız olarak listelensin. Aynı soyada sahip birden fazla kiģi varsa sadece ilk kiģi listelenir: SELECT DISTINCT soyad FROM personel; ORDER BY (Sırasıyla) Tablodaki sütunları, belirli bir sütuna göre listelemek için SELECT komutuna, ORDER BY eklenir. ÖRNEK: Personel dosyasından, sicil, ad, soyad ve brüt sütunlarını seç ve brüt(maaģa) göre büyükten küçüğe sırala. SELECT sicil,ad,soyad,brüt FROM personel ORDER BY brüt ASC; DESC: Küçükten büyüğe sırala (A-Z) 91

92 ASC: Büyükten küçüğe sırala (Z-A) DESC yazılmazsa varsayılan (DEFAULT) olarak ASC kabul edilir BİRDEN ÇOK ALANA GÖRE SIRALAMA: Bir tablo içinde, birden fazla sütundan aynı anda sıralamak için kullanılır. ÖRNEK: Personel dosyasından seçilen sütunlarını aynı anda hem ad hem de brüt alanına göre sırala. SELECT sicil, ad, soyad, brüt FROM personel ORDER BY ad, brüt; ÖRNEK Personel tablosundan seçili sütunları öncelik adda olmak üzere (Z-A) adı bozmadan soyadı (A-Z) sıralı listele. SELECT sicil, ad, soyad, brüt FROM personel ORDER BY ad ASC, soyad DESC, brüt ASC; veya; SELECT sicil, ad, soyad, brüt FROM personel ORDER BY ad, soyad DESC, brüt; Hesaplama Fonksiyonları Alanlar üzerinde sayma, toplama, ortalama alma gibi aritmetik iģlemlerin yanı sıra minimum ve maksimum değerlerin alınması gibi iģlemler de yapılabilir. Bu iģlemlerin sonucunda sayısal bir sonuç ortaya çıkar. Bu sayı, sonuç tablosunda gösterilirken herhangi bir alan ismi ifade etmez. Dolayısıyla, sonuç tablosunda sayısal değerler gösterilirken mantıksal bir isim verilmesi gerekir. Bu ifade ise AS anahtar kelimesi ile belirtilir. Sum. Kriterlerin sağlandığı alanlar üzerinde toplama iģlemi yapar. SELECT Sum(IncelenmeSayisi) AS [Toplam Incelenme Sayisi] FROM Urunler WHERE Uretiliyormu = -1; Avg. Kriterlerin sağlandığı alanların ortalama değerini alır. SELECT Avg(BirimFiyat) AS [Ortalama Fiyat] FROM Urunler WHERE Uretiliyormu = -1; Max. Kriterlerin sağlandığı alanların maksimum değerini alır. Metinsel değerlerde alfabetik olarak sıralama yapar. SELECT Max(Isim) AS [En son geçen kullanıcı] FROM Kullanicilar; SELECT Max(KayitTarihi) AS [En son kaydolan kullanıcı] FROM Kullanicilar; Min. Kriterlerin sağlandığı alanların minimum değerini alır. SELECT Min(Isim) AS [En başta geçen kullanıcı] FROM Kullanicilar; SELECT Min(KayitTarihi) AS [İlk kaydolan kullanıcı] FROM Kullanicilar; Count. Değeri null olmayan satırların kaç tane olduğunu verir. Genellikle tablolardaki satır sayısı istendiğinde bu fonksiyon kullanılır. Ancak bu tip bir sorguda, sayılan alanın boģ bir değer almaması gerekir. Birincil Anahtar alanının üzerinden bir sayım yapılabilir. SELECT Count(KullaniciId) AS [Toplam Kullanıcı Sayısı] FROM Kullanicilar; 92

93 INSERT INSERT sorguları tablolara kayıt eklemek için kullanılır. Bu kayıtlar eklenirken tablo isimi, alan adı ve hangi değerlerin ekleneceği belirtilmelidir. INSERT sorgularında, gerekli olan (null kabul etmeyen) alanlara değer eklenmesi unutulmamalıdır. Sözdizimi: INSERT INTO Tablo (Alan1, Alan2,...) VALUES (Değer1, Değer2...) values ifadesinde verilen değerlerin, tablonun yazılan alanlarıyla aynı sırada olması gerekir. INSERT INTO Siparisler ( KullaniciId, NakliyeUcreti, SiparisTarihi, SonOdemeTarihi, Adres ) VALUES (1, 3, ' ', ' ', 'Beşiktaş Istanbul') UPDATE UPDATE sorguları tablolarda varolan kayıtların belirli alanlarının güncellenmesi iģlemini yapar. Bu sorguda da tablo, alan ve yeni değerlerin belirtilmesi gerekir. Sözdizimi: UPDATE Tablo SET Alan1 = Değer1, Alan2 = Değer2,... Bu sorguda dikkat edilmesi gereken en önemli nokta, belli kayıtlarda güncelleme iģlemi yapılıyorsa where kriterinin unutulmamasıdır. Aksi halde tablodaki tüm kayıtlar, sorguda belirlenen değerleri alacaktır. Örnek: UPDATE Kullanicilar SET ParolaSorusu = 'Yeni Soru', ParolaCevabi = 'Yeni Cevap' WHERE KullaniciId = DELETE Tablodan veri silmek için kullanılır. Bu sorguda alan isimleri belirtilmez, ancak where kriterinin unutulmaması gerekir. Sözdizimi: DELETE FROM Tabloİsmi Örnek: DELETE FROM Sepetim Where KullaniciId = Aritmetiksel İşlemler Sorgular sırasında, alanlar üzerinde toplama, çıkarma, çarpma, bölme gibi aritmetiksel iģlemler yapılabilir. Bu iģlemler sabit değerler ile yapılabildiği gibi baģka alanlardaki değerler ile de yapılabilir. Örnek: Birim fiyatlarının KDV eklenmiģ halini gösteren sorgu. SELECT Urunler.Isim, BirimFiyat * 1.18 AS [KDV Dahil Fiyat] FROM Urunler SELECT Sum(BirimFiyat) * 1.18 AS [Toplam Ürünler Fiyatı KDV Dâhil] FROM Urunler 93

94 3. BÖLÜM: VERİTABANI İLE ÇALIŞMAK Uygulamalardan veritabanına bağlanma için çeģitli yöntemler vardır. Biz, grafiksel araçları (görsel nesneleri) kullanarak bağlantı yapacağız. Bu iģlemi pratik bir örnek üzerinde açıklayalım: Adres defteri adında yeni bir Windows projesi oluģturalım. Veri menüsündeki seçeneklerden veri kaynağını göster i seçelim. ġekilden de göründüğü gibi Veri Kaynakları penceresi açılacaktır. Projede henüz veri kaynağı kaydı olmadığından yeni veri kaynağı ekleme linki görünmektedir. Bu linke tıklandığında veri kaynağı yapılandırma sihirbazı penceresi açılır. Bu sihirbaz, bir veritabanına bağlantı yapmamız için gerekli iģlemleri adım adım karģımıza getirir. Veritabanı seçeneğini seçerek pencere altındaki Next düğmesine tıklanır. 2. Adımda Veri kümesi seçilerek Next e tıklanır. 1. Adım 2. Adım 3. Adımda Yeni Bağlantı düğmesine tıklanır. 3. Adım 94

95 Açılan pencerede, varsayılan veri kaynağı Microsoft Access Veritabanı Dosyası içindir. DeğiĢtir düğmesine tıklanarak aģağıda da görülen farklı veritabanlarına bağlantı seçeneği seçilebilir. 4. Adım Biz uygulamamızda veritabanı olarak Microsoft Access Veritabanı Dosyası kullanacağımızdan, pencerede herhangi bir değiģiklik yapmadan Gözat düğmesine tıklanarak 4. Adımda açılan pencereden, daha önce oluģturduğumuz veritabanı dosyasını diskten bularak seçeriz, aç düğmesiyle onaylarız 5. Adım Böylece tekrar 4. Adımdaki pencereye dönmüģ oluruz. Tamam düğmesine tıklayarak 3. Adımdaki pencereye döneriz. Next düğmesine tıkladığımızda aģağıdaki gibi bir uyarı penceresi gelir. 95

96 Pencereyi evet butonuna tıklayarak devam ederiz. Bu pencereyi de değiģiklik yapmadan ilerlediğimizde, veritabanındaki tablolardan seçim yapacağımız pencere ekrana gelir. Ġstediğimiz tablo ya da tabloları seçerek finish butonuyla sihirbazı tamamlamıģ oluruz. Veri Kaynakları penceremiz artık aģağıdaki gibi görünmektedir. Veritabanı ile ilgili pek çok iģlemi bu pencere aracılığıyla yaparız. Örneğin, tek satır kod yazmadan verileri form üzerinde görüntülemek için aģağıdaki Ģu iģlem adımlarını uygularız: Veritabanımızdaki tek tablo olan kiģiler tablosunu sürükleyip form üzerine bırakalım. 96

97 Resimden de görüleceği gibi tablodaki verileri gösterecek DataGridView adında çok faydalı bir kontrolün yanında formun en üstüne yuvalanan BindingNavigatör adında gene çok faydalı bir bar, form alanının altına birer adet DataSet, BindingSource, TableAdapter ve TableAdapterManager nesneleri otomatik olarak eklenir. Ayrıca aģağıdaki kodlar da otomatik olarak eklenir. Otomatik eklenen ve uygulamalarımızda dakullanacağımız yeni kontrolleri kısaca açıklayalım: Dataset: Veritabanı dosyasındaki verilerimizin, RAM hafızadaki karģılığı. Uygulamalarda bağlantısız katmanda yapacağımız tüm ekleme-silme-güncelleme iģlemleri hafızada gerçekleģtirilir ve tableadapter aracılığıyla güncellenmedikçe gerçek veritabanı dosyasına aktarılmaz ve enerji kesintilerinde kaybolur. BindingSource: Formumuzun üzerine yerleģtirdiğimiz ve veritabanına bağlantı içerme özelliği bulunan (TextBox, ComboBox, ListViev, DataGridViev gibi) kontrolleri veritabanına bağlamamıza yarayan kontrol. TableAdapter: Diskte kayıtlı gerçek veritabanı dosyası ile hafızadaki karģılığı olan DataSet arasında veri transferi sağlayan kontrol TableAdapterManager: Birden fazla TableAdapterManager ile çalıģılıyorsa, hepsini organize eden kontrol BindingNavigator: Dataset e ait, Form üzerinde görüntülenen veriler arasında gezinme, yeni kayıt ekleme, kayıt silme, kaydı güncelleme iģlemlerine ait butonları üzerinde bulunduran bir araç çubuğu. DataGridView: Excel benzeri uygulamalar yapmamıza olanak sağlayan, özellikle DataBase uygulmalarında çok çeģitli özellikleriyle uygulamaları zenginleģtiren bir kontrol. 97

98 KiĢilerDataGridView nesnesinin Dock özelliğini Fill olark ayarlayıp programı çalıģtıralım. Resimden de görüleceği gibi hiç kod yazmadan verileri form üzerindeki bir tabloda görüntüleyebiliyoruz. Ayrıca BindingNavigator aracılığıyla tablodaki veriler arasında gezinip, tabloya veri ekleyip, tablodan veri silip, değiģiklikleri kaydedebiliyoruz. KiĢilerDataGridView kontrolü, varsayılan ayarlarla ekrana gelmiģtir. Diğer kontrollerde olduğu gibi, bu kontrolün de pek çok özelleģtirme seçenekleri vardır. Sütun baģlıklarını değiģtirmek, bazı sütunların görünümünü değiģtirmek gibi özelleģtirmeler için, diğer pek çok kontrolde de olan, kontrolün sağ üst köģesindeki oku tıklarız. Bu pencerede Edit Columns tıklandığında veritabanı kolonlarını düzenleyebileceğimiz aģağıdaki sayfa açılır. 98

99 Veritabanı dosyamızdaki KiĢiler tablosundaki KiĢi_ID sütunu, sadece birincil anahtarı tutan ve benzersiz bir alan sağlayan otomatik sayı bilgisini tuttuğundan, bu sütunun form üzerinde görüntülenmesi gereksizdir. Bu nedenle Selected Columns kısmından bu alanı seçip, alttaki Remove butonuna tıklayınca bu alan artık KiĢilerDataGridView tablosunda görüntülenmez. Diğer alanlarda düzenleme gerekiyorsa yapıp, OK butonuna tıklayarak düzenleme penceresini kapatırız Tablodan özel veri çekmek için sorgu çalıştırmak Bu noktaya gelene kadar yapılan iģlemler, tablodaki tüm kayıtları ekranda gösterir. Ancak çoğu zaman belli kriterlere göre filtre edilmiģ verileri ekranda görmek isteriz. Bunun için tabloya sorgu ekleme iģlemini aģağıdaki gibi gerçekleģtiririz. KiĢilerTableAdapter nesnesinin sağ üst köģesindeki oku tıklayarak açılan menüden Sorgu ekle linkine tıklarız Açılan pencerede Yeni Sorgu Adını FillByAdaGöre yazar ve Sorgu OluĢturucu düğmesine tıklarız. Açılan yeni pencere, sorgu cümlesi düzenleyeceğimiz araçlar sağlar. Varsayılan sorgu cümlesi, tüm veri alanlarındaki tüm verileri getiren aģağıdaki cümledir. SELECT [Kişi_ID], Soyadı, Adı, [E-postaAdresi], Telefon, Adres, Şehir, DogumTarihi FROM Kişiler Bu cümlenin sonuna ; WHERE Adı =? yazarak pencereleri onaylayıp kapattığımızda, formumuzun üstüne (BindingNavigator un altına) bir araç çubuğu eklenir. Bu çubuk üzerinde bir Label (Text özelliği Adı olan), bir textbox (text özelliği boģ), ve bir button (text özelliği FillByAdaGöre) vardır. Butona çift tıklayıp kod sayfasına gittiğimizde, aģağıdaki gibi bir kod kümesinin otomatik olarak eklendiğini görürüz. Private Sub FillByAdaGöreToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FillByAdaGöreToolStripButton.Click Try Me.KişilerTableAdapter.FillByAdaGöre(Me.AdresDefteriDataSet.Kişiler, AdıToolStripTextBox.Text) Catch ex As System.Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try Butonun Text özelliği olan FillByAdaGöre yazısını daha anlamlı olan Ada göre filtrele yazısıyla değiģtirip programı çalıģtıralım 99

100 Textbox kutusuna veritabanındaki isimlerden birini (örneğin YAHYA) yazıp ada göre filtrele butonuna tıklayalım. Görüldüğü gibi yazılan kritere göre filtreleme yapılarak tablo tekrar dolduruldu. Veritabanıyla iletiģim kurmanın bir baģka yolu da BindingSource nesnesini kullanmaktır Bindingsource BindingSource nesnesi tablolardaki alanları form üzerindeki nesneler ile iliskilendirmek için kullanılır. TableAdapter, hangi tablodan veri çekilecegini belirtir. Dataset ise hangi database den veri çekilecegini belirtir. dim bs as BindingSource bs=new BindingSource ġeklinde oluģturulup kaynak tanımlanabilir;(örneğin bir dataset'i kaynak gösterelim) bs.datasource=adresdefteridataset bs.datamember="kişiler" Yukarıdaki tanımlamayı aģağıdaki gibi tek satırda da yapabiliriz: dim bs as new bindingsource(adresdefteridataset, " Kişiler ") BindingSource metotları: BindingSource "Current" Methodu: BindingSource' un current methodu; Üzerinde bulunulan mevcut satırı iģaret eder, yani o an, hangi datarow aktifse, ya da kendine liste olarak seçtiği kaynağın hangi satırı seçiliyse o satırı anlatır. bs.current("adı") bize Adı sütununun değerini döndürür. sütunların indexleri ile de o sütunun değerine aģağıdaki gibi ulaģılabilinir: bs.current(3) BindingSource "Count" Methodu: bs.count tablodaki satır sayısını döndürür. 100

101 BindingSource "AddNew" Methodu: Veritabanına yeni bir satır eklemek için kullanılır; bs.addnew düzenlemeye hazır yeni bir satır.(satır henüz dataset üzerinde değildir) BindingSource "EndEdit" Methodu: Bu yöntem, bindingsource un listesinde yapılan değiģikliklerin dataset'e iletilip dataset bazında kaydedilmesini sağlar. Satır düzenleme bittiğinde endedit kullanmak gerekir. BindingSource "Filter" Methodu: Ekranda listelenen veriler üzerinde filtreleme yapar. bs.filter="sütun1='ahmet' and sütun2=123" BindingSource "Find" Methodu: Bu yöntem de arama, bulma iģlemleri yapar ancak geriye dönen değer aranan değerin kendisi değil bilginin bulunduğu satırın satır numarasıdır. (integer tipinde bir değer) bs.find("sütun adı",değer) şeklinde kullanılır BindingSource 'ta Navigasyon(Gezinme işlemleri) bs.movefirst ilk kayıta gider bs.movelast son kayıta gider bs.movenext bir sonraki satır bs.moveprevious bir önceki satır BindingSource "Position" yöntemi posiziton yöntemi hem 'get' hemde 'set' özelliklidir yani bindingsource u istediğimiz satıra gönderebilir, hem de bulunduğu satırı öğrenebiliriz, (integer tipinde bir değer döndürür) bs.position=3 3.Satıra gider dim a as integer=bs.position a değeri 3 olarak bize bulunduğu satır indexini döndürür. yukarıda bahsedilmiģ olan find methodu iģte burada iģe yaramaktadır; bs.position=bs.find("sütunadı",değer) Ģeklinde kullanıldığı zaman artık current methoduyla bulmuģ olduğumuz satırdan sadece aradığımız sütun değerlerini değil diğer tüm sütunlarında o satırdaki değerlerini alabiliriz BindingSource'ta index kullanımı: bs(4)("yaşı") bu örnek bize 4.satırdaki 'yaģı' isimli sütunun değerini döndürür. find methodunun kullanım alanlarından biri de burada ortaya çıkar: dim a as string=bs(bs.find("sütun adı",değer)).tostring bu ifade istediğimiz ifadeyi arayıp,bize döndüren tek satırlık bir ifadedir. 101

102 BindingSource "RemoveCurrent" Yöntemi: Üzerinde bulunulan mevcut satırı silebiliyoruz (Bellekten) BindingSource "RemoveFilter" Yöntemi: Daha önce "Filter" yöntemi ile filtrelenen kayıttan tüm filtreleri temizleyip listesini orijinal hale döndürür BindingSource "Sort" ve "RemoveSort" Yöntemleri: sort sıralama yapar ve removesort bu sıralamyı iptal eder: bs.sort="sütunadı desc" sütunadı alanı sıralandı bs.removesort sıralama iptal edildi Tabloya yeni kayıt ekleme silme düzenleme Her ne kadar Veri Kaynakları sekmesinden çalıģma alanına sürükle-bırak yöntemiyle form üzerinde oluģturulan bir veri bağlantılı kontrolle birlikte otomatik olarak oluģan BingNavigator nesnesi üzeindeki çeģitli butonlar bu amaçla pek çok iģlevi yerine getirse de, bazen programcılar kendi araç çubuklarını kullanarak veritabanı üzerinde iģlem yapan kodları düzenlemek isterler. Bu nedenle, baģlıkta verilen iģlemleri yapan kodları bilmek gerekir. AĢağıda açıklanan kodlar, bizim de uyguladığımız Adres Defteri uygulamasındaki veritabanı nesnelerine aittir. Değişiklikleri iptal etmek: DataSet üzerinde yapılmıģ ama henüz veritabanına aktarılmamıģ değiģiklikleri iptal etmek isteyebiliriz. Bu iģi yapan kod: AdresDefteriDataset.RejectChanges Kodu daha fonksiyonel hale getirelim: DataSet te herhangi bir değiģiklik varsa değiģiklik yapılsın, değiģiklik yoksa kullanıcıya, veritabanı tablosunda hiçbir değiģiklik yapılmadığı mesajını veren kodlar: If AdresDefteriDataset.HasChanges Then AdresDefteriDataset.RejectChanges() lblmesaj.text = "Değişiklikler İptal Edildi" Else lblmesaj.text = "Yapılmış Bir Değişiklik Yok " End If Seçili kaydı silmek: If KişilerBindingSource.Position >= 0 Then KişilerBindingSource.RemoveAt(KişilerBindingSource.Position) lblmesaj.text = "Kayıt Silindi." Else MsgBox("Silinecek Kayıt Yok") End If Yeni kayıt eklemek: Bu kod, DataSet e, boģ bir satır ekler. Hemen arkasından alanlara veri girip kaydedilir. KişilerBindingSource.AddNew() 102

103 Kaydetmek: Bu kodlar, DataSet üzerindeki verileri, veritabanı dosyasına kaydeder. KişilerBindingSource.EndEdit() 'BindingSource'daki düzenleme modunu sonlandırıp gerçekleşen değişiklikleri DataSet'e aktarır KişilerTableAdapter.Update(Me.AdresDefteriDataSet.Kişiler) lblmesaj.text = "Kayıt Gerçekleşti" Veritabanına yeni bilgileri kod ile girmek: Form üzerindeki bindingsource nesnesi ile veritabanına bağlı kontroller aracılığıyla veri girmek oldukça kolaydır ama bazen kod ile veri girmek gerekebilir. Bunu bir yolu aģağıdaki gibidir: Dim yenikayit As DataRow yenikayit = AdresDefteriDataSet.Kişiler.NewRow yenikayit.item("adı") = Ahmet yenikayit.item("soyadı") = Mete AdresDefteriDataSet.Kişiler.Rows.Add(yenikayit) KişilerTableAdapter.Update(AdresDefteriDataSet.Kişiler) 4. BÖLÜM: VISUAL BASIC.NET İLE RAPORLAMA Günümüzdeki uygulamaların birçoğu veritabanı kullanılmasını gerektiren, çok fazla verinin kullanıldığı programlardır. Bu verilerin görüntülenmesi, bir sonuç raporu oluģturulması, veriye uygun grafik çizdirilmesi hiç süphesizki, uygulamanın temel taģlarından, olmazsa olmazlarından birisidir. Basit bir sekilde, temel form elemanlarını (Button, TextBox, ListBox vs.) kullanarak veriler sorgular kullanılarak değiģik yöntemlerle formlarda görüntülenip rapor sunulabilir. Fakat profesyonel bir programda uzman bir raporlama sistemi, istenen ilk bileģendir. Bu amaçla kullanılan araçlardan biri de Crystal Reports tur. Crystal Reports ile raporlamanın pek çok faydası vardır. Crystal Reports For Visual Studio.Net ile; Hızlı rapor oluģturulabilir. Normal raporlardan karmaģık raporlara kadar tüm raporlar oluģturulabilir. Raporların Web desteği oldugundan dolayı Web uygulamalarında da sorunsuz kullanılabilir. Veriler hem grafik hem de düz tablo biçiminde gösterilebilir. Olusturulan raporlar porgramlama destegi ile.pdf,.doc,.xls ve.rtf formatlarına export edilebilir. Bu raporlama aracının kullanımını, veritabanı konusunda yaptığımız Adres Defteri uygulamasındaki tek tablomuz olan KiĢiler tablosunu raporlama üzerinde anlatalım: AdresDefteri Projemize, Proje menüsü altında Yeni Öğe Ekle menü öğesini tıklayarak açılan pencerede Reporting altında bulunan Crystal Reports seçeneğini seçerek bir rapor nesnesi ekleyelim. (rapor nesnesinin varsayılan adı CrystalReport1 olup istenirse bu isim değiģtirilebilir) Açılan ilk pencerede raporu nasıl oluģturmak istediğimizi soran seçenekler içinden Rapor sihirbazı seçeneğiyle, ardıģıl pencereler aracılığıyla rapor oluģturulabilir ancak biz, bütün ayarlarını kendimizin yapacağı BoĢ Rapor Olarak seçeneğini seçerek devam edelim. 103

104 Sol kenarda, sadece crystal reports düzenlenirken kullanılacak araç çubuğunda, aģağıdaki kontroller bulunur: Rapor üstbilgisi kısmında bir metin nesnesi oluģturup içine uygun bir ifade yazalım (Örneğin: ADRES DEFTERİM gibi) Crystal reports ile rapor düzenlerken kullanılacak araç çubuklarını eklemek için aģağıdaki resimden yararlanabilirsiniz. 104

105 Crystal Reports Ana araç çubuğundan yararlanarak rapor üstbilgisini düzenleyebilirsiniz. (Yazı tipi, boyutu, kalın, italik, ortala v.b.) ġu ana kadar hazırladığımız Crystal Reports nesnesini henüz hiçbir veritabanı nesnesiyle iliģkilendirmedik. Bunu yapmak için Alan Gezgini penceresinde bulunan Veritabanı Alanları seçeneğine sağ tıklayıp açılan pencereden Veritabanı Uzmanı nı seçeriz. Açılan pencereden, projemizde tanımlı DataSet ve tablo ya da tabloları seçeriz a- Projemizde tanımlı DataSet ve tablo b- Bu tablolardan, raporda kullanmak için seçimimiz. Bu iģlemden sonra artık eklediğimiz tabl ya da tabloların alanlarını raporumuzda kullanabiliriz Raporumuzda görünmesini istediğimiz veritabanı alanlarını sürükleyip Ayrıntılar kısmına bırakarak çok hızlı bir Ģekilde raporumuzu tasarlayabiliriz. Bunu yaptığımızda, alan adlarının otomatik olarak sayfa üst bilgisi olarak etiketlendiğini görürüz. Bu yazıları, istersek değiģtirebiliriz. Rapor alt bilgisi ve (veya) sayfa altbilgisi kısımlarına da istediğimiz yazıları yazdırabiliriz. Bu amaçla özel alanlar kısmından çeģitli hazır alanları kullanabiliriz. Sayfa altbilgisi kısmına sayfa numarasını, Rapor Altbilgisi kısmına toplam sayfa sayısını yazdıralım. OluĢturduğumuz rapor, AdresDefteri veritabanı dosyasındaki KiĢiler Tablosundaki Tüm kayıtların tasarımla belirlediğimiz alanlarını raporlamak için yeterlidir. 105

106 Raporu görüntülemek için projemize CrystalReportViewer nesnesi eklememiz gerekir. Bu nesneyi bir form üzerine yerleģtirebiliriz. Bu nedenle projemize adı Rapor olan yeni bir form ekleyip, bir CrystalReportViewer sürükleyip forma bırakalım. Eklenen CrystalReportViewer1 varsayılan isimli nesne, formumuzun içini tümüyle kaplar (Dock özelliği Fill olur). CrystalReportViewer1 kontrolünün sağ üst köģesindeki oku tıklayarak buradan Bir Crystal Report Seç linkine tıklayarak gelen penceredeki açılır liste kutusundan daha önce oluģturduğumuz CrystalReport1 seçeneğini seçer ve tamam düğmesiyle onaylarız. Projemizden bu rapor sayfasına ulaģmak için bir menü tasarlıyalım. (Aynı Ģey, bir araç çubuğundan da yapılabilir) Menüdeki Rapor seçeneğine tıklandığında çalıģacak kodları aģağıdaki gibi yazalım. Daha sonra programı çalıģtırıp raporu çağırdığımızda sayfa altındaki gibi görünür. Private Sub RaporToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RaporToolStripMenuItem.Click Dim RptAdresDefteri As New CrystalReport1 RptAdresDefteri.SetDataSource(AdresDefteriDataSet.Tables("Kişiler")) Dim FrmRapor As New Rapor FrmRapor.CrystalReportViewer1.ReportSource = RptAdresDefteri FrmRapor.Show() 106

107 5. BÖLÜM: SERİ İLETİŞİM Veri iletiģimi temelde A noktasındaki bir veriyi hatasız bir Ģekilde B noktasına aktarma iģlemidir. Buna tek yollu veri iletiģimi denir. Eğer B noktası da A noktasına veri gönderebiliyorsa buna da iki yollu veri iletiģimi denir. Veri iletiģimi, seri ve paralel olmak üzere iki Ģekilde gerçekleģtirilebilir. Bu ders notunda sadece seri veri aktarma üzerinde durulacaktır. Seri iletiģim; gönderilecek ve alınacak olan verinin tek bir hat üzerinden (gönderme iģlemi için bir hat, alma iģlemi için ayrı bir hat) bit lerin belli bir protokol esasına göre gönderilmesi veya alınması iģlemidir. Paralel iletiģime göre daha yavaģ gerçekleģse de, donanımlarının daha basit olması ve paralel iletiģimde fazlaca kullanılan pin sayısının (dolayısıyla veriyi aktaracak iletken hat sayısının) azalması avantajlarından dolayı yaygın bir kullanım alanı vardır. Bu avantajlarına karģın seri haberleģmede yazılım daha zordur. Seri hattan gelen datayı hatasız olarak alıp tekrar paralele dönüģtürmek gerekir. Seri haberleģme, senkron ve asenkron olmak üzere iki yöntemle gerçekleģtirilir. Senkron iletiģimde bir veri bloğu, saat palsleri ile senkronize edilerek iletilirken, asenkron iletiģimde bir byte lık veri, belirlenmiģ zaman dilimlerinde bit ler halinde iletilir. Her iki iletiģim yöntemi de donanım desteği olmadan sadece yazılımla gerçekleģtirilebildiği gibi, donanımsal destekle de gerçekleģtirilebilir. Ġster senkron ister asenkron yöntem kullanılsın, donanım desteği olmadan yapılan seri iletiģim yöntemine SFR siz (Special Function Register) seri iletiģimi denir. Bu yöntemle yapılan seri veri iletiģiminde yazılım zor ve uzun olacaktır. Bu nedenle seri haberleģmenin kolay gerçekleģtirilmesi için donanım modülü desteği olan mikrodenetleyici (16F628A, 16F877A ) kullanmak gerekir ASENKRON SERİ İLETİŞİM ÖZELLİKLERİ RS232 standardı, cihaz / Sistemlerin seri haberleģmesinde kullanılan standart bir arabirimdir. BaĢlangıçta bu standart, yazıcı ve telgraf cihazları için tanımlanıp kullanılırken, 1987 de geliģtirilen yeni versiyonuyla pek çok cihaz ve sistemin haberleģmesinde kullanılmaya baģlanmıģtır. Birçok bilgisayar üzerinde bir veya daha fazla seri port, RS232C standardının bir bileģeni olarak kullanılır. RS232C standardı, aģağıdaki elektriksel parametrelere sahiptir. LOJĠK 0 değeri (+3V) (+25V) arasında ( space ) LOJĠK 1 değeri (-3V) (-25V) arasında ( Mark ) (-3V) (+3V) arasındaki bölge tanımsızdır. Bir açıkdevre voltajı toprağa göre asla 25V u geçmemelidir. Kısa devre akımı asla 500 ma akım değerini aģmamalıdır. Bunlar dıģında; hat kapasitansları, maksimum haberleģme hızları (max baud rate) gibi daha pek çok özellik, standartlar halinde belirlenmiģtir SFR SİZ SERİ İLETİŞİM Mikrodenetleyicinin donanım modülleri (USART, SPI, I 2 C) kullanılmadan yalnızca yazılım ile yapılan iletiģim metodudur. Bu yöntemin avantajı, donanım modüllerinin kullanacağı pinleri kullanma zorunluluğu olmamasıdır. Ayrıca donanım desteği olmayan denetleyiciler ile seri haberleģme yapılmak istendiğinde bu yöntemin uygulanması zorunludur. Programcının seri haberleģme kural ve protokollerini çok iyi bilme gerekliliği ise dezavantajıdır. Ayrıca yazılımda yapılması istenen iģlerin zamanlamasında problem yaģanabilir. Donanım (USART, MSSP) modülü kullanılarak yapılan seri haberleģmede zaman gecikmesi yaģanmaz. 107

108 5.3. RS232 SEVİYE ÇEVİRİCİSİ Pek çok dijital sistem, TTL veya CMOS lojik seviyelerde çalıģmaktadır. Bu cihazların RS232 portuna bağlanması için 0 5 volt gerilim değerlerinin RS232 seviyelerine dönüģtürülmesi gerekir. Bu amaç için tasarlanmıģ entegre devre çözümleri vardır. Bunlardan en çok kullanılanlarından biri; Maxim Semicondictor firmasının sürücü entegresi olan MAX232 dir. Bu entegre, TTL Lojik 0 (0 Volt) seviyeyi +10 Volta, Lojik 1 (+5 Volt) seviyeyi de -10 Volt a dönüģtürür. MAX232 entegresi iki seri haberleģme kanalını destekler. (2 verici ve 2 alıcı kanala sahiptir) ayrıca tiplerine göre harici olarak bağlanması gereken elektrolitik kondansatöre gereksinim duyar DONANIM ÖZELLİKLERİ Cihazlar arası seri haberleģmede iki tür kategoride seri kablolar kullanılır. Veri haberleģme gereçleri (Data Communications Equipment: DCE) ve veri terminal gereçleri (Data Terminal Equipment: DTE) DTE; PC veya terminal iken, DCE ler; modem, plotter gibi cihazlardır. Buna göre PIC ile PC arasındaki seri haberleģmede PIC kartı bir DCE cihazdır. DTE den DCE ye olan iletiģim hızı, terminal hızı olarak adlandırılır ve iki modem arasındaki hat hızı (Line Speed) olarak bilinen DCE-DCE arasındaki hızdan daha hızlı olmalıdır. DTE DCE arası veri akıģ kontrolü; donanım ve yazılım kontrolü olarak iki Ģekilde yapılır. Yazılım akıģ kontrolü, X ON / X OFF karakterleri ile yapılır X ON karakteri ASCII 17 ve X OFF karakteri ASCII 19 ile gösterilir. Bir gönderme ve alma iģleminde bilgisayar tamponu (buffer) dolduğunda modem, bilgisayara X OFF iģareti göndererek veri gönderme iģlemini durdurmasını ister. Modemde bir oda boģalır boģalmaz bilgisayara X ON iģareti göndererek bilgisayardan yeniden veri göndermesini talep eder. Bu tip kontrol, karakter gönderme (TxD) ve alma (RxD) hatlarınd daha fazla kablo gerektirmemesi avantajına sahiptir. Donanım akıģ kontrolü, RTS (Request To Send) / CTS (Clear To Send) akıģ kontrolü olarak bilinir. Veri; TxD ve RxD hatları tarafından gönderilir ve alınır. Böylece donanım akıģ kontrolü X ON ve X OFF ta olduğu gibi gönderme zamanlarını yavaģlatmaz. Bilgisayar veri göndermek istediğinde RTS hattı aktiftir. Eğer modem bu veriyi tutacak odalara sahipse CTS yi aktif hale getirerek cevap verir ve bilgisayar veri göndermeye baģlar. Modem bilgisayarın gönderdiği veriyi tutacak hafıza alanına sahip değilse, CTS göndermez. Böylece bilgisayar modeme veri gönderemez SERİ HABERLEŞME PORTLARI Seri portlar iki veya üç farklı tür ve boyutta bulunmaktadır. DB-9, DB-25 VE RJ-45 (Registered Jack 45) RJ-45 daha çok telefon ve network (ağ) kablosu olarak kullanılmaktadır. Özel durumlarda seri bağlantı için de kullanılabilir. 108

109 DB-9 DB-25 RJ-45 Bu konektör PC üzerinde erkek (male) soket türünde olduğu için PIC kartı üzerinde bunun tersi olan diģi (female) soket bulunmalıdır. Erkek ve diģi soketlerin "ayna görünümünde" olduğuna dikkat ediniz. D-Tipi 25 pin No. D-Tipi 9 pin No. Kısaltma Adı Pin 2 Pin 3 TD Transmit Data ( Veri Gönder ) Pin 3 Pin 2 RD Receive Data ( Veri Al ) Pin 4 Pin 7 RTS Request To Send ( Gönderme Ġsteği ) Pin 5 Pin 8 CTS Clear To Send (Göndermeye Müsait ) Pin 6 Pin 6 DSR Data Set Ready ( Veri Paketi Hazır ) Pin 7 Pin 5 SG Signal Ground ( Sinyal Topraklama ) Pin 8 Pin 1 CD Carrier Detect ( TaĢıyıcı Tanımlandı) Pin20 Pin 4 DTR Data Terminal Ready ( Veri Terminali Hazır ) Pin 22 Pin 9 RI Ring Indicator ( Çevrim Göstergesi ) Pin Fonksiyonları Kısaltma Adı Fonksiyonu TD Transmit Data Seri Veri ÇıkıĢı (TxD) RD Receive Data Seri Veri GiriĢi (RxD) CTS Clear To Send Bu hat seri portun veriyi göndermek için hazır olup olmadığını belirler. DCD Data Carrier Detect Seri port telefon hattının diğer ucundaki portta bir taģıyıcı (Carrier) tespit ettiğinde hat aktif olur. DSR Data Set Ready UART a modemin bağlantı için hazır olduğunu belirtir. DTR Data Terminal Ready DSR nin tersini yapar. Modeme UART ın bağlantı için hazır olduğunu belirtir. RTS Request To Send Modeme, UART ın veriyi göndermek için hazır olduğunu belirtir. RI Ring Indicator Modem, PSTN den bir çevrim sinyali tespit ettiğinde aktif duruma geçer. Uygulamalarımızda, db-9 konnektör ve PIC PC arasında seri haberleģme için TXD, RXD VE SG pinlerini kullanılacaktır. PC den herhangi bir veri gönderildiğinde DB-9 konnektörünün TxD pini tarafından MAX232 entegresinin R1 IN (ya da R2 IN hangi bacağı kullanılmıģsa. Burada 1 nolu giriģ ve çıkıģ kullanıldığı varsayılıyor.) pinine uygulanır. Ardından lojik seviye düzenlemesi yapılarak MAX232 R1 OUT çıkıģı yoluyla 16F877 nin RX giriģine (RC7/RX/DT; 26 Nolu Pin) uygulanır. Benzer Ģekilde PIC kartından PC ye veri göndermek için PIC TX pini (RC6/TX/CK; 25 Nolu Pin) tarafından herhangi bir veri MAX232 nin T1 IN giriģine uygulanır. RS232 seviye dönüģümünden sonra T1 OUT çıkıģı üzerinden DB-9 soketi 2 nolu Pin (RxD) üzerinden PC Com portuna uygulanır. Hem PIC hem de PC tarafındaki her bir DB-9 konnektörünün 5 nolu SG (Signal Ground) pini Ģaseye bağlanır. 109

110 5.6. RS232 ASENKRON SERİ İLETİŞİM VE DALGA FORMLARI Bu iletiģim yönteminde gönderilen verinin baģında START, sonunda STOP biti bulunmaktadır. Start (baģlangıç) biti, bilginin gönderilmeye baģlandığını alıcı tarafa bildirmek için kullanılır. Stop biti de benzer Ģekilde karakterin aktarılmasının tamamlandığını belirtir. Start ve stop bitleri iletiģim hızını senkron seri haberleģmeye nazaran biraz düģürdüğü halde daha az iletim hattı kullanıldığı için asenkron seri haberleģme pek çok sistemde yaygın olarak kullanılmaktadır. (klavye, fare, modem ) asenkron veri iletiģiminde karakterler ortak bir kod ile gönderilirler. Bu kod genellikle ASCII koddur. ASCII kodunda start ve stop biti ilave edilip gönderilen 1 byte (8 bit) lık verinin dalga formu ve gönderiliģ sırası aģağıdaki gibidir. DATA START BİTİ BİT 0 BİT 1 BİT 2 BİT 3 BİT 4 BİT 5 BİT 6 BİT 7 STOP BİTİ Hattan bilgi gönderilmediği sürece hat sürekli 1 seviyesinde tutulmaktadır. Bir karakterin gönderilmeye baģlanması (Start) bir 0 biti gönderilerek karģı tarafa bildirilir. Start bitinin hemen ardından gelen 8 bit, verinin kendisini oluģturur. Veri gönderilirken önce LSB bitinden baģlanır. 8 bitlik veri paketinin gönderilmesi bitince bir bit 1 seviyesinde stop biti gönderilir. Hat, yeni bir bilgi gelene kadar Lojik 1 seviyesinde kalır. Bu iģlemler, her bir karakterlik veri aktarımında tekrarlanır. Asenkron seri veri iletiģiminin temel özellikleri Ģunlardır: 1- Transfer edilecek veriler karakter bazında yapılır. 2- Gönderilecek her bir karakter verinin baģlangıç ve bitiģinde START ve STOP bitleri bulunmalıdır. 3- KarĢılıklı olarak haberleģecek cihazların iletiģim parametreleri (iletiģim protokolleri; hız, kodlama seti ) aynı olmalıdır. Yukarıdaki zaman diyagramında PIC tarafından gönderilen ya da alınan iģaretlerin lojik seviyeleri ve kullanılan 8N1 protokolü (formatı) görülmektedir. Bu formatın anlamı; 8 Data biti, Parity (hata tesbit) biti yok (No Parity) ve 1 stop biti. START + LSB +. + MSB + STOP 5.7. USART (UNİVERSAL SYNCRONOUS / ASYNCRONOUS RECEİVER / TRANSMİTTER) Modülü Ve Özellikleri USART modül, verilerin senkron veya asenkron seri iletiģimi için kullanılan belli bir protokol dahilinde iģlem yapan bir birimdir. Bu modül, seri giriģ ve seri çıkıģ biriminden oluģmaktadır. Bu modül aynı zamanda SCI (Serial Communication Interface) olarak da bilinir. USART modülünün yapılandırılması ve iģletilmesi, birkaç SFR yazmacı tarafından kontrol edilir. Bunlar; RCSTA (ReCeive STAtus and control register) TXSTA (Transmit STAtus and control register) SPBRG (Baud Rate Genarator control register) PIR1 (Peripheral Interrupt Register 1) Bunun yanında PIC16F877A mikrodenetleyicisi için iki seri port pini; TX: (RC6; PORTC 6. Pin: veri gönderme) RX: (RC7; PORTC 7. Pin: Veri alma) veri gönderme ve alma amacıyla kullanılır. USART modülünü ve RC6 ile RC7 pinlerini kullanarak seri haberleģme yapabilmek için RCSTA yazmacının 7. Biti (SPEN: Serial Port Enable) set edilmeli ve TRISC aracılığıyla RC6 çıkıģ, RC7 ise giriģ olarak yönlendirilmelidir. 110

111 5.8. ÖZEL YAZMAÇLAR VE BİTLERİ TXSTA YAZMACI USART biriminin senkron ve asenkron veri gönderme modunda çalıģmasındaki koģulları belirleme bit lerinin bulunduğu özel amaçlı registerdir. Saklayıcı içerisinde ayrıca veri gönderme modunun durum bitleri de bulunmaktadır. AĢağıda bu saklayıcının bitleri ve görevleri açıklanmıģtır: R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1 R/W-0 CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D bit bit 0 CSRC : Senkron modda, (1: Master, 0: Slave) TX9 : ĠletiĢim modu seçme biti (1: 9 Bitlik ĠletiĢim, 0: 8 Bitlik ĠletiĢim) TXEN : Transfere izin verme biti (1: Transfere izin ver, 0: Transfere izin verme) SYNC : 1: Senkron mod, 0: Asenkron mod BRGH : Hızlı/yavaĢ boudrate seçme biti (1: Hızlı mod, 0: YavaĢ mod) TRMT: Ġletim kaydedicisi boģ/dolu biti (1: Dolu, 0: BoĢ) TX9D : 9 bitlik modda parity veya 9. bit RCSTA YAZMACI R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0 R-X SPEN RX9 SREN CREN ADDEN FERR OERR RX9D bit bit 0 SPEN : 1: Seri port açık, 0: Seri port kapalı RX9 : Alım modu seçme biti (1: 9 bitlik iletiģim, 0: 8 bitlik iletiģim) SREN :Senkron modda (1: Tek alım açık, 0: Tek alım kapalı) CREN :Asenkron modda (1: Devamlı almaya izin ver, 0: Devamlı almaya izin verme) Senkron modda (1: CREN sıfırlanıncaya kadar alıma izin ver, 0: Almayı kes) ADDEN: Asenkron modda RX9=1 ise (1: 8bit yüklemede kesmeye git, 0: 9. bit parity olarak kullanılabilir) FERR :Alımda hata algılaması biti (1: Hata var, 0: Hata yok) OERR :Üst üste yazım hatası kontrolü (1: Hata var, 0: Hata yok) RX9D :9 bitlik modda parity veya 9. bit 5.9. USART iletişim hızı (BRG: Baud Rate Generator) USART modülünün hem senkron hem de asenkron modunda çalıģmasındaki veri transfer hızını belirler. Bit / Saniye olarak ifade edilen seri iletiģim hızına Baud oranı (Baud Rate) adı verilir. Örneğin 1 bitin gönderilme süresi 104,166µsn 1sn ise baud rate = 9600 baud olur. Yani 1 saniyede 9600 bit transfer edilir demektir. 104,166µsn Seri iletiģim baud oranları; 110, 150, 300, 600, 1200, 2400, 4800, 9600, olarak çeģitli değerlerdedir. BRG; 8 bit bir zamanlayıcı üretecidir. SPBRG yazmacıyla kontrol edilir. Buna göre BRG; arasında (0-FFh) değerler alır. Asenkron moda BRGH (TXSTA Registeri 2. Bit) sinyal hızının modunu (yüksek veya düģük hız) belirler. Yüksek hızda BRGH=1, alçak hızda BRGH=0 yapılır. BRGH saklayıcısına herhangi bir değer yazıldığında BRG zamanlayıcı resetlenir. PIC in clock hızına ve SPBRG saklayıcısı değerine bağlı olarak Baud Rate, tablodaki formüllerle hesaplanabilir. MOD DÜġÜK HIZ (BRGH=0) YÜKSEK HIZ (BRGH=1) ASENKRON (SYNC=0) Baud Rate = Fosc Baud Rate = Fosc 64(X + 1) 16(X + 1) SENKRON (SYNC=1) Baud Rate = Fosc 4(X + 1) Fosc: PIC saat sinyal frekansı (Hz cinsinden) X: SPBRG saklayıcı içindeki değer (0 255 arasında) 111

112 Baud oranı bilinince SPBRG yazmacına yüklenecek sayı da aģağıdaki formüllerle bulunabilir: MOD DÜġÜK HIZ (BRGH=0) YÜKSEK HIZ (BRGH=1) Fosc ASENKRON (SYNC=0) X = Baud Rate X = Fosc Baud Rate SENKRON (SYNC=1) X = Fosc Baud Rate. 4 1 ÖRNEK: 4 MHz lik saat sinyaliyle çalıģan bir PIC in asenkron seri iletiģim modunda 2400 Baud Rate hızı ile veri iletmek için yüksek hız modunda (BRGH=1) SPBRG yazmacına yazılması gereken değer ne olmalıdır? X = Fosc = 1 = 103,16 SPBRG = 103 Baud Rate ĠĢlemden de görüldüğü gibi bulunan sayıya en yakın tamsayı değeri alınır. USART ın çalıģması için Baud Rate son derece önem taģımaktadır. Ġstenilen Baud oranının SPBRG yazmacına yüklenmesi gerekir. 4 MHz kristal osilatör ve BRGH=1 iken çeģitli standart Baud oranları için SPBRG yazmacına yüklenecek sayılar aģağıdaki tabloda verilmiģtir USART ın Kullanımı BAUD ORANI SPBRG DEĞERĠ SPBRG değerini belirledikten sonra RCIF ile alım, TXIF ile de gönderim kesme bayrakları kontrolleri ile gönderim veya alım iģinin bittiği kontrol edilerek RCREG kaydedicisi ile alınan bilgi, TXREG ile de gönderilmek istenen bilgiler istenilen Ģekilde kullanılabilir. Gönderilecek veri TXREG yazmacına yüklenir. Gelen veri ise RCREG yazmacından okunur USART ile asenkron veri göndermek USART ile asenkron veri gönderiminde RCSTA registerinin SPEN adlı 7. biti 1 yapılarak RC6 TX ucu olarak kullanılmaya hazırlanıģ olur. Gönderilecek olan veri TXREG registerine yüklendiğinde bu veri donanım tarafından TSR ye (Transmit Shift Register Gönderici kaydırmalı kaydedicisi) transfer edilir ve TX ucundan gönderilir. Verinin gönderilme iģlemi TXSTA registerinin TXEN adlı 5. Biti 1 yapılarak aktif edilir. En düģük değerlikli bir (LSB) ilk olarak gönderilir. 112

113 TXREG saklayıcısının içeriği TSR kaydırmalı kaydedicisine gönderildiğinde PIR1 registerinin TXIF adlı 4. Biti 1 olur ve ilgili kesme aktif edilmiģse bir kesme oluģur. (Bu kesmenin algılanabilmesi için PIE1 saklayıcısının TXIE biti 1 yapılmıģ olmalıdır) Bu kesme, TXREG saklayıcısının içeriğinin TSR ye gönderildiğini ve yeni bir verinin TXREG saklayıcısına yüklenebilecek duruma geldiğini belirtir. TXIF bitini yazılımsal olarak sıfırlamak mümkün değildir. Sadece TXREG saklayıcısına yeni veri yüklendiğinde otomatik olarak sıfırlanır. TSR registerindeki verinin seri olarak gönderilmesi bittiğinde TXSTA saklayıcısının TRMT biti 1 olur. Bu durum, TSR saklayıcısının boģaldığını gösterir. Verinin gönderilme iģleminin bittiğini belirten herhangi bir kesme olmadığından, TSR saklayıcısının boģ olup olmadığını anlamak için TRMT biti kontrol edilir. TSR registeri veri belleği üzerinde bulunmadığından direkt eriģim (okuma veya yazma için) mümkün değildir. Asenkron veri gönderimi için aģağıda sıralanan iģlemler yapılmalıdır: 1- Ġstenen BAUD RATE değeri için gereken değer SPBRG ye yüklenir. Yüksek hızda BAUD RATE isteniyorsa BRGH=1 yapılır. 2- Asenkron seri iletiģim portunu aktif etmek için TXSTA adlı registerin SYNC adlı 4. Biti 0, RCSTA saklayıcısının SPEN adlı 7. Biti 1 yapılır. 3- Kesme kullanımı isteniyorsa PIE1 saklayıcısının TXIE adlı 4. Biti 1 yapılmalıdır. 4-9 bitlik veri gönderimi (9. Bit olarak hata tesbit (parity) biti) isteniyorsa TXSTA saklayıcısının TX9 adlı 6. Biti 1 yapılır. 5- Göndermeyi aktif yapmak için TXSTA saklayıcısının TXEN adlı 5. Biti 1 yapılır. Bu anda TXREG saklayıcısına veri yazmak mümkün duruma gelir ve PIR1 saklayıcısının TXIF biti 1 olur. 6-9 bitlik veri gönderme seçilmiģse, 9. Bit, TXSTA saklayıcısının TX9D adlı 0. Bitine yazılmalıdır. 7-8 bitlik veri TXREG saklayıcısına yüklenerek gönderme iģlemi baģlatılır UYGULAMA 1- USART Kullanılarak PIC den PC ye doğru tek yönlü Asenkron Seri veri transferi Bu uygulama, USART ı kullanarak seri iletiģimin nasıl yapıldığını göstermektedir. Denetleyici olarak PIC16F877A, PC de ise Hyperterminal (veya benzeri bir program) kullanılmıģtır. Uygulamada seri porttan USARTTAN MERHABA mesajı gönderilmektedir. ĠletiĢim tek yönlü olup PIC den PC ye doğrudur. //PIC'den PC'ye tek yönlü karakter gönderme uygulaması #include <htc.h> #include <delay.c> CONFIG(UNPROTECT & DPROT & WDTDIS & XT & PWRTDIS & BORDIS & WRTEN & LVPDIS & DEBUGDIS); //USART'a karakter gönderen fonksiyon. karakter_gonder(unsigned char c) { while(!txif); //TXIF = 1 olana kadar bekle TXREG=c; } //********************************************************************************* void text_gonder(const char * s) // USART'a string ifade gönderiliyor { while(*s) karakter_gonder(*s++); } //********************************************************************************** /*ana program. İlk olarak USART konfigürasyonu yapılır. Daha sonra istenen karakter dizisi USART'a gönderilir. */ main(void) { SPBRG=25; //baud oranı 9600 //********TXSTA registerinin bitleri konfigüre ediliyor.*************** TXEN=1; // TX'i aktif yap TX9=0; //8 Bit TX Çalışma 113

114 } SYNC=0; //Asenkron çalışma BRGH=1; //Yüksek hız seçildi //Yukarıdaki 4 satır yerine TXSTA=0b ; ya da TXSTA=0x90; Yazılabilirdi. SPEN=1; //RCSTA registeri konfigüre ediliyor. Seri port aktif TRISC6=0; //RC6 (MİKRODENETLEYİCİ TX UCU) ÇIKIŞ TRISC7=1; //RC7 (MİKRODENETLEYİCİ RX UCU) Giriş while (1) { text_gonder("usartdan MERHABA "); while(1); //sonsuz döngü } USART ile Asenkron veri almak RX ucundan seri olarak alınan veri, RSR ye (Receive Shift Register Alıcı kaydırmalı kaydedicisi) transfer edilir. Bu transferin hızı; BAUD RATE değerine (SPBRG saklayıcısına yazılan değere ) ve BRGH bitine bağlıdır. Seri hattan gelen verinin sonundaki stop biti algılandığında RSR registerindeki veri, RCREG registerine transfer edilir. Bu transfer tamamlandığında PIR1 registerinin RCIF adlı 5. Biti 1 olur. Bu anda bir kesme olayı meydana gelmiģ demektir. Bu kesmenin algılanabilmesi için PIE1 saklayıcısının RCIE adlı 5. Biti 1 yapılmalıdır. RCIF sadece okunabilir bit tir, RCREG registeri okunduğunda veya boģ olduğunda donanım tarafından sıfırlanır. RCREG registerinde 8 bitlik 2 kademeli tampon bulunur. Ġlk gelen veri 1. Kademede tutulurken yeni bir veri geldiğinde eskisi 2. Kademeye itilir. Bu yolla yazılım tarafından okumada bir gecikme oluģtuğunda üstüne yazma hatası önlenmiģ olur. Kaydırılarak RSR registerine gönderilen 8 bitlik verinin gönderimi tamamlandığında RCREG registerinin her iki tamponu da doluysa RCSTA saklayıcısının OERR adlı 1. Biti 1 olur. Bu durum, üstüne yazma hatası oluģtuğunu belirtir. Bu anda RSR registerine yazılmıģ olan veri de kaybolur. Bu durumda veri alımı yapılamaz. Normal duruma tekrar dönmek için RCSTA registerinin CREN adlı 4. Biti önce 0 sonra da 1 yapılmalıdır. Bu iģlemle OERR biti tekrar 0 duruma getirilmiģ olur. Asenkron veri alımı yapılırken aģağıda listelenen iģlemler yapılmalıdır: 1- Ġstenen BAUD RATE değeri için gereken değer SPBRG ye yüklenir. Yüksek hızda BAUD RATE isteniyorsa BRGH=1 yapılır. 2- Asenkron seri iletiģim portunu aktif etmek için TXSTA adlı registerin SYNC adlı 4. Biti 0, RCSTA saklayıcısının SPEN adlı 7. Biti 1 yapılır. 3- Kesme kullanımı isteniyorsa PIE1 saklayıcısının RCIE adlı 5. Biti 1 yapılmalıdır. 4-9 bitlik veri gönderimi (9. Bit olarak hata tesbit (parity) biti) isteniyorsa TXSTA saklayıcısının TX9 adlı 6. Biti 1 yapılır. 5- Veri alımını aktif yapmak için RCSTA saklayıcısının CREN adlı 4. Biti 1 yapılır. Bu anda TXREG saklayıcısına veri yazmak mümkün duruma gelir ve PIR1 saklayıcısının TXIF biti 1 olur. 6- Veri alımı tamamlandığında PIR1 saklayıcının RCIF adlı 5. Biti 1 olur. Bu andaki kesmenin algılanabilmesi için PIE1 registerinin RCIE biti 1 yapılmalıdır. 7-9 bitlik veri alımı seçilmiģse, RCSTA saklayıcısının RX9D adlı 9. Bit okunur. 114

115 8- RCREG saklayıcısı okunarak 8 bitlik veri 9- Bir hata oluģturğunda RCSTA registerine ait CREN biti önce 0, sonra da 1 yapılır UYGULAMA 2- USART Kullanılarak PC den PIC e doğru tek yönlü Asenkron Seri veri transferi Bu uygulamada PC den PIC kartına gönderilen karakterler LCD display ekranında gösterilmektedir. LCD kullanımı için ilgili header dosyaları projeye eklenmelidir. Bu uygulamada, öncekinden farklı olarak USART hata kontrolü de (karakter alırken eski karakterin üzerine yazmak, çerçeve hatası(start ve STOP biti hatası)) yapılmıģtır. Ġlgili fonksiyon, USART hatalarını siler. /*PC - PIC kartı arası tek yönlü veri transferi. PIC kartının USART kullanarak PC'den okuduğu karakterler LCD display ekranında görüntüleniyor.*/ #include <htc.h> #include <delay.c> CONFIG(UNPROTECT & DPROT & WDTDIS & XT & PWRTDIS & BORDIS & WRTEN & LVPDIS & DEBUGDIS); void usart_hatasi(void) { unsigned char s; if(oerr) { TXEN=0; TXEN=1; CREN=0; CREN=1; } if(ferr) { s=rcreg; TXEN=0;TXEN=1; } } unsigned char karakter_oku(void) //USART tan bir karakter oku { while(!rcif) usart_hatasi(); return RCREG; } karakter_gonder(unsigned char c) //usart a bir karakter gönderir. { while(!txif); //TXIF 0 olana kadar bekle TXREG=c; } //******************************************** void text_gonder(const char * s) // USART'a string ifade gönderiliyor { while(*s) karakter_gonder(*s++); } //Ana program: USART tan bir karakter okur ve bu karakteri LCD ekranında görüntüler main(void) { unsigned char s; SPBRG=25; //baud oranı 9600 BRGH=1; //Yüksek hız seçildi SYNC=0; //Asenkron çalışma SPEN=1; //Seri port aktif CREN=1; // sürekli veri almayı aktif yap TX9=0; //8 Bit TX Çalışma TXEN=1; //TX'i aktif yap TRISC6=0; //RC6 (MİKRODENETLEYİCİ TX UCU) ÇIKIŞ TRISC7=1; //RC7 (MİKRODENETLEYİCİ RX UCU) Giriş lcd_hazirla(); 115

116 while (1) { s=karakter_oku(); lcd_karakter_yaz(s); } //karakter oku } UYGULAMA 3: USART Kullanılarak iki yönlü Asenkron Seri iletişim uygulaması Bu uygulamada PIC in seri portundan gelen küçük harf karakterler okunur ve bu karakterler büyük harfe dönüģtürülüp tekrar PC ye gönderilerek PC ekranında görüntülenir. Karakter_oku() fonksiyonu USART tan bir karakter okur. Aynı Ģekilde karakter_goner() fonksiyonu USART a bir karakter gönderir. Ana fonksiyonda önce USART konfigürasyonu yapılır. Daha sonra sonsuz bir döngü içinde USART tan karakter okunur ve bu karakterler büyük harfe dönüģtürülerek yine USART yoluyla PC ye gönderilir. Büyük harf ve küçük harf karakterlerinin ASCII kodu incelendiğinde, sadece bit 5 in değiģik olduğu görülür.küçük harf karakterlerinde bit 5 Lojik 1 olup, karakter büyük harf olduğunda aynı bit, lojik 0 olmaktadır. Örneğin A karakterinin ASCII kodu ikili sayı olarak dir. Küçük harf a karakterinin ASCII kodu ise ikili olarak dir. Böylece küçük harf harhangi bir karakterin 5. Biti Lojik 0 yapılarak o karakter büyük harfe dönüģtürülmüģ olur. Programda USART tan okunan karakterler bir s değiģkeninde tutulur. Daha sonra okunan karakterin binary (hex: 0xDF) sayısı ile AND lenir. Böylece karakter büyük harfe dönüģmüģ olur. Bu karakter daha sonra PC ye gönderilmek üzere USART a gönderilir. //İki yönlü USART seri iletişim uygulaması #include <htc.h> #include <delay.c> CONFIG(UNPROTECT & DPROT & WDTDIS & XT & PWRTDIS & BORDIS & WRTEN & LVPDIS & DEBUGDIS); Void usart_hatasi(void) { unsigned char s; if(oerr) { TXEN=0; TXEN=1; CREN=0; CREN=1; } if(ferr) { S=RCREG; TXEN=0;TXEN=1; } } unsigned char karakter_oku(void) //USART tan bir karakter oku { while(!rcif) usart_hatasi(); return RCREG; } karakter_gonder(unsigned char c) //usart A bir karakter gönderir. { while(!txif); //TXIF 0 olana kadar bekle TXREG=c; } /* Ana program: USART tan bir karakter okur ve bu karakteri büyük harfe dönüştürüp tekrar USART tan PC ye gönderir */ main(void) { unsigned char s; SPBRG=25; //baud oranı 9600 BRGH=1; //Yüksek hız seçildi SYNC=0; //Asenkron çalışma 116

117 SPEN=1; //Seri port aktif CREN=1; //sürekli veri almayı aktif yap TX9=0; //8 Bit TX Çalışma TXEN=1; //TX'i aktif yap TRISC6=0; //RC6 (MİKRODENETLEYİCİ TX UCU) ÇIKIŞ TRISC7=1; //RC7 (MİKRODENETLEYİCİ RX UCU) Giriş while (1) { s=karakter_oku(); //karakter oku s=s&0xdf; //Büyük harf yap karakter_gonder(s); //karakteri PC ye gönder } } UYGULAMA 4: PIC kartında LM35 ısı sensörü ile ölçülen sıcaklık bilgisini USART Kullanılarak PC ye aktaran Asenkron Seri iletişim uygulaması #include <htc.h> #include <delay.c> CONFIG(UNPROTECT & DPROT & WDTDIS & XT & PWRTDIS & BORDIS & WRTEN & LVPDIS & DEBUGDIS); void usart_hatasi(void) { unsigned char s; if(oerr) { TXEN=0; TXEN=1; CREN=0; CREN=1; } if(ferr) { s=rcreg; TXEN=0;TXEN=1; } } unsigned char karakter_oku(void) //USART tan bir karakter oku { while(!rcif) usart_hatasi(); return RCREG; } karakter_gonder(unsigned char c) //usart A bir karakter gönderir. { while(!txif); //TXIF 0 olana kadar bekle TXREG=c; } /* Ana program: USART tan bir karakter okur ve bu karakteri büyük harfe dönüştürüp tekrar USART tan PC ye gönderir */ main(void) { const float lsb=5000.0/1024.0;//bit başına voltaj hassasiyeti float mv; int sicaklik, santigrat; TRISA=0x01; // Analog giriş için ADCON1=0x8E; ADCON0=0x41; DelayUs(25); SPBRG=25; //baud oranı 9600 BRGH=1; //Yüksek hız seçildi SYNC=0; //Asenkron çalışma SPEN=1; //Seri port aktif CREN=1; //süreklü veri almayı aktif yap 117

118 } TX9=0; //8 Bit TX Çalışma TXEN=1; //TX'i aktif yap TRISC6=0; //RC6 (MİKRODENETLEYİCİ TX UCU) ÇIKIŞ TRISC7=1; //RC7 (MİKRODENETLEYİCİ RX UCU) Giriş while (1) { ADGO=1; // Çevrim başlatılıyor while(adgo); sicaklik=(int)(adresh*256 + ADRESL); // Hesaplama yapılıyor mv=(int)sicaklik*lsb; //LM35'in ürettiği mv santigrat=mv/10; karakter_gonder(santigrat/10+48); //karakteri PC ye gönder karakter_gonder(santigrat%10+48); //karakteri PC ye gönder DelayMs(255); } 5.11 UYGULAMA 5: PIC PC Arası Haberleşme Programı Visual Basic.NET ile seri porta ulaģmak için SerialPort Nesnesinden yararlanılır. Bu nesneyi çift tıklayarak çalıģmamıza eklediğimizde, formun altına SerialPort1 varsayılan adında eklenir. Seri Port üzerinden gönderdiğimiz bilgileri görüntülemek için bir textbox, gelen verileri görüntülemek için baģka bir textbox, gerekli uyarı ve bilgileri kullanıcıya iletmek için bir StatusStrip (üzerinde bir label oluģturup adını mesaj olarak değiģtirin), bağlanılacak Portu seçmek, seçilen COMport a bağlanmak ve bağlantıyı kesmek, text kutuların içeriğini temizlemek gibi çeģitli görevleri yerleģtirmek için bir ToolStrip ekleyerek yandaki gibi bir Form tasarlanabilir. Eklenen ToolStrip e, bir ComboBox, 3 tane de Button ekleyip Ģekildeki gibi Text özellikleri ayarlanır. ComboBox nesnesinin items(collection) özelliğine COM1, COM2, COM3, COM4 eklenir. ÇalıĢma anında ComboBox tan bir port seçildikten sonra o porta bağlanmak için BAĞLAN butonuna aģağıdaki kodlar yazılır: Private Sub ToolStripButton1_Click(ByVal sender As... Try SerialPort1.PortName = ToolStripComboBox1.Text SerialPort1.Open() Catch ex As Exception mesaj.text = ex.message End Try Açılan Portu kapatmak için tıklanması gereken BAĞLANTIYI KES Text özellikli butonun yordamı aģağıdaki gibidir Private Sub ToolStripButton2_Click(ByVal sender As Try SerialPort1.Close() Catch ex As Exception mesaj.text = ex.message End Try Gelen ve giden verilerin görüntülendiği text kutularını temizlemek için TEMĠZLE Text özellikli butonun yordamı: Private Sub ToolStripButton3_Click(ByVal sender As txtgiden.clear() txtgelen.clear() 118

1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5

1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5 İÇİNDEKİLER IX İÇİNDEKİLER 1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5 2 VISUAL STUDIO GELİŞTİRME

Detaylı

2 VISUAL STUDIO 2012 GELİŞTİRME ORTAMI

2 VISUAL STUDIO 2012 GELİŞTİRME ORTAMI İÇİNDEKİLER VII İÇİNDEKİLER 1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.NET Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5 2 VISUAL STUDIO 2012 GELİŞTİRME

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları HSancak Nesne Tabanlı Programlama I Ders Notları Visual C#.NET İle Windows Tabanlı Programlama Windows tabanlı uygulamalar, Windows işletim sistemi üzerinde çalışan uygulamalardır. Windows uygulamaları

Detaylı

5. PROGRAMLA DİLLERİ. 5.1 Giriş

5. PROGRAMLA DİLLERİ. 5.1 Giriş 5. PROGRAMLA DİLLERİ 8.1 Giriş 8.2 Yazılım Geliştirme Süreci 8.3 Yazılım Geliştirme Sürecinde Programlama Dilinin Önemi 8.4 Programlama Dillerinin Tarihçesi 8.5 Programlama Dillerinin Sınıflandırılması

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları ComboBox Bir Windows açılan kutu sunu temsil eder. ComboBox kontrolü, kullanıcıların bazı değerleri açılan bir listeden seçmesini sağlar. Listeye tasarım anında veya çalışma anında öğe eklenebilir. Listeye

Detaylı

Diziler İndisli Değişkenler

Diziler İndisli Değişkenler Diziler İndisli Değişkenler Aynı tür bilgileri (öğrenci isimleri, şehir isimleri, kapı numaraları, fakülteler vbg.) bellekte tutmak için kullanabileceğimiz listelere dizi adı verilir. Dizi kullanmanın

Detaylı

C# Form Uygulamaları. Nesne Tabanlı Programlama I (C#) Ders Notu. S.Ü.Akören A.R.E. Meslek Yüksekokulu C.ÖZCAN- F.SARAY

C# Form Uygulamaları. Nesne Tabanlı Programlama I (C#) Ders Notu. S.Ü.Akören A.R.E. Meslek Yüksekokulu C.ÖZCAN- F.SARAY Nesne Tabanlı Programlama I (C#) Ders Notu S.Ü.Akören A.R.E. Meslek Yüksekokulu C.ÖZCAN- F.SARAY C# Form Uygulamaları C# da yeni bir uygulama açmak için File>New>Project seçilir. Daha sonra açılan pencerede

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları SABİTLER VE DEĞİŞKENLER Değişken, verilerin bellekte geçici olarak kaydedilmesini ve gerektiğinde kullanılmasını sağlayan değerdir. Nesne tabanlı programlama dilinde değişken kullanımı diğer programlama

Detaylı

Her Select Case bloğu, mutlaka End Select ile bitmek zorundadır.

Her Select Case bloğu, mutlaka End Select ile bitmek zorundadır. Select Case Komutu: VB de karar sürecinde kullanılan komutlardandır. Bu yapı ile sadece bir değişkenin durum kontrolü yapılır. Kontrolü yapılacak değişkenin genel olarak alabileceği değerler belirli ise

Detaylı

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6 ix Yazılım Nedir? 2 Yazılımın Tarihçesi 3 Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5 Yazılımın Önemi 6 Yazılımcı (Programcı) Kimdir? 8 Yazılımcı Olmak 9 Adım Adım Yazılımcılık 9 Uzman

Detaylı

Karabük Üniversitesi, Mühendislik Fakültesi...www.ibrahimcayiroglu.com WEB TEKNOLOJİLERİ

Karabük Üniversitesi, Mühendislik Fakültesi...www.ibrahimcayiroglu.com WEB TEKNOLOJİLERİ WEB TEKNOLOJİLERİ VISUAL STUDIO DA YENİ BİR PROJE OLUŞTURMA Visual Studio (VS) programını çalıştırdığımızda karşımıza boş bir ekran gelir. Yeni bir proje oluştururken File>New>Project yolu kullanılarak

Detaylı

PROGRAMLAMA DİLLERİ. Programlama Dilleri Programlama Dillerinin Önemi Dilleri Sınıflandırılması Anlambilim BNF Notasyonu Kontrol Deyimleri

PROGRAMLAMA DİLLERİ. Programlama Dilleri Programlama Dillerinin Önemi Dilleri Sınıflandırılması Anlambilim BNF Notasyonu Kontrol Deyimleri PROGRAMLAMA DİLLERİ Program Yazılım Geliştirme Süreci Programlama Dilleri Tarihçesi Kod Sözdizimi Nesneye Yönelik Programlama Tür Kontrolü Alt Programlar Programlama Dilleri Programlama Dillerinin Önemi

Detaylı

Genel Kullanılış 1: [değişken ismi] = [değişken ismi] [işlem] [sayı veya string ifade veya değişken]

Genel Kullanılış 1: [değişken ismi] = [değişken ismi] [işlem] [sayı veya string ifade veya değişken] Sayaçlar Düzenli olarak artan (+) veya azalan (-) sayı veya string ifadeler elde etmek için kullanılırlar. Eşitliğin her iki tarafındaki değişken isminin aynı olmasına dikkat edin. Bu durum matematik olarak

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları CheckBox Onay Kutusu, kullanıcının mantıksal bir ifade hakkında seçim yapmasına imkân verir. Kullanıcıya seçenekler sunmayı sağlar. Birçok seçenek seçilebilir. CheckBox Özellikleri Özellik Değer Tipi Açıklama

Detaylı

Fortran komut satırı toplam 80 kolon ve 5 bölgeden oluģur. Komut satırının yapısı aģağıdaki gibidir:

Fortran komut satırı toplam 80 kolon ve 5 bölgeden oluģur. Komut satırının yapısı aģağıdaki gibidir: FORTRAN (FORmula TRANslation) Fortran komut satırı toplam 80 kolon ve 5 bölgeden oluģur. Komut satırının yapısı aģağıdaki gibidir: 1 2...5 6 7...72 73...80 A B C D E A Bölgesi: (1. kolon) B Bölgesi: (2-5

Detaylı

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 3. Bölüm Veri Tipleri ve Değişkenler C Programlama Dr. Serkan DİŞLİTAŞ 3.1. Sabitler Sabitler, tanımlanmasıyla birlikte program içerisinde

Detaylı

Yukardaki gibi sonsuz döngülü programlara Ctrl+Break tuş takımı ile müdahale edilmesi gerekir, aksi halde program sonsuz döngüye girer.

Yukardaki gibi sonsuz döngülü programlara Ctrl+Break tuş takımı ile müdahale edilmesi gerekir, aksi halde program sonsuz döngüye girer. Döngüsü En basit döngü yapısıdır. Hiçbir kontrol yapılmadan ve ifadeleri arasındaki satırların işlem görmesi için kullanılır. Bu yapıda programın terkedilmesi için herhangi bir kontrol olmadığından, döngü

Detaylı

C#(Sharp) Programlama Dili

C#(Sharp) Programlama Dili Değişkenler C#(Sharp) Programlama Dili Program yazarken her zaman sabit verilerle çalışmayız, çoğu zaman programımızda bir verinin kullanıcının davranışına göre değişmesi gerekir. Kullanıcıdan bir metin

Detaylı

Bilgisayarda Programlama. Temel Kavramlar

Bilgisayarda Programlama. Temel Kavramlar Bilgisayarda Programlama Temel Kavramlar KAVRAMLAR Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarın anlayabileceği bir biçime dönüştürülmesi / ifade edilmesidir. Bunu

Detaylı

Matematiksel Operatörler

Matematiksel Operatörler Matematiksel Operatörler Genel olarak matematiksel işlemlerde kullanılan operatörlerdir. Operatör Anlamı Açıklama ^ Üs Alma C^3 Matematikdeki üs operatörüdür. Verilen ilk sayının ikinci sayı kadar kuvvetini

Detaylı

ASP.NET ile Bir Web Sitesi Oluşturma

ASP.NET ile Bir Web Sitesi Oluşturma 29,30 Eylül 2011 ASP.NET ile Bir Web Sitesi Oluşturma ASP.NET sitesi oluşturmak için File menüsündeki, New açılır listesindeki, Web Site komutuna tıklıyoruz Açılan pencereden C# içindeki ASP.NET Web Site

Detaylı

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9 VII 1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9 2 KOD YAZMAYA BAŞLANGIÇ 11.Net Framework 11 Yeni Proje Oluşturmak

Detaylı

2013-14 GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI

2013-14 GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI 2013-14 GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI KOÜ Mekatronik Mühendisliği Bölümü/MKT-103-Görsel Programlama Dersi - Ara Sınav J-grubu Ad-Soyad:...No:... J GRUBU-süre:70dk 1.) Aşağıdaki

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Veri Tipleri ve Özelilkleri Değişken Tanımlama Kuralları Değişken Veri Tipi Değiştirme (Type Casting) Örnek Kodlar Java Veri Tipleri ve Özelilkleri

Detaylı

PASCAL PROGRAMLAMA DİLİ YAPISI

PASCAL PROGRAMLAMA DİLİ YAPISI BÖLÜM 3 PASCAL PROGRAMLAMA DİLİ YAPISI 3.1. Giriş Bir Pascal programı en genel anlamda üç ayrı kısımdan oluşmuştur. Bu kısımlar bulunmaları gereken sıraya göre aşağıda verilmiştir. Program Başlığı; Tanımlama

Detaylı

AOSB 2017 EĞİTİM PROGRAMI

AOSB 2017 EĞİTİM PROGRAMI Eğitimin Konusu : Makro Excel Eğitim Tarihi : 04-05-10-11-12 Mayıs 2017 Eğitim Hedef Kitlesi : Excel kulllanıcıları arasında pratiklik ve hız kazanmış, Excel fonksiyonları, Veri Analizi araçlarını kullanma

Detaylı

DOKUZ EYLÜL ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ DEKANLIĞI DERS/MODÜL/BLOK TANITIM FORMU. Dersin Kodu: BİL 1007

DOKUZ EYLÜL ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ DEKANLIĞI DERS/MODÜL/BLOK TANITIM FORMU. Dersin Kodu: BİL 1007 Dersi Veren Birim: Mühendislik Fakültesi Dersin Adı: BİLGİSAYAR PROGRAMLAMA II Dersin Düzeyi:(Ön lisans, Lisans, Yüksek Lisans, Doktora) Dersin Kodu: BİL 007 Dersin Öğretim Dili: Türkçe Formun Düzenleme

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 1 GUI Nesneleri ve Visual Studio IDE Kullanımı

Detaylı

Program AkıĢ Kontrol Yapıları

Program AkıĢ Kontrol Yapıları C PROGRAMLAMA Program AkıĢ Kontrol Yapıları Normal Ģartlarda C dilinde bir programın çalıģması, komutların yukarıdan aģağıya doğru ve sırasıyla iģletilmesiyle gerçekleģtirilir. Ancak bazen problemin çözümü,

Detaylı

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 9

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 9 BTP 207 İNTERNET PROGRAMCILIĞI I Ders 9 Dizi Değişkenler (Array) 2 Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1, eleman2,, elemann)

Detaylı

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while Değişkenler Değişkenler bir bilginin bellekteki konumunu temsil eden sembolik isimlerdir. Bilgisayarda hemen hemen tüm işlemler bellekte yapılır. Program çalıştırıldığında değişken ve bu değişkenin türüne

Detaylı

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği INPUTBOX KULLANIMI InputBox komutu, Basic programlama dilinde program algoritması içinde ekran aracışığı ile bir sorgu yönlendirerek, kullanıcının bilgi girmesini sağlamak amacıyla kullanılır. Bu komutun

Detaylı

Program akıģı sırasında belirtilen satır numaralı yere gitmek için kullanılır. Genel formu: [<satır numarası>] GOTO <satır numarası 1> GOTO n

Program akıģı sırasında belirtilen satır numaralı yere gitmek için kullanılır. Genel formu: [<satır numarası>] GOTO <satır numarası 1> GOTO n KONTROL DEYİMLERİ Kontrol deyimleri bir programın normal akıģını değiģtirmek için kullanılır. Aksi söylenmedikçe programın komut satırları birbiri ardına çalıģtırılır. Program içindeki yapılan sorgulamalara

Detaylı

Görsel Programlama (Visual Programming) 2.Hafta

Görsel Programlama (Visual Programming) 2.Hafta Görsel Programlama (Visual Programming) 2.Hafta 2016-2017 Bahar Dönemi Class Yapısı ve Form 1Muhammer İLKUÇAR, MAKÜ-2015 BURDUR Class - Obje Nesne (Nesne tabanlı programlama) İnsan ırkının ortak özelliklerini

Detaylı

-A Grubu- MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı

-A Grubu- MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı KOCAELİ ÜNİVERSİTESİ 14.10.2016 MÜHENDİSLİK FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı Öğretim Üyesi: Prof. Dr. Hasan OCAK Sınav Süresi: 80 dakika. Her

Detaylı

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş C Programlama Dr. Serkan DİŞLİTAŞ 1.1. C# ile Program Geliştirme.Net Framework, Microsoft firması tarafından

Detaylı

Byte (Tamsayı) 1 0 ile 255 arasında 10 sayısı

Byte (Tamsayı) 1 0 ile 255 arasında 10 sayısı Temel Veri Tipleri Aşağıda VBEE de temel olarak kullanılan veri tipleri listelenmiştir. VBEE de, burada verilen veri tiplerinden çok daha fazlası kullanılmaktadır, sözkonusu veri tiplerine, ilgili kitaplardan

Detaylı

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 3 Asp.NET Doğrulama Kontrolleri

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 3 Asp.NET Doğrulama Kontrolleri İNTERNET PROGRAMLAMA 2 A S P. N E T Marmara Teknik Bilimler MYO / Hafta 3 Asp.NET Doğrulama Kontrolleri ASP.NET DOĞRULAMA KONTROLLERİ Doğrulama Kontrolleri; kullanıcılardan veri alınması gerektiği durumlarda,

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 1 GUI Nesneleri ve Visual Studio IDE Kullanımı

Detaylı

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı Öğr. Gör. Cansu AYVAZ GÜVEN NESNE TABANLI PROGRAMLAMA Java Değişkenler ve Veri Tipleri Operatörler JAVA Java Java SUN bilgisayar şirketince

Detaylı

Uygulamalar 4 IsMissing Fonksiyonlar ve Alt Programlar Prosedür Parametreleri Public Function f(x,y,optional t, Optional k) End Function 1.

Uygulamalar 4 IsMissing Fonksiyonlar ve Alt Programlar Prosedür Parametreleri Public Function f(x,y,optional t, Optional k) End Function 1. Uygulamalar 4 IsMissing (Değişken) Visual Basic te fonksiyon veya alt programlara giriş parametresi olarak Optional deyimi kullanılırsa o parametre kullanılmadan da o fonksiyon çağrılabilir. IsMissing

Detaylı

Visual Studio 2010 veya 2013, Sharp Develop 3.2 programlarını kurabilirsiniz.

Visual Studio 2010 veya 2013, Sharp Develop 3.2 programlarını kurabilirsiniz. GÖRSEL PROGRAMLAMA II Visual Studio 2010 veya 2013, Sharp Develop 3.2 programlarını kurabilirsiniz. Başlat/Programlar/Microsoft Visual Studio 2010 çalıştırılır. Açılan programda New Project seçilir, sol

Detaylı

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir DİZİLER (ARRAYS) Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir değişken tanımlamak gereklidir. string gun1,

Detaylı

Timer İle arka plan renk değişimi

Timer İle arka plan renk değişimi Microsoft Visual Studio Visual Basic Timer İle arka plan renk değişimi Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Timer1.Enabled = True Timer1.Interval = 1000 'milisaniye

Detaylı

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)... Array (Diziler) Array Aynı tipten çok sayıda değişken topluluğudur. Birden fazla aynı tipteki değerle işlem yapmayı kolaylaştırır. X Y Score1 Score2 40 56 Grade 40 56 80 (0) (1) (2)... (13) Array tanımlama:

Detaylı

Dinamik Kodlama. [X] Fusion@6. [X] Yeni Fonksiyon

Dinamik Kodlama. [X] Fusion@6. [X] Yeni Fonksiyon Dinamik Kodlama Ürün Grubu Kategori Versiyon Önkoşulu [X] Fusion@6 [X] Yeni Fonksiyon @6 Uygulama @6 Serisi ürünlerde, kullanıcı arabirimlerinin her yerine eklenen dinamik kodlama özelliği ile, programın

Detaylı

İNTERNET TABANLI PROGRAMLAMA

İNTERNET TABANLI PROGRAMLAMA İNTERNET TABANLI PROGRAMLAMA VISUAL STUDIO DA YENİ BİR PROJE OLUŞTURMA Visual Studio (VS) programını çalıştırdığımızda karşımıza boş bir ekran gelir. Yeni bir proje oluştururken File>New>Project yolu kullanılarak

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 2 C# Programlama Dili Elemanları Bu bölümde;

Detaylı

ASP.NET M U S T A F A K I L I Ç M C S E, M C D B A

ASP.NET M U S T A F A K I L I Ç M C S E, M C D B A ASP.NET M U S T A F A K I L I Ç B İ L. T E K. Ö Ğ R. M C S E, M C D B A ASP.Net Nedir? ASP.Net Server-Side(Sunucu taraflı) web uygulamaları geliştirebileceğimiz. Net in sağladığı özelliklerin çoğuna erişebilen

Detaylı

Uygulama 1) Aşağıdaki genel (global) değişken tanımlamalarını VB üzerinde yapınız. Süre 10 dak.

Uygulama 1) Aşağıdaki genel (global) değişken tanımlamalarını VB üzerinde yapınız. Süre 10 dak. MT 373 Visual Basic Programlama Laboratuvar Uygulamaları-1 Uygulama 1) Aşağıdaki genel (global) değişken tanımlamalarını VB üzerinde yapınız. Süre 10 dak. a) İki adet ondalıklı sayı tanımlaması yapınız

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

Özyineleme (Recursion)

Özyineleme (Recursion) C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,

Detaylı

4. Bölüm Programlamaya Giriş

4. Bölüm Programlamaya Giriş 4. Bölüm Programlamaya Giriş Algoritma ve Programlamaya Giriş Dr. Serkan DİŞLİTAŞ 4.1. C# ile Program Geliştirme Net Framework, Microsoft firması tarafından açık internet protokolleri ve standartları

Detaylı

Nesne Tabanlı Programlama

Nesne Tabanlı Programlama Nesne Tabanlı Programlama Ders Notu - 1 (Değerler, Değişkenler, İşleçler, Tip Dönüşümleri, Mantıksal Operatörler) Dicle Üniversitesi Mühendislik Fakültesi Elektrik Elektronik Mühendisliği Bölümü 1 Değerler

Detaylı

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Değişkenler ve Veri tipleri. Ders Notları

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Değişkenler ve Veri tipleri. Ders Notları 1 Anadolu Üniversitesi Endüstri Mühendisliği Bölümü Değişkenler ve Veri tipleri Visual Basic 6.0 Ders Notları Kaynak: İhsan Karagülle, Zeydin Pala, Visual Basic 6.0, Türkmen Kitabevi, 1999, Beyazıt İstanbul,

Detaylı

UYGULAMALAR. İkinci liste kutusu (List 2) Birinci liste Kutusu (List 1) Metin Kutusu

UYGULAMALAR. İkinci liste kutusu (List 2) Birinci liste Kutusu (List 1) Metin Kutusu UYGULAMALAR Uygulama 1:Komut butonu, metin kutusu ve liste kutusu kullanarak bir program oluşturacağız. Programda, bir metin kutusuna girilen sayılardan pozitif olanlar bir listeye, negatif olanlar başka

Detaylı

7) Çoklu Formlar. Şekil7.1. Araç kutusundaki Add Form butonuna basarak projeye yeni bir form ekleyiniz.

7) Çoklu Formlar. Şekil7.1. Araç kutusundaki Add Form butonuna basarak projeye yeni bir form ekleyiniz. 7) Çoklu Formlar Şimdiye kadar yarattığınız tüm projeler tek bir form tarafından işletilmektedir. Farklı amaca yönelik bilgiler için farklı pencereler kullanırsanız projelerinizin daha profesyonel olabileceğinin

Detaylı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Editör Disk 1)Kaynak kodlar editör aracılığı ile oluşturulur. (.c) Kaynak dosya Önişleyici Disk 2)Önişleyici kodlar içerisindeki ilk işleme işini

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları Konsol Uygulaması Oluşturma Konsol uygulaması oluşturmak için program açıldıktan sonra Create: Project ya da New Project seçeneği tıklanabilir. New Project penceresini açmak için farklı yollar da vardır.

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 5 Nesneye Yönelik Programlamaya Giriş Bu

Detaylı

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1 Öğr. Gör. Serkan AKSU http://www.serkanaksu.net http://www.serkanaksu.net/ 1 JavaScript JavaScript Nedir? Nestcape firması tarafından C dilinden esinlenerek yazılmış, Netscape Navigator 2.0 ile birlikte

Detaylı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

Sunum İçeriği. Programlamaya Giriş 22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon

Detaylı

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay. PROGRAMLAMAYA GİRİŞ Öğr. Gör. Ayhan KOÇ Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay., 2007 Algoritma ve Programlamaya Giriş, Ebubekir YAŞAR, Murathan Yay., 2011

Detaylı

1. LabVIEW ile Programlama

1. LabVIEW ile Programlama 1. LabVIEW ile Programlama LabVIEW ile programlama mantığı, program kodu yazılan programlama mantığına benzemekle birlikte, kontrol adı verilen nesneler arasında veri yolu bağlantısı ile program akışı

Detaylı

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri İNTERNET PROGRAMLAMA 2 A S P. N E T Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri VERİTABANI BAĞLANTISI Site içindeki bilgilerin saklanması / düzenlenmesi ve kullanıcı etkileşiminin sağlanabilmesi

Detaylı

Görsel Programlama (Visual Programming) 2.Hafta

Görsel Programlama (Visual Programming) 2.Hafta Muhammer İLKUÇAR, MAKÜ-2015 BURDUR Görsel Programlama (Visual Programming) 2.Hafta 2014-2015 Bahar Dönemi CLASS YAPISI 1 Muhammer İLKUÇAR, MAKÜ-2011 BURDUR Class - Obje Nesne (Nesne tabanlı programlama)

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi

Detaylı

MT 373 Visual Basic Programlama Dersi

MT 373 Visual Basic Programlama Dersi MT 373 VB Laboratuvar Uygulamaları Öğr. Gör. Dr. İrfan MACİT 1 MT 373 Visual Basic Programlama Dersi (VB.NET 2010 Uygulamaları) Dr. İrfan MACİT Matematik Bölümü Laboratuvar Uygulamaları Adana, 2013 MT

Detaylı

OÖ lçu mu Uygulaması

OÖ lçu mu Uygulaması Dog ru Uzunlug u ve Çember Çapı OÖ lçu mu Uygulaması Uygulama Bu uygulama, form nesnesi üzerinde, sol ve sağ fare tıklamaları ile belirlenen iki nokta arasındaki doğru parçasının çizilmesi, uzunluğunun

Detaylı

PROGRAMLAMAYA GİRİŞ DERS 2

PROGRAMLAMAYA GİRİŞ DERS 2 PROGRAMLAMAYA GİRİŞ DERS 2 Program editörde oluşturulur ve diske kaydedilir Tipik Bir C Programı Geliştirme Ortamının Temelleri 1. Edit 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Önişlemci programı

Detaylı

KAPAK Yazılım Uzmanı Yazan Yazan Editör: Selçuk Tüzel

KAPAK Yazılım Uzmanı Yazan Yazan Editör: Selçuk Tüzel KAPAK Yazılım Uzmanı Yazan Yazan Editör: Selçuk Tüzel Künye sayfası: Yazılım Uzmanı 1 Yazan Yazan Editör: Tuncer Karaarslan Düzelti: Selçuk Tüzel Teknik Editör: Zeynep Çömlekçi Şef Editör: Mehmet Çömlekçi

Detaylı

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) { Fonksiyonlar Kendi içinde bağımsız olarak çalışabilen ve belli bir işlevi yerine getiren program modülleridir. C programları bu modüllerden (fonksiyonlar) oluşurlar. Fonksiyonların yazılmasındaki temel

Detaylı

Response : Sunucunun istemciye veri yollamasını

Response : Sunucunun istemciye veri yollamasını Response : Sunucunun istemciye veri yollamasını 27 Ekim 2011 / Perşembe Örnek : 2 tane sayfa açıyoruz,1nci ye TextBox1 ve Button ekliyoruz. Şunu istiyoruz,1nci sayfada şifre girilince, Button u tıklayınca

Detaylı

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ C# Yazım Kuralları 1 İçindekiler C# Yazım Kuralları Veritipleri Değişkenler Operatörler Sınıflar Nesneler, Özellik, Metot ve Olay Bileşenler 2 C# yazım kuralları Deyimlerde büyük küçük harf yazıma uyulmalı

Detaylı

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Ders 4: Diziler (Arrays( Arrays) barisgokce.com Ders 4: Diziler (Arrays( Arrays) Hazırlayan : Öğr. Grv.. Barış GÖKÇE Đletişim im : www.barisgokce barisgokce.com Diziler Aynı tipteki bir veri gurubunun bir değişken içinde saklanmasıdır. Veriler Hafızada

Detaylı

Nesneye Dayalı Programlama Laboratuvarı

Nesneye Dayalı Programlama Laboratuvarı 2013 2014 Nesneye Dayalı Programlama Laboratuvarı Ders Sorumlusu: Yrd. Doç. Dr. Salih GÖRGÜNOĞLU Laboratuvar Sorumluları: M. Zahid YILDIRIM İÇİNDEKİLER Deney 1: Visual Studio ve C++'a Giriş Uygulamaları...

Detaylı

13 Aralık 2007. Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz

13 Aralık 2007. Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz 13 Aralık 2007 Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL Đlgili Modül/ler : Raporlar KULLANICI TANIMLI RAPORLAR Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz Kendi isteklerinize özel rapor tasarımları

Detaylı

Visual Basic Windows Window Progr Pr a ogr mlama a

Visual Basic Windows Window Progr Pr a ogr mlama a Visual Basic Windows Programlama Konular Değişken Tipleri Hata Yakalama Windows bileşenlerinin kullanılması Menu ve Toolbar oluşturma Yazdırma işlemleri Veri Tabanı işlemleri Grafik işlemleri Private :

Detaylı

INPUTBOX() ile Veri Girişi

INPUTBOX() ile Veri Girişi VISUAL BASIC DE VERİ GİRİŞİ VE EKRAN MESAJLARI INPUTBOX() ile Veri Girişi Yapısı : Default Değer Form Üzerindeki Konum (0,0) sol üst köşe Değişken adı Veri Giriş Kutusu Gövdesindeki Mesaj Veri Giriş Kutusu

Detaylı

HESAP MAKİNASI YAPIMI

HESAP MAKİNASI YAPIMI HESAP MAKİNASI YAPIMI 1..Aşağıdakine benzer görünüm ve butonları hazırlayın. 2. 24. Butonun içerisine aşağıdaki kodları yazın. 3. Yeni bir layer ekleyip Frame1 F9 na aşağıdaki kodları ekleyelim. 4. Butonlardan

Detaylı

yurdugul@hacettepe.edu.tr VB de Veri Türleri 1

yurdugul@hacettepe.edu.tr VB de Veri Türleri 1 yurdugul@hacettepe.edu.tr 1 VB de Veri Türleri 1 Byte 1 aretsiz tamsay Integer 2 aretli Tamsay Long 4 aretli Tamsay Single 4 Gerçel say Double 8 Gerçel say Currency 8 Gerçel say Decimal 14 Gerçel say Boolean

Detaylı

C Programlama Dilininin Basit Yapıları

C Programlama Dilininin Basit Yapıları Bölüm 2 C Programlama Dilininin Basit Yapıları İçindekiler 2.1 Sabitler ve Değişkenler......................... 13 2.2 Açıklamalar (Expresions)........................ 14 2.3 İfadeler (Statements) ve İfade

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi Dizilere Başlangıç Değeri Verme Dizilerde Arama

Detaylı

2.2- DEĞİŞKENLER VE SABİTLER ÇALIŞMA YAPRAĞI

2.2- DEĞİŞKENLER VE SABİTLER ÇALIŞMA YAPRAĞI 2.2 Değişkenler Ve Sabitler 2.2.1 Değişkenler Değişkenler bir programlama dilinde verilerin depolanma alanlarını temsil eder. Tanımlanan her değişkene bellek bölgesinden bir alan ayrılır. Bu bellek bölgesine

Detaylı

New Project. User guide

New Project. User guide New Project User guide Table of Contents New Project... 3 Katman Yöneticisi... 4 Katman Yöneticisi Araçları... 6 Katman İşlemleri... 8 Katman Görünümü... 9 Katman Ekleme... 10 Aktif Katman Yapma... 12

Detaylı

WEB FORMLARI. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

WEB FORMLARI. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu WEB FORMLARI Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu WEB FORMLARI Web uygulamalarının etkileşimli olabilmesi için, diğer bir ifade ile uygulamanın kullanıcı isteğine

Detaylı

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 Ekrana Metin Yazdırmak Ekranda metin yazdırmak istendiğinde print komutu kullanılır. Kullanımı aşağıda verilmiştir. Parantez içinde

Detaylı

Excel Nedir? Microsoft Excell. Excel de Çalışma sayfası-tablo

Excel Nedir? Microsoft Excell. Excel de Çalışma sayfası-tablo Microsoft Excell Excel Nedir? Excel programı; veriler üzerinde hesap yapabilme, verileri tabloya dönüştürebilme, verileri karşılaştırıp sonuç üretebilme, grafik oluşturma, veri yönetimi yapabilir. http://mf.dpu.edu.tr/~eyup

Detaylı

Pascal Programlama Dili

Pascal Programlama Dili Pascal Programlama Dili Öğr. Gör. Özgür ZEYDAN Z.K.Ü. Çevre Müh. Bölümü Pascal Programlarının Yapısı Program program_adı; Uses unitler type Özel veri tipleri Const Sabitler Label etiketler var değişken

Detaylı

Fatura Dinamik Kodlama İyileştirmeleri

Fatura Dinamik Kodlama İyileştirmeleri Fatura Dinamik Kodlama İyileştirmeleri Ürün Grubu Kategori Versiyon Önkoşulu [X] Redcode Enterprise [ ] Redcode Standart [ ] Entegre.NET [X] Yeni Fonksiyon 5.0 Uygulama Netsis paketlerinin tüm modüllerinin

Detaylı

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler C# Programlama Dili İlk programımız Tür dönüşümü Yorum ekleme Operatörler 1 İlk Programımız Bu program konsol ekranına Merhaba dünya! yazıp kapanır. Programı geçen derste anlatıldığı gibi derleyin, sonra

Detaylı

http://www.microsoft.com/visualstudio/eng/downloads

http://www.microsoft.com/visualstudio/eng/downloads Visual Studio 2012'nin kurulumunu, Visual Studio'nun kullanımını ve Windows Store'da basit bir proje hazırlanmasını anlatacağım. Hepsinden önce Visual Studio ortamından biraz bahsedelim. Visual Studio

Detaylı

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER VERİTABANI SORGULARI İÇİNDEKİLER Select İfadesi Insert İfadesi Update İfadesi Delete İfadesi Verileri Sıralamak Verileri Gruplandırmak Veriler Üzerinde Arama Yapmak NESNE TABANLI PROGRAMLAMA I Uzm. Orhan

Detaylı

Java Programlamaya Giriş

Java Programlamaya Giriş Java Programlamaya Giriş Amaçlar: 1. Java kurulumu (Netbeans ve JDK) 2. Java Netbeans Kullanımı 3. Program yazma Java Kurulumu Java dili ile programlama yapabilmek için java jdk ve java kodlama yapılabilecek

Detaylı

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

Android Ders Notları

Android Ders Notları Android Ders Notları 1. Yeni Bir Proje Başlatma Android Studio programında yeni bir proje başlatıyoruz. İlk olarak karşımıza resim 1 deki gibi bir pencere gelecek. Burada Application name kısmına proje

Detaylı

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe

Detaylı

Otomatik Lotlama ve Ticari İzlenebilirlik

Otomatik Lotlama ve Ticari İzlenebilirlik Doküman Kodu : TNS006 İlk Yayın Tarihi : Eylül 2017 Revizyon Tarihi : Eylül 2017 Revizyon No : 1 İÇERİK GENEL BĠLGĠ LOT KAVRAMI ve ĠZLENEBĠLĠRLĠK Lot Kavramı Otomatik Lot OluĢturma Üretimde lot oluģturma

Detaylı

12 TBT / WEB TASARIM ve PROGRAMLAMA ( Not 3 )

12 TBT / WEB TASARIM ve PROGRAMLAMA ( Not 3 ) 12 TBT / WEB TASARIM ve PROGRAMLAMA ( Not 3 ) 25.09.2017 METİN VE GÖRÜNÜM DÜZENLEME ETİKETLERİ : etiketleri dökümana başlık eklemek için kullanılır. etiketinde ki x ifadesi 1 den 6 ya kadar

Detaylı