|
Visual C# ile Basit Bir Not Defteri Uygulaması |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu yazımızda konu
olarak Windows Form’u seçtim;çünkü bu konuda Türkçe kaynak neredeyse yok, doğru
dürüst bir programın yapımını gösteren bir yazı, bir site bulamadım, tabi ki Türkçe
bir çok makale var sitelerde, bende onlardan yararlanarak ve deneyerek bir şeyler
yaptım ve şimdi bu yaptıklarımı sizinle paylaşıyorum.
Eğer bu yazıyı sonuna kadar okursanız ve kodları sizde yazarsanız, yazının sonuna
geldiğiniz Basit Not Defteri adında bir uygulamanız olacak. Önce bu programdan
biraz bahsedelim. Adı üstünde bir Not Defteri uygulaması ancak basit hem de çok
basit. Yapabildiği şeyler: Yeni dosya yaratmak, var olan dosyaları açmak, dosya
kaydetmek… Böyle bir program yapmamın sebebi tabi ki metin editörleri konusunda
alternatif oluşturma isteği falan değil, tek sebep benim ilk başlarda çok zorlandığım
SaveFileDialog, OpenFileDialog gibi kontroller konusunda örneklemeler yapmak..
Lafı daha fazla uzatmadan artık uygulamaya geçelim. Önce aşağıdaki programı Visual
Studio .Net’in Designer’ında oluşturun…
Ben bu resime kullandığım kontrollerin isimlerini de yazdım ki kodları incelerken
zorluk çıkmasın. Yalnız burada görünmeyen 2 kontrol daha var. Biri SaveFileDialog
(objSave), diğeri OpenFileDialog (objOpen). Bu kontrolleri de ekleyip adlarını
parantez içlerindeki gibi yaparsanız sorun çıkmaz…
Şimdi kodlarımıza geçebiliriz. Bu bölümde adım adım ilerleyeceğiz. Menülerdeki
tüm başlıkların olaylarını yazacağız.
1)Genel değişkenimizi tanımlama
Bu programda Degisim adında, “bool” yani sadece true ve false değerleri alabilen
bir değişken tanımladım. Bu değişken sayesinde kullanıcıyı metinin değişip değişmediği
konusunda uyaracağız, böylece isterse değişen metni kayıt imkanı vereceğiz…
2)Form1’in onLoad Olayı
Bu olay programımızın açılışında yürütülen olaydır. Burada objSave ve objOpen
için bazı ayarlar yapıyoruz ve göstermesini istediğimiz dosyaların uzantılarını
giriyoruz.
private
void Form1_Load(object sender, System.EventArgs
e)
{
objOpen.Filter = "Text
Dosyaları(*.txt)|*.txt|Tüm Dosylar(*.*)|*.*" ;
objOpen.FilterIndex
= 1 ;
objSave.Filter = "Text
Dosyaları(*.txt)|*.txt|Tüm Dosyalar(*.*)|*.*" ;
objSave.FilterIndex
= 1 ;
} |
3)Kullanılacak metotların tanımlanması…
Ben bu programda sadece 2 tane metot tanımladım. Bunlardan birincisi KayitMekanizmasi,
diğeri DegisimUyari . KayitMekanizmasi adı üstünde yazdıklarımızı kaydedecek olan
mekanizma, DegisimUyari ise objText içindeki metnin değişimi durumda programı
kapatırken falan bize haber verecek olan kod.
public
void KayitMekanizmasi(string
strVeri)
{
if
(objSave.ShowDialog() == DialogResult.OK)
{
StreamWriter
Kayitci = new StreamWriter(Environment.GetEnvironmentVariable("mydocuments")+objSave.FileName.ToString(),false,System.Text.Encoding.Unicode);
Kayitci.Write(strVeri);
Kayitci.Close();
Degisim
= false;
}
} |
Önce yukarıdaki kodu biraz inceleyelim. Burada önce bi if kontrolü görüyorsunuz.
Bu kontrolün amacı, Kayıt ekranı açıldığı zaman kullanıcı “OK” düğmesine tıklayıp
tıklamadığını kontrol etmek. Eğer “OK”e tıkladı ise programımız bir adet StreamWriter
oluşturuyor. Kayitci adındaki bu Writer Environment.GetEnvironmentVariable("mydocuments”)
bu kod ile ayarlı olan Belgelerim klasörüne gidiyor otomatik olarak. objSave.FileName
ise bizim Kayıt Ekranın da dosyaya verdiğimiz ismi bize döndürüyor. Son olarak
ise bu satırda Unicode bir kodlama yaptığımız gösteriyoruz. Bunu yazmazsanız Türkçe
karakterlerinizin yerinde yeller estiğini görürsünüz.
Kayitci.Write(strVeri) satırı ile gelen veriyi kaydediyor ve StreamWriter nesnesini
kapatıyor. Degisim değerini ise true olarak atıyor. Bunun nedeni değişim oldu
ve ben bunu gördüm demek. Kullanıcıya haber vermeye gerek yok anlamına gelecek.
Şimdi devam edelim.
public
bool DegisimUyari()
{
if
(MessageBox.Show("Dosyanızda bir değişiklik oldu kaydetmek ister
misiniz?","Değişiklik Var",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation)
== DialogResult.Yes)
{
return
true;
}
else
{
Degisim
= false;
return
false;
}
} |
Yukarıdaki kodda ise tipik bir MessageBox kullanımı görüyorsunuz. Buradaki metodumuz
birde değer döndürüyor.Bir bool değeri döndürüyor. Bu dönen değer ile biz az sonra
kullanıcının çıkan mesaj kutusunda dosyayı kaydetmek isteyip istemediğini anlayacağız.
MessageBox.Show("Dosyanızda bir değişiklik oldu kaydetmek ister misiniz?","Değişiklik
Var",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation) == DialogResult.Yes) |
Bu satırı biraz incelemek lazım. Burada ilk overload (Overload metodlara parantezler
içinde yollanan veri demek.) mesaj kutusunda görünecek olan yazı, ikinicisi bu
mesaj kutusunun başlığı, üçüncüsü mesaj kutusu üzerinde ki “Evet”, “Hayır” düğmeleri
ve son olarak mesaj kutusundaki simge. Ancak kodlara bakmaya devam ettiğimizde
bir karşılaştırma görüyoruz (“==” ifadesi) DialogResult.Yes , aslında açıklamaya
bile gerek yok. Eğer kullanıcı “Evet”e tıkladı ise demek. Asıl kodlarda bu durumda
bir “true” ifadesi döndürüldüğünü görebilirsiniz. Biz daha sonra bunu kontrol
ederek KayitMekanizmasi metodumuzu çağıracağız.
4) Yeni düğmesi
Menümüzdeki “Yeni” düğmesine tıkladığımızda olacak olayları gireceğiz. Bunun için
bu düğmeye Designer’dan çift tıklayınız.
private void
menuItem2_Click(object sender, System.EventArgs e)
{
if
(Degisim == false)
{
objText.Clear();
}
else
{
if
(DegisimUyari())
{
KayitMekanizmasi(objText.Text);
objText.Clear();
Degisim
= false;
}
else
{
objText.Clear();
Degisim
= false;
}
}
} |
Burada önce Degisim değerini kontrol ediyoruz. Eğer değer “false” ise yani değişim
yoksa ya bu dosya önceden kaydedilmiştir ya da yeni açılmıştır. O zaman içeriğinin
temizlenmesinde bir sorun yok.
Eğer değer “true” ise biraz karışıyor ortalık. Önce kullanıcıyı uyarmak için DegisimUyari()
çalıştırılıyor. Eğer kullanıcı kayıt etmek istiyorsa, KayitMekanizmasi() çalıştırılıyor,
ekran temizleniyor ve Degisim değeri false oluyor.Eğer kullanıcı kayıt etmek istemiyorsa
içerik temizleniyor ve Degisim değeri yine false oluyor. Böylece yeni bir dosya
açma işlemlerini hallettik.
5) Varolan dosyayı açma
Metin editörünüz ile daha önce var olan bir dosyayı açmak istersiniz diye böyle
bir özellik ekledik birde. Menümüzde “Aç”a çift tıklayın ve tıklama olayına aşağıdaki
kodları girin.
private void
menuItem3_Click(object sender, System.EventArgs e)
{
if
(Degisim == true)
{
if
(DegisimUyari())
{
KayitMekanizmasi(objText.Text);
}
}
if
(objOpen.ShowDialog() == DialogResult.OK)
{
FileInfo
strKaynak = new FileInfo(Environment.GetEnvironmentVariable("mydocuments")+objOpen.FileName.ToString());
StreamReader
Okuyucu = strKaynak.OpenText();
objText.Text
= Okuyucu.ReadToEnd();
Degisim
= false;
Okuyucu.Close();
}
} |
Bu kodlarda da önce değişim var mı diye bakıyoruz. Yani amacımız kullanıcının
yazdığı metni yanlışlıkla bastığı bir düğme yüzünden kaybetmesini engellemek.
Eğer değişim varsa ve uyarıdan “true” değeri dönerse kaydediyoruz, aksi halde
herhangi bir şey yapmıyoruz.
Bundan sonra yukarıda SaveFileDialog için yaptığımız benzer şeyleri yapıyoruz.
Yani .ShowDialog() metodunu çağırıyoruz. Kullanıcı OK’e tıklayınca kodlarımız
devam ediyor. Ancak burada yukarıdakinden farklı kodlar var. Dosya okumak için
çok farklı yöntemler var. Yazmak içinde tabi ki. Mesela StreamWriter’ın StreamReader’ı
da var ve ben burada bunu kullandım. Eğer kodları incelerseniz biraz farklı olduğunu
göreceksiniz. Çünkü burada FileInfo diye de bir şey var. FileInfo bu tür dosya
işlemcilerine yardımcı olur. strKaynak değişkenine atadığımız nesnemizde StreamWriter
daki gibi path gösterip dosyamızı açıyoruz. Burada objOpen.FileName’den gelen
veri, kullanıcının açmak istediği dosya.
StreamReader nesnesini de oluşturup strKaynak.OpenText() ile metin dosyamızı açıyoruz.
Yalnız burada bir noktaya dikkat çekmek istiyorum. Ben burada açılacak dosyanın
bir .txt dosyası olduğunu bildiğim için .OpenText’i kullandım. Yoksa başka versiyonları
da mevcut. Bu nesneyi de oluşturduktan sonra objText’e Okuyucu.ReadToEnd ile baştan
sonra tüm veriyi okuyup aktarıyoruz. Değişimden haberimiz olduğunu programa bildirip,
nesnelerimizi kapatıyoruz…
6) Kaydet düğmesi
Kullanıcı çalışmasını kaydetmek istediği zaman bu düğmeye tıklayabilir. Çok kısa
bir kodu var. Zaten asıl işi yapan KayitMekanizmasi(), biz sadece onu çağıracağız
şimdi.
private void
menuItem4_Click(object sender, System.EventArgs e)
{
KayitMekanizmasi(objText.Text);
Degisim = false;
} |
Burada açıklanacak bir kod yok. Gördüğünüz gibi …
7) Kapat Düğmesi
Kullanıcı programı kapatmak isteyebilir ve bunun için Dosya menüsündeki Kapat
düğmesini kullanabilir. O zaman bu düğmeye de bir olay atamamız lazım. Şimdi çift
tıklayın ve aşağıdaki kodları yazın.
private void
menuItem6_Click(object sender, System.EventArgs e)
{
Close();
} |
Bu kod çok basit. Sadece Close() metodunu çağırıyor. Bu özel tanımlı bir metodur
ve o form penceresinin kapanmasını sağlar. Şimdi aklınıza gelebilir ya içeride
kaydedilmemiş veri varsa hiç kontrol etmedik. O zaman biraz sabır, ona da bakacağız…
8) Kapanmadan önce kontrol
Kullanıcımız programı çok farklı şekillerde kapatabilir. Alt + F4 kombinasyonu,
köşedeki X ile kapatabilir ya da Kapat düğmemize tıklar;ancak az önce de dediğimiz
gibi ya içeride veri varsa. O zaman bu veri için bi kontrol yapmamız lazım. Form’ların
“Closing” adında olayları vardır. Bu form kapatılmadan hemen önce yapılacakları
belirler. Biz buna bazı olaylar atıyoruz şimdi.
private void
Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if
(Degisim == true)
{
if
(DegisimUyari())
{
KayitMekanizmasi(objText.Text);
Close();
}
}
else
{
Close();
}
} |
Burada yapılanlardan farklı olan hiç bir şey yok. Degisim değerini kontrol ediyoruz
ve ona göre işlem yapıyoruz..
9) Son bir metod…
Asıl en önemli şeyi yapmadık sanıyorum. Örneğin kullanıcı programa bir veri girdiğinde
yani herhangi bi yazı yazdığında Degisim değeri değişmedi. O zaman bunu halledelim.
objText’in TextChanged adında bir olayı var. Şimdi o olay kodları içine aşağıdaki
tek satırlık kodu yazıyoruz.
private void
objText_TextChanged(object sender, System.EventArgs e)
{
Degisim
= true;
} |
Evet, böylece olayın iş yapan kısmı bitti..
Ancak menülerimiz arasında hiç ilgilenmediğimiz bir düğme var. Hakkında. Bu aslında
en gereksiz şey belki ama bir programcının en çok önemsediği bölüm :). Bunun için
basit bir form yaratınız. Ben aşağıdaki formu oluşturdum ve adını “hakkinda” yaptım.
Burada altta iki tane de link var. Biri MaxiASP.Com ‘a biri MaxiASP.Net’e yönlenmiş
durumda. Bunlara tıklandığında tarayıcımızın açılıp sitelere gitmemizi sağlayacak
kodlarda aşağıda.
private void
linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs
e)
{
System.Diagnostics.Process.Start("http://www.maxiasp.com");
}
private void
linkLabel2_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs
e)
{
System.Diagnostics.Process.Start("http://www.maxiasp.net");
} |
Gerçekten çok uzun bir yazı oldu. Eğer her şey yolunda gitti ise şu an canavar
gibi çalışan bir “Basit Not Defteriniz” var. Başka yazılarda görüşmek üzere.
Projeyi kaynak kodlarıyla birlikte indirmek için tıklayınız.
Makale:
Visual C# ile Basit Bir Not Defteri Uygulaması C#, Visual C# ve .NET Bahadır Arslan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|