Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Bahadır Arslan
Bahadır Arslan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Bahadır Arslan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 25.6.2003
Okunma Sayısı : 69012
Yorum Sayısı : 7     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 18.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 18.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 18.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 18.4.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Visual C# ile Basit Bir Not Defteri Uygulaması
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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…

private bool Degisim;


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
  • Yazılan Yorumlar
  • Yorum Yaz
KAS
12
2011
hocam programda kapat butonuna tıklandıgında not defterı calısma hatası var bbılgınıze.
ARA
3
2010
bir sorum olacaktı. "tscmbSize" ve "tscmbFontname" kontrollerinin işlevleri nedir? sorunu tek başıma çözmeye çalıştım ama olmadı. Mesajıma elinizden geldiği kadar hızlı cevap verirseniz çok sevinirim...
EKİ
20
2010
ELİMDE GELİŞMİŞ BİR NOT DEFTERİ VAR..Normal fonksiyonları çalışıyor ama ben bir dosyayı çift tıkladığımda kendi programımda açılmasını istiyorum!Örneğin deneme.txt bunun için programın kod kısmına nasıl birşey eklemem lazım? Şimdiden teşekkürler
NİS
4
2010
hocam iyi güzel açıklayarak yazmışsın teşekkürler ama keşke bu kodları form'un mu yoksa butonların içine girip mi yazıyoruz onlarıda açıklasaydın keşke ve bazı komutlar için çağırmamız gereken bazı kütüphaneler var sanırım.Onları da belirtirsen çok daha yararlı olur sanırım.. Yinede emeğine sağlık böyle bir paylaşımda bulunduğun için teşekkürler.
MAR
10
2005
HAZ
25
2003
teşekkür ederim...
HAZ
25
2003
Bahadır kardeş yazın çok güzel olmuş. C# ın pratik kullanımına iyi bir örnek vermişssin
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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