You are on page 1of 29

Not Defteri

Proje Adı: Not Defteri


Programlama Dili: Visual Basic 2008
Programlama Ortamı: Visual Studio 2008
Belge Kodu: ProjeABC01VB
Belge Tarihi: 05.07.2008
ProjeABC
Yazılım Proje Uygulamaları Serisi

Visual Basic 2008


Visual Studio 2008
Windows Form Uygulaması
ProjeABC02VB

Sürüm 1
05.07.2008

ProjeABC: Kadir Çamoğlu

Visual Basic Kodlama: Çağdaş Davulcu


CSharp Kodlama: Esra Ünver
Ekran Görselleri: Çağdaş Davulcu
Yazar: Çağdaş Davulcu
Yazar: Kadir Çamoğlu
Editör: Kadir Çamoğlu
ProjeABC Logo: Hakan Çamoğlu

Katkıda Bulunanlar
Bahtiyar Dilek
Adem Özipek
Esra Ünver

Bu belgenin tüm hakları “ProjeABC” proje kapsamında Kadir Çamoğlu’na aittir.


Belge içinde geçen tüm tescilli markaların her türlü hakları sahiplerine aittir.

http://projeabc.blogspot.com/
projeabc@gmail.com

Not Defteri
2
İçindekiler
Önsöz ....................................................................................................................................................... 4
Hikâye, Kapsamın ve İsterlerin Belirlenmesi ........................................................................................... 7
Çözümleme ve Tasarım ........................................................................................................................... 8
Kavramsal ................................................................................................................................................ 9
Adım Adım Uygulamayı Geliştirme........................................................................................................ 14
Çözümün Test Edilmesi ......................................................................................................................... 28
Sonsöz.................................................................................................................................................... 29

Not Defteri
3
Önsöz
On sekiz yıllık yazılım geliştirme deneyimi ve paralelinde on beş yıllık eğitim tecrübesi sırasında test
uzmanlığından proje yöneticiliğine, eğitmenlikten eğitim yöneticiliğine birçok pozisyonda görev
yaptım. Üniversitelerde ve çeşitli kurumların etkinliklerinde konuşmacılık yaptığım ve son sekiz yıldır
aktif olarak bilişim eğitim merkezlerinde çalıştığım sıralarda en çok duyduğum sıkıntı “yazılım
projelerine bütünsel bakış eksikliği” oldu.

Yazılım Projelerine Bütünsel Bakış Eksikliği


En özet tabiriyle Türkiye’de, yazılım geliştirme yetenek ve tecrübelerini bir araya getirerek istenen
çözümü üretme konusunda ciddi bir sıkıntı var. “Yazılım mühendisliği’ adını verdiğimiz birleştirici,
çözüm oluşturucu taraf eksik. Aslında dünya için yeni olan bir disiplin yazılım mühendisliği, ancak biz
nedense biraz daha geride kalmış durumdayız

Yazılım Mühendisliği
Yazılım mühendisliği, yazılım isterlerinin çözümlenmesinden, analiz, modelleme, kodlama, test, teslim
ve sonrasında bakım aşamasına ulaşan toplam süreci disipline etmeye çalışır. Amaç kaliteli yazılımlar
üretmek ve yazılımların ömürlerini uzatmak, yaşam süreçleri içerisinde geliştirilebilir/güncellenebilir
olmalarını mümkün kılmaktır.

Türkiye’de Yazılım, Yazılım Kalitesi ve Aktörlerin Durumları


İşin en heyecanlı ve merak uyandırıcı yönü, ülkemizde yazılımın bilişim sektöründe lokomotif
olabilecek ciddi bir potansiyel oluşudur. Eğitim verdiğim, tanıştığım, görüştüğüm gençlerin hepsi pırıl
pırıl zekâlara sahip, çok değerli beyinler. Sektörü, yazılım mühendisliğini doğru anlattığımızda çok
başarılı olacağımızdan eminim. Yazılım sektörünün ihracat potansiyelini göz önünde
bulundurduğunuzda, kaldıraç olarak da genç nüfusu kullanırsanız başarının çok da uzaklarda
olmadığını görürsünüz. Ancak sektörün başarısı yazılımlarımızın uluslararası arenada rekabet
edebilecek kalitede olmasıyla mümkün. Bunu için de tüm aktörlerin üzerlerine düşen görevleri yerine
getirmesi gerekiyor. Üniversitelerden özel eğitim merkezlerine, yazılım evlerinden sektör
profesyonellerine, yazarlardan vendorlara herkese görev düşüyor.

Nereden Başlamalı?
Bu kadar çok aktörün dâhil olacağı, bu kadar yeni ve hala dünya çapında projelerin başarı oranının
%30’larda olduğu bir alanda bir şeyler yapmak çok kolay değil tabii ki. Ancak bir yerlerden
başlanabilir. Benim bu noktadaki misyonum, tabandan başlayarak birilerine ya da bir şeylere “değer
katmak.” İki temel kavram üzerine başlıyorum: kalite ve bütünsel bakış.

Not Defteri
4
"Mümkün Olduğunca Basitleştirin!"
Einstein’ın en sevdiğim sözlerinden biridir. Basitleştiremediğiniz hiçbir şeyi anlayamazsınız,
anlatamazsınız, çözemezsiniz. Karmaşık metotlarla yola çıkarak, tam olarak ne yaptığınızı
anlamadığınız yöntemlerle yazılım projelerinde başarılı olmak ancak mucize olur.

Peki, Yok mudur Bu Yazılım Mühendisliğini Uygulamanın Kolay Bir Yolu?


İşte bu! Burada amacım bunu aramak, bulduklarımı sizinle paylaşmak, sizin bulduklarınızı tartışmak.
Burada amacım kesinlikle yüksek perdeden yazılım mühendisliği nutukları atmak değil. Tam tersine
yazılımla bir şekilde ilgili herkesin anlayabileceği, hizmet alanında verenin de buradan edindikleriyle
yaptıklarına değer katabilecekleri, basit, anlaşılır ve uygulanabilir şeyleri paylaşacağız.

İşte bu nedenle ilk olarak Chip Online'da "Tek Kişilik Yazılımevi" blogunu yazmaya başladım. Bu
blogdaki amaç yazılıma bütünsel bakışın kodlama dışında kalan mühendislik adımları hakkında bilgiler
vermekti.

Diğer taraftan bu blog daha çok kavramsal tarafta ilerleyen bir yapıya sahiptir. Yani uygulama yapmak
için müsait bir ortam değildir. Bu nedenle anlattıklarımı uygulamalarla da desteklemek adına birkaç
yıldır aklımda olan başka bir projeyi daha hayata geçirdim: ProjeABC.

ProjeABC’de amacım programlamanın temellerini eğitimle, kursla, kitapla, internetten bir şekilde
öğrenmiş olan yazılımcı adaylarına bu öğrendiklerini bir araya getirerek nasıl uygulama
geliştirebileceklerini göstermek. Bunu yaparken, her bir uygulamaya hikâyesinden başlayıp, isterlerini
belirleyip, analizini ve tasarımını yapıp kodlamak ve tüm bu süreci de bir kitapçık haline getirerek
kaynak kodlarla birlikte sizlerle paylaşmayı hedefledim. Bu proje ve kitapçık bu kapsamdaki ikinci
çalışmadır.

Aylık ürettiğimiz projelerin hem kalite hem de sayı olarak artması tamamen siz okuyucuların aktif
katılımına bağlıdır. Projelerde aşağıdaki başlıklardan herhangi birinde görev alarak ya da yorumlarınız
ve görüşlerinizle bizi yönlendirerek katkıda bulunabilirsiniz.

Analist
Uygulamanın isterlerini belirler, analizini yapar.

Yazılım Mimarı
Mevcut analiz üzerinden uygulamanın nasıl kodlanacağını belirleyerek yazılım tasarımını yapar.

Görsel Tasarımcı
Uygulamada gerekli olan görselleri tasarlar. Uygulamanın genel görsel tasarımı konusunda
yönlendirmede bulunur.

Not Defteri
5
Yazılımcı VB
Tasarımı yapılmış olan uygulamayı Visual Basic 2008 ile kodlar.

Yazılımcı CSharp
Tasarımı yapılmış olan uygulamayı CSharp 3.0 ile kodlar.

Testçi
Uygulamayı isterlere uygunluğu açısından test eder.

Teknik Yazar
Uygulamayla ilgili teknik dokümanları ve yardım dokümanlarını hazırlar.

Lütfen her türlü geri bildiriminizi içinizden geldiği gibi ProjeABC blogundan ya da
projeabc@gmail.com adresinden benimle paylaşın.
Faydalı olması ümidiyle…
Kadir Çamoğlu
05.07.2008
İstanbul

Not Defteri
6
Hikâye, Kapsamın ve İsterlerin Belirlenmesi
Tek Kişilik Yazılımevi olarak geliştireceğimiz ikinci proje “Not Defteri” olarak belirlendi. Müşteri bize
aşağıdaki gibi bir taleple geldi.

“Windows işletim sistemi üzerinde çalışacak bir metin editörü isteniyor. Kullanıcının tercihlerine göre
ayarlayabileceği bu editör “text” dosya okuyabilecek ve yazabilecek. Kullanıcı metni daha kolay
okuyup yazabilmesi açısından font ve zemin renklerini düzenleyebilecek ve formu
boyutlandırabilecek.”

Sonrasında ekip olarak hızlı bir beyin fırtınası yaptık ve aşağıdaki listeyi elde ettik.

1. Hazırlanan not defterini “dll” olarak oluşturup bileşen olarak kullanılabilmesini sağlayalım.
2. Not defteri el yazısını da tanıyabilsin ve kayıt edip yükleyebilsin
3. Metin içinde kelime arayabilelim
4. Vista gadget ları benzeri bir şekilde sürekli olarak masa üstünde kullanabilelim
5. Html tabanlı olsun (Web uyumlu)
6. Günlük küçük notları hatırlatma özelliği olsun
7. Birden çok kullanıcı tarafından paylaşılabilir olsun
8. Office 2007'deki gibi fontu seçmeden önizleme (fontun üzerine gelip)
9. bu özelliğin farklı yerlerde de uygulanması(renk seçimi gibi)
10. Kurulumla birlikte gelebilecek küçük resim pakedi.(Clipart)
11. İmla denetimi olmalı
12. Yedekleme sistemi(Elektrik kesintisi yaşanırsa yarım kalan dosyayı kurtarabilme. Dosyayı
belirli zaman aralıklarıyla kullanıcının belirlediği bir klasöre yada sık kullanılan
(masaüstü,belgelerim) klasörlere atılması)
13. Sayfa özellikleri ayarlanabilmeli (yatay, dikey sayfa, satır aralıkları, paragraf boşlukları)
14. Farklı dosya türlerinde kaydedebilmeli
15. Arabirim boyutlandırılabilmeli ve font/renk ayarları yapılabilmeli
16. Kullanıcı tercihlerine göre ayarlanabilecek bir metin editörü dediğimiz için işe öncelikle
kullanıcı tercihleri neler olabilir bunu düşünerek başlarız;
17. Yazıyı ve arka planı renklendirmek mümkün olmalı
18. Yazı içerisinde arama yapılabilmeli
19. Developer menüsü olmalı. (html tagleri için)
20. Yazici menüsü olmalı
21. Yardim menüsü olmalı

Yukarıdaki liste “beyin fırtınası” çalışması olduğu için üzerinde düzeltme yapmadan orijinal halleriyle
almaya dikkat ettim.

Şimdi beyin fırtınası listesini inceleyin bakalım, basit bir not defteri talebini nereye vardırmışız…

1. Orta seviyede bir kelime işlemci (imla denetimi, farklı formatlarda kayıt, otomatik
kayıt/yedekleme, font ve renk vb. biçimlendirmeler, yazdırma, font vb. ön izleme)
2. HTML editörü. (Web uyumlu sayfalar oluşturma)
3. Günlük not uygulaması. (Post-it tarzı notlar alınacak, bunlar ekranda görüntülenecek,
gerektiğinde uygulama alarmla kullanıcıyı uyaracak.)

Not Defteri
7
Gelelim gerçek dünyanın “sınırsız istekler, sınırlı kaynaklar” fenomenine… Peki, bizim not defterimiz
ilk versiyonunda nasıl olmalı?

Proje İsterleri

1. Uygulama Windows projesi olacak.


2. Uygulama penceresi boyutlandırılabilecek, ekranı kaplayabilecek ve simgi durumuna
küçültülerek görev çubuğunda görüntülenebilir olabilecek.
3. Kullanıcı metin dosyalarını açmak, kaydetmek, font ve renk ayarlarını yapabilmek amacıyla
kullanacağı bir menü olacak.
4. Uygulamada metin dosyalarını açmak için bir diyalog penceresi olacak.
5. Uygulamada yeni oluşturulan metin dosyasını kayıt etmek için bir diyalog penceresi olacak.
6. Kullanıcı kullanım kolaylığı açısından metin font boyutunu, rengini ve zemin rengini
ayarlayabilecek.
7. Kullanıcı metin üzerinde çalışırken, dalgınlıkla ya da bilerek uygulamayı kapatmak istediğinde
bir diyalog penceresi açılacak. Kullanıcı uyarılarak kapatma işlemi iptal edilebilecek.

Çözümleme ve Tasarım
Çözüm Tasarımı: Uygulama bir Windows projesi olacak. Textbox ve menustirp kullanılacak.
Dosya aç ve kaydet arayüzleri için saveasfiledialog ve openfiledialog kullanılacak. Renklerin
değiştirilmesi için ColorDialog, fontları değiştirmek için FontDialog kontrolleri kullanılacak. Diske
yazdırma ve okuma için de io streamreader ve streamwriter kullanılacak. Kullanıcı formu
kapatmak istediğinde bunu kontrol etmek için messagebox kontrolü kullanılacak.

Proje Tabanı – Bilgi Seviyesi : Metin Editörü uygulamasını geliştirmek isteyenlerin aşağıdaki
konuları biliyor olması gerekmektedir.

o Yeni bir Windows projesi oluşturmak


o Formlarla çalışmak
o Kullanıcı kontrolleriyle çalışmak
o Program Akış Denetimi
o Değişkenlerle Çalışmak
o MessageBox Diyalog Kotrolü ile çalışmak

Not Defteri
8
Kavramsal
a. MenuStrip : Windows uygulamalarında kullanıcılar işlemlerini ya menüler ya da araç
çubuğu ile yapmaya alışmıştırlar. Vbee ile programlamada kullanıcıların menü olarak
Formun üst tarafında bulunan ve seçenekleri Toolbox’ın Menus & ToolBars
sekmesinde bulunan bir kontroldür. Formun üzerine sürüklenip bırakıldığında formun
en üst bölümüne otomatik olarak yerleşir.

İçerisinde menüleri bulunduran bir kotrol. Ayrıca içerisine bölümler eklenebilen ve


eklenen bu bölümlere ToolStripMenuItem adı verilen bir kontroldür.

b. TextBox : Textbox, Windows uygulamalarında kullanıcıların uygulamaya metin,


rakam vb. değerler girebilmek için kullandıkları bir kontroldür. Kontrol, Toolbox
üzerinde Common Controls kategorisinde yer alır.

Textbox ile ilgili olarak kullanılan en önemli özellik, Text property sidir. Textbox içine
girilen metni okumak ya da Textbox’a kod içerisinden bilgi yazmak için bu kodu
kullanılır.

TextBox1.Text = “Çağdaş Davulcu”

Yukarıdaki kod TextBox1 isimli Textbox kontrolüne “Çağdaş Davulcu” metnini yazar.
Aşağıdaki kod ise çalıştığı anda TextBox2 içerisinde bulunan metni, mesaj kutusunda
gösterir.

MessageBox.Show(TextBox2.Text)

TextBox kontrolünün en çok kullanılan bileşenlerinden biri de Multiline property sidir.


Normalde kullanıcının sadece tek bir satır olarak bilgi girişine izin veren TextBox
kontrolünün, birden fazla satırda veri girişine destek verebilmesi için Multiline
property sine True değerini atamak gerekmektedir.

TextBox3.Multiline = True

Projemizde TextBox kontrolünü, kullanıcılarının metin yazacakları alanı oluşturmak


için kullanacağız.

Not Defteri
9
c. SaveFileDialog : Toolbox’ın Dialogs bölümünde yer alan ve dosyaları kaydetmeye
yardımcı olan bir kontroldür.

Title özelliği ile SaveFileDialog’a başlık eklenebilir. Aşağıdaki kod SaveFileDialog1


kontrolüne “Dosya Kaydetme İşlemi” başlığını ekler.

SaveFileDialog1.Title = “Dosya Kaydetme Đşlemi”

Bu kontrol kullanıcının karşısına direk çıkmaz. SaveFileDialog kontrolü kullacıya


gösterilmek istenirse SaveFileDialogun en önemli metodlarından biri olan ShowDialog
methodu kullanılır.Aşağıda OpenFileDialog1 adlı kontrolün ShowDialog methodunun
kullanımı yeralmaktadır.

SaveFileDialog1.ShowDialog( )

Eğer belirli bir formatta dosya kaydetmek isteniyorsa Filter özelliği ile istenilen format
belirlenerek dosya kaydetme işlemi gerçekleştirilir. Örneğin sadece “txt” uzantılı
dosyaları kaydetmek istenirse aşağıdaki ifade kullanılır.

SaveFileDialog1.Filter = “MetinDosyaları | .txt”

Dosya kaydedilirken dosyanın uzantısı belirtilmemiş ise DefaultExt özelliğine değer


atayarak default bir uzantı kullanılır.Aşağıdaki kod satırı ile DefaultExt özelliğine bir
değer atamış oluruz. Böylelikle kullanıcı dosyayı kaydederken bir uzantı belirtmemiş
ise o dosya txt uzantılı bir dosya olarak kabul görecektir.

SaveFileDialog1.DefaultExt = “txt”

FileName özelliği kaydedilecek dosyanın adını verir. Aşağıdaki kod satırı ile dosyaAdi
değişkenine SaveFileDialog1 kontrolü içerisinde belirlenen kaydedilecek dosyanın
adına erişilir.

Dim dosyaAdi as string = SaveFileDialog1.FileName

Projemizde SaveFileDialog kontrolünü oluşturduğumuz metinleri kaydetmek


için kullanacağız.

Not Defteri
10
OpenFileDialog : Bir klasör içerisindeki dosyayı açmaya yarayan kontroldür.

Title özelliği ile açılan OpenFileDilog’a başlık belirlenebilir. Yukarıdaki kod satırı ile
OpenFileDialog1 kontrolüne Açılacak dosya başlığı eklenir.

OpenFileDialog1.Title = “Açılacak Dosya”

OpenFileDialog kontrolü kullanıcının direk olarak karşısına çıkan bir kontrol değildir.
Kullanıcıya OpenFileDialog kontrolü göstermek için bu kontrolün ShowDialog
methodu kullanılır. Aşağıda kullanımı yeralmaktadır.

OpenFileDialog1.ShowDialog( )

Fitler özelliği ile sadece istenilen formatta dosayaların açılması sağlanabilir. Aşağıdaki
kod satırı ile sadece metin dosyalarının açılabilmesi sağlanır.

OpenFileDialog1.Filter = “Metin Dosyaları | .txt”

InitialDirectory özelliği ile OpenFileDialog ilk açıldığında hangi klasörden başlanacağı


belirlenir. Bu şu anlama gelir : Kullanıcı OpenFileDialog kontrolü ile ilk karşılaştığında
InitialDirectory özelliğinde belirtilen path ile karşılaşır. Bu özelliği kullanmak için
aşağıdaki kod satırı yeterlidir.

OpenFileDialog1.InitialDirectory = “C:\”

FileName özelliği açılacak olan dosyanın adını verir. Aşağıdaki kod satırı ile
acılacakDosya değişkenine FileName özelliğinin değerini atamış olur. Böylelikle
kullanıcının hangi dosyayı açmak istediği bilinmiş olunur.

Dim acilacakDosya as string = OpenFileDialog1.FileName

Kullanıcı açmak istediği dosyanın uzantısını belirtmez ise DefaultExt özelliğine atanan
değer devreye girer ve açılacak olan dosyanın default değeri belirlenir. Aşağıdaki kod
satırı ile bu özelliğe “txt” değeri atanır.

OpenFileDialog1.DefaultExt = “txt”

Projemizde kullanıcı mevcut dosyalarını açbilmesi için OpenFileDialog


kontrolünü kullanacağız.

d. FontDialog : Windows ortamında çalışacak olan bir metin editörü uygulaması


düşünecek olursak karşımıza fontlar çıkar. Uygulama içerisinde kullanıcının bir yazının
fontunu değiştirmeyi isteyebileceği ihtimali yüksektir. .Net içerisinde fontları
yönetemek FontDialog kontrolü sayesinde kolaylaştırılmıştır. FontDialog kontrolü de

Not Defteri
11
diğer dialog kontrolleri gibi toolboxın Dialogs sekmesinde yer alır. En önemli işlevi
yazının fontunu ve rengini değiştirmektir.

FontDialog kontrolü diğer dialog sekmesine bulunan kontroller gibi kullanıcının


karşısına direk olarak çıkmaz. Bizim tarafımızdan kullanıcya gösterirlir. Bu işlev bütün
dialog sekmesi kontrollerinin ortak metodu olan ShowDialog ile yerine getirilir.

FontDialog1.ShowDialog()

Font özelliği ile kullanıcının FontDialog üzeride hangi fontu belirlediği öğrenebilir.
Aşağıdaki örnek ile textbox1 adlı kontrolün içerisinde bulunan yazıların fontunu
FontDialog kontrolünün Font özelliğini kullanarak değiştirir.

TextBox1.Font = FontDilaog1.Font

Kullanıcının FontDialog içerisinden yazının rengini ayarlayabilmesi için ShowColor


özelliğini true yapmak gerekir. Eğer False yapılırsa kullanıcı FontDialog içerisinden
yazının rengini belirleyemez. Gösterimi Aşağıdaki gibidir.

FontDialog1.ShowColor = True

Kullanıcın FontDialog içerisnden seçtiği renk Color özelliği ile kontrol edilebilinir.
TextBox1 kontrolü içerisinde bulunan bir yazının rengi aşağıdaki kod ile değiştirilir.

TextBox1.Text = FontDialog1.Color

Kullanıcı yazıya altı çizili, kalın, yatık gibi efektleri yazıya uygulamak isterse
ShowEffects özelliği true değerini almalıdır. Eğer false değerini alırsa kullanıcı
belirtilen efektleri yazıya uygulayamaz.

FontDialog1.ShowEffects = True

e. ColorDialog : Uygulama içerisinde eğer bir kontrolün yada bir yaznın rengi
değiştirilmek istenirse ColorDialog kontrolünden yararlanılır.

Not Defteri
12
En yaygın özelliği ise Color’dur. Bir buttonun rengini ColorDialog’dan faydalanarak
değiştirelim.

Button1.BackColor = ColorDialog1.Color

ShowDialog özelliği ile ColorDialog kontrolü kullanıya gösterilir. Bu methodun yanı


sıra FullOpen özelliğine sahiptir. Bu özellik kullanıcıya kendine özel(custom) renkler
oluşturma olanağını tanır. Kullanıcının bu olanaktan yaralanabilmesi için Fullopen
özelliğine true değerini ataması gerekir.

ColorDialog1.FullOpen = true

f. Encoding : Türkçede kodlama anlamına gelen encoding ifadesi özel bir format içine
verimli taşıma ve saklama işlemleri için karakterleri sıralı bir biçimde koyma işlemidir.
Encoding içerisinde biraz önce belirtilen tanımda karakter setleri bulundurur.
Bunlardan bazıları ASCII, ANSI, UNICODE ve UTF-8’dir. Türkçe karakterlerden bazılar
ingiliz alfabesinde bulunmadığı için yazarken problem yaşanabilir. Ve bu problemi
ortadan kaldırmak için evrensel kod anlamına gelen unicode karakter setini
kullanmak gerekir. Daha detaylı bilgi için http://msdn2.microsoft.com/en-
us/library/system.text.encoding.aspx adresinden faydalanabilirsiniz.

g. StreamWriter :Uygulama içerisnde bulunan metni işletim sitemi üzerindeki bir dosya
içerisine yazmak istendiğinde StreamWriter sınıfı devreye girer. StreamWriter sınıfını
System.IO namespace’i içerisinde yeralır. IO’nun anlamı İnput-output’dur yani girdi-
çıktı. System.IO namespace’i verileri okuma yada yazma işlemlerinin yapıldığı bir
yerdir. StreamWriter, StreamWriter sınıfına verdiğimiz yazıyı akıntıya kapılan bir
deniz topu gibi sürükleyip belirttiğimiz dosyaya kaydeder. StreamWriter sınıfını
kullanmak için ilk önce onun örneğini oluşturmamız gerekir. Prjemiz içerisinde
encoding özelliğini kullanağımızdan StreamWriter sınıfının örneğini bu yolla
oluşturalım. Yazacağımız metinler Türkçe karakter içereceğinden farklı dil seçenekleri
ile kurulmuş işletim sistemlerinde çalışabilmesi için Encoding’ten faydalanmamız
gerekir. Encoding olarak Unicode ifadesini seçecek olursak bu problemi aşmış oluruz.
dim sw as new System.IO.StreamWriter(“C:\Deneme.txt”, False, _
System.Text.Encoding.Unicode)

Yukarıdaki kod C sürücüsünün altında bulunan Deneme.txt dosyasına Unicode olarak


yazmaya ayarlanmış StreamWriter sınıfından sw adında bir örnek oluşturur.Ve bu
verileri dosyaya eklemez mevcut dosyanın üzerine yazar. Verileri yazmak için Write
yada WriteLine metodları kullanılır. Write metodu satır gözetmeksizin yazar fakat
WriteLine metodu tek bir satıra yazar.

sw.Write(“Merhaba Dünya”)
sw.WriteLine(“Merhaba Dünya”)

h. StreamReader : StreamWriter’ın tam tersine bir dosyayı okumaya yarar.


StreamReader sınıfından bir örnek oluşturmak için bir path belirtmek gerekir.

Dim sr as new StreamReader(“C:\deneme.txt”)

Not Defteri
13
Yukarıdaki kod ile StreamReader sınıfından C sürücüsü altında bulunan deneme.txt
adlı dosyadan veri okumak üzere yapılandırılmış sr adında bir nesne oluşturulmuştur.
Verileri okurken ReadToEnd yada ReadLine methodları kullanılır. ReadLine methodu
ile sadece tek bir satırı okuruz.

Textbox1.Text = sr.ReadToEnd()

Yukarıdaki kod ile “C:\deneme.txt” dosyasının içerisindeki bütün bilgileri okuyup


textbox1 içerisinde göstermiş oluruz.

Textbox1.Text = sr.ReadLine()

Yukarıdaki kod ile “C:\deneme.txt” dosyasının içerisindeki ilk satırı okuyup textbox1
içerisinde göstermiş oluruz.

i. Docking : Kontroller docking özelliği ile üzerinde bulundukları formu kaplayabilme


yeteneğini kazanırlar. Örneğin bir forma bir textbox ekleyip, eklenilen textbox’ın dock
özelliği fill olarak belirlendiğinde notpad görünümü kazanan bir arayüz tasarlanmış
olur. Dock özelliğini textbox üzerinde kullanalım.

i. önce bir panel toolbox’tan formun üzerine sürüklenir.


ii. Panel’ın dock özelliği fill olarak ayarlanır.
iii. Panel’ın bütün formu kapladığı görülür.

Adım Adım Uygulamayı Geliştirme


a. Visual Basic 2008 Express Edition içerisinde bir Windows application projesi
başlatalım. Ve projenin adını MetinEditoru olarak belirleyelim.

Not Defteri
14
b. Form1 adlı formun size özelliğini 300;300 olarak belirleyelim.

c. Form1’in FormBorderStyle özelliğini Sizable olarak belirleyelim.

Not Defteri
15
d. Forma Metin Editörü başlığını verelim.

e. Formun üzerine toolbox ın Menus & Toolbars bölümünde yer olan MenuStrip
kontrolünü sürükleyip bırakalım.

Not Defteri
16
f. Dosya ve Biçim adında elemanlarını MenuStrip kontrolüne ekleyelim .

g. Dosyanın alt bölümleri olarak Aç, Kaydet, Farklı Kaydet ve Kapat elemanlarını
ekleyelim.

Not Defteri
17
h. Biçim bölümünün altına ise Yazı Biçimi ve Form Biçimi adında iki eleman daha
ekleyelim.

MenuStrip kontrolü ile ilgili tasarımsal işlerimizi bitirdikten sonra dialogları ekleyelim.
İlk olarak Toolbox içerisinde bulunan dialogs sekmesinden SaveFileDialog kontrolü ekleyelim.

i. Bir adet SaveFileDialog kontrolü ekleyelim. saveFD.bmp

Not Defteri
18
j. Bir adet FontDialog kontrolü ekleyelim.

k. Bir adet OpenFileDialog kontrolünü formun üzerine sürükleyip bırakalım.

Not Defteri
19
l. Bir adet ColorDialog kontrolü ekleyelim. Böylelikle formumuzun üzerine
OpenFileDialog1, SaveFileDialog1, FontDialog1 ve ColorDialog1 adında dört adet
daha kontrol eklenmiş oldu.

m. Daha sonra formun üzerine bir tane textbox sürükleyip bırakalım. Ve textbox’ın
multiline özelliğini true olarak ayarlayalım.

Not Defteri
20
n. TextBox’ın dock özelliğini fill olarak ayarladıktan sonra karşılaşacağımız tasarım
aşağıdaki gibi olacaktır.

o. Kodlamaya, dialoglar ile ilgili bölümü kodlayarak başlayalım. FontDialog1 kontrolünü


seçelim ve ShowColor özelliğini True yapalım. Form üzerinde bulunan MenuStrip1
içerisinde bulunan Biçim bölümündeki Yazı Biçimi ToolStripMenuItem’ına çift
tıklayalım. Ve açılan bölüme aşağıda belirtilen kodu yazalım.

Dim sonuc As DialogResult

‘FontDialog içerisinde kullanıcının basmış olduğu butonu yakalıyoruz.

sonuc = FontDialog1.ShowDialog()

‘Eğer Kullanıcı OK butonuna basmış ie textbox içerisindeki fontu ve


‘yazının rengini değiştireceğiz.

If sonuc = Windows.Forms.DialogResult.OK Then

‘yazının fontunu değişitirdik.

TextBox1.Font = FontDialog1.Font

‘yazının rengini değiştirdik.

TextBox1.ForeColor = FontDialog1.Color

End If

Not Defteri
21
p. Bu kod ile textbox’ın içerisindeki yazı tipi ve yazı rengini belirlemiş oluruz.
DialogResult : FontDialog penceresini açan kişinin tamam tuşuna basıp basmadığına
karar vermek için kullandığımız bir yöntemdir. Eger sonuc değişkenin değeri
DialogResult.OK olursa değişiklikleri TextBox1 üzerinde uygulamış oluruz.

q. Kodlama işlemimize devam edelim ve form üzerinde bulunan MenuStrip1


kontrolünün içerisindeki Form Biçimi bölümüne çift tıklayalım ve açılacak kod
bölümüne şu kodları yazalım.

Dim sonuc As DialogResult

‘Kullanıcının ColorDialog içerisinde bulunan butonlardan hangisine


‘bastığını yakaladık.

sonuc = ColorDialog1.ShowDialog()

If sonuc = Windows.Forms.DialogResult.OK Then

‘TextBox1 in arkaplan rengini ColorDialog içerisinde seçilen


‘renk olarak belirledik

TextBox1.BackColor = ColorDialog1.Color

End If

r. Böylelikle Formun üzerinde bulunan MenuStrip1 içerisindeki Biçim bölümü ile ilgili
kodlama işlemlerini bitirmiş olduk.

s. Formun kod bölümüne geçelim ve adı currentPath olan global bir değişken
tanımlayalım ve bu değişkeni ilklendirelim.

Dim currentPath As String = ""

Not Defteri
22
t. Artık Dosya bölümüne geçerek ilk önce StreamReader nesnesini ve OpenFileDialog1
kontrolünü kullanarak MenuStrip1 içerisindeki Dosya bölümünde bulunan Aç
özelliğini kodlamayla devam edelim. Aç üzerine çift tıklayalım ve açılan kod
bölümüne aşağıdaki kodları yazalım.

Dim sonuc As DialogResult

‘Açılan Dialoga başlık belirledik.

OpenFileDialog1.Title = "Metin Dosyaları"

‘Filtreleme uyguladık. Böylelikle sadece .txt uzantılı dosyaları

‘açabileceğiz.

OpenFileDialog1.Filter = "Metin dosyaları | *.txt"

‘OpenFileDialog default olarak C klasöründen başlayacak.

OpenFileDialog1.InitialDirectory = "C:\\"

‘kullanıcın hangi butona bastığını yakaladık.

sonuc = OpenFileDialog1.ShowDialog()

‘Eğer kullanıcı OK butonuna basmış ise FileName özelliği ile

‘seçilen dosyanın adını yakaladık ve o dosyanın içerisindeki verileri

‘okuduk

If sonuc = Windows.Forms.DialogResult.OK Then

Dim sr As New System.IO.StreamReader(OpenFileDialog1.FileName)

TextBox1.Text = sr.ReadToEnd()

sr.Close()

Me.currentPath = OpenFileDialog1.FileName

End If

Not Defteri
23
u. Bu adımda dosya bölümü içerisinde bulunan kaydetme işlemini kodlayacağız.
Kaydetme işlemi için StreamWriter nesnesini kullanacağız. MenuStrip içerisinde
bulunan dosya bölümüne geçelim ve Kaydet bölümüne fare ile çift tıklayarak açılan
kod satırına şu kodları yazalım.

‘currentPath değişkeni içerisinde değer var ise

‘textboxın içerisindeki dosyaları currentPath içerisinde bulunan


‘dosya adına kaydettik.

If Me.currentPath.Length > 0 Then

Dim sw As New System.IO.StreamWriter(Me.currentPath, _

False, System.Text.Encoding.Unicode)

sw.Write(TextBox1.Text)

sw.Close()

End If

v. Bir önceki adımda textbox1 kontrolü içerisinde bulunan değerleri bir dosya içerisine
yazdık ve bu işlemi yaparken Unicode karakter setini kullandık. Böylelikle Türkçe
karakter desteğini verebileceğiz.

w. Geriye farklı kaydet ve kapat bölümleri kaldı. Farklı kaydet mekanizmasının


çalışabilmesi için aşağıdaki kodu yazmamız gerekir.

Dim sonuc As DialogResult

‘SaveFileDialog1 e bir başlık verdik.

SaveFileDialog1.Title = "Dosya Kayıt"

‘Filter özelliğine atadığımız .txt özelliği ile sadece .txt uzantılı


‘dosyaların görüntülenmesini sağladık.

SaveFileDialog1.Filter = "Metin Dosyaları | *.txt"

SaveFileDialog1.DefaultExt = "txt"

‘Kullanıcı SaveFileDialog açıkken hangi butona basmış onu yakaladık.

sonuc = SaveFileDialog1.ShowDialog()

Not Defteri
24
‘Eğer kullanıcı OK butonuna basmış ise dosyayı streamwriter sınıfı
‘yardımıyla belirtilen path e kaydetmiş olduk.

If sonuc = Windows.Forms.DialogResult.OK Then

Dim sw As New System.IO.StreamWriter( _

SaveFileDialog1.FileName, _

False, System.Text.Encoding.Unicode)

sw.Write(TextBox1.Text)

sw.Close()

End If

x. Formumuzu seçiyoruz ve sağda bulunan properties pencesinden events sekmesine


tıklıyoruz.

Not Defteri
25
y. Burada FormClosing event’ini buluyoruz ve üzerine çift tıklayarak kod bölümüne
geçip şu kod satırlarını yazıyoruz.

Dim sonuc As DialogResult

‘Kullanıcı programdan çıkmak istediğinde içerisinde Evet, Hayır ve


‘iptal butonları olan bir messagebox ı kullanıcıya gösterdik.

sonuc = MessageBox.Show( _

"Cikmadan once doyanizi kaydetmek ister misiniz?", _

"Cikis", MessageBoxButtons.YesNoCancel)

‘Kullanıcı evet botonuna basmış ise.

If sonuc = Windows.Forms.DialogResult.Yes Then

‘Eğer kullanıcı daha önceden bir dosya açmışsa.

If currentPath <> "" Then

‘Verileri daha önceden açılan dosyaya kaydediyoruz.

Dim sw As New System.IO.StreamWriter(Me.currentPath, _

False, System.Text.Encoding.Unicode)

sw.Write(TextBox1.Text)

sw.Close()

Else

‘Eğer daha önceden bir dosya açıkmamışsa kullanıcıyı yeni


‘verilerini yeni bir dosyaya kaydetmesi için
‘yönlendiriyoruz.

Dim dialogSonuc As DialogResult

SaveFileDialog1.Title = "Dosya Kayıt"

SaveFileDialog1.Filter = "Metin Dosyaları | *.txt"

SaveFileDialog1.DefaultExt = "txt"

dialogSonuc = SaveFileDialog1.ShowDialog( )

Not Defteri
26
If dialogSonuc = Windows.Forms.DialogResult.OK Then

Dim sw As New System.IO.StreamWriter ( _

SaveFileDialog1.FileName, False, _

System.Text.Encoding.Unicode)

sw.Write(TextBox1.Text)

sw.Close()

End If

End If

‘Eğer Kullanıcı Hayır butonuna basmışsa textbox ın içerisindeki


‘verileri kaydetmeden programı kapatıyoruz.

ElseIf sonuc = Windows.Forms.DialogResult.No Then

e.Cancel = False

‘Eğer Kullanıcı iptal butonuna basarsa programın kapatılması işlemini


‘iptalediyoruz.

ElseIf sonuc = Windows.Forms.DialogResult.Cancel Then

e.Cancel = True

End If

z. Son bölümde yani kapat bölümünde aşağıdaki ifadeyi kullandığımızda projemizi


tamamen kodlamış oluyoruz.

‘Bu komut ile formumuzu kapatıyoruz.

Me.Close()

Not Defteri
27
Çözümün Test Edilmesi

Şimdi projemizi açalım.

Aşağıdaki her bir kriteri teker teker deneyerek, uygulamanın başarım kriterlerine uyup uymadığını
denetleyelim.

Başarım Kriterleri:
1. Uygulama penceresi boyutlandırılabiliyor mu?
a. Uygulamayı çalıştıralım. Form açılınca formun genişliğini yada yüksekliğini
değiştirmeye çalışalım.
b. Formun yüksekliğinin ve genişliğinin değiştiğini göreceksiniz.

2. Uygulama penceresi ekranı kaplayabiliyor mu?


a. Uygulamayı çalıştıralım ve form açıldığında formun sağ üst köşesinde bulunan
ekranı kapla butonuna tıklayalım.
b. Formun ekranı kapladığını göreceksiniz.

3. Uygulama penceresi simge durumuna küçültülebiliyor mu?


a. Uygulamayı çalıştıralım ve form açıldığında formun sağ üst köşesinde bulunan
simge durumuna butonuna tıklayalım.
b. Formun simge durumuna geldiğini göreceksiniz.

4. Kullanıcı var olan bir metin dosyasını ( .txt uzantılı dosya) açabiliyor mu?
a. Programımızı çalıştıralım.
b. Dosya menüsünde bulunan aç seçeneğine tıklayalım.
c. Açılan OpenFileDialog içerisinden bir .txt uzantılı dosya seçelim.
d. Dosyanın açıldığını göreceksiniz.

5. Kullanıcı yeni bir metin dosyası oluşturup kayıt edebiliyor mu?


a. Programımızı çalıştıralım.
b. Metin kutusu içerisine “Merhaba Dünya” yazısını yazalım.
c. Dosya menüsünde bulunan Farklı Kaydet bölümüne tıklayalım.
d. Açılan SaveFileDialog içerisine bir dosya adı belirtelim.
e. Tamam butonuna tıkladıktan sonra dosyanın kaydedildiğini göreceksiniz.

6. Metin editörünün font ayarları değiştirilebiliyor mu?


a. Programımızı çalıştıralım.
b. Metin kutusu içerisine veriler girelim.
c. Biçim menüsünde bulunan YazıBiçimi bölümüne tıklayalım.
d. Açılan FontDialog ile yazının font ayarlarını değiştirelim.
e. Tamam butonuna bastığımızda değiştirdiğimiz ayarların metin kutusu içerisinde
bulunan verilere etki ettiğini göreceksiniz.

7. Editörün metin rengi değiştirilebiliyor mu?


a. Programımızı çalıştıralım.
b. Metin kutusu içerisine veriler girelim.
c. Biçim menüsünde bulunan YazıBiçimi bölümüne tıklayalım.
d. Açılan FontDialog ile yazının renk ayarlarını değiştirelim.

Not Defteri
28
e. Tamam butonuna bastığımızda değiştirdiğimiz ayarların metin kutusu içerisinde
bulunan verilerin renklerinin değiştiğini göreceksiniz.
8. Editörün zemin rengi değiştirilebiliyor mu?
a. Programımızı çalıştıralım.
b. Biçim menüsünde bulunan FormBiçimi bölümüne tıklayalım.
c. Açılan ColorDialog ile formun rengini ayarlayalım.
d. Tamam butonuna bastığımızda formun renginin değiştiğini göreceksiniz.

9. Uygulama menüden ya da x simgesiyle kapatılmak istendiğinde, kullanıcıya çıkma


işlemi onaylatılıyor mu?
a. Programımızı çalıştıralım.
b. Metin kutusu içerisine veriler girelim.
c. Dosya menüsünden Kapat bölümüne tıklayalım.
d. Kapatma işlemi yapılmadan önce uygulamanın sizden programı kapatmak için
onay istediğini göreceksiniz.

Sonsöz

Projemiz testleri de başarıyla geçtiğine göre müşteriye teslim edilebilecek hale gelmiş demektir.
Şimdi şöylece bir yaptıklarımızın üzerinden geçelim.

TextBox, Button ve Label Windows uygulamalarında en çok kullanılan kontrollerdendir. Bu


projede TextBox kontrolünün Multiline özelliğini kullanarak nasıl çok satırlı olarak kullanıldığını
gördük. Ayrıca TextBox kontrolünü Dock özelliğini kullanarak formumuzun dört yanını
kaplamasını sağladık. Uygulamamızda dosya açarken hangi dosyanın açılacağı, yeni metnin kayıt
edilirken hangi isimle nereye kayıt edileceği, zemin için hangi rengin seçileceği gibi, kullanıcıya
sorularak onun vereceği yanıta göre işlem yapılması gerekn durumlar için Dialog kontrollerini
kullandık. Yazılan metinlerin fiziksel ortama kayıt edilmesi ve daha önceden kayıtlı olan metinlerin
okunarak kullanıcıya TextBox üzerinde gösterilmesi için StreamReader ve StreamWriter sınıflarını
kullanıldı.

Tabii ki bu uygulamanın henüz sadece birinci versiyonu. Siz hataları ve özellik taleplerinizi ilettikçe
hem uygulamanın hem de kitapçığın yeni sürümlerini geliştirip sizlerle paylaşacağız.

Not Defteri
29

You might also like