nU




MARMARA ÜNİVERSİTESİ
 ATATÜRK EĞİTİM FAKÜLTESİ




      Nurdan SARIKAYA
            200209019




    Programlama Dilleri
     Visual c# ‘ta Diziler ve
     Visualc# Class Yapıları




          2011, İstanbul

                1
nU

İçindekiler


C#’TA DİZİLER .........................................................................................4
      C#’ta Dizi Değişkenlerinin Tanımlanması ............................................. 4
     Çok Boyutlu Dizileri Tanımlamak .......................................................... 9
     Dinamik Diziler.................................................................................... 11
     Jagged Diziler...................................................................................... 12
        Jagged Dizisinin Tanımlanması........................................................ 13
       Koleksiyonlar ................................................................................... 16
    Dizilerle İlgili Diğer İşlemler ................................................................. 17
    Arraylist Fonksiyonları ......................................................................... 17
       Dizinin Yavru Değişkenine Eleman Ekleme ...................................... 18
       Dizinin Eleman Sayısını Öğrenmek ................................................... 19
       Dizinin Boyutunu Öğrenmek ............................................................. 19
       Belirtilen Dizi Boyutunun Eleman Sayısını Öğrenmek ....................... 20
       Dizide Belirtilen İndis Aralığındaki Değerleri Silme ........................... 21
       Diziye Değerin Olup Olmadığını Kontrol Etme .................................. 21
       Dizinin Eleman Sırasını Tersine Çevirme ........................................... 22
       Dizi Elemanlarını Küçükten Büyüğe Sıralama.................................... 22
       Dizi İçinde Aranan Değeri Bulma ...................................................... 23
       Dizinin İçinde Aranan Değeri Sondan Başlayarak Bulma .................. 24
       Dizide Belirtilen Boyutun Üst Sınırını Öğrenmek .............................. 24
       Dizinin Eleman Sayısını Öğrenme ..................................................... 25
       Dizi İçindeki Herhangi Bir Aralığa Eleman Ekleme ............................ 23
       Dizi İçindeki Herhangi Bir Aralığa 1’den Fazla Eleman Ekleme ......... 26
       Dizi İçindeki Elemanı Bulup Silme ..................................................... 26
       Dizi İçindeki Elemanı İndis Numarasına Göre Silme .......................... 27

                                                    2
nU

    Dizilerle İlgili Örnekler ......................................................................... 28
C#’ ta CLASS YAPISI ............................................................................... 73
    C#’ta Class Yapısı ................................................................................. 73
    Protected Obje Tanımlamak ................................................................ 82
    Virtual ve Override Metods Tanımlamak ............................................ 84
    Base Class Constructors ....................................................................... 85
    BitArray Sınıfı....................................................................................... 90
    Hashtable Sınıfı ................................................................................... 91
    SortedList Sınıfı.................................................................................... 94
    Stack Sınıfı ........................................................................................... 96
    Queue Sınıfı ......................................................................................... 98
    Class İçindeki Set ve Get Deyimleri .................................................... 100
 Mevcut Class’ları Kullanma ................................................................... 106
Açıklamalar ............................................................................................ 119




                                                      3
nU


                                  C#’TA DİZİLER
C#’ta Dizi Değişkenlerinin Tanımlanması

Diziler tüm dillerde olduğu gibi c# içinde oldukça önemli yer tutar. DeğiĢkenlerin dizi
olarak tanımlanabilmesi hem kod bloğunu kısalır, hem de programın çok daha hızlı
iĢlemesini sağlar.

Bellekte aynı türden sıralanmıĢ verilerin oluĢturduğu yapıya dizi denir. Tek bir tanımlama
yapılarak istenilen sayıda veri giriĢi sağlanabilir. Dizi elemanları bir indis numarasına
sahiptir. Ġndis numaraları varsayılan olarak sıfırdan baĢlar. Dizinin kaç elemanlı
olacağı dizinin tanımlandığı satırda veya daha sonra da belirtilebilir. Ayrıca dizi
tanımlaması yapıldığında dizinin eleman sayısı, kullanılacak eleman sayısından az ise dizi
yeniden boyutlandırılabilir.
Dizi değiĢkenin eleman sayısını belirtmek için new metodu kullanılır.

Örnek:

private void button1_Click(object sender, EventArgs e)
        {
            int[] dizidedegisken;
            dizidedegisken = new int[10];
            dizidedegisken[9] = 100;
            label1.Text = dizidedegisken[9].ToString();

           }

Dizilere tanımlandıkları anda değerler atayabilirsiniz.AĢağıdaki 5 elemanlı bir dizi tek
satırda tanımlanıyor arkasından oluĢturuluyor en sonunda da dizinin tğm elemanlarına
değer atanıyor. Ġkinci satırda ise dizinin 4. Elemanı (dizi[3]) text‟in içersinde yazdırılıyor.

Örnek:

private void button2_Click(object sender, EventArgs e)
        {
            int[] dizi = new int[5] { 0, 10, 20, 30, 40 };
            textBox1.Text = dizi[3].ToString();
        }

ya da

    private void button3_Click(object sender, EventArgs e)
         {
             int[] dizi = { 0, 10, 20, 30, 40 };
             textBox1.Text = dizi[3].ToString();
         }

Yukardaki iki örnekte aynı Ģeyi yapar.



                                               4
nU



Örnek:

Bu örnekte InputBox nesnesi kullanılacağından References /Sağ Click/Add References/
Microsoft. VisualBasic „i ekliyoruz.

private void button1_Click(object sender, EventArgs e)
{
     byte i;
     int[] dizi = new int[5];
     for (i = 0; i < 5; i++)
     {
         dizi[i] = int.Parse(Microsoft.VisualBasic.Interaction.
InputBox("Dizinin" + (i + 1) + ".elemanını girin", "Bilgi Girişi", "", 20,
20));

     }
     for (i = 0; i < 5; i++)
     {
          listBox1.Items.Add(dizi[i]);
     }
}

Ekran Çıktısı




                                              “Ekle”   butonuna      basıldığında   ekrana
                                              InputBox()    ekranı     gelir   ve   dizinin
                                              elemanları girilir. Sonrasında InputBox()‟a
                                              girilen değerler ListBox‟a eklenir.




                                          5
nU




Yukarıdaki örneğin geliştirilmişi

5 elemanlı bir int dizi tanımlanarak, dizi elemanları “Dizi elemanlarını gir” butonuna
tıklandığında InputBox() ile diziye diziden de liste kutusuna eklenmektedir. BaĢlangıçta
“EKLE” butonu pasif haldedir. Dizi elemanlarının giriĢinden sonra “Dizi elemanlarını gir”
Butonu pasif hale “Ekle” butonu aktif hale gelmektedir. Ekle butonuna tıklandığında
dizi yeniden boyutlandırılarak InputBox()‟tan diziye yeni eleman giriĢi yapılmakta ve aynı
zamanda     liste   kutusuna    da   eklenmektedir.     ÇıkıĢ   düğmesiyle    de    program
sonlandırılmaktadır.

int sayi;
private void button1_Click(object sender, EventArgs e)
{
      byte i;
      int[] dizi1 = new int[5];
      for (i = 0; i < 5; i++)
      {
          dizi1[i] =
int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (i
+ 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20));

        }
        for (i = 0; i < 5; i++)
        {
             listBox1.Items.Add(dizi1[i]);
        }
            sayi = 5;
            button1.Enabled = false;
            button2.Enabled = true;
}
byte s = 5;
private void button2_Click(object sender, EventArgs e)
{
     int[] dizi1 = new int[sayi + 1];
     dizi1[sayi] =
int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (s
+ 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20));
     listBox1.Items.Add(dizi1[sayi]);
}

private void button3_Click(object sender, EventArgs e)
{
      Close();
}

private void Form1_Load(object sender, EventArgs e)
{
      button2.Enabled = false;
}



                                             6
nU




    Ekle butonuna bastığımızda InputBox
    ekranı gelir. Ġstediğimiz sayıyı girip
    “Tamam” butonuna bastığımızda ListBox‟a
    değer eklenir.




7
nU

Örnek:

4 elemanlı string bir dizi tanımlanıp ilk değerleri verilerek formun çalıĢtırılmasında bu
değerler comboBox() ta listelenmektedir.

public string[] mevsimler = new string[4] { "Ġlkbahar", "Yaz",
"Sonbahar", "Kış" };
private void Form4_Load(object sender, EventArgs e)
{
       comboBox1.Items.Add(mevsimler[0]);
       comboBox1.Items.Add(mevsimler[1]);
       comboBox1.Items.Add(mevsimler[2]);
       comboBox1.Items.Add(mevsimler[3]);
}

 private void comboBox1_TextChanged(object sender, EventArgs e)
 {
       if(comboBox1.SelectedIndex==0)
          textBox1.Text=mevsimler[0];

         if(comboBox1.SelectedIndex==1)
            textBox1.Text=mevsimler[1];

         if(comboBox1.SelectedIndex==2)
            textBox1.Text=mevsimler[2];

         if(comboBox1.SelectedIndex==3)
            textBox1.Text=mevsimler[3];

 }




                                              8
nU

Çok Boyutlu Dizileri Tanımlamak
Bazı durumlarda (özellikle büyük projelerde) çok boyutlu dizi tanımlamak zorunda
kalabilirsiniz. Bu genlikle satır ve sütundan iki boyutlu bir dizi olacaktır. (Özellikle matris
hesaplarıyla ilgilenen mühendisler için) Bazen daha büyük boyutlu da olabilir.

Çok boyutlu bir dizi tanımlamak, sizi tek boyutlu birçok dizi tanımlamak yerine bir tane
çok boyutlu dizi tanımlayarak problemi çözme imkânı verir. Bu hem kod karmaĢasından
hem de hız açısından faydalıdır. AĢağıda iki boyutlu bir dizi tanımlanmıĢ olup (2 satır, 3
sütunlu) ilk satır üçüncü sütunlu değere 200 değeri atanmıĢtır.



Örnek:

  private void button3_Click(object sender, EventArgs e)
        {
            int[,] dizi = new int[2, 3];
            dizi[0, 2] = 200;
            textBox1.Text=dizi[0,2].ToString();
         }

dizi [2, 3] ün sonuçta 6 elemanlı bir dizi olduğu aĢağıda anlatılmaya çalıĢıldı.
dizi [0, 0], dizi [0, 1], dizi [0, 2], dizi [1, 0], dizi [1, 1], dizi [1, 2] görüldüğü gibi 6
elemanlı iki boyutlu bir dizi oluĢturuldu.

Burada dizinin ilk ve ikinci elemanı yerine i,j değiĢkenleri kullanılarak bir çok iĢlem
kolaylıkla yapılabilir.




                                                 9
nU




10
nU



Dinamik Diziler

C#‟ ta diziler önce tanımlanıp daha sonra eleman sayısı belirlendiği için bu diziler aynı
zamanda dinamik dizi olarak da kullanılabilirler. Burada [] içerisindeki değer bir
textBox‟tan veya bir inputBox‟tan rahatlıkla alınabilir. Bu sayede bu diziler aynı zamanda
bir dinamik dizi görevi görürler.

Dinamik diziler öğrenci sayısının bilinmediği sınıflar için veya oyuncu sayısının bilinmediği
bilhassa network oyunları için kullanılır. Mesela öğrenci sayısını dinamik dizi olarak
tanımlamak çok doğru bir karardır. Çünkü A sınıfı 40 kiĢi, B sınıfı 50 kiĢiden ibaret
olabilir. Bu durumda öğrenci sayısını bir textBox‟ a aldırarak [] içerisinde atayabilirsiniz.
Onu da for döngüsüyle iĢleme sokup tüm öğrencilerin, isimlerini, numaralarını tek satırlık
kodla aldırmanız mümkün olur aksi halde en büyük sınıfa göre bir dizi tanımlayacaktınız.
Diğer ufak sayılarda iĢlem yaparken artan değiĢkenler bellekte boĢu boĢuna yer iĢgal
edecekti. Bu iyi bir programcı için istenen bir Ģey değildir.

Bir diziyi arraylist sınıfından tanımlamak demek dizinin boyutunun ihtiyaç duyuldukça
arttırılması veya azaltılması demktir.10 elemanımız ve 10 elemanlı bir dizimiz varsa ve
listeye yeni eleman eklemek isteniyorsa dizinin elemanını ihtiyaç duyuldukça
arttırabilirsiniz. Üstelik dizinin eski hali korunacaktır. Aynı durum dizinin boyutunu
azaltmak içinde geçerlidir.

Arraylist sınıfı diziye her eleman eklendiğinde dizi boyutu arttırmaz Bunun yerine ilk
etapta 4 elemanlı bir dizi oluĢturur. Ġlk 4 elemanda dizinin boyutu sabit kalır.5. eleman
eklendiğinde dizi boyutu 2 katına çıkarılır.

Not: Arraylist sınıfını kullanabilmek için öncelikle;

using System.Collections; kütüphanesini çağırmalıyız.


ArrayList Fonksiyonları ileriki sayfalarda iĢlenecektir.




                                               11
nU

Jagged Diziler

C# ile gelen güzel bir olay olan jagged dizilerdir. Bunu önceden benim gibi C kullanan
vatandaĢlar pointer kullanarak yapıyordu. Bu Ģekilde malloc()'la yer isteyip sonra onu
dinamik oluĢturup siliyorduk. Jagged (pürüzlü, düzensiz) dizilerde ise sizin istediğiniz
kadar temel eleman oluĢturup bu elemanların her birinin alt dizisi ihtiyaca göre
oluĢturulur. OluĢturacağımız dizilerde satırların eleman sayıları birbirinden farklıysa bu
durumlarda Jagged dizi tanımlanır.

Bir diziyi jagged olarak tanımlamak ona bir özellik kazandırmanız dizi ile ilgili tüm
iĢlemleri yine yapabilirsiniz.
Mesela diziyi tablo halinde ifade edecek olursak Ģöyle bir yapıda dizimiz olabilir.




Dizinin alt eleman sayısı farklılık gösterebiliyor. .net listview datagrid vs. gibi
bileĢenlerdeki ekleme mantığıyla hareket edeceğiz. Ġlk önce itemleri (dizinin [i][0])
kısmını ayarlayacağız. Sonra da o itemlere (dizi elemanlarına ait ) alt itemleri oluĢturup
ekleyeceğiz.


Listview'e rastgele oluĢturulmuĢ verileri rastgele boyutlu dizilere nasıl atılacağını
gösterelim.
ġimdi dizinin [i][0]. elemanları Listviewde item gibi olacak sonra listview e diğer kayıtlar
subitemler olarak gelecek. Bu Ģekilde iç içe for döngüsüyle yapacağız. Matrisler gibi
düĢünürsek daha kolay anlaĢılır.




                                               12
nU

Jagged Dizisinin Tanımlanması

Örnek:

int[][] jdizi = new int[3][];

3 satırdan oluĢan bir dizi tanımladım. Fakat her satırın eleman sayısı birbirinden farklı
olacaktır. (Aynıda olabilir) Bu sayıları da programın herhangi bir yerinde bildireceğim.

Örnek:

private void button1_Click(object sender, EventArgs e)
        { //Dizinin 1.,2. ve 3. satırlarının kaç değerden oluşacağı
belirtilmiştir.
          //Sonra da dizilere değer atanmıştır.
            int[][] jdizi;
            jdizi = new int[3][];
            jdizi[0] = new int[4][];
            jdizi[1] = new int[3][];
            jdizi[2] = new int[2][];

                 jdizi[0][3] = 100;
                 jdizi[2][1] = 500;
                 Form1.ActiveForm.Text = jdizi[2][1].ToString();

             }

Yukarıdaki kod aĢağıdaki gibi Ģematize edilebilir.

Jdizi[0][0] jdizi[0][1] jdizi[0][2] jdizi[0][3]

Jdizi[1][0] Jdizi[1][1] Jdizi[1][2]

Jdizi[2][0] Jdizi[0][1]


Görüldüğü gibi ilk satır 4 elemandan , 2. Satır 3 elemandan, 3. Satırda 2 elemandan
oluĢmaktadır. Artık her elemana rahatlıkla değer atayabilirsiniz. Burada dikkat edilmesi
gereken husus jdizi[2][3] yukarıdaki elemanlar dıĢında herhangi bir tanesi de olabilir)
elemanına değer atayamayacağınızdır. Eğer böyle bir atama yaparsanız, çalıĢma anında
programınız kırılacaktır.

Örnek:

string[][] aile = new aile[10][];

Alt dizileri ise tek tek tekrar dizi tanımlıyormuĢuz gibi tekrar tanımlayacağız. Mesela
dizinin 1. elemanı 2. elemanı ... hepsi ayrı ayrı birer dizi olacaktır.

Örnek:

aile[i] = new string[10];

ġeklinde tanımlarız. Fakat bunun düzensizliği nerde kaldı? AĢağıdaki örneğe bakalım.



                                                  13
nU



Örnek:

tut=r.Next(1,20);
aile[i] = new string[tut];

Rastgele değerlerde boyutlu bir dizi. Dizi Ģimdi jagged oldu. Sonra buna random olarak
rastgele değerler verip dolduralım.

Cascade: (char)65 dersek 'a' olur. Onun koyacağımız tip belirteçleri cascade oluyor.
Bununla o değeri bellekteki tutulma Ģekli belirlenir.

Rastgele değerler için;


Örnek:

  public string veri_ekle()
  {
    string tut1 = "";
    for (int i = 0; i< r.Next(1, 15); i++)
        //Verinin boyu da random ayarlanır
        {
           tut1 += Convert.ToString((char)r.Next(65, 90));
           //65 ve 90 alafabenin asci max min değerleridir
           //a,z arasında rastgele harf ürettik'char’cascadedir.
        }
        return tut1;
  }

Bunu da sırayla jagged diziye ekledikten sonra artık ispat için listviewde sergilemek
kalıyor. Ekleme iĢlemi tam olarak solutionda mevcuttur.
Listview'e eklemek artık daha kolay olacaktır.

Örneğin Devamı:

for (int a = 0; a < eb ; a++)
{
  //eb en buyuk alt kolonun boyutu
  listView1.Columns.Add(a.ToString());
}

for (int i = 0; i < Convert.ToInt32(textBox1.Text); i++)
{
     listView1.Items.Add(aile[i][0]);
     //Temel elemanlar item olacaktır
     for (int j = 0; j < aile[i].Length; j++)
     {
           listView1.Items[i].SubItems.Add(aile[i][j].ToString());
           //Alt elemanlar subitem olacaktır
     }
}




                                            14
nU

Sonuç:




Görüldüğü üzeri bazı alt diziler 2 bazısı 18 ... olmuĢ. Böylece bellek israfı önlenmiĢtir.

Örnek: Boyutu 3 olan diğer boyutu belli olmayan bir jagged dizi tanımlanarak 2.
boyutunun    elemanlarını   form    yüklendiğinde    diziye   girilmektedir.   Her   bir   sütun
elemanlarını ayrı ayrı liste kutusuna listeleyen ve bu dizinin rankını “Dizinin rankını
göster” düğmesine basıldığında mesaj kutusunda gösteren program.



string[][] aile = new string[3][];

private void Form5_Load(object sender, EventArgs e)
{
       aile[0] = new string[] {"Nurdan","Nurşan","Hakan","Seçkin"};
       aile[1] = new string[] {"Sen", "Ben", "O", "Biz", "Siz" };
       aile[2] = new string[] {"Sevde", "Sercan", "Selçuk" };

             for (int j = 0; j < 4; j++)
                  listBox1.Items.Add(aile[0][j]);

             for (int j = 0; j < 5; j++)
                  listBox2.Items.Add(aile[1][j]);

             for (int j = 0; j < 3; j++)
                  listBox3.Items.Add(aile[2][j]);
}

private void button1_Click(object sender, EventArgs e)
{
       MessageBox.Show("Aile Dizisi"+(aile.Rank).ToString()
+"boyutludur." ,"Rank");
 }




                                             15
nU




Koleksiyonlar


Dizi eleman sayısının esnek Ģekilde tanımlanması için kullanılan yapılardır. Eleman sayısı,
programda kullanılacak eleman sayısına göre artırılır ya da azaltılır. Koleksiyonlar,
System.Collections isim alanında (namespace) bulunur. Koleksiyonlarla çalıĢmaya
baĢlamadan önce System.Collection‟ı using deyimiyle projenin baĢına dâhil etmek
gerekir.




                                             16
nU

Dizilerle İlgili Diğer İşlemler

Arraylist Fonksiyonları

ArrayList oluĢturabilmek için projemize using System.Collections; kodunu using
satırına eklemeliyiz. Bu kodla System.Collections kütüphanesini çağırmıĢ oluruz.


Klasik dizilerle çalıĢırken karĢılaĢabileceğimiz temel sorunlar Ģunlardır.
Dizilerin sınırları sabittir. int[] dizi = new int[60];
Dizilerin tüm elemanları aynı türden olmalıdır. Örneğin; Hepsi int
Kullanmadığımız dizi elemanlarından dolayı bellek alanları
gereksiz yere iĢgal edilmektedir.


Örneğin sayısını bilemediğimiz bir dizinin eleman sayısını 500 olarak belirlediğimizi
varsayalım. ÇalıĢma zamanında dizimizin sadece 10 elamanını kullandığımız durumda
diğer 490 elemanlık bellek alanı boĢ olarak kalır. Öte yandan dizimizde tutmak istediğimiz
değiĢkenlerin sayısı 501 bir olduğu bir durumda "IndexOutOfRangeException" istisnai
durumu ortaya çıkar ve program bu hatadan dolayı sonlanır.




                                                17
nU

Dizinin Yavru Değişkenine Eleman Ekleme


ArrayList class‟indan oluĢturduğumuz yavru değiĢkene bir eleman eklemek için Add()
kullanılır.


Örnek:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

              private void button1_Click(object sender, EventArgs e)
              {
                  ArrayList diziListe = new ArrayList();
                  int[] dizi = new int[5] { 1, 2, 3, 4, 5 };

                  diziListe.Add(dizi[2]);// diziListe'nin ilk elemani 3
                  diziListe.Add(12); // diziListenin ikinci elemani 12

                  diziListe.Add("kelime");
                  // dizilistenin üçüncü elemani kelime stringi olur
                  this.Text = diziListe[0].ToString();
                  // Form'un basligina 3 yazar
                  this.Text = diziListe[1].ToString();
                  // Form'un basligina 12 yazar
                  this.Text = diziListe[2];
                  // Form'un basligina kelime yazar
              }
}
        Burada dikkat edilmesi gereken ilk nokta Add fonksiyonu ile ArrayList‟e ayni anda
sadece bir eleman ekleyebilmemiz. Ġkinci önemli nokta ise hem bir integer değeri ekledik
hem de bir string değeri ekledik. Buradan da anlaĢılacağı üzere oluĢturduğumuz
Arraylist‟e object türünde değerler atabiliyoruz. Mesela biz burada diziListe isimli yavru
değiĢkene bool, double, float, string, byte, hatta Button, listBox türünde nesneler de
ekleyebiliyoruz çünkü object türü değiĢken hepsini kapsayabiliyor.




                                           18
nU

Dizinin Eleman Sayısını Öğrenmek

Bir dizinin kaç elemandan oluĢtuğunu öğrenmek için Length kullanılır.

Örnek:

private void button2_Click(object sender, EventArgs e)
{
       int[] dizi = new int[5] { 0, 10, 20, 30, 40 };
       textBox1.Text = dizi.Length.ToString(); // 5 yazdırır.
}

Eğer Jagged bir dizide aynı fonksiyonu kullanırsanız geriye satır sayınız döner. Çünkü
hangi satıra kaç eleman atayacağınız değiĢkenlik gösterecektir.

Örnek:

private void button3_Click(object sender, EventArgs e)
        {
            int[][] jdizi;
            int[,]nurdan= new int[2,3];
            jdizi = new int[5][];
            jdizi[0] = new int[4];
            jdizi[1] = new int[3];
            jdizi[2] = new int[2];

                jdizi[0][3] = 100;
                Form1.ActiveForm.Text = jdizi.Length.ToString();}



Dizinin Boyutunu Öğrenmek
Bir dizinin boyutunu öğrenmek için Rank kullanılır.

Örnek:

private void button4_Click(object sender, EventArgs e)
        {
            int[,] dizi = new int[2, 3];
            dizi[0, 2] = 200;
            textBox1.Text = dizi.Rank.ToString();//2 yazdırır.
        }

Aynı fonsiyonu Jagged diziler için kullanırsanız geriye 1 değeri döner.

Örnek:

private void button5_Click(object sender, EventArgs e)
{
       int[][] jdizi;
       jdizi = new int[10][];
       jdizi[0] = new int[4];
       jdizi[1] = new int[3];
       jdizi[2] = new int[2];


                                            19
nU

         jdizi[0][3] = 100;
         jdizi[2][1] = 500;
         Form1.ActiveForm.Text = jdizi.Rank.ToString();// 1 yazar.
    }



Belirtilen Dizi Boyutunun Eleman Sayısını Öğrenmek

Bir dizinin herhangi bir boyutunun kaç elemanlı olduğunu öğrenmek için GetLength()
kullanılır. AĢağıda dizi değiĢkeninin ilk boyutunu textBox‟un içine yazdırdık. Dizi çok
boyutlu da olabilirdi o zaman GetLength(1) veya daha büyük bir değer girilebilirdi.

Örnek:

private void button6_Click(object sender, EventArgs e)
{
      int[] dizi = new int[5] { 0,5,10,15,20,25};
      textBox1.Text = dizi.GetLength(0).ToString(); //6 yazdırır.
}
Aynı fonksiyonu Jagged diziler için kullanırsanız sadece ”0” için çalıĢır. Yani dizinin ilk
boyutunun kaç elemandan oluĢtuğunu öğrenebilirsiniz. Çünkü tanımlandığı anda diğer
boyutlar belli değildir.

Örnek:

private void button7_Click(object sender, EventArgs e)
{
      int[][] jdizi;
      jdizi = new int[10][];
      jdizi[0] = new int[4];
      jdizi[1] = new int[3];
      jdizi[2] = new int[2];

         jdizi[0][3] = 100;
         jdizi[2][1] = 500;
         Form1.ActiveForm.Text = jdizi.GetLength(0).ToString();
         // 10   yazar.
         //Burada GetLength(1) yazılmaz program hata verir.
}


Clear, Reverse, IndexOf metotları Array sınıfında Shared (paylaĢtırılmıĢ) olarak tanımlı
metotlardır. ĠĢlemin yapılacağı dizi parametre olarak verilmelidir.




                                             20
nU

Dizide Belirtilen İndis Aralığındaki Değerleri Silme

Parametre olarak verilen dizinin, belirtilen indis aralığındaki tüm değerleri temizlemek için
Clear() kullanılır. Temizleme iĢleminde atanan değer, dizi elemanlarının tiplerine göre
değiĢir. Örneğin int tipinde tanımlı bir dizinin elemanları temizlenirse 0 değerini alacaktır.
Buna karĢın String tipindeki elemanlar “” (boĢ yazı) değerini alır.

Örnek:

int[] dizi = { 12, 13, 14, 15 };
      // 1. indisten başlayarak, 3 elemanı temizle
      Array.Clear(dizi, 1, 3);
      MessageBox.Show(dizi[2].ToString());
      //Sonuç = 0
      // Dizinin tüm elemanlarını temizler
      Array.Clear(dizi, 0, dizi.Length);

Örnek:

private void button1_Click(object sender, EventArgs e)
{
       ArrayList diziListe = new ArrayList();
       int[] dizi = new int[5] { 11, 21, 34, 56, 74 };
       diziListe.AddRange(dizi);
       diziliste.Clear();
       // diziListe'nin içine tamamen temizler
       textBox1.Text = diziListe[2].ToString();// hata verir.
}

Diziye Değerin Olup Olmadığını Kontrol Etme


Fonksiyona parametre olarak verilen değiĢkenin ArrayList içinde olup olmadığına
Contains() bakar. Eğer var ise true yok ise false döndürür.

Örnek:

private void button1_Click(object sender, EventArgs e)
{
     ArrayList diziListe = new ArrayList();

      int[] dizi = new int[5] { 1, 2, 3, 4, 5 };
      diziListe.AddRange(dizi);

      if (diziListe.Contains(Convert.ToInt32(textBox1.Text)) == true)
      {
           MessageBox.Show("girilen deger diziListe içinde mevcut");
      }
      else
      {
           MessageBox.Show("girilen deger diziListe içinde yok");
      }
}



                                             21
nU

Dizinin Eleman Sırasını Tersine Çevirme

Parametre olarak verilen dizinin eleman sırasını tersine çevirmek için Reverse()
kullanılır. Dizinin tüm elemanlarının veya belirli indis aralığındaki elemanlarının sırası
tersine çevrilebilir.



Örnek:

string[] harfler = { "A", "B", "C" };
         Array.Reverse(harfler);
         MessageBox.Show(harfler[2]);
         // Sonuç = A
         string[] harfler = { "A", "B", "C" };
         Array.Reverse(harfler, 0, 1);
         MessageBox.Show(harfler[2]);
         // Sonuç = C

Örnek:

private void button1_Click(object sender, EventArgs e)
{
        ArrayList diziListe = new ArrayList();
        int[] dizi = new int[5] { 7, 8, 9, 10, 11 };
        diziListe.AddRange(dizi);
        diziListe.Reverse();
        // dizi bundan sonra {11,10,9,8,7} halini alir.
        textBox1.Text = diziListe[2].ToString();
        // textBox1'in içine 9 yazar.
}

Dizi Elemanlarını Küçükten Büyüğe Sıralama


Arraylist‟in elamanlarını küçükten büyüğe doğru sıralamak için Sort() kullanılır. Eğer
elemanlar string tipinde ise alfabetik sıralama yapar.

Örnek:

private void button1_Click(object sender, EventArgs e)
{
        ArrayList diziListe = new ArrayList();
        string[] dizi = new string[4] { "Ankara", "Izmir",
"Istanbul", "Gaziantep" };
        diziListe.AddRange(dizi);
        diziListe.Sort();
        //dizinin son hali {"Ankara","Gaziantep","Istanbul","Izmir"}
seklinde olur.
        textBox1.Text = diziListe[3].ToString();
        // textBox1'in içine Izmir yazar.
}


                                            22
nU

Örnek:

private void button1_Click(object sender, EventArgs e)
{
         ArrayList diziListe = new ArrayList();
         int[] dizi = new int[5] { 11, 21, 34, 56, 74 };
         diziListe.AddRange(dizi);
         textBox1.Text = diziListe[2].ToString();
         // textBox1’in içine 34 yazar
}




Dizi İçinde Aranan Değeri Bulma

Ġlk parametrede verilen dizide, ikinci parametrede verilen değeri aramak için IndexOf()
kullanılır. Aranan değer dizide bulunursa indisi, bulunamazsa -1 döndürür. IndexOf
fonksiyonu aramaya ArrayList‟in baĢından baslar.


Örnek:

float[] notlar = { 78.1, 99.9, 100, 12.2 };
         float maxNot = 100;
         MessageBox.Show(Array.IndexOf(notlar, maxNot).ToString());
         // Aranan maxNot değerinin indisi = 2
Örnek:

  private void button11_Click(object sender, EventArgs e)
      {
          ArrayList diziListe = new ArrayList();

             string[] dizi = new string[5] {"aa","bb","cc","dd","ee" };
             // fonksiyonun parametresi aradigimiz elemandir
             diziListe.AddRange(dizi);
             int sira;
             sira = diziListe.IndexOf("cc", 0, diziListe.Count–1);
             textBox1.Text = sira.ToString();
         }




                                          23
nU

Dizinin İçinde Aranan Değeri Sondan Başlayarak Bulma


IndexOf fonksiyonu gibi ArrayList içinde herhangi bir elemanı aramak için LastIndexOf()
kullanılır. IndexOf‟tan farkı aramaya sondan baĢlamasıdır. Elaman sayısı çok fazla olan
Arraylist‟lerde aradığımız eleman sonlara daha yakınsa bu fonksiyon bize hız kazandırır.
Eğer aranan eleman ArrayList içinde var ise elemanın indis numarasını, yok ise -1
döndürür.


Örnek:

private void button1_Click(object sender, EventArgs e)
     {
         ArrayList diziListe = new ArrayList();
         string[] dizi = new string[5] {"aa","bb","cc","dd","ee" };
         diziListe.AddRange(dizi);
         int sira;
         sira = diziListe.LastIndexOf("dd", 0, diziListe.Count – 1);
         // Aramaya sondan basladigi için elemani 2. seferde bulur.
         Eger IndexOf kullansaydik elemani üçüncü seferde bulacakti.
         textBox1.Text = sira.ToString();
     }


Dizide Belirtilen Boyutun Üst Sınırını Öğrenmek

Bir dizinin herhangi bir boyutunun en üst sınırını öğrenmek için GetUpperBound()
kullanılır.

Örnek:

private void button8_Click(object sender, EventArgs e)
        {
            int[] dizi = new int[5] { 0, 20, 10, 40, 30 };
            textBox1.Text = dizi.GetUpperBound(0).ToString();
            //4 yazdırır.
        }

Aynı iĢlemi Jagged diziler için kullanırsanız. Sadece ilk boyut için değer döndürebilirsiniz.
BaĢka bir boyut girerseniz program çalıĢmayacaktır.

Örnek:

private void button9_Click(object sender, EventArgs e)
        {
           int[][] jdizi;
            jdizi = new int[10][];
            jdizi[0] = new int[4];
            jdizi[1] = new int[3];
            jdizi[2] = new int[2];

                jdizi[0][3] = 100;
                jdizi[2][1] = 500;

                                             24
nU

            Form1.ActiveForm.Text =
jdizi.GetUpperBound(0).ToString();
            // 9 yazar.
            //Burada GetUpperBound(1) yazılmaz program hata verir.

            }

Diğer dizi fonksiyonları da Jagged dizilerde kullanılabilir fakat gireceğiniz değerlere
birazcık dikkaet etmeniz gerekecektir.

Dizinin Eleman Sayısını Öğrenme

ArrayList‟in eleman sayısını öğrenmek için Count() fonksiyonu kullanılır.

Örnek:

private void button7_Click(object sender, EventArgs e)
{
      ArrayList diziListe = new ArrayList();

         int[] dizi = new int[] { 1, 2, 3, 4, 5, 6 };
         diziListe.AddRange(dizi);
         textBox1.Text = diziListe.Count.ToString();
         //textBox1'in içine 6 yazar
}

Dizi İçindeki Herhangi Bir Aralığa Eleman Ekleme

ArrayList içinde herhangi bir aralığa eleman eklemek için Insert() kullanılır. Araya
eleman eklediğimiz için ArrayList‟in eleman sayısı da artmıĢ olur (tıpkı otobüs beklerken
birinin araya girmesi gibi). Fonksiyonun ilk parametresine elemanı eklemek istediğimiz
indis numarasını, ikinci parametreye ise elamanı yazarız.

Örnek:

private void button10_Click(object sender, EventArgs e)
{
     ArrayList diziListe = new ArrayList();
     string[] dizi = new string[5] { "aa", "bb", "cc", "dd", "ee" };
     // diziListe.AddRange(dizi);
     diziListe.Insert(2, "ff");
     // diziListenin 2 numarali indisine ff ekledik.
     diziListenin eleman sayisi 6 oldu.
     textBox1.Text = diziListe[2].ToString();
     // textBox1'in içine ff yazar.
}




                                             25
nU

Dizi İçindeki Herhangi Bir Aralığa 1’den Fazla Eleman Ekleme


ArrayList içinde herhangi bir aralığa birden fazla elemanı tek seferde eklemek için
InsertRange () kullanılır.

Örnek:

private void button12_Click(object sender, EventArgs e)
{
      ArrayList diziListe = new ArrayList();
      int[] dizi = new int[5] { 0, 1, 2, 3, 4 };
      diziListe.AddRange(dizi);
      int[] eklenecek=new int[3]{ 10, 11, 12 };
      diziListe.InsertRange(2, eklenecek);
      // diziListenin 2 numarali indisinden sonra {10,11,12}
      dizisini ekledik. diziListenin eleman sayisi 8 oldu.
      // diziListenin son hali{0,1,10,11,12,2,3,4,5} seklidedir.
      textBox1.Text = diziListe[2].ToString();
      // textBox1'in içine 10 yazar.
  }

Dizi İçindeki Elemanı Bulup Silme


Fonksiyona parametre olarak girilen elemanı Arraylist‟in içinde bulup silmek için Remove
() kullanılır. Böylece ArrayList‟in eleman sayısı 1 azalmıĢ olur.

Örnek:

private void button13_Click(object sender, EventArgs e)
{
       ArrayList diziListe = new ArrayList();
       int[] dizi = new int[5] { 0, 1, 2, 3, 4 };
       diziListe.AddRange(dizi);
       diziListe.Remove(3)
       textBox1.Text = diziListe[3].ToString();
       // textBox1'in içine 4 yazar.
}




                                             26
nU

Dizi İçindeki Elemanı İndis Numarasına Göre Silme


Fonksiyona parametre olarak girilen indis numarasını Arraylist‟in içinde bulup silmek için
RemoveAt () kullanılır. Remove fonksiyonundan tek farkı parametre olarak elemanı
değil elemanın indis numarasını almasıdır.


Örnek:
private void button15_Click(object sender, EventArgs e)
{
      ArrayList diziListe = new ArrayList();
      int[] dizi = new int[5] { 7, 8, 9, 10, 11 };
      diziListe.AddRange(dizi);
      diziListe.Remove(2);
      textBox1.Text = diziListe[2].ToString();
      // textBox1'in içine 10 yazar.
}




                                             27
nU

Dizilerle İlgili Örnekler

Örnek 1: Girilen sayıyı yazıya çeviren program


Kodlar:

using   System;
using   System.Drawing;
using   System.Collections;
using   System.ComponentModel;
using   System.Windows.Forms;
using   System.Data;

namespace YazıyaÇevir
{

public class Form1 : System.Windows.Forms.Form
{
  private System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Label label1;

  private System.ComponentModel.Container components = null;

        public Form1()
        {
             InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
             if( disposing )
             {
                   if (components != null)
                   {
                        components.Dispose();
                   }
             }
             base.Dispose( disposing );
             }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {
           this.textBox1 = new System.Windows.Forms.TextBox();
           this.button1 = new System.Windows.Forms.Button();
           this.label1 = new System.Windows.Forms.Label();
           this.SuspendLayout();

          this.textBox1.Location = new System.Drawing.Point(8, 24);
          this.textBox1.Name = "textBox1";
          this.textBox1.Size = new System.Drawing.Size(200, 20);
          this.textBox1.TabIndex = 0;


                                          28
nU

        this.button1.Location = new System.Drawing.Point(216, 24);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(75, 23);
        this.button1.TabIndex = 1;
        this.button1.Text = "Çevir";
        this.button1.Click += new
System.EventHandler(this.button1_Click);

        this.label1.BackColor =
System.Drawing.SystemColors.ActiveCaption;
        this.label1.Location = new System.Drawing.Point(12, 56);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(48, 21);
        this.label1.TabIndex = 2;

        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
        this.ClientSize = new System.Drawing.Size(292, 94);
        this.Controls.Add(this.label1);
        this.Controls.Add(this.button1);
        this.Controls.Add(this.textBox1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        this.ResumeLayout(false);
        this.PerformLayout();

}
     #endregion

     [STAThread]
     static void Main()
     {
          Application.Run(new Form1());
     }

 string çevir(string sayı)
  {
    int max_basamak_say = 18; //18 basamaklı-katrilyon
 string[] birler = { "", "bir", "iki", "üç", "dört", "beş", "altı",
                        "yedi", "sekiz", "dokuz"};
 string[] onlar = { "", "on", "yirmi", "otuz", "kırk", "elli",
"altmış",
                        "yetmiş", "seksen", "doksan"};
    //Eğer 18 basamaktan daha fazla kullanacaksanız
    //katrilyondan önce o basamakları da ekleyin
 string[] binler = {"katrilyon", "trilyon", "milyar", "milyon",
"bin", ""};
    int i, uz ;
    int[] bas = new int[3];
    string sonuç="", ara_sonuç="";
    uz = sayı.Length;
    //sayının kullanılmayan basamaklarını sıfırla doldur
    sayı = sayı.PadLeft(max_basamak_say, '0');
    //sayıyı üçerli basamaklar halinde ele al
    for (i = 0 ; i <= max_basamak_say / 3 - 1 ; i++)
    {

                                 29
nU

        bas[0] = int.Parse(sayı.Substring(i * 3, 1));
        bas[1] = int.Parse(sayı.Substring((i * 3) + 1, 1));
        bas[2] = int.Parse(sayı.Substring((i * 3) + 2, 1));

        if (bas[0] == 0)
         ara_sonuç = "";
        else if (bas[0] == 1)
         ara_sonuç = "yüz";
        else
         ara_sonuç = birler[bas[0]] + "yüz";
        ara_sonuç = ara_sonuç + onlar[bas[1]] + birler[bas[2]];
        //basamak değeri oluşmadıysa yani 000 ise binler basamağını ekle
        if (ara_sonuç != "")
         ara_sonuç = ara_sonuç + binler[i];
        //birbin olmaz
        if ((i > 1) && (ara_sonuç == "birbin"))
         ara_sonuç = "bin";
        if (ara_sonuç != "")
         sonuç = sonuç + ara_sonuç + " ";
     }
     if (sonuç.Trim() == "")
       sonuç = "sıfır";
     return sonuç.Trim();
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
      try
      {
        label1.Text = çevir(textBox1.Text);
      }
      catch
      {
        MessageBox.Show("Geçersiz sayı");
      }
    }

    private void Form1_Load(object sender, System.EventArgs e)
    {
      this.AcceptButton=button1;
    }
}
}

Ekran Çıktısı:




                                     30
nU

Örnek 2: Dinamik Dizi Örneği
Kayıt‟a tıklandığında; TextBox lara girilen değerleri alır, personel sayısını (girilen kayıt
sayısı) , dizi boyutunu (textBox lara girilen bilgi sayısı) bulur.
Listele butonuna tıklandığında forma girilen bilgileri 2. Formdaki ListBox‟a ekler.

Kodlar:

using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Linq;
using   System.Text;
using   System.Windows.Forms;
using   System.Collections;

namespace dinamikdizi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        struct personel
        {
            public string ad, meslek, babaadi, dogumyeri, soyad;
            public override string ToString()
            {
              return "ADI=" + ad + ", SOYADI= " + soyad + " ,
MESLEĞĠ= " + meslek + ",BABA ADI=" + babaadi + ",DOĞUM YERĠ=" +
dogumyeri;
            }
        }
        ArrayList Pers = new ArrayList();

           private void button1_Click(object sender, EventArgs e)
           {
               personel p;
               p.ad = textBox1.Text;
               p.soyad = textBox2.Text;
               p.meslek = textBox3.Text;
               p.babaadi = textBox4.Text;
               p.dogumyeri = textBox5.Text;
               Pers.Add(p);
               label8.Text = Pers.Count.ToString();
               label9.Text = Pers.Capacity.ToString();

           }

           private void button2_Click(object sender, EventArgs e)
           {
               int i;
               Form2 frm = new Form2();

                                              31
nU

                 for (i = 0; i <= Pers.Count - 1; i++)
                     frm.listBox1.Items.Add(Pers[i].ToString());
                 frm.Show();
         }
    }
}

Ekran Çıktısı:




                                      32
nU



Örnek     3:    x1,x2,x3   0   ya   da   değerlerini   alabilen   değiĢkenler   olmak   üzere
ax1+bx2+cx3=d denkleminin çözümünü sağlayan (x1,x2,x3) değerlerini sonuc1 label ına
yazan, çözümü yoksa denklemin çözümü yok diye sonuç1 label ına yazan program.


Bunun yanında d deki değerin asal olup olmadığını sonuc2 label ına yazan ve Temizle
butonuna bastığında textBox ların içini 0 yapıp label lerin içini temizleyen program.



Kodlar:

Formun Kodları

using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Linq;
using   System.Text;
using   System.Windows.Forms;

namespace deniz_tanır_04078541
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
          int a1,a2,a3,a4;
          int[] sonuc = new int[3];
            a1 = Convert.ToInt16(textBox1.Text);
            a2= Convert.ToInt16(textBox2.Text);
            a3 = Convert.ToInt16(textBox3.Text);
            a4 = Convert.ToInt16(textBox4.Text);
            sinav yeni = new sinav(a1, a2, a3, a4);
            sonuc = yeni.hesapla();
            label5.Text = sonuc[0].ToString() + "," +
sonuc[1].ToString()+","+sonuc[2].ToString();

                if (sonuc[0] == 100)
                    label5.Text = "çözüm yok";
           }
           private void button2_Click(object sender, EventArgs e)
           {
               int a1, a2, a3, a4;
               int[] sonuc = new int[3];
               a1 = Convert.ToInt16(textBox1.Text);
               a2 = Convert.ToInt16(textBox2.Text);
               a3 = Convert.ToInt16(textBox3.Text);

                                             33
nU

                 a4 = Convert.ToInt16(textBox4.Text);
                 sinav yeni = new sinav(a1, a2, a3, a4);
                label6.Text= yeni.asalmi();
          }
          private void button3_Click(object sender, EventArgs e)
          {
              textBox1.Text = "0";
              textBox2.Text = "0";
              textBox3.Text = "0";
              textBox4.Text = "0";
              label5.Text = "";
              label6.Text = "";
          }

    }
}

Class Kodları

using   System;
using   System.Collections.Generic;
using   System.Linq;
using   System.Text;
using   System.Windows.Forms;

namespace egesinav
{
    class sinav
    {
    int a, b, c, d;
      int x1, x2, x3;
      public sinav(int a3, int b3, int c3, int d3)
      {
          a = a3;
          b = b3;
          c = c3;
          d = d3;
      }
      public int[] hesapla()
      {
          int[] k=new int[3];
          k[0] = 100;
          x1 = 0; x2 = 0; x3 = 0;
          if (x1 * a + x2 * b + x3 * c == d)
          {
              k[0] = x1;
              k[1] = x2;
              k[2] = x3;
              return k;
          }
          x1 = 0; x2 = 0; x3 = 1;
          if (x1 * a + x2 * b + x3 * c == d)
          {
              k[0] = x1;
              k[1] = x2;
              k[2] = x3;

                                      34
nU

         return   k;
     }
     x1 = 0; x2   = 1; x3 = 0;
     if (x1 * a   + x2 * b + x3 * c == d)
     {
         k[0] =   x1;
         k[1] =   x2;
         k[2] =   x3;
         return   k;
     }
     x1 = 0; x2   = 1; x3 = 1;
     if (x1 * a   + x2 * b + x3 * c == d)
     {
         k[0] =   x1;
         k[1] =   x2;
         k[2] =   x3;
         return   k;
     }
     x1 = 1; x2   = 0; x3 = 0;
     if (x1 * a   + x2 * b + x3 * c == d)
     {
         k[0] =   x1;
         k[1] =   x2;
         k[2] =   x3;
         return   k;
     }
     x1 = 1; x2   = 0; x3 = 1;
     if (x1 * a   + x2 * b + x3 * c == d)
     {
         k[0] =   x1;
         k[1] =   x2;
         k[2] =   x3;
         return   k;
     }
     x1 = 1; x2   = 1; x3 = 0;
     if (x1 * a   + x2 * b + x3 * c == d)
     {
         k[0] =   x1;
         k[1] =   x2;
         k[2] =   x3;
         return   k;
     }
     x1 = 1; x2   = 1; x3 = 1;
     if (x1 * a   + x2 * b + x3 * c == d)
     {
         k[0] =   x1;
         k[1] =   x2;
         k[2] =   x3;
         return   k;
     }
     return k;
}
    public string asalmi()
    {
        string k2;
        for (int i = 2; i < d; i++)

                              35
nU

                 if (d % i == 0)
                     return "d sayısı asaldır";
                     return "d sayısı asal değildir";
         }

    }
}


Ekran Çıktısı:




                                  36
nU



Örnek 4: Ters Çevir butonuna basıldığında textBox‟daki girilen değeri ListBox‟a ters
çevirerek atar.

Ekle    butonuna   basıldığında   textBox‟a    girilen   değeri   aynen   ListBox‟a   yazar.
Maç Sonucu butonuna basıldığında textBox‟a girilen değere göre kazanan kazanamayanı
belirleyip MessagaBox‟ta uyarı verir.

Kodlar


using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace WindowsFormsApplication6
{
     public partial class Form1 : Form
     {
         string[] isimler = new string[100];
         int [] sans=new int [3];
         int sayac,sayac2;
         public Form1()
         {
             InitializeComponent();
         }
         private void button1_Click(object sender, EventArgs e)
         {
           int i;
           try
           {
               label2.Text = "";
               for (i = textBox1.Text.Length - 1; i >= 0; i--)
               {
                    label2.Text += textBox1.Text.Substring(i, 1);
               }
                  listBox1.Items.Add(textBox1.Text.PadRight(15) +
label2.Text);
             }
             catch
             {
                  ;
             }
         }
   private void Form1_Load(object sender, EventArgs e)
   {
      listBox1.Font = new Font("courier new", 10, FontStyle.Regular);
      listBox2.Font = new Font("courier new", 10, FontStyle.Regular);

                                              37
nU

     listBox3.Font = new Font("courier new", 10, FontStyle.Regular);
     listBox1.Items.Add("Kelime".PadRight(15) + "Tersi");
     listBox2.Items.Add("Adı Soyadı".PadRight(15) + "Telefon No");
      listBox3.Items.Add("Adı Soyadı");
    }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                 isimler[sayac] = textBox2.Text;
                 sayac++;
                 listBox2.Items.Add(textBox2.Text.PadRight(15) +
textBox3.Text);
            }
            catch
            {
                 ;
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            int rsayi;
            Random r = new Random();
            try
            {
                 if (int.Parse(textBox4.Text) > int.Parse
(textBox5.Text))
                 {
                     while (sayac2 < 3)
                     {
                          rsayi = r.Next(sayac);
                          if (Array.IndexOf(sans, rsayi) == -1)
                          {
                              sans[sayac2] = rsayi;
                              sayac2++;
                          }
                     }

                    for (int k = 0; k < sayac2; k++)
                    {

listBox3.Items.Add(isimler[sans[k]].PadRight(15));
                     }
                     sayac2 = 0;
                }
                else
                {
                     MessageBox.Show("Takımınız kaybettiğinden dolayı
kontür kazanan olmamıştır");
                }
            }
            catch
            {
                ;
            }

                                 38
nU

        }
    }
}


Ekran Çıktısı




                39
nU

Örnek 5: 6 tane sayı üretir ve bunları sıralar.

Kodlar

using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Text;
using    System.Windows.Forms;

namespace WindowsApplication10
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string sayilar;
        private void button1_Click(object sender, EventArgs e)
        {

                int sayi, i;
                Random rastgele = new Random();
                for (i = 0; i < 6; i++)
                {
                    sayi = rastgele.Next(1, 50);
                    sayilar += sayi.ToString() + " ";
                    label1.Text = sayilar;
                }
           }

           private void button2_Click(object sender, EventArgs e)
           {

                string[] sirala = new string[6];
                int i;
                sirala = sayilar.Split(' ');
                Array.Sort(sirala);
                label2.Text = " ";
                for (i = 0; i < 6; i++)
                {
                     label2.Text += sirala[i].ToString() + " ";
                }}}}

Ekran Çıktısı




                                            40
nU

Örnek 6: 0‟dan 100 e kadar rastgele sayılara oluĢturulmaktadır. Daha sonra bu sayıların
en büyüğü, en küçüğü ve ortalaması bulunmaktadır.

Kodlar

using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace dizidenemeleri
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

           private void button1_Click(object sender, EventArgs e)
           {
               int max, min, ortalama, toplam;
               Random rastgelesayi = new Random();
               int[] dizi = new int[100];
               for (int i = 0; i < 100; i++)
               {
                   dizi[i] = rastgelesayi.Next(500);
               }
               max = dizi[0];
               min = dizi[0];
               toplam = 0;
               ortalama = 0;
               for (int i = 0; i < 100; i++)
               {
                   if (max < dizi[i])
                   {
                       max = dizi[i];
                   }
                   if (min > dizi[i])
                   {
                       min = dizi[i];
                   }
                   toplam += dizi[i];
               }
              label4.Text = max.ToString();
              label5.Text = min.ToString();
              ortalama = toplam / 100;
              label6.Text = ortalama.ToString();

               int yedek;
               for (int i = 0; i < 100; i++)
               {

                                          41
nU

                   for (int j = 0;   j < 100; j++)
                   {
                       if (dizi[i]   > dizi[j])
                       {
                           yedek =   dizi[j];
                           dizi[j]   = dizi[i];
                           dizi[i]   = yedek;
                       }
                   }
                }
                listBox1.Items.Clear();

                for (int i = 0; i < 100; i++)
                {
                    listBox1.Items.Add(dizi[i]);
                }
         }
    }
}


Ekran Çıktısı




                                      42
nU

Örnek 7: Sayısal Loto Programı; 1 ve 49 arası 6 tane sayı üretilir. Üretilen bu sayıların
aynı olup olmadığına bakılır. Sayılar birbirinden farklı olduğunda üretilen sayıları sayac
numarasına göre elemanlara atılır. Dizi elemanları küçükten büyüğe sıralanır. Label a
aktarılır.

Kodlar

private void button1_Click(object sender, EventArgs e)
{
//sayısal lotoda 6 sayı üretildiği için 6 elemanlı dizi oluşturuldu.
     Random r = new Random();
     int rastgele;
     int sayac=0;
     int[] sayilar = new int[6];

     while (sayac < 6)
     {
         rastgele = r.Next(1, 50); //1 ile 49 arasında rastgele sayı
üretilir

         if (Array.IndexOf(sayilar, rastgele) == -1)
         //dizinin içinde aynı sayı yoksa
         {
             sayilar[sayac] = rastgele;
//üretilen rastgele sayiyi dizinin sayac kaç ise o elemanına ata
             sayac++;
         }

         }
            Array.Sort(sayilar);//diziyi küçükten büyüğe sıralar
            label1.Text = sayilar[0].ToString(); //label1 e sayilar
dizisinin 1.elemanını yaz
            label2.Text = sayilar[1].ToString();
            label3.Text = sayilar[2].ToString();
            label4.Text = sayilar[3].ToString();
            label5.Text = sayilar[4].ToString();
            label6.Text = sayilar[5].ToString();
}

Ekran Çıktısı




                                           43
nU

Örnek 8: TextBox‟a değer girilir. 2. textBox‟ a değiĢtirmek istediğiniz harfi,3. textBox‟a
yeni değer girilir. “DeğiĢtir” butonuna tıklandığında label da kelimenin değiĢtirilmiĢ hali
yazılır.

Kodlar

public string degistir(string cumle,char a,char b)
{
      for (int i = 0; i < cumle.Length; i++)
      {
           if (cumle[i] == a)
                label4.Text += b.ToString();
           else
                label4.Text += cumle[i].ToString();

           }
           return cumle;

}
private void button1_Click(object sender, EventArgs e)
{
       string cumle1 = textBox1.Text;
       char a = Convert.ToChar(textBox2.Text);
       char b = Convert.ToChar(textBox3.Text);
       degistir(cumle1, a, b);

}


Ekran Çıktısı




                                             44
nU

Örnek 9: Su Doku Oyunu

Form Ekranının Kodları:

using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Text;
using   System.Windows.Forms;


namespace Sudoku
{
    public partial class sudoku_frm : Form
    {
        int[,] sudoku = new int[9, 9];
        Sudoku_Kontrol kontrolet = new Sudoku_Kontrol();
        Sudoku_Coz coz = new Sudoku_Coz();


          public sudoku_frm()
          {
              InitializeComponent();
          }

        private void Sayi_Giris(object sender, EventArgs e)
        {
            if (((TextBox)(sender)).Text == "1" || ((TextBox)(sender)).Text
== "2" || ((TextBox)(sender)).Text == "3" || ((TextBox)(sender)).Text ==
"4" || ((TextBox)(sender)).Text == "5" || ((TextBox)(sender)).Text == "6"
|| ((TextBox)(sender)).Text == "7" || ((TextBox)(sender)).Text == "8" ||
((TextBox)(sender)).Text == "9")
            {
                if (kontrolet.Ekleme_Izın(sudoku,
Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1)),
Convert.ToInt32(((TextBox)(sender)).Text)))
                {

sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0,
1)),Convert.ToInt32(((TextBox)(sender)).Name.Substring(1,
1))]=Convert.ToInt32(((TextBox)(sender)).Text);
                }
                else
                {

sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1))] = 0;
                    ((TextBox)(sender)).Text = null;
                 }
            }
            else
            {

sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1))] = 0;
                ((TextBox)(sender)).Text = null;
            }

          }

                                       45
nU


       private void sudoku_frm_Load(object sender, EventArgs e)
       {

            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                     string isim = j.ToString() + i.ToString();
                     TextBox hucre = new TextBox();
                     hucre.Font = new System.Drawing.Font("Microsoft Sans
Serif", 15F, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, ((byte)(162)));
                     hucre.Location = new System.Drawing.Point(i*35+20,
j*35+20);
                     hucre.MaxLength = 1;
                     hucre.Multiline = true;
                     hucre.Name = isim;
                     hucre.Size = new System.Drawing.Size(30, 30);
                     hucre.TabIndex = 0;
                     hucre.TextAlign =
System.Windows.Forms.HorizontalAlignment.Center;
                     hucre.BackColor = Color.GhostWhite;
                     hucre.AllowDrop = true;
                     hucre.TextChanged+=new EventHandler(Sayi_Giris);
                     hucre.DragDrop+=new DragEventHandler(hucre_DragDrop);
                     hucre.DragOver+=new DragEventHandler(hucre_DragOver);
                     hucre.Click += new EventHandler(hucre_Click);
                     Controls.Add(hucre);
                }

            }

       }

       private void hucre_Click(object sender, EventArgs e)
       {
           for (int i = 0; i < 9; i++)
                 {
               sayilarMenu.Items[i].Enabled=false;
                 }

            for (int i = 1; i < 10; i++)
            {
                if (kontrolet.Ekleme_Izın(sudoku,
Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1)), i))
                {
                    sayilarMenu.Items[i-1].Enabled=true;
                }
            }

            sayilarMenu.Show(((TextBox)(sender)).Location.X +
this.Location.X+40, ((TextBox)(sender)).Location.Y + this.Location.Y+28);
        }

       private void sudoku_frm_Paint(object sender, PaintEventArgs e)
       {
           Pen kalem = new Pen(Brushes.Black, 3);
           e.Graphics.DrawLine(Pens.Chocolate, 18, 17, 332, 17);
           e.Graphics.DrawLine(kalem, 18, 122, 332, 122);
           e.Graphics.DrawLine(kalem, 18, 227, 332, 227);

                                    46
nU

    e.Graphics.DrawLine(Pens.Chocolate, 18, 332, 332, 332);

    e.Graphics.DrawLine(Pens.Chocolate,     17, 18, 17, 332);
    e.Graphics.DrawLine(kalem, 122, 18,     122, 332);
    e.Graphics.DrawLine(kalem, 227, 18,     227, 332);
    e.Graphics.DrawLine(Pens.Chocolate,     332, 18, 332, 332);

    e.Graphics.DrawLine(Pens.Black,   18,   52, 332, 52);
    e.Graphics.DrawLine(Pens.Black,   18,   87, 332, 87);
    e.Graphics.DrawLine(Pens.Black,   18,   157, 332, 157);
    e.Graphics.DrawLine(Pens.Black,   18,   192, 332, 192);
    e.Graphics.DrawLine(Pens.Black,   18,   262, 332, 262);
    e.Graphics.DrawLine(Pens.Black,   18,   297, 332, 297);

    e.Graphics.DrawLine(Pens.Black,   52, 18, 52, 332);
    e.Graphics.DrawLine(Pens.Black,   87, 18, 87, 332);
    e.Graphics.DrawLine(Pens.Black,   157, 18, 157, 332);
    e.Graphics.DrawLine(Pens.Black,   192, 18, 192, 332);
    e.Graphics.DrawLine(Pens.Black,   262, 18, 262, 332);
    e.Graphics.DrawLine(Pens.Black,   297, 18, 297, 332);

}

private void yeni_btn_Click(object sender, EventArgs e)
{
    Random rdn = new Random();

    int oyun = rdn.Next(1, 6);

    switch (mod_sec.Text)
    {
        case "Oyun Yarat":
            TextBox hucre = new TextBox();

            for (int i = 0; i <= Controls.Count - 1; i++)
    {
        if (Controls[i].GetType().Name == "TextBox")
        {
            hucre = (TextBox)this.Controls[i];
            hucre.Text = null;
            hucre.ReadOnly = false;
            hucre.BackColor = Color.GhostWhite;
        }
    }

    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            sudoku[i, j] = 0;
        }
    }
            break;
        case "Kolay":
            yukle("oyunlar/k" + oyun + ".sdk");
            break;
        case "Normal":
            yukle("oyunlar/n" + oyun + ".sdk");
            break;
        case "Zor":
            yukle("oyunlar/z" + oyun + ".sdk");
            break;

                            47
nU

    }
}

private void kaydet_btn_Click(object sender, EventArgs e)
{
    if (kaydet())
    {
         MessageBox.Show("Başarı ile kaydedildi.", "Mesaj");
    }
    else
    {
         MessageBox.Show("Kayıt edilemedi.", "Mesaj");
    }
}

private void yukle_btn_Click(object sender, EventArgs e)
{
    if (yukle())
    {
         MessageBox.Show("Başarı ile yüklendi.","Mesaj");
    }
    else
    {
         MessageBox.Show("Yüklenemedi", "Mesaj");
    }

}

bool kaydet()
{
    SaveFileDialog kaydet = new SaveFileDialog();
    kaydet.Title = "Sudoku Kaydet";
    kaydet.Filter = "Sudoku Dosyası (*.sdk) |*.sdk";
    if (kaydet.ShowDialog() != DialogResult.OK)
    {
        return false;
    }

    string veri = null;
    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            veri += sudoku[i, j] + ",";
        }
        veri += sudoku[i, 8] + "rn";
    }
    for (int i = 0; i < 8; i++)
    {
        veri += sudoku[8, i] + ",";
    }
    veri += sudoku[8, 8];
    System.IO.File.WriteAllText(kaydet.FileName, veri);

    TextBox hucre = new TextBox();

    for (int i = 0; i <= Controls.Count - 1; i++)
    {
        if (Controls[i].GetType().Name == "TextBox")
        {
            hucre = (TextBox)this.Controls[i];
            hucre.Text = null;

                             48
nU

                  hucre.ReadOnly = false;
                  hucre.BackColor = Color.GhostWhite;
              }
          }
          return true;
      }

      bool yukle()
      {
          int[,] gecici = new int[9, 9];
          OpenFileDialog yukle = new OpenFileDialog();
          yukle.Title = "Sudoku Yükle";
          yukle.Filter = "Sudoku Dosyası (*.sdk) |*.sdk";
          if (yukle.ShowDialog() != DialogResult.OK)
          {
              return false;
          }

          TextBox hucre = new TextBox();

          for (int i = 0; i <= Controls.Count - 1; i++)
          {
              if (Controls[i].GetType().Name == "TextBox")
              {
                  hucre = (TextBox)this.Controls[i];
                  hucre.Text = null;
                  hucre.ReadOnly = false;
                  hucre.BackColor = Color.GhostWhite;
              }
          }

          for (int i = 0; i < 9; i++)
          {
              for (int j = 0; j < 9; j++)
              {
                  sudoku[i, j] = 0;
              }
          }

          string veri = System.IO.File.ReadAllText(yukle.FileName);
          string[] satirlar = veri.Split("r".ToCharArray());
          for (int i = 0; i < 9; i++)
          {
              string LFsilme = satirlar[i];
              if (i != 0)
              {
                  LFsilme = satirlar[i].Substring(1, satirlar[i].Length -
1);
              }
              string[] hucreler = LFsilme.Split(Convert.ToChar(","));
              for (int j = 0; j < 9; j++)
              {
                  gecici[i, j] = Convert.ToInt32(hucreler[j]);
              }
          }


          int h = 0;
          int k = 0;
          for (int i = 0; i <= Controls.Count - 1; i++)
          {
              if (Controls[i].GetType().Name == "TextBox")

                                  49
nU

        {
            hucre = (TextBox)this.Controls[i];
            while (h < 9)
            {
                while (k < 9)
                {
                    hucre.Text = gecici[k, h].ToString();
                    if (gecici[k,h]!=0)
                    {
                         hucre.ReadOnly = true;
                         hucre.BackColor = Color.Goldenrod;
                    }
                    k++;
                    break;
                }
                if (k == 9)
                {
                    h++;
                    k = 0;
                }
                break;
            }
        }
    }

    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            sudoku[i, j] = gecici[i, j];
        }
    }
    return true;
}

void yukle(string dosya)
{
    int[,] gecici = new int[9, 9];

    TextBox hucre = new TextBox();

    for (int i = 0; i <= Controls.Count - 1; i++)
    {
        if (Controls[i].GetType().Name == "TextBox")
        {
            hucre = (TextBox)this.Controls[i];
            hucre.Text = null;
            hucre.ReadOnly = false;
            hucre.BackColor = Color.GhostWhite;
        }
    }

    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            sudoku[i, j] = 0;
        }
    }

    string veri = System.IO.File.ReadAllText(dosya);
    string[] satirlar = veri.Split("r".ToCharArray());

                            50
nU

          for (int i = 0; i < 9; i++)
          {
              string LFsilme = satirlar[i];
              if (i != 0)
              {
                  LFsilme = satirlar[i].Substring(1, satirlar[i].Length -
1);
              }
              string[] hucreler = LFsilme.Split(Convert.ToChar(","));
              for (int j = 0; j < 9; j++)
              {
                  gecici[i, j] = Convert.ToInt32(hucreler[j]);
              }
          }


          int h = 0;
          int k = 0;
          for (int i = 0; i <= Controls.Count - 1; i++)
          {
              if (Controls[i].GetType().Name == "TextBox")
              {
                  hucre = (TextBox)this.Controls[i];
                  while (h < 9)
                  {
                      while (k < 9)
                      {
                          hucre.Text = gecici[k, h].ToString();
                          if (gecici[k, h] != 0)
                          {
                               hucre.ReadOnly = true;
                               hucre.BackColor = Color.Goldenrod;
                          }
                          k++;
                          break;
                      }
                      if (k == 9)
                      {
                          h++;
                          k = 0;
                      }
                      break;
                  }
              }
          }

          for (int i = 0; i < 9; i++)
          {
              for (int j = 0; j < 9; j++)
              {
                  sudoku[i, j] = gecici[i, j];
              }
          }
      }


      private void coz_btn_Click(object sender, EventArgs e)
      {
          if (coz.Coz(sudoku, 0, 0))
          {
              MessageBox.Show("Sudoku Çözüldü.","Mesaj");


                                  51
nU

    TextBox hucre = new TextBox();

    int[,] gecici = new int[9, 9];

    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            gecici[i, j] = sudoku[i, j];
        }
    }

    for (int i = 0; i <= Controls.Count - 1; i++)
    {
        if (Controls[i].GetType().Name == "TextBox")
        {
            hucre = (TextBox)this.Controls[i];
            hucre.Text = null;
            hucre.ReadOnly = true;
        }
    }

    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            sudoku[i, j] = 0;
        }
    }

    int h = 0;
    int k = 0;

    for (int i = 0; i <= Controls.Count - 1; i++)
    {
        if (Controls[i].GetType().Name == "TextBox")
        {

            hucre = (TextBox)this.Controls[i];
            while (h < 9)
            {
                while (k < 9)
                {
                    hucre.Text = gecici[k, h].ToString();
                    k++;
                    break;
                }
                if (k == 9)
                {
                    h++;
                    k = 0;
                }
                break;
            }


        }
    }
}
else
{
    MessageBox.Show("Sudoku Çözülemedi.","Mesaj");

                        52
nU

            }

       }

        private void sayi_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ((Label)(sender)).DoDragDrop(((Label)(sender)).Image,
DragDropEffects.All);
            }
        }

        private void hucre_DragOver(object sender,
System.Windows.Forms.DragEventArgs e)
        {
            if (e.KeyState == 1)
            {
                e.Effect = DragDropEffects.Copy;
            }
        }

        private void hucre_DragDrop(object sender,
System.Windows.Forms.DragEventArgs e)
        {
            if (e.Data.GetData(DataFormats.Bitmap) == sayi1.Image &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "1";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi2.Image   &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "2";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi3.Image   &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "3";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi4.Image   &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "4";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi5.Image   &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "5";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi6.Image   &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "6";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi7.Image   &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "7";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi8.Image   &
((TextBox)(sender)).ReadOnly == false)

                                    53
nU

            {
                ((TextBox)(sender)).Text = "8";
            }
            else if (e.Data.GetData(DataFormats.Bitmap) == sayi9.Image &
((TextBox)(sender)).ReadOnly == false)
            {
                ((TextBox)(sender)).Text = "9";
            }
        }

        private void MenuSayi1_Click(object sender, EventArgs e)
        {
            SendKeys.Send("1");
        }

        private void MenuSayi2_Click(object sender, EventArgs e)
        {
            SendKeys.Send("2");
        }

        private void MenuSayi3_Click(object sender, EventArgs e)
        {
            SendKeys.Send("3");
        }

        private void MenuSayi4_Click(object sender, EventArgs e)
        {
            SendKeys.Send("4");
        }

        private void MenuSayi5_Click(object sender, EventArgs e)
        {
            SendKeys.Send("5");
        }

        private void MenuSayi6_Click(object sender, EventArgs e)
        {
            SendKeys.Send("6");
        }

        private void MenuSayi7_Click(object sender, EventArgs e)
        {
            SendKeys.Send("7");
        }

        private void MenuSayi8_Click(object sender, EventArgs e)
        {
            SendKeys.Send("8");
        }

        private void MenuSayi9_Click(object sender, EventArgs e)
        {
            SendKeys.Send("9");
        }

    }
}




                                    54
nU

Class Ekranının Kodları

1.    Sudoku_Kontrol Kodları

using System;
using System.Collections.Generic;
using System.Text;

namespace Sudoku
{
    class Sudoku_Kontrol
    {

private bool Satir_Kontrol(int[,] sudoku, int satir, int kontrol)
{
      for (int j = 0; j < 9; j++)
      {
           if (sudoku[satir, j] == kontrol)
           {
                return false;
           }
      }
          return true;
}

private bool Sutun_Kontrol(int[,] sudoku, int sutun, int kontrol)
{
      for (int i = 0; i < 9; i++)
      {
          if (sudoku[i, sutun] == kontrol)
          {
               return false;
          }
      }
          return true;
}

private bool Bolge_Kontrol(int[,] sudoku, int satir, int sutun, int
kontrol)
{

     for (int i = satir - (satir % 3); i < (satir - (satir % 3)) +
3; i++)
     {
          for (int j = sutun - (sutun % 3); j < (sutun - (sutun % 3))
+ 3; j++)
             {
                 if (sudoku[i, j] == kontrol)
                 {
                         return false;
                 }
             }
       }
             return true;
 }



                                    55
nU

public bool Ekleme_Izın(int[,] sudoku, int satir, int sutun, int
kontrol)
{
      if (Sutun_Kontrol(sudoku, sutun, kontrol) && Satir_Kontrol
(sudoku, satir, kontrol) && Bolge_Kontrol(sudoku, satir, sutun,
kontrol))
      {
           return true;
      }
      return false;
}
}
}

2.     Sudoku_Coz Kodları

Ekran Çıktısı

Oyunun Kuralları

1. Sudoku 9*9 kareden oluĢan bir tablodan oluĢur.


2. Sudoku tablosu 3*3‟lük 9 kareye bölünür


3. Sudoku oyununda sütun ve satırlarda her rakam sadece 1 defa kullanılabilir.


4. Sudoku oyununda ayrıca 3*3‟lük kutucuklarda da 1‟den 9‟a kadar olan rakamlardan
sadece biri bulunabilir.


5. Sudoku oyununda amaç boĢ karelere en kısa sürede doğru rakamları koyarak tüm
tabloyu doldurmaktır.


Form Ekranının Anlatılması

Ġlk olarak ComboBox‟tan oyunun zorluk dereceleri seçilir.

1. Seçenek: Oyun Yarat

       ComboBox‟tan “Oyun Yarat” ı seçip, “Yeni Oyun” butonuna tıkladığımızda
       karĢımıza 9*9 luk karelerden oluĢan bildiğimiz sudoku form ekranı boĢ olarak
       gelir. BoĢ olarak gelmesinin sebebi oyunu bizim yaratacak olmamızdandır.




                                           56
nU




Bu boĢ kutucuklara tıkladığımızda 1-9 arası sayılar çıkar istediğimiz yerlere
yerleĢtirebiliriz.




Sayıları yerleĢtirirken kural gereği satır ve sütunlarda bunun yanında 3*3 lük
karelerde aynı rakam tekrarı yapılmayacaktır. Kod da bunun kontrolü sağlanmıĢtır


      Sudoku_Kontrol.cs class dosyasıyla kontrol yapılmıĢtır.




                                    57
nU

2. Seçenek: Kolay

  ComboBox‟tan “Kolay” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk
  karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak kolay seviyede
  gelir.




3. Seçenek: Normal

  ComboBox‟tan “Normal” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9
  luk karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak normal
  seviyede gelir.




4. Seçenek: Zor

  ComboBox‟tan “Zor” u seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk
  karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak zor seviyede
  gelir.




                                        58
nU

Çöz Butonu

“Çöz” butonuna tıklandığında; Sudoku Çözüldü uyarısı gelir.




“Tamam”, butonuna tıkladığımızda; sudoku çözülür.




     Sudokunun çözülmesi Sudoku_Coz .cs class dosyasıyla sağlanmıĢtır.



Yükle Butonu

Yükle butonuna tıkladığımızda herhangi bir yerdeki uzantısı .sdk olan dosyaları
yükleyebiliriz.

     Nedeni sebebi filter özelliğinde sadece “ *.sdk|*.sdk “ uzantısının olmasıdır.

Dosya yükleyemediğimizde; aĢağıdaki uyarıyı verir.




                                           59
nU


Kaydet Butonu

Kaydet butonuna tıkladığımızda dosyayı istediğimiz yere kaydeder. Kaydedilemezse;
aĢağıdaki uyarıyı verir.




                    break;
                           case "Kolay":
                        yukle("oyunlar/k" + oyun + ".sdk");
                        break;
                    case "Normal":
                        yukle("oyunlar/n" + oyun + ".sdk");
                        break;
                    case "Zor":
                        yukle("oyunlar/z" + oyun + ".sdk");
                        break;




Kodda yer alan oyunlar/k, oyunlar/n, oyunlar/z programın exe dosyasının bulunduğu
yerdeki oyunlar klasöründen alınmıĢtır. Bu dosyaların uzantısı “.sdk ” (uzantı “ .txt ” de
olabilirdi)diye kaydedilmiĢtir. Bu dosyaların içinde 9*9 Ģeklinde oyunun zorluk derecesine
göre matrisler bulunmaktadır.




                                           60
nU




Örnek 10: TextBox‟a girilen değeri “Sırala” butonuna bastığımızda a-z sırasına göre
ListBox‟a listeler. Bunun yanında birden fazla değer varsa onları da sıraya sokar.

Kodlar

using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace dizidenemeleri
{
    public partial class Form7 : Form
    {
        public Form7()
        {
            InitializeComponent();
        }

           private void button1_Click(object sender, EventArgs e)
           {
               string st="";
               st = textBox1.Text.ToString();
               char[] harfler = new char[st.Length];

                for (int i = 0; i<st.Length ; i++)
                {
                    harfler[i] = st[i];
                }
                Array.Sort(harfler );
                foreach (char item in harfler)
                {
                    listBox1.Items.Add(item);
                }
           }
     }
 }




                                            61
nU

Ekran Çıktısı




Örnek 11: Textbox‟a girilen sayıya kadar olan sayıları ListBox‟a dik üçgen olarak ekler.

Kodlar

using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace dizidenemeleri
{
    public partial class Form6 : Form
    {
        public Form6()
        {
            InitializeComponent();
        }

           private void button1_Click(object sender, EventArgs e)
           {
               int i = 0;
               int j = 0;
               string gec = null;
               gec = "";
               listBox1.Items.Clear();
               for(i=1;i<Convert.ToInt16(textBox1.Text);i++)
               {
                   for(j=1;j<=i;j++)
                   {


                                           62
nU

                    gec=gec+""+j;
                    }
                listBox1.Items.Add(gec);
                gec="";
                }

                gec="";
                listBox2.Items.Clear();
                for(i=1;i<Convert.ToInt16(textBox1.Text);i++)
                {
                     for(j=1;j<=i;j++)
                     {
                     gec=gec+""+j;
                     }
                  listBox2.Items.Add(gec);
                     gec="";

                }
         }
    }
}

Ekran Çıktısı




                                     63
nU

Örnek 12: Klavyeden girilen n elemanlı bir a dizisinin elemanlarının karelerini alarak b
dizisini; kareköklerini alarak c dizisini oluĢturup bu yeni 2 dizinin skaler çarpımını bulan
programdır.

Kodlar

using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace DiziDenemeleri2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

           private void button1_Click(object sender, EventArgs e)
           {
               int sayi1, a, b;
               sayi1 = int.Parse(textBox1.Text);
               int[] dizi1 = new int[sayi1];
               double []dizi2= new double[sayi1];
               double[] dizi3 = new double[sayi1];
               double[] dizi4 = new double[sayi1];

                 Random rasgele = new Random();
                 for (a = 0; a < sayi1; a++)
                 {
                     dizi1[a] = rasgele.Next(1, 100);
                 }
                 for (a = 0; a < sayi1; a++)
                     listBox1.Items.Add(dizi1[a]);

                 for (b = 0; b < sayi1; b++)
                 {
                     dizi2[b] = dizi1[b] * dizi1[b];
                     listBox2.Items.Add(dizi2[b]);

                      dizi3[b] = Math.Sqrt(dizi1[b]);
                      listBox3.Items.Add(dizi3[b]);

                      dizi4[b] = dizi2[b] * dizi2[b];
                      listBox4.Items.Add(dizi4[b]);


                 }
           }}}

                                             64
nU



Ekran Çıktısı




                65
nU




Örnek 12: Klavyeden küçük harflerle girilen bir cümledeki sesli harflerin sayısını ve
cümledeki yerlerini bulan program.



Kodlar

using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace DiziDenemeleri2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
        string[] sesli = { "a", "e", "ı", "i", "o", "ö", "u", "ü" };
            string cumle;
            cumle = textBox1.Text.ToLower();
            int sayac = 0, zemin = 0;
            for (int a = 0; a < sesli.Length; a++)
            {
                for (int b = 0; b < sesli.Length; b++)
                {
                    if (sesli[a] == cumle.Substring(b, 1))
                    {
                        sayac++;
                        zemin = b + 1;
                        //sesli harfin bulndğu yeri belirtiyoruz.
                        listBox1.Items.Add(cumle[b] + "--cumlenin" +
zemin + ".harfi");

                         }
                    }
            }
            label2.Text = sayac.ToString() + " " + "sesli harf
bulunmaktadır.";
        }
    }
}




                                         66
nU



Ekran Çıktısı




                67
nU



Örnek 13: Dinamik dizi örneği 2. Bu örnekte kullanıcıdan kaç boyutlu dizi oluĢturmak
istediği    sorulmaktadır.   Ardından   kullanıcıdan   bu   dizinin   elemanlarını   girmelerini
istemektedir. Elemanları ListBox‟a eklemektedir.

Kodlar

using      System;
using      System.Collections.Generic;
using      System.ComponentModel;
using      System.Data;
using      System.Drawing;
using      System.Linq;
using      System.Text;
using      System.Windows.Forms;

namespace DiziDenemeleri2
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        string[] dizi = null;
        private void button1_Click(object sender, EventArgs e)
        {
            int dBoyut;
            if (!Int32.TryParse(textBox1.Text, out dBoyut))
            {
                MessageBox.Show("Girilen Değer Sayısal Olmalı.");
                return;
            }
            dizi = new string[dBoyut];
            MessageBox.Show(String.Format("{0} elemanlı bir dizi
oluşturuldu.", dBoyut));
        }
        int sIndex = 0;

        private void button2_Click(object sender, EventArgs e)
        {
            if (dizi == null || sIndex == dizi.Length)
            {
                MessageBox.Show("Dizi Boyutu Aşıldı veya dizi
oluşturulmadı.");
                return;
            }
            dizi[sIndex++] = textBox2.Text;
            //dizinin tum elemanlarını listboxa sıfırdan atalım.
            listBox1.Items.Clear();

                  foreach (string eleman in dizi)
                  {
                      string nEleman = eleman;

                                              68
nU

                       if (eleman == null)
                           nEleman = "Değer Atanmamış";
                       listBox1.Items.Add(nEleman);
                 }
           }

     }
}


Ekran Çıktısı

Dizi boyutunu girip, “Dizi OluĢtur” butonuna tıklıyoruz. Böylece “5 elemanlı bir dizi
oluĢturuldu” iletisi geliyor.




                                         “Tamam” butonuna tıkladıktan sonra;




                                         Değer      kısmına        gelip,   5      boyutlu
                                         oluĢturduğumuz dizinin elemanlarını giriyoruz.
                                         Elemanları girdikten sonra “Diziye Değer At”
                                         butonuna    tıklıyoruz.      Böylece    girdiğimiz
                                         elemanlar ListBox‟a ekleniyor.




                                         69
nU

Örnek 14: TextBox‟a girilen sayıları 200, 100, 50, 20, 10, 5, 1‟lik banknotlara bölüp
listBox‟da gösteren uygulama

Kodlar

using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace DiziDenemeleri2
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int[] banknot = {200, 100, 50, 20, 10, 5, 1 };
            int para, adet, i;
            listBox1.Items.Clear();
            para = int.Parse(textBox1.Text);
            for (i = 0; i <= 6; i++)
            {
                adet = para / banknot[i];
                listBox1.Items.Add(adet.ToString() + "adet" +
Convert.ToString(banknot[i] + "YTL"));
                para %= banknot[i];
            }
        }
    }
}
Ekran Çıktısı




                                         70
nU




Örnek 15: TextBox 1 ve TextBox2 „ye girilen elemanları Label‟lara ekliyip “KesiĢim”
butonuna basıldığında 2 kümenin ortak elemanlarını veren program.

Kodlar

using System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form12 : Form
    {
        int[] a = new int[5];
        int[] b = new int[5];
        int i = 0, j = 0;

           public Form12()
           {
               InitializeComponent();
           }

           private void button1_Click(object sender, EventArgs e)
           {
               a[i] = Convert.ToInt16(textBox1.Text);
               label1.Text = label1.Text + a[i].ToString()+" ";
               i++;
               textBox1.Text = "";
               textBox1.Focus();
           }

           private void button2_Click(object sender, EventArgs e)
           {

                b[j] = Convert.ToInt16(textBox2.Text);
                label2.Text = label2.Text + b[j].ToString()+ " ";
                j++;
                textBox2.Text = "";
                textBox2.Focus();
           }

           private void button3_Click(object sender, EventArgs e)
           {
               for (int x = 0; x <= a.Length - 1; x++)
                   for (int y = 0; y < b.Length; y++)
                       if (a[x] == b[y])
                       {
                    label3.Text = label3.Text + a[x].ToString() + " " ;

                                         71
nU


                  break;
                }}}}
Ekran Çıktısı




                           72
nU




                           C#’ ta CLASS YAPISI

C#’ta Class Yapısı
Class‟ı bir aile gibi düĢünebilirsiniz. Ailenin bireylerin class değiĢkenleri olarak, aile
fertlerinin çalıĢma hayatlarında kazandıkları mal varlıklarını o class‟ın fonksiyonu olarak
gerçekleĢtirdikleri sosyal faaliyetleri de o class‟ın procedür‟ü olarak algılamak doğru
olacaktır. Örnek olarak:


BÜYÜKBABANIN ADI SOYADI: TAHĠR SARIKAYA
BABANIN ADI SOYADI: ĠSMAĠL SARIKAYA
ÇOCUĞUN ADI SOYADI: HAKAN SARIKAYA


Yukarıdaki fertlerden oluĢan class‟ın isminin SARIKAYA class‟ı olduğunu düĢünelim. BaĢka
bir soyadına sahip olan sülalenin (class‟ın) çocuğu tanıyabilmeleri için kullanacakları
mantık SARIKAYA‟ dan TAHĠR OĞLU, ĠSMAĠL OĞLU HAKAN olacaktır. ĠĢte c# bunu
SARIKAYA. TAHĠR. ĠSMAĠL. HAKAN olarak kullanır. (oğlu kelimesi (.) ile ifade edilmiĢtir.)
Programın içinde noktaya (.) basılınca açıklayıcı seçeneklerin gelmesi tamamen bu
yapının bir ürünüdür. C#‟ın içerisinde o kadar çok class tanımlanmıĢtır ki birçok
uygulamada class tanımlamaya gerek kalmamaktadır. Kodlamada kullandığımız bütün
fonksiyonların bir class‟ın üyesi olduğunu asla unutmayınız. Bir class‟ın içerisinde
değiĢken, fonksiyon, procedur veya baĢka bir class bulunabilir. Bu yapıların tanımlanma
Ģekilleri önem arz eder. Çünkü bu class‟taki bir değiĢkeni veya bir procedur‟ü baĢka bir
class kullanacak mı yoksa bu class‟ımı kullanacak veya miras hakları olacak mı olmayacak
mı bunlar iyice etüt edilmeli ona göre tanımlanmalıdır.




                                            73
nU

Sınıflara örnek olarak random, pen, color, button, radioButton vb. örnek verebiliriz.Bu
sınıflar c#.net kütüphanesinde bulunan hazır sınıflardır.Bu sınıflar gibi bizde kendimize
özel sınıflar oluĢturabiliriz.



     : Metod.

     : Özellik.

     : Olay.




Projeye class eklemek için;


Project/ Add Class/ Class ve eklenir. Ekrana aĢağıdaki kodlar gelir.


using    System;
using    System.Collections.Generic;
using    System.Linq;
using    System.Text;

namespace ClassDenemeleri //Projenizin ismidir
{
    class Class1 //class'ınızın ismini değiştirebilrisiniz
    {
    }
}



Örnek: Ġlk class örneğini yapacağız.


Projemize yeniden bir class ekleyiniz. (Project/ Add Class/ Class yoluyla). Class‟ın using
kısmına using       System.Windows.Forms; ekleyiniz (MessagaBox.Show‟un çalıĢması
için.)


Class Kodları


namespace ClassDenemeleri
{
    class ilk
    {
        public void MesajVer()
        {
            MessageBox.Show("Ġlk class uygulaması");
        }
        public double usVer(double taban,double us)
        {
            return Math.Pow(taban, us);

                                            74
nU

          }

      }
}


Form Kodları


MesajVer() Fonksiyonu için;


    ilk yeni = new ilk();
    private void button1_Click(object sender, EventArgs e)
    {
         yeni.MesajVer();
    }
usVer()Fonksiyonu için;


ilk yeni = new ilk();
private void button1_Click(object sender, EventArgs e)
{
       MessageBox.Show(yeni.usVer(2,5).ToString());
}


Ekran Çıktısı




                                    75
nU

Küçük Bilgiler


Verilen bilgiler ilerleyen konularda ayrıntılı olarak iĢlenecektir.


1-     Class tanımlama yöntemleri




Amacımız ogr. dan sonra ad ve soyadın görünüp onlarla iĢlem yapabilmekti.


2-     Static Classlar




Burada örneklem yazmadan no ve cinsiyet görünür.


 3-    Numaralandırıcı Tanımlama
Sizemode mantığı yalnızca 2 değer alabilir.




Burada örneklem yazmadan no ve cinsiyet görünür.


                                               76
nU



Amacımız cinsiyet belirlerken cinsiyete değer atayabilmekti.

4-    Constracter
Sınıftan nesne üretilince otomatik olarak çalıĢacak olan metottur.


         Consracter’lar sınıfla aynı ismi alırlar ve otomatik çalışırlar.




5-    Kullanıcının belli aralıklarda değer girmesini sağlamak


           a. Get: Kullanıcı değerleri okuyabilir.

           b. Set: Kullanıcı değerleri değiĢtirebilir.

Örnek:


public byte vize
{
        get
        {
             return vize_notu;
        }
        set
        {
             if(value>=0 && value<=100)
            vize_notu= value;

        }
}
public byte final
{
        get
        {
            return final_notu;
        }
        set
        {
            if (value >= 0 && value <= 100)
                final_notu = value;

          }
}




                                                77
nU

6-       This kullanımı


     public ogrenci()
     {// metod, 2.const., vize vefinali otomaik olarak 50 girer.
              this.vize_notu = 50;
              this.final_notu = 50;
     }


7-       İşlem Yaptıran Veri Türleri


public double ortalama()
{
     return vize* 0.4 + final* 0.6;
}



Örnek:


public class aile //class'ınızın ismini değiştirebilrisiniz
{

         public static string adi_soyadi;
         //Form1 classından çağırılabilir
         private static string adresi; //Form1 class'ında çağırılmaz
         public int yasi;
         bool medeni_hal;
         public static string meslegi;
         long maasi;
         public const int sabit = 1000;

         public static long maashesapla(int katsayi, int kidem)
         {
             return sabit * katsayi * kidem;
         }
             public aile()
             {
                    //
                    //
             }
}




Örnek için yandaki tasarımı oluĢturunuz.    Form1 çalıĢtırıldığında;




                                           78
nU




Kıdem=5 Katsayı=3 girildiğinde MaaĢı=15000 olur.


Örnek: Hesapla butonunun click olayına aĢağıdaki kodu ekleyin.


private void button1_Click(object sender, EventArgs e)
{
            aile.adi_soyadi = textBox1.Text;
            aile.adresi = textBox2.Text;
            aile.yasi = Convert.ToInt32(textBox3.Text);
            aile.medeni_hal = checkBox1.Checked;
            aile.meslegi = comboBox1.Text;
            aile.maasi =
aile.maashesapla(Convert.ToInt32(textBox5.Text),
Convert.ToInt32(textBox6.Text));
            textBox4.Text = aile.maasi.ToString();
}


Örneği inceleyecek olursanız; aile isminde bir class oluĢturulmuĢtur. Daha sonra bu
class‟a ait özellikler ve “maashesapla” adında bir fonksiyon tanımlandı. Bu özellikler
“public static” ile tanımlandığından Form1!in kod yordamından rahatlıkla çağırılabilir.
Butona   tıklandığında    textBox‟larki   tüm   değerler    aile   class‟ının   gerekli   değiĢken
değerlerine   aktarılıp   “maashesapla”    fonksiyonu      sayesinde    “kidem”     ve    “katsayi”
parametreleri kullanılarak “aile.maasi” hesaplanmıĢtır. Sonra da bu değer gerekli
textBox4 sayesinde kullanıcıya gönderilmiĢtir.




                                                79
nU

Bu örnekte kod yordamlarının herhangi bir tanesinde “aile.” yazdıktan sonra public static
ile tanımladığımız tüm özelliklerin kolaylık olsun diye listelendiğidir, gerekli olanı
seçebilirsiz.


Class‟ların     içerisindeki   değiĢkenler,   fonksiyonlar,   procedure‟lerin   hepsi    public   ile
tanımlanmazlar (Genellikle public veya private kullanılır.). Çünkü public‟le tanımlananlara
tüm classlar ulaĢabilir.


ġimdi projenize herhangi bir isimde class ekliyoruz.


public class nurdan
    {
        private int z = 5;
        private int hesapla(int kidem)
        {
            return kidem * z;
        }
        public nurdan()
        {
            //
            //
            //
        } }
Button1 „in click olayına aĢağıdaki kodlar yazılır.


private void button1_Click(object sender, EventArgs e)
{
            int sonuc;
            nurdan yeni = new nurdan();
            sonuc = yeni.hesapla(100);
            Form1.ActiveForm.Text = sonuc.ToString();
}
Dikkat edecek olursanız hesapla function‟ı class‟ın içersinde public ile tanımlandığı için
formdan “hesapla” function‟una ulaĢılabilir. Yalnız ulaĢma Ģekli ancak “nurdan” class‟ına
yavru bir üye ile olabilir. Bu pojede yavru üye “yeni” olarak tanımlanmıĢtır. “yeni” yazıp
“.” ‟ya basarsanız “hesapla” function‟u ekranda gözükecektir.


Ġkinci önemli hususta “z” nin private tanımlanmasının bizim için Ģimdilik önem arz
etmemesidir, çünkü “z” ye direkt olarak eriĢim söz konusu değildir (hesapla function
kullanılarak dolaylı ulaĢım sağlanmıĢtır).


Bu örnekte “nurdan” yazıp “.” Ya basarsanız, hesapla function‟una ulaĢamazsınız. Eğer
ulaĢmak isterseniz hesapla procedur‟ünü static olarak tanımlamalısınız. Kodu aĢağıdaki
gibi değiĢtirin.



                                                 80
nU

Class Kodları


public class nurdan
{
        private static int z = 5;
        public static int hesapla(int kidem)
        {
            return kidem * z;
        }
        public nurdan()
        {
            //
            //
            //
        }
}


Form1 Kodları


private void button1_Click(object sender, EventArgs e)
{
            int sonuc;
            sonuc = nurdan.hesapla(100);
            Form1.ActiveForm.Text = sonuc.ToString();//500 yazar.
}


Burada artık “hesapla” procedur‟üne yavru üyeyle ulaĢmak mümkün değildir. Yani;


nurdan yeni = new nurdan();
yeni // hesapla proceduru gözükmez.çnkü o nurdan class'ının static
üyesi olup sadece nurdan class'ı tarafından kullanılır.




                                         81
nU

Protected Obje Tanımlamak

Bazen bir class‟ın içersindeki objelerin free olarak her class tarafından çağırılmasını
istemeyebilir,   sadece    sizin   izin   verdiğiniz   class‟lar   tarafından   kullanılmasını
sağlayabilirsiniz. Bu tip durumda objeyi (değiĢkeni, procedürü, function‟u) protected ile
tanımlamanız ve o objeyi çağıracak olan class‟a da referans vermeniz gerekir. ĠĢte örnek
projenize herhangi bir isimli class‟ı ekledikten sonra aĢağıdaki kodu ekleyiniz.


Class Kodları


public class nurdan1
{
     protected string ad = "Nurdan Sarıkaya";
     //sadece belirtilen class'lar kullanabilsin.

}
public class gazi : nurdan1
//nurdan1   classında    protected                tanımlanan         objeleri        kullan,
public'lerde kullanalabilir.
{
    public string adlar()
    {
       return ad;
    }
}



Form Kodları


private void button1_Click(object sender, EventArgs e)
{
            string sonuc;
            gazi yeni = new gazi();
            sonuc = yeni.adlar(); //gazi classındaki adlar() metodu
çağırılyor.
            Form2.ActiveForm.Text = sonuc;
}


Artık Form‟un üzerindeki koda tıklarsanız Formun baĢlığında “Nurdan Sarıkaya” yazısını
göreceksiniz.
       Protected tanımlama struct yapısı içerisinde asla yapılamaz. Porgramınız çalıĢmaz.




                                             82
nU



Ekran Çıktısı
Butona tıkladıktan önce                         Butona tıkladıktan sonra




Yukarıda görüldüğü üzere butona tıkladıktan sonra Form2 „nin text‟i “Nurdan Sarıkaya”
olarak değiĢmiĢtir.




                                         83
nU

Virtual ve Override Metods Tanımlamak

Bazen bir class‟ta tanımlamıĢ olduğunuz metod‟a baĢka bir class‟tan eklenti yaparak
ulaĢmak isterseniz kullanabileceğiniz metodlardır. Burada Virtual tanımladığınız metod
protected olamaz, Public olmalıdır.


Örnek:


Class Kodları


public class nurdan1
{
        public virtual string meslek(string mes)
        {
            return mes;
        }
        public class gazi : nurdan1
        //nurdan1 classındaki virtual'ı kullanblir.
        {
            public override string meslek(string ulas)
            {
                return ulas + "Mühendisi";
                // parametreyle eklenti olarak Mühendisi döndürür

                }
          }
}

Form Kodları


private void button2_Click(object sender, EventArgs e)
        {
            string sonuc;
            gazi x = new gazi();
            sonuc = x.meslek("Ġnş.");
            //gazi class'ındaki meslek metodu çağırılıyor.
            Form2.ActiveForm.Text = sonuc; //Ġnş. Mühendisi yazar.
          }




                                         84
nU

Base Class Constructors

Bazı durumlarda bir değiĢkeni bir class‟ta tanımlayabilir (protected ile) diğer class‟larında
kullanmasını    sağlayabilirsiniz.   Fakat   her   kullanımda   gene   eski   değerini   almasını
isteyebilirsiniz. ĠĢte bu durumlar için kullanabileceğiniz bir yöntem örneği inceleyiniz.


Projeniz “prestige” isminde bir class dahil ediniz ve o class‟a aĢağıdaki kodu ekleyiniz.
Class‟ın using kısmına using System.Windows.Forms; ekleyiniz.


           Programa        “using            System.Windows.Forms;”               eklemezseniz;
           “MessageBox.Show()” metodu çalıĢmayacaktır.


Class Kodları


namespace ClassDenemeleri
{
public class prestige
{
       protected string ad = "Nurdan Sarıkaya";
      //sadece istediğim classlar kullansın.
}
       public class ev : prestige
       {
               public void metod(string adlar)
               {
               base.ad = adlar;
               MessageBox.Show(base.ad, "Başlık");
               }


           }
           public class sonuc : prestige
           {
                public string son()
                {
                    return base.ad; //ad değişkeninin değerini döndür
                }
           }




                                               85
nU



Form Kodları


private void button1_Click(object sender, EventArgs e)
{
      string deger;
      ev yeni = new ev();
      sonuc bul = new sonuc();
      yeni.metod("Hakan Sarıkaya");
      deger = bul.son();
      Form3.ActiveForm.Text = deger;
}


Ekran Çıktısı




                                          Bu   Ģekilde     tek    bir   değiĢken
                                          tanımlayarak           her     class‟ta
                                          kullanabiliriz          (performansta
                                          artar).




                                 86
nU

Class‟ların    içerisindeki   değiĢkenler,    fonksiyonlar,     procedure‟lerin      hepsi     public    ile
tanımlanmazlar (genellikle public veya private kullanılır). Çünkü public‟le tanımlananlara
tüm class‟larca ulaĢılabilir. Tanımlama seçenekleri ve anlamları aĢağıda verilmiĢtir.



              Tanımlama Şekli                                 Çağrılma Seçenekleri



Public                                         Kısıtlaması yok her class‟tan her fonksiyon ve
                                               procedure çağırabilir.



Private                                        Sadece oluĢturulduğu class‟taki fonksiyon veya
                                               procedure‟lerden çağırılabilir.



Protected                                      Sadece     oluĢturulduğu       class‟tan      ve     onun
                                               referans       gösterildiği   diğer     class‟lara       ait
                                               fonksiyon ve procedure‟lerden çağırılabilir.



İnternal                                       Bu class‟ a ait assembly tarafından çağırılabilir.



Protected İnternal                             Protected ve Ġnternal‟ın ikisinin yaptığını yapar.




Örnek: Project / Add Class/ Class / … .cs yoluyla projemize class ekliyoruz.
MessageBox.Show()             kullanabilmek     için    “using        System.Windows.Forms;”
kodumuza ekliyoruz.


Class Kodları


namespace ClassDenemeleri
{
    class mesajlar
    {
        public void mesaj1()
        {
            MessageBox.Show("merhaba1");
        }
        public void mesaj2()
        {
            MessageBox.Show("Merhaba2");
        }
    }

                                                 87
nU

}


Form Kodları


private void button1_Click(object sender, EventArgs e)
{
            mesajlar msj = new mesajlar();
            msj.mesaj1();
}
private void button2_Click(object sender, EventArgs e)
{
            mesajlar msj = new mesajlar();
            msj.mesaj2();
}
Ekran Çıktısı




Aynı örneğin Form ekranında yapılışı;


Form Kodları


private void button1_Click(object sender, EventArgs e)
{
         mesajlar msj = new mesajlar();
         msj.mesaj1();
}

private void button2_Click(object sender, EventArgs e)
{
         mesajlar msj = new mesajlar();
         msj.mesaj2();
}
}}
class mesajlar
{
        public void mesaj1()

                                        88
nU

         {
             MessageBox.Show("Merhaba 1");
         }
         public void mesaj2()
         {
             MessageBox.Show("Merhb 2");
         }
}



    Class kodları namespace kodlarının dıĢına yazılır.




                                          89
nU

BitArray Sınıfı
Boolean veya byte türünde değerleri barındıran koleksiyondur. Mantıksal iĢlemler için
kullanılabilir.(And,Or gibi)Bu sınıfı kullanabilmek için using System.Collections kod satırını
eklemeniz gerekir.


Kodlar


public partial class bitarray : Form
    {
        public bitarray()
        {
            InitializeComponent();
        }
        bool[]a= {true,false,false,true,false,true};
        private void button1_Click(object sender, EventArgs e)
        {
            BitArray aGiris = new BitArray(a);
            foreach (bool i in aGiris)
            {
                listBox1.Items.Add(i);
            }
        }
    }


Ekran Çıktısı




                                             90
nU

Hashtable Sınıfı
Veriler key-value(anahtar-değer) Ģeklinde tutulmaktadır. Veri türü object yani tüm veri
türlerini    kullanabilirsiniz.   Key   değiĢtirilemez   ve   boĢ   değer   içeremez    ama   value
değiĢtirilebilir ve boĢ değer içerebilir. Bu sınıfı kullanabilmek için using System.Collections
kod satırını eklemeniz gerekir.


Add metodu: Key ve value elemanlarını ekleme iĢlemi için kullanılır.
Kullanımı: Add(key,value)


ContainsKey metodu: Belirtilen key değeri tanımlanan Hashtable sınıfı içinde var ise true
yok ise false değerini döndürür.
Kullanımı: ContainsKey(key)


ContainsValue metodu: Belirtilen value değeri tanımlanan Hashtable sınıfı içinde var ise
true yok ise false değerini döndürür.
Kullanımı: ContainsKey(value)


Örnek:


Kodlar


using       System;
using       System.Collections.Generic;
using       System.ComponentModel;
using       System.Data;
using       System.Drawing;
using       System.Linq;
using       System.Text;
using       System.Windows.Forms;
using       System.Collections;

namespace ClassDenemeleri
{
    public partial class Form5 : Form
    {
        public Form5()
        {
            InitializeComponent();
        }
        Hashtable htablo = new Hashtable();

              private void button1_Click(object sender, EventArgs e)
              {
                  htablo.Add(textBox1.Text, textBox2.Text);

              }


                                                 91
nU

        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            foreach(DictionaryEntry i in htablo)
            {
                listBox1.Items.Add("Key: " + i.Key + "value: " +
i.Value);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            label3.Text =
htablo.ContainsKey(textBox3.Text).ToString();
        }

     }
}

Ekran Çıktısı




         Anahtarı (key) belirtilen bir elemanın değerini (value) çağırmak için htablo[key]
         komutu kullanılır. Örnek ile daha iyi anlaĢılacaktır.


Örnek: Aynı kodun Kontrol butonu click olayı değiĢtirilmiĢtir.


Kodlar


using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;

                                             92
nU

using System.Windows.Forms;
using System.Collections;

namespace ClassDenemeleri
{
    public partial class Form5 : Form
    {
        public Form5()
        {
            InitializeComponent();
        }
        Hashtable htablo = new Hashtable();

         private void button1_Click(object sender, EventArgs e)
         {
             htablo.Add(textBox1.Text, textBox2.Text);

         }

        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            foreach(DictionaryEntry i in htablo)
            {
                listBox1.Items.Add("Key: " + i.Key + "value: " +
i.Value);
            }
        }

         private void button3_Click(object sender, EventArgs e)
         {
             label3.Text = htablo[textBox3.Text].ToString();
         }

    }
}
Ekran Çıktısı




                                  93
nU



SortedList Sınıfı


Veriler key-value(anahtar-değer)          Ģeklinde tutulmaktadır. Hashtable‟dan farkı eklenen
verileri    alfabetik   olarak sıralı bir Ģekilde    tutmasıdır. Veri türü object yani tüm veri
türlerini    kullanabilirsiniz.   Key   değiĢtirilemez   ve   boĢ   değer   içeremez    ama   value
değiĢtirilebilir ve boĢ değer içerebilir. Bu sınıfı kullanabilmek için using System.Collections
kod satırını eklemeniz gerekir.


Add metodu: Key ve value elemanlarını ekleme iĢlemi için kullanılır.
Kullanımı: Add(key,value)


ContainsKey metodu: Belirtilen key değeri tanımlanan SortedList sınıfı içinde var ise true
yok ise false değerini döndürür.
Kullanımı: ContainsKey(key)


ContainsValue metodu: Belirtilen value değeri tanımlanan SortedList sınıfı içinde var ise
true yok ise false değerini döndürür.
Kullanımı: ContainsKey(value)


Örnek:
Kodlar


using       System;
using       System.Collections.Generic;
using       System.ComponentModel;
using       System.Data;
using       System.Drawing;
using       System.Linq;
using       System.Text;
using       System.Windows.Forms;
using       System.Collections;

namespace ClassDenemeleri
{
    public partial class Form5 : Form
    {
        public Form5()
        {
            InitializeComponent();
        }
        SortedList sListe = new SortedList();

              private void button1_Click(object sender, EventArgs e)
              {
                 sListe.Add(textBox1.Text, textBox2.Text);

                                                    94
nU


         }

        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            foreach(DictionaryEntry i in sListe)
            {
                listBox1.Items.Add("Key: " + i.Key + "value: " +
i.Value);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            label3.Text =
sListe.ContainsValue(textBox3.Text).ToString();
        }

    }
}


Ekran Çıktısı




                                 95
nU

Stack Sınıfı
Son giren ilk çıkar prensibiyle çalıĢır. Varsayılan olarak 10 elemanlıdır. Veri türü object
yani    tüm    veri   türlerini   kullanabilirsiniz.   Bu   sınıfı   kullana   bilmek için   using
System.Collections kod satırını eklemeniz gerekir.


Push metodu: Kolkeksiyona eleman eklemek için kullanılır.

Kullanımı: Push(eleman)

Pop Özelliği: Son giren elemanı vererek kollleksiyondan siler.

Peek Özelliği: Son giren elemanı verir. Kollleksiyondan silmez.

Clear Özelliği: Kolleksiyonun temizlenmesini sağlar.

Count Özelliği: Son Kolleksiyonun eleman sayısını verir.



Örnek:


Kodlar


using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;
using    System.Collections;

namespace ClassDenemeleri
{
    public partial class Form6 : Form
    {
        public Form6()
        {
            InitializeComponent();
        }
        Stack s = new Stack();
        private void button1_Click(object sender, EventArgs e)
        {
            s.Push(textBox1.Text);
        }

           private void button2_Click(object sender, EventArgs e)
           {
               listBox1.Items.Clear();
               foreach(object i in s)
               {
                   listBox1.Items.Add(i);

                                                96
nU

                }
         }

         private void button3_Click(object sender, EventArgs e)
         {
             label1.Text=s.Pop().ToString();
         }

         private void button4_Click(object sender, EventArgs e)
         {
             label1.Text = s.Peek().ToString();
         }
    }
}


Ekran Çıktısı




                                  97
nU

Queue Sınıfı


Ġlk giren ilk çıkar prensibiyle çalıĢır. Varsayılan olarak 32 elemanlıdır.Veri türü object yani
tüm veri türlerini kullanabilirsiniz. Bu sınıfı kullanabilmek için using System.Collections
kod satırını eklemeniz gerekir.


Enqueue metodu: Kolkeksiyona eleman eklemek için kullanılır.

Kullanımı: Push(eleman)

Dequeue Özelliği: Ġlk giren elemanı vererek kollleksiyondan siler.

Peek Özelliği: Ġlk giren elemanı verir. Kolleksiyondan silmez.

Clear Özelliği: Kolleksiyonun temizlenmesini sağlar.

Count Özelliği: Son Kolleksiyonun eleman sayısını verir.



Örnek:



Kodlar


using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;
using    System.Collections;

namespace ClassDenemeleri
{
    public partial class Form6 : Form
    {
        public Form7()
        {
            InitializeComponent();
        }
        Queue q = new Queue();
        private void button1_Click(object sender, EventArgs e)
        {
            q.Enqueue(textBox1.Text);
        }

           private void button2_Click(object sender, EventArgs e)
           {
               listBox1.Items.Clear();
               foreach(object i in q)

                                             98
nU

                {
                    listBox1.Items.Add(i);
                }
         }

         private void button3_Click(object sender, EventArgs e)
         {
             label1.Text=q.Dequeue().ToString();
         }

         private void button4_Click(object sender, EventArgs e)
         {
             label1.Text = q.Peek().ToString();
         }
    }
}




Ekran Çıktısı




                                     99
nU

Class İçindeki Set ve Get Deyimleri
Set değeri almak, Get göndermek için kullanılır. Alınan değer value ile alınıyor, return ile
gönderiliyor.


Örnek: Kelimeyi alıp tekrar bize gönderen basit bir class oluĢturalım.


using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Linq;
using   System.Text;
using   System.Windows.Forms;

namespace ClassDenemeleri3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

          private void button1_Click(object sender, EventArgs e)
          {
              kelimeOkuYaz s = new kelimeOkuYaz();
              s.oku = textBox1.Text;
              label1.Text = s.yaz();
          }
    }
}
class kelimeOkuYaz
{
    private string kelime;
    public string oku
    {
        set { kelime = value; }
        get { return kelime; }
    }
    public string yaz()
    {
        return kelime;
    }
}




                                           100
nU

Ekran Çıktısı




Kodlar


Kelime alıp gönderme iĢlemini fonksiyon kullanarak yapabiliriz.


class kelimeOkuYaz
{
    private string kelime;
    public string oku
    {
        set { kelime = value; }
        get { return kelime; }
    }
    private string araislem()
    {
        string s;
        s = kelime;
        return s;
    }
    public string yaz()
    {
        return araislem();
    }
}




                                          101
nU

Örnek: Get ve Set deyimlerini kullanarak iki kelimeyi okuyup bunları birleĢtiren metodu
sınıf içinde oluĢturalım.


Kodlar


using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Linq;
using   System.Text;
using   System.Windows.Forms;

namespace ClassDenemeleri3
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

          private void button1_Click(object sender, EventArgs e)
          {
              sinif s = new sinif();
              s.adyaz = textBox1.Text;
              s.soyadyaz = textBox2.Text;
              label1.Text = s.birlestir();
          }
    }
}
class sinif
{
    private string ad;
    public string adyaz
    {
        set { ad = value; }
        get { return ad; }
    }
    private string soyad;
    public string soyadyaz
    {
        set { soyad = value; }
        get { return soyad; }
    }
    private string birles()
    {
        string a, b, c;
        a = ad;
        b = soyad;
        c = a + " " + b;
        return c;
    }
    public string birlestir()
    {
        return birles();
    }
}


                                         102
nU

Ekran Çıktısı




Örnek:


Class Kodları


using    System;
using    System.Collections.Generic;
using    System.Text;
using    System.Windows.Forms;

namespace sinif
{
    class ogrenci
    {
        public string ad;
        public string soyad;
        private byte vize_notu;
        private byte final_notu;
        public static int no;

           public enum cins { Kız, Erkek };
           public cins cinsiyet;

           public ogrenci(string ad, string soyad)
           {
               vize_notu = 50;
               final_notu = 50;
               this.ad = ad;
               this.soyad = soyad;
           }

           public byte vize
           {
               get
               {
                   return vize_notu;
               }

                                   103
nU

               set
               {
                      if(value>=0 && value<=100)
                     vize_notu= value;

               }

        }

        public byte final
        {
             get
             {
                 return final_notu;
             }
             set
             {
                 if (value >= 0 && value <= 100)
                     final_notu = value;
           }

        }

        public double ortalama()
        {
        return vize* 0.4 + final* 0.6;
        }
    }
}

Form Kodları


private void button1_Click(object sender, EventArgs e)
{
    ogrenci ogr = new ogrenci("Nurdan", "Sarıkaya");
    //Aşırı yüklenmiş constrctrlr
    ogr.cinsiyet = ogrenci.cins.Kız;
    ogr.vize = Convert.ToByte(textBox1.Text);
    ogr.final = Convert.ToByte(textBox2.Text);
    textBox4.Text = ogr.cinsiyet.ToString();
    textBox3.Text = ogr.ortalama().ToString();
    textBox5.Text = ogr.ad.ToString();
    textBox6.Text = ogrenci.no.ToString();

}




                                      104
nU

Ekran Çıktısı




                105
nU

Mevcut Class’ları Kullanma

Örnek: Ekrana bir buton ekleyelim ve bu hazır butona basınca kendi butonumuz oluĢsun
kendi butonumuza tıklayınca bize merhaba mesajını versin.


Kodlar


private void tiklama(object nesne, EventArgs e)
    {
        MessageBox.Show("Merhaba");
    }
private void button1_Click(object sender, EventArgs e)
    {
        Button b1 = new Button();
        b1.Text = "Merhaba";
        b1.Left = 110;
        b1.Top = 60;
        b1.Parent = this; // b1.Parent=Panel1 (Panel1 eklenirse)
        b1.Click += new EventHandler(tiklama);

     }


Ekran Görüntüsü


                                                 Açıklama: Yukarıda yazılan buton classı
                                                 somut bir classtır. Örneğin math classı
                                                 soyut bir classtır bir parente “canvasa”
                                                 ihtiyacı vardır. b1.Parent = this; //
                                                 form1'      in     butonumuzun            sahibi
                                                 olduğunu kasteder. Bizim butonumuzun
                                                 görsel hale gelmesini sağlar. Thisde bu
                                                 form   da   oluĢması     için   kullanılır.   This
                                                 yerine label1 vb. yazılabilir.


                                                 Kullanıcı   kuontrollü     classlarda     parent
                                                 mutlaka yazılmalıdır. Bunun yanısıra olay
                                                 oluĢturmalı:      b1.Click           +=       new
                                                 EventHandler(tiklama); // butona


olay atamak:EventHandler Olay atamayı bilmiyorsak form1 de bir adet buton ekle ve
Program.cs ye git orada buton oluĢturulma adımlarına bak ve iĢlemini tamamla. Bu
yöntem diğer nesnelerin classlarını oluĢtururkende aynı Ģekilde uygulanabilir.




                                           106
nU

Örnek: Kullanıcının istediği kadar buton oluĢturmasını ve her oluĢturduğu butonun ismi
farklı olmasını sağlayan buton classını yazmak


Kodlar


private void tiklama(object sender, EventArgs e)
        {
            Button b = new Button();
            b= (Button)sender;
            MessageBox.Show(b.Text);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Button [] b= new Button[10];
            for (int i = 1; i <= Convert.ToInt16(textBox1.Text); i++)
            {
                b[i] = new Button();
                b[i].Text = "Merhaba"+i.ToString();
                b[i].Top = i * 75;
                b[i].Left = 50;
                b[i].Parent = this;
                b[i].Click += new EventHandler(tiklama);

              }
         }


Ekran Görüntüsü




                                          107
nU

Örnek: Ekranda bir adet hazır buton olsun kullanıcı bu butona tıklayınca bize 2 adet
radio buton üreten biri play diğeri stop isimli olan classı ve bu radio butonlara tıklayınca
hangisine tıklanıldığını bize mesajla bildiren programı yazınız.


Kodlar


private void tiklama1(object sender, EventArgs e)
        {
            MessageBox.Show("Play'e tıklandı");
        }
private void tiklama2(object sender, EventArgs e)
        {
            MessageBox.Show("Stop'a tıklandı");
        }
private void button1_Click(object sender, EventArgs e)
        {
            RadioButton r1 = new RadioButton();
            RadioButton r2 = new RadioButton();
            string a = "Play";
            string b = "Stop";
            r1 = new RadioButton();
            r1.Text = a.ToString();
            r1.Left = 75;
            r1.Top = 50;
            r1.Parent = this;
            r1.Click += new EventHandler(tiklama1);

              r2 = new RadioButton();
              r2.Text = b.ToString();
              r2.Left = 200;
              r2.Top = 50;
              r2.Parent = this;
              r2.Click += new EventHandler(tiklama2);

         }


Ekran Görüntüsü




                                            108
nU

Örnek: Timer classını kullanarak textboxta butona tıklayınca sayıları 1‟den baĢlayıp belli
aralıklarla arttırmak.


Kodlar


public Form6()
        {
            InitializeComponent();
        }
        int say = 0;
private void myTick(object sender, EventArgs e)
        {
            say++;
            textBox1.Text = say.ToString();
        }
private void button1_Click(object sender, EventArgs e)
        {
            Timer t = new Timer();
            t.Interval = 1000;
            t.Tick += new EventHandler(myTick);
            t.Start();

           }



Ekran Görüntüsü




                                          109
nU

Örnek: Butona ekstra bir özellik “Kalıtım” oluĢturmak amacıyla buton classını oluĢturup,
classı kullanarak butonda iĢlemler yapınız.


Class Kodları


Ġlk olarak Project – Add class (mybuton isimiyle) oluĢturulur.
using System.Windows.Forms;
namespace nisan
{


      class mybutton: Button
      {
          private string deger_;
          public string deger
          {
              get
              {
                  return deger_;
              }
              set
              {
                  deger_=value;
              }

}}}
Form Kodları


private void myClick(object sender, EventArgs e)
        {
            mybutton b = new mybutton();
            b = (mybutton)sender;
            MessageBox.Show(b.deger);
        }
private void button1_Click(object sender, EventArgs e)
        {
            mybutton b = new mybutton();
            b.deger = "Barış";
            b.Parent = this;
            b.Text = "MyButton";
            b.Click += new EventHandler(myClick);
         }


Ekran Görüntüsü




                                              110
nU

Örnek: Mayın Tarlası Oyunu


Kodlar


using    System;
using    System.Collections.Generic;
using    System.ComponentModel;
using    System.Data;
using    System.Drawing;
using    System.Linq;
using    System.Text;
using    System.Windows.Forms;

namespace _27Mayis
{
    public partial class Form1 : Form
    {
        Button[,] myB = new Button[20, 20];
        byte[,] matris;
        byte mayin_sayisi=5;
        byte boyut = 10;

           public Form1()
           {
               InitializeComponent();
           }
           private void butonYokEt(byte boyut)
           {
               byte i, j;
               for (i = 0; i < boyut; i++)
               {
                   for (j = 0; j < boyut; j++)
                   {
                       myB[i, j].Dispose();
                   }
               }

           }

           private void matrisOlustur(byte boyut,byte mayinSayisi)
           {
               matris = new byte[20, 20];
               byte sayac = 0;
               Random r = new Random();
               byte i, j;
               while (sayac < mayinSayisi)
               {
                   i = (byte)r.Next(0, boyut - 1);
                   j = (byte)r.Next(0, boyut - 1);
                   if (matris[i, j] != 9)
                   {
                       matris[i, j] = 9;
                       sayac++;
                   }
               }

                                   111
nU



        //mayın etrafını bir artırma
        byte y, x;
        for (i = 0; i < boyut; i++)
        {
            for (j = 0; j < boyut; j++)
            {
                if (matris[i, j] == 9)
                {
                    for (y = (byte)(i - 1); y <= i + 1; y++)
                    {
                        for (x = (byte)(j - 1); x <= j + 1; x++)
                        {
                            if((x>=0 && x<boyut&& y>=0 && y<boyut)
&& matris[y,x]!=9)
                            {
                                matris[y,x]++;
                            }
                        }
                    }
                }
            }
        }
        }
        private void myClick(object sender, EventArgs e)
        {
            Button b = new Button();
            b = (Button)sender;
            byte i = Convert.ToByte(b.Name.Substring(0, 1));
            byte j = Convert.ToByte(b.Name.Substring(1, 1));
            b.Text = matris[i, j].ToString();
            b.FlatStyle = FlatStyle.Flat;

            if (matris[i, j] == 9)
            {
                b.Image = ımageList1.Images[0];
                MessageBox.Show("game over");
                butonYokEt(boyut);
            }
       }
       private void butonOlustur(byte boyut)
       {
           for (byte i = 0; i < boyut; i++)
           {
               for (byte j = 0; j < boyut; j++)
               {
                   myB[i, j] = new Button();
                   myB[i, j].Parent = panel1;
                   myB[i, j].Width = 30;
                   myB[i, j].Height = 30;
      myB[i, j].Left = (panel1.Width - (boyut * 30)) / 2 + j * 30;
      myB[i, j].Top = (panel1.Height - (boyut * 30)) / 2 + i*30;
                   myB[i, j].Name = i.ToString() + j.ToString();
                   myB[i, j].Click += new EventHandler(myClick);



                                112
nU

                }
            }
        }
private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            matrisOlustur(boyut, mayin_sayisi);
            butonOlustur(boyut);
        }

private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            boyut = 10;
        }

private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {
            boyut = 15;
        }

private void toolStripMenuItem5_Click(object sender, EventArgs e)
        {
            boyut = 20;
        }

private void toolStripComboBox1_Click(object sender, EventArgs e)
        {
            if (toolStripMenuItem1.Text == "5")
                mayin_sayisi = 5;
            if (toolStripMenuItem2.Text == "10")
                mayin_sayisi = 10;
            if (toolStripMenuItem3.Text == "15")
                mayin_sayisi = 15;
            if (toolStripMenuItem3.Text == "20")
                mayin_sayisi = 20;
        }

    }
}




                                113
nU




Ekran Görüntüsü


  1. Mayın tarlasının boyutu ve toolStripComboBox1‟dan kaç tane mayın olacağı seçilir.


  2. BaĢlat butonuna tıklandığında seçtiğimiz özellikteki mayın tarlası matris ekranı
     gelir.




  3. Küçük karelere tıkladığımızda 1, 2, 3, 4 gibi puanlar gelir. Mayını açtığımızda
     “Game Over” uyarısı gelir.




                                        114
nU




Örnek: “NumericUpDown” nesnesinden istediğimiz sayıyı belirleyip “OluĢtur” butonuna
tıklıyoruz. Böylece class „da oluĢturduğumuz nesnelerden istediğimiz sayıda ve üzerinde

1-9 arası rastgele sayılardan oluĢacak Ģekilde form ekranımıza geliyor.     Ardından bu
sayı butonlarımızı mavi panele sürüklüyoruz. Label‟e baktığımızda sürüklediğimiz bu sayı
butonlarının üzerindeki rakamların toplamını görüyoruz.


Class Kodları


using   System;
using   System.Collections.Generic;
using   System.Linq;
using   System.Text;
using   System.Windows.Forms;
using   System.Drawing;

namespace sayibuton
{
    public class sbuton:UserControl
    {
        private int s = 0;
        public int Sayi
        {
            get
            {
                return s;
            }
            set
            {
                s = value;
                OnPaint(null);
            }
        }
        protected override void OnPaint(PaintEventArgs e)
        {
           Graphics g=this.CreateGraphics();
            Pen p = new Pen(Color.Red,20);
            Font f = new Font("Arial",20,FontStyle.Bold);
            SolidBrush b= new SolidBrush(Color.White);
            g.DrawEllipse(p, 10, 10, 20, 20);
            g.DrawString(s.ToString(), f, b, 8, 6);
            this.Width=40;
            this.Height=40;

               base.OnPaint(e);
          }

          private void InitializeComponent()
          {
              this.SuspendLayout();

                                          115
nU

                //
                // sbuton
                //
                this.Name = "sbuton";
                this.Load += new System.EventHandler(this.sbuton_Load);
                this.ResumeLayout(false);

          }}}



Form Kodları


using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Linq;
using   System.Text;
using   System.Windows.Forms;
using   sayibuton;

namespace renklisifir1
{
    public partial class Form1 : Form
    {

          private bool durum = false;
          Point xy = new Point();

          sbuton[] myB = new sbuton[5];
          Random r = new Random();
          private int toplam = 0;
          public Form1()
          {
              InitializeComponent();
          }

          private void my_MouseDown(object sender, MouseEventArgs e)
          {
              if (e.Button == MouseButtons.Left)
              {
                  xy.X = e.X;
                  xy.Y = e.Y;
                  durum = true;

            }
        }
        private void my_MouseUp(object sender, MouseEventArgs e)
        {
            sbuton sb = new sbuton();
            sb = (sbuton)sender;
            if (sb.Left > panel1.Left && sb.Left < panel1.Left +
panel1.Width &&

                                    116
nU

                 sb.Top > panel1.Top && sb.Top < panel1.Top +
panel1.Height)
            {
                  toplam += sb.Sayi;
                  label1.Text = toplam.ToString();
                  sb.Visible = false;
             }
             durum = false;
         }
         private void my_MouseMove(object sender, MouseEventArgs e)
         {
             sbuton sb = new sbuton();
             sb = (sbuton)sender;
             if (durum)
             {
                 sb.Left += e.X - xy.X;
                 sb.Top += e.Y - xy.Y;
             }

         }


        private void button1_Click(object sender, EventArgs e)
        {
            for (byte i = 0; i < numericUpDown1.Value; i++)
            {
                //butona bastgmzda s buton olştrr istediğmz sayıda ,
x ye koordnatı olarak ekraana yazdrdık, random rakamlar urettk class
içersndekı sayı içersne aktardık.

                  myB[i] = new sbuton();
                  myB[i].Parent = this;
                  myB[i].Left = 50 + i * 75;
                  myB[i].Top = 350;

                 //üzerndeki sayıları yazcaz
                 int sayi = r.Next(1, 9);
                 myB[i].Sayi = sayi;
    myB[i].MouseMove += new MouseEventHandler(my_MouseMove);
                 myB[i].MouseUp += new MouseEventHandler(my_MouseUp);
    myB[i].MouseDown += new MouseEventHandler(my_MouseDown);

             }
         }

    }
}




                                   117
nU




Ekran Görüntüsü




                  118
nU




Nesne Yönelimli Programlama İlkeleri

Kılıflama (encapsulation)


      Nesne yapısı ve eriĢim hiyerarĢisi


      Veri üyeleri (data field/member), fonksiyon üyeleri


Çok biçimlilik (polymorphism)


      Aynı isimli fakat farklı parametreli metot tanımlama


Kalıtım (Inheritance)

      Nesne türetme


      Nesnelerin çoklu davranıĢ ve eriĢim izinleri


      Bu konu hakkında ayrıntı verilmemiĢtir.




                                           119
nU

Açıklamalar

 Örnekler yapılmıĢ ve uygulanmıĢtır. Herhangi bir hata yoktur.
 Birçok kaynaktan yararlanılmıĢtır.
 Ek olarak Visual c#.Net, Palme Zirvedeki Beyinler 2, Nihat Demirli & Yüksel Ġnan
kitabından yararlanılmıĢtır.
 Class ve dizilerin kullanıldığı Su Dokusu örneğini Liseden bir arkadaĢım yapmıĢtır.
Açıklamalar bana aittir. Anladığım kadarıyla açıklamaya çalıĢtım. YanlıĢlarımı maruz
görün Hocam.
 Bilge Adam‟ın pdf dosyalarından yararlanılmıĢtır.
 Visual c# MEB pdf dosyalarından yararlanılmıĢtır.
 Ġnternetten alınan kodlar programda uygulanıp, yanlıĢları giderilerek kullanılmıĢtır.
 Belgede yer alan form görüntülerinin hepsi bana aittir.
 Son aĢamada word dosyası oluĢturulduktan sonra dıĢarıya pdf dosyası olarak da
verilmiĢtir.
 Try-Catch komutları olası hataları yakalama amaçlı kullanılmıĢtır.

 Ayrıca sizin sınıfta yaptırmıĢ olduğunuz class uygulamaları kullanılmıĢtır.

 Su doku örneği diziler yapısında verilmiĢtir fakat aynı zamanda class örneğidir.

 Kılıflama, Çok bilimlilik, Kalıtım konuları anlatılmamıĢtır.




                                                                         Nurdan SARIKAYA


                                             120

Nurdan sarıkaya

  • 1.
    nU MARMARA ÜNİVERSİTESİ ATATÜRKEĞİTİM FAKÜLTESİ Nurdan SARIKAYA 200209019 Programlama Dilleri Visual c# ‘ta Diziler ve Visualc# Class Yapıları 2011, İstanbul 1
  • 2.
    nU İçindekiler C#’TA DİZİLER .........................................................................................4 C#’ta Dizi Değişkenlerinin Tanımlanması ............................................. 4 Çok Boyutlu Dizileri Tanımlamak .......................................................... 9 Dinamik Diziler.................................................................................... 11 Jagged Diziler...................................................................................... 12 Jagged Dizisinin Tanımlanması........................................................ 13 Koleksiyonlar ................................................................................... 16 Dizilerle İlgili Diğer İşlemler ................................................................. 17 Arraylist Fonksiyonları ......................................................................... 17 Dizinin Yavru Değişkenine Eleman Ekleme ...................................... 18 Dizinin Eleman Sayısını Öğrenmek ................................................... 19 Dizinin Boyutunu Öğrenmek ............................................................. 19 Belirtilen Dizi Boyutunun Eleman Sayısını Öğrenmek ....................... 20 Dizide Belirtilen İndis Aralığındaki Değerleri Silme ........................... 21 Diziye Değerin Olup Olmadığını Kontrol Etme .................................. 21 Dizinin Eleman Sırasını Tersine Çevirme ........................................... 22 Dizi Elemanlarını Küçükten Büyüğe Sıralama.................................... 22 Dizi İçinde Aranan Değeri Bulma ...................................................... 23 Dizinin İçinde Aranan Değeri Sondan Başlayarak Bulma .................. 24 Dizide Belirtilen Boyutun Üst Sınırını Öğrenmek .............................. 24 Dizinin Eleman Sayısını Öğrenme ..................................................... 25 Dizi İçindeki Herhangi Bir Aralığa Eleman Ekleme ............................ 23 Dizi İçindeki Herhangi Bir Aralığa 1’den Fazla Eleman Ekleme ......... 26 Dizi İçindeki Elemanı Bulup Silme ..................................................... 26 Dizi İçindeki Elemanı İndis Numarasına Göre Silme .......................... 27 2
  • 3.
    nU Dizilerle İlgili Örnekler ......................................................................... 28 C#’ ta CLASS YAPISI ............................................................................... 73 C#’ta Class Yapısı ................................................................................. 73 Protected Obje Tanımlamak ................................................................ 82 Virtual ve Override Metods Tanımlamak ............................................ 84 Base Class Constructors ....................................................................... 85 BitArray Sınıfı....................................................................................... 90 Hashtable Sınıfı ................................................................................... 91 SortedList Sınıfı.................................................................................... 94 Stack Sınıfı ........................................................................................... 96 Queue Sınıfı ......................................................................................... 98 Class İçindeki Set ve Get Deyimleri .................................................... 100 Mevcut Class’ları Kullanma ................................................................... 106 Açıklamalar ............................................................................................ 119 3
  • 4.
    nU C#’TA DİZİLER C#’ta Dizi Değişkenlerinin Tanımlanması Diziler tüm dillerde olduğu gibi c# içinde oldukça önemli yer tutar. DeğiĢkenlerin dizi olarak tanımlanabilmesi hem kod bloğunu kısalır, hem de programın çok daha hızlı iĢlemesini sağlar. Bellekte aynı türden sıralanmıĢ verilerin oluĢturduğu yapıya dizi denir. Tek bir tanımlama yapılarak istenilen sayıda veri giriĢi sağlanabilir. Dizi elemanları bir indis numarasına sahiptir. Ġndis numaraları varsayılan olarak sıfırdan baĢlar. Dizinin kaç elemanlı olacağı dizinin tanımlandığı satırda veya daha sonra da belirtilebilir. Ayrıca dizi tanımlaması yapıldığında dizinin eleman sayısı, kullanılacak eleman sayısından az ise dizi yeniden boyutlandırılabilir. Dizi değiĢkenin eleman sayısını belirtmek için new metodu kullanılır. Örnek: private void button1_Click(object sender, EventArgs e) { int[] dizidedegisken; dizidedegisken = new int[10]; dizidedegisken[9] = 100; label1.Text = dizidedegisken[9].ToString(); } Dizilere tanımlandıkları anda değerler atayabilirsiniz.AĢağıdaki 5 elemanlı bir dizi tek satırda tanımlanıyor arkasından oluĢturuluyor en sonunda da dizinin tğm elemanlarına değer atanıyor. Ġkinci satırda ise dizinin 4. Elemanı (dizi[3]) text‟in içersinde yazdırılıyor. Örnek: private void button2_Click(object sender, EventArgs e) { int[] dizi = new int[5] { 0, 10, 20, 30, 40 }; textBox1.Text = dizi[3].ToString(); } ya da private void button3_Click(object sender, EventArgs e) { int[] dizi = { 0, 10, 20, 30, 40 }; textBox1.Text = dizi[3].ToString(); } Yukardaki iki örnekte aynı Ģeyi yapar. 4
  • 5.
    nU Örnek: Bu örnekte InputBoxnesnesi kullanılacağından References /Sağ Click/Add References/ Microsoft. VisualBasic „i ekliyoruz. private void button1_Click(object sender, EventArgs e) { byte i; int[] dizi = new int[5]; for (i = 0; i < 5; i++) { dizi[i] = int.Parse(Microsoft.VisualBasic.Interaction. InputBox("Dizinin" + (i + 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20)); } for (i = 0; i < 5; i++) { listBox1.Items.Add(dizi[i]); } } Ekran Çıktısı “Ekle” butonuna basıldığında ekrana InputBox() ekranı gelir ve dizinin elemanları girilir. Sonrasında InputBox()‟a girilen değerler ListBox‟a eklenir. 5
  • 6.
    nU Yukarıdaki örneğin geliştirilmişi 5elemanlı bir int dizi tanımlanarak, dizi elemanları “Dizi elemanlarını gir” butonuna tıklandığında InputBox() ile diziye diziden de liste kutusuna eklenmektedir. BaĢlangıçta “EKLE” butonu pasif haldedir. Dizi elemanlarının giriĢinden sonra “Dizi elemanlarını gir” Butonu pasif hale “Ekle” butonu aktif hale gelmektedir. Ekle butonuna tıklandığında dizi yeniden boyutlandırılarak InputBox()‟tan diziye yeni eleman giriĢi yapılmakta ve aynı zamanda liste kutusuna da eklenmektedir. ÇıkıĢ düğmesiyle de program sonlandırılmaktadır. int sayi; private void button1_Click(object sender, EventArgs e) { byte i; int[] dizi1 = new int[5]; for (i = 0; i < 5; i++) { dizi1[i] = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (i + 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20)); } for (i = 0; i < 5; i++) { listBox1.Items.Add(dizi1[i]); } sayi = 5; button1.Enabled = false; button2.Enabled = true; } byte s = 5; private void button2_Click(object sender, EventArgs e) { int[] dizi1 = new int[sayi + 1]; dizi1[sayi] = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (s + 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20)); listBox1.Items.Add(dizi1[sayi]); } private void button3_Click(object sender, EventArgs e) { Close(); } private void Form1_Load(object sender, EventArgs e) { button2.Enabled = false; } 6
  • 7.
    nU Ekle butonuna bastığımızda InputBox ekranı gelir. Ġstediğimiz sayıyı girip “Tamam” butonuna bastığımızda ListBox‟a değer eklenir. 7
  • 8.
    nU Örnek: 4 elemanlı stringbir dizi tanımlanıp ilk değerleri verilerek formun çalıĢtırılmasında bu değerler comboBox() ta listelenmektedir. public string[] mevsimler = new string[4] { "Ġlkbahar", "Yaz", "Sonbahar", "Kış" }; private void Form4_Load(object sender, EventArgs e) { comboBox1.Items.Add(mevsimler[0]); comboBox1.Items.Add(mevsimler[1]); comboBox1.Items.Add(mevsimler[2]); comboBox1.Items.Add(mevsimler[3]); } private void comboBox1_TextChanged(object sender, EventArgs e) { if(comboBox1.SelectedIndex==0) textBox1.Text=mevsimler[0]; if(comboBox1.SelectedIndex==1) textBox1.Text=mevsimler[1]; if(comboBox1.SelectedIndex==2) textBox1.Text=mevsimler[2]; if(comboBox1.SelectedIndex==3) textBox1.Text=mevsimler[3]; } 8
  • 9.
    nU Çok Boyutlu DizileriTanımlamak Bazı durumlarda (özellikle büyük projelerde) çok boyutlu dizi tanımlamak zorunda kalabilirsiniz. Bu genlikle satır ve sütundan iki boyutlu bir dizi olacaktır. (Özellikle matris hesaplarıyla ilgilenen mühendisler için) Bazen daha büyük boyutlu da olabilir. Çok boyutlu bir dizi tanımlamak, sizi tek boyutlu birçok dizi tanımlamak yerine bir tane çok boyutlu dizi tanımlayarak problemi çözme imkânı verir. Bu hem kod karmaĢasından hem de hız açısından faydalıdır. AĢağıda iki boyutlu bir dizi tanımlanmıĢ olup (2 satır, 3 sütunlu) ilk satır üçüncü sütunlu değere 200 değeri atanmıĢtır. Örnek: private void button3_Click(object sender, EventArgs e) { int[,] dizi = new int[2, 3]; dizi[0, 2] = 200; textBox1.Text=dizi[0,2].ToString(); } dizi [2, 3] ün sonuçta 6 elemanlı bir dizi olduğu aĢağıda anlatılmaya çalıĢıldı. dizi [0, 0], dizi [0, 1], dizi [0, 2], dizi [1, 0], dizi [1, 1], dizi [1, 2] görüldüğü gibi 6 elemanlı iki boyutlu bir dizi oluĢturuldu. Burada dizinin ilk ve ikinci elemanı yerine i,j değiĢkenleri kullanılarak bir çok iĢlem kolaylıkla yapılabilir. 9
  • 10.
  • 11.
    nU Dinamik Diziler C#‟ tadiziler önce tanımlanıp daha sonra eleman sayısı belirlendiği için bu diziler aynı zamanda dinamik dizi olarak da kullanılabilirler. Burada [] içerisindeki değer bir textBox‟tan veya bir inputBox‟tan rahatlıkla alınabilir. Bu sayede bu diziler aynı zamanda bir dinamik dizi görevi görürler. Dinamik diziler öğrenci sayısının bilinmediği sınıflar için veya oyuncu sayısının bilinmediği bilhassa network oyunları için kullanılır. Mesela öğrenci sayısını dinamik dizi olarak tanımlamak çok doğru bir karardır. Çünkü A sınıfı 40 kiĢi, B sınıfı 50 kiĢiden ibaret olabilir. Bu durumda öğrenci sayısını bir textBox‟ a aldırarak [] içerisinde atayabilirsiniz. Onu da for döngüsüyle iĢleme sokup tüm öğrencilerin, isimlerini, numaralarını tek satırlık kodla aldırmanız mümkün olur aksi halde en büyük sınıfa göre bir dizi tanımlayacaktınız. Diğer ufak sayılarda iĢlem yaparken artan değiĢkenler bellekte boĢu boĢuna yer iĢgal edecekti. Bu iyi bir programcı için istenen bir Ģey değildir. Bir diziyi arraylist sınıfından tanımlamak demek dizinin boyutunun ihtiyaç duyuldukça arttırılması veya azaltılması demktir.10 elemanımız ve 10 elemanlı bir dizimiz varsa ve listeye yeni eleman eklemek isteniyorsa dizinin elemanını ihtiyaç duyuldukça arttırabilirsiniz. Üstelik dizinin eski hali korunacaktır. Aynı durum dizinin boyutunu azaltmak içinde geçerlidir. Arraylist sınıfı diziye her eleman eklendiğinde dizi boyutu arttırmaz Bunun yerine ilk etapta 4 elemanlı bir dizi oluĢturur. Ġlk 4 elemanda dizinin boyutu sabit kalır.5. eleman eklendiğinde dizi boyutu 2 katına çıkarılır. Not: Arraylist sınıfını kullanabilmek için öncelikle; using System.Collections; kütüphanesini çağırmalıyız. ArrayList Fonksiyonları ileriki sayfalarda iĢlenecektir. 11
  • 12.
    nU Jagged Diziler C# ilegelen güzel bir olay olan jagged dizilerdir. Bunu önceden benim gibi C kullanan vatandaĢlar pointer kullanarak yapıyordu. Bu Ģekilde malloc()'la yer isteyip sonra onu dinamik oluĢturup siliyorduk. Jagged (pürüzlü, düzensiz) dizilerde ise sizin istediğiniz kadar temel eleman oluĢturup bu elemanların her birinin alt dizisi ihtiyaca göre oluĢturulur. OluĢturacağımız dizilerde satırların eleman sayıları birbirinden farklıysa bu durumlarda Jagged dizi tanımlanır. Bir diziyi jagged olarak tanımlamak ona bir özellik kazandırmanız dizi ile ilgili tüm iĢlemleri yine yapabilirsiniz. Mesela diziyi tablo halinde ifade edecek olursak Ģöyle bir yapıda dizimiz olabilir. Dizinin alt eleman sayısı farklılık gösterebiliyor. .net listview datagrid vs. gibi bileĢenlerdeki ekleme mantığıyla hareket edeceğiz. Ġlk önce itemleri (dizinin [i][0]) kısmını ayarlayacağız. Sonra da o itemlere (dizi elemanlarına ait ) alt itemleri oluĢturup ekleyeceğiz. Listview'e rastgele oluĢturulmuĢ verileri rastgele boyutlu dizilere nasıl atılacağını gösterelim. ġimdi dizinin [i][0]. elemanları Listviewde item gibi olacak sonra listview e diğer kayıtlar subitemler olarak gelecek. Bu Ģekilde iç içe for döngüsüyle yapacağız. Matrisler gibi düĢünürsek daha kolay anlaĢılır. 12
  • 13.
    nU Jagged Dizisinin Tanımlanması Örnek: int[][]jdizi = new int[3][]; 3 satırdan oluĢan bir dizi tanımladım. Fakat her satırın eleman sayısı birbirinden farklı olacaktır. (Aynıda olabilir) Bu sayıları da programın herhangi bir yerinde bildireceğim. Örnek: private void button1_Click(object sender, EventArgs e) { //Dizinin 1.,2. ve 3. satırlarının kaç değerden oluşacağı belirtilmiştir. //Sonra da dizilere değer atanmıştır. int[][] jdizi; jdizi = new int[3][]; jdizi[0] = new int[4][]; jdizi[1] = new int[3][]; jdizi[2] = new int[2][]; jdizi[0][3] = 100; jdizi[2][1] = 500; Form1.ActiveForm.Text = jdizi[2][1].ToString(); } Yukarıdaki kod aĢağıdaki gibi Ģematize edilebilir. Jdizi[0][0] jdizi[0][1] jdizi[0][2] jdizi[0][3] Jdizi[1][0] Jdizi[1][1] Jdizi[1][2] Jdizi[2][0] Jdizi[0][1] Görüldüğü gibi ilk satır 4 elemandan , 2. Satır 3 elemandan, 3. Satırda 2 elemandan oluĢmaktadır. Artık her elemana rahatlıkla değer atayabilirsiniz. Burada dikkat edilmesi gereken husus jdizi[2][3] yukarıdaki elemanlar dıĢında herhangi bir tanesi de olabilir) elemanına değer atayamayacağınızdır. Eğer böyle bir atama yaparsanız, çalıĢma anında programınız kırılacaktır. Örnek: string[][] aile = new aile[10][]; Alt dizileri ise tek tek tekrar dizi tanımlıyormuĢuz gibi tekrar tanımlayacağız. Mesela dizinin 1. elemanı 2. elemanı ... hepsi ayrı ayrı birer dizi olacaktır. Örnek: aile[i] = new string[10]; ġeklinde tanımlarız. Fakat bunun düzensizliği nerde kaldı? AĢağıdaki örneğe bakalım. 13
  • 14.
    nU Örnek: tut=r.Next(1,20); aile[i] = newstring[tut]; Rastgele değerlerde boyutlu bir dizi. Dizi Ģimdi jagged oldu. Sonra buna random olarak rastgele değerler verip dolduralım. Cascade: (char)65 dersek 'a' olur. Onun koyacağımız tip belirteçleri cascade oluyor. Bununla o değeri bellekteki tutulma Ģekli belirlenir. Rastgele değerler için; Örnek: public string veri_ekle() { string tut1 = ""; for (int i = 0; i< r.Next(1, 15); i++) //Verinin boyu da random ayarlanır { tut1 += Convert.ToString((char)r.Next(65, 90)); //65 ve 90 alafabenin asci max min değerleridir //a,z arasında rastgele harf ürettik'char’cascadedir. } return tut1; } Bunu da sırayla jagged diziye ekledikten sonra artık ispat için listviewde sergilemek kalıyor. Ekleme iĢlemi tam olarak solutionda mevcuttur. Listview'e eklemek artık daha kolay olacaktır. Örneğin Devamı: for (int a = 0; a < eb ; a++) { //eb en buyuk alt kolonun boyutu listView1.Columns.Add(a.ToString()); } for (int i = 0; i < Convert.ToInt32(textBox1.Text); i++) { listView1.Items.Add(aile[i][0]); //Temel elemanlar item olacaktır for (int j = 0; j < aile[i].Length; j++) { listView1.Items[i].SubItems.Add(aile[i][j].ToString()); //Alt elemanlar subitem olacaktır } } 14
  • 15.
    nU Sonuç: Görüldüğü üzeri bazıalt diziler 2 bazısı 18 ... olmuĢ. Böylece bellek israfı önlenmiĢtir. Örnek: Boyutu 3 olan diğer boyutu belli olmayan bir jagged dizi tanımlanarak 2. boyutunun elemanlarını form yüklendiğinde diziye girilmektedir. Her bir sütun elemanlarını ayrı ayrı liste kutusuna listeleyen ve bu dizinin rankını “Dizinin rankını göster” düğmesine basıldığında mesaj kutusunda gösteren program. string[][] aile = new string[3][]; private void Form5_Load(object sender, EventArgs e) { aile[0] = new string[] {"Nurdan","Nurşan","Hakan","Seçkin"}; aile[1] = new string[] {"Sen", "Ben", "O", "Biz", "Siz" }; aile[2] = new string[] {"Sevde", "Sercan", "Selçuk" }; for (int j = 0; j < 4; j++) listBox1.Items.Add(aile[0][j]); for (int j = 0; j < 5; j++) listBox2.Items.Add(aile[1][j]); for (int j = 0; j < 3; j++) listBox3.Items.Add(aile[2][j]); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Aile Dizisi"+(aile.Rank).ToString() +"boyutludur." ,"Rank"); } 15
  • 16.
    nU Koleksiyonlar Dizi eleman sayısınınesnek Ģekilde tanımlanması için kullanılan yapılardır. Eleman sayısı, programda kullanılacak eleman sayısına göre artırılır ya da azaltılır. Koleksiyonlar, System.Collections isim alanında (namespace) bulunur. Koleksiyonlarla çalıĢmaya baĢlamadan önce System.Collection‟ı using deyimiyle projenin baĢına dâhil etmek gerekir. 16
  • 17.
    nU Dizilerle İlgili Diğerİşlemler Arraylist Fonksiyonları ArrayList oluĢturabilmek için projemize using System.Collections; kodunu using satırına eklemeliyiz. Bu kodla System.Collections kütüphanesini çağırmıĢ oluruz. Klasik dizilerle çalıĢırken karĢılaĢabileceğimiz temel sorunlar Ģunlardır. Dizilerin sınırları sabittir. int[] dizi = new int[60]; Dizilerin tüm elemanları aynı türden olmalıdır. Örneğin; Hepsi int Kullanmadığımız dizi elemanlarından dolayı bellek alanları gereksiz yere iĢgal edilmektedir. Örneğin sayısını bilemediğimiz bir dizinin eleman sayısını 500 olarak belirlediğimizi varsayalım. ÇalıĢma zamanında dizimizin sadece 10 elamanını kullandığımız durumda diğer 490 elemanlık bellek alanı boĢ olarak kalır. Öte yandan dizimizde tutmak istediğimiz değiĢkenlerin sayısı 501 bir olduğu bir durumda "IndexOutOfRangeException" istisnai durumu ortaya çıkar ve program bu hatadan dolayı sonlanır. 17
  • 18.
    nU Dizinin Yavru DeğişkenineEleman Ekleme ArrayList class‟indan oluĢturduğumuz yavru değiĢkene bir eleman eklemek için Add() kullanılır. Örnek: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 1, 2, 3, 4, 5 }; diziListe.Add(dizi[2]);// diziListe'nin ilk elemani 3 diziListe.Add(12); // diziListenin ikinci elemani 12 diziListe.Add("kelime"); // dizilistenin üçüncü elemani kelime stringi olur this.Text = diziListe[0].ToString(); // Form'un basligina 3 yazar this.Text = diziListe[1].ToString(); // Form'un basligina 12 yazar this.Text = diziListe[2]; // Form'un basligina kelime yazar } } Burada dikkat edilmesi gereken ilk nokta Add fonksiyonu ile ArrayList‟e ayni anda sadece bir eleman ekleyebilmemiz. Ġkinci önemli nokta ise hem bir integer değeri ekledik hem de bir string değeri ekledik. Buradan da anlaĢılacağı üzere oluĢturduğumuz Arraylist‟e object türünde değerler atabiliyoruz. Mesela biz burada diziListe isimli yavru değiĢkene bool, double, float, string, byte, hatta Button, listBox türünde nesneler de ekleyebiliyoruz çünkü object türü değiĢken hepsini kapsayabiliyor. 18
  • 19.
    nU Dizinin Eleman SayısınıÖğrenmek Bir dizinin kaç elemandan oluĢtuğunu öğrenmek için Length kullanılır. Örnek: private void button2_Click(object sender, EventArgs e) { int[] dizi = new int[5] { 0, 10, 20, 30, 40 }; textBox1.Text = dizi.Length.ToString(); // 5 yazdırır. } Eğer Jagged bir dizide aynı fonksiyonu kullanırsanız geriye satır sayınız döner. Çünkü hangi satıra kaç eleman atayacağınız değiĢkenlik gösterecektir. Örnek: private void button3_Click(object sender, EventArgs e) { int[][] jdizi; int[,]nurdan= new int[2,3]; jdizi = new int[5][]; jdizi[0] = new int[4]; jdizi[1] = new int[3]; jdizi[2] = new int[2]; jdizi[0][3] = 100; Form1.ActiveForm.Text = jdizi.Length.ToString();} Dizinin Boyutunu Öğrenmek Bir dizinin boyutunu öğrenmek için Rank kullanılır. Örnek: private void button4_Click(object sender, EventArgs e) { int[,] dizi = new int[2, 3]; dizi[0, 2] = 200; textBox1.Text = dizi.Rank.ToString();//2 yazdırır. } Aynı fonsiyonu Jagged diziler için kullanırsanız geriye 1 değeri döner. Örnek: private void button5_Click(object sender, EventArgs e) { int[][] jdizi; jdizi = new int[10][]; jdizi[0] = new int[4]; jdizi[1] = new int[3]; jdizi[2] = new int[2]; 19
  • 20.
    nU jdizi[0][3] = 100; jdizi[2][1] = 500; Form1.ActiveForm.Text = jdizi.Rank.ToString();// 1 yazar. } Belirtilen Dizi Boyutunun Eleman Sayısını Öğrenmek Bir dizinin herhangi bir boyutunun kaç elemanlı olduğunu öğrenmek için GetLength() kullanılır. AĢağıda dizi değiĢkeninin ilk boyutunu textBox‟un içine yazdırdık. Dizi çok boyutlu da olabilirdi o zaman GetLength(1) veya daha büyük bir değer girilebilirdi. Örnek: private void button6_Click(object sender, EventArgs e) { int[] dizi = new int[5] { 0,5,10,15,20,25}; textBox1.Text = dizi.GetLength(0).ToString(); //6 yazdırır. } Aynı fonksiyonu Jagged diziler için kullanırsanız sadece ”0” için çalıĢır. Yani dizinin ilk boyutunun kaç elemandan oluĢtuğunu öğrenebilirsiniz. Çünkü tanımlandığı anda diğer boyutlar belli değildir. Örnek: private void button7_Click(object sender, EventArgs e) { int[][] jdizi; jdizi = new int[10][]; jdizi[0] = new int[4]; jdizi[1] = new int[3]; jdizi[2] = new int[2]; jdizi[0][3] = 100; jdizi[2][1] = 500; Form1.ActiveForm.Text = jdizi.GetLength(0).ToString(); // 10 yazar. //Burada GetLength(1) yazılmaz program hata verir. } Clear, Reverse, IndexOf metotları Array sınıfında Shared (paylaĢtırılmıĢ) olarak tanımlı metotlardır. ĠĢlemin yapılacağı dizi parametre olarak verilmelidir. 20
  • 21.
    nU Dizide Belirtilen İndisAralığındaki Değerleri Silme Parametre olarak verilen dizinin, belirtilen indis aralığındaki tüm değerleri temizlemek için Clear() kullanılır. Temizleme iĢleminde atanan değer, dizi elemanlarının tiplerine göre değiĢir. Örneğin int tipinde tanımlı bir dizinin elemanları temizlenirse 0 değerini alacaktır. Buna karĢın String tipindeki elemanlar “” (boĢ yazı) değerini alır. Örnek: int[] dizi = { 12, 13, 14, 15 }; // 1. indisten başlayarak, 3 elemanı temizle Array.Clear(dizi, 1, 3); MessageBox.Show(dizi[2].ToString()); //Sonuç = 0 // Dizinin tüm elemanlarını temizler Array.Clear(dizi, 0, dizi.Length); Örnek: private void button1_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 11, 21, 34, 56, 74 }; diziListe.AddRange(dizi); diziliste.Clear(); // diziListe'nin içine tamamen temizler textBox1.Text = diziListe[2].ToString();// hata verir. } Diziye Değerin Olup Olmadığını Kontrol Etme Fonksiyona parametre olarak verilen değiĢkenin ArrayList içinde olup olmadığına Contains() bakar. Eğer var ise true yok ise false döndürür. Örnek: private void button1_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 1, 2, 3, 4, 5 }; diziListe.AddRange(dizi); if (diziListe.Contains(Convert.ToInt32(textBox1.Text)) == true) { MessageBox.Show("girilen deger diziListe içinde mevcut"); } else { MessageBox.Show("girilen deger diziListe içinde yok"); } } 21
  • 22.
    nU Dizinin Eleman SırasınıTersine Çevirme Parametre olarak verilen dizinin eleman sırasını tersine çevirmek için Reverse() kullanılır. Dizinin tüm elemanlarının veya belirli indis aralığındaki elemanlarının sırası tersine çevrilebilir. Örnek: string[] harfler = { "A", "B", "C" }; Array.Reverse(harfler); MessageBox.Show(harfler[2]); // Sonuç = A string[] harfler = { "A", "B", "C" }; Array.Reverse(harfler, 0, 1); MessageBox.Show(harfler[2]); // Sonuç = C Örnek: private void button1_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 7, 8, 9, 10, 11 }; diziListe.AddRange(dizi); diziListe.Reverse(); // dizi bundan sonra {11,10,9,8,7} halini alir. textBox1.Text = diziListe[2].ToString(); // textBox1'in içine 9 yazar. } Dizi Elemanlarını Küçükten Büyüğe Sıralama Arraylist‟in elamanlarını küçükten büyüğe doğru sıralamak için Sort() kullanılır. Eğer elemanlar string tipinde ise alfabetik sıralama yapar. Örnek: private void button1_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); string[] dizi = new string[4] { "Ankara", "Izmir", "Istanbul", "Gaziantep" }; diziListe.AddRange(dizi); diziListe.Sort(); //dizinin son hali {"Ankara","Gaziantep","Istanbul","Izmir"} seklinde olur. textBox1.Text = diziListe[3].ToString(); // textBox1'in içine Izmir yazar. } 22
  • 23.
    nU Örnek: private void button1_Click(objectsender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 11, 21, 34, 56, 74 }; diziListe.AddRange(dizi); textBox1.Text = diziListe[2].ToString(); // textBox1’in içine 34 yazar } Dizi İçinde Aranan Değeri Bulma Ġlk parametrede verilen dizide, ikinci parametrede verilen değeri aramak için IndexOf() kullanılır. Aranan değer dizide bulunursa indisi, bulunamazsa -1 döndürür. IndexOf fonksiyonu aramaya ArrayList‟in baĢından baslar. Örnek: float[] notlar = { 78.1, 99.9, 100, 12.2 }; float maxNot = 100; MessageBox.Show(Array.IndexOf(notlar, maxNot).ToString()); // Aranan maxNot değerinin indisi = 2 Örnek: private void button11_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); string[] dizi = new string[5] {"aa","bb","cc","dd","ee" }; // fonksiyonun parametresi aradigimiz elemandir diziListe.AddRange(dizi); int sira; sira = diziListe.IndexOf("cc", 0, diziListe.Count–1); textBox1.Text = sira.ToString(); } 23
  • 24.
    nU Dizinin İçinde ArananDeğeri Sondan Başlayarak Bulma IndexOf fonksiyonu gibi ArrayList içinde herhangi bir elemanı aramak için LastIndexOf() kullanılır. IndexOf‟tan farkı aramaya sondan baĢlamasıdır. Elaman sayısı çok fazla olan Arraylist‟lerde aradığımız eleman sonlara daha yakınsa bu fonksiyon bize hız kazandırır. Eğer aranan eleman ArrayList içinde var ise elemanın indis numarasını, yok ise -1 döndürür. Örnek: private void button1_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); string[] dizi = new string[5] {"aa","bb","cc","dd","ee" }; diziListe.AddRange(dizi); int sira; sira = diziListe.LastIndexOf("dd", 0, diziListe.Count – 1); // Aramaya sondan basladigi için elemani 2. seferde bulur. Eger IndexOf kullansaydik elemani üçüncü seferde bulacakti. textBox1.Text = sira.ToString(); } Dizide Belirtilen Boyutun Üst Sınırını Öğrenmek Bir dizinin herhangi bir boyutunun en üst sınırını öğrenmek için GetUpperBound() kullanılır. Örnek: private void button8_Click(object sender, EventArgs e) { int[] dizi = new int[5] { 0, 20, 10, 40, 30 }; textBox1.Text = dizi.GetUpperBound(0).ToString(); //4 yazdırır. } Aynı iĢlemi Jagged diziler için kullanırsanız. Sadece ilk boyut için değer döndürebilirsiniz. BaĢka bir boyut girerseniz program çalıĢmayacaktır. Örnek: private void button9_Click(object sender, EventArgs e) { int[][] jdizi; jdizi = new int[10][]; jdizi[0] = new int[4]; jdizi[1] = new int[3]; jdizi[2] = new int[2]; jdizi[0][3] = 100; jdizi[2][1] = 500; 24
  • 25.
    nU Form1.ActiveForm.Text = jdizi.GetUpperBound(0).ToString(); // 9 yazar. //Burada GetUpperBound(1) yazılmaz program hata verir. } Diğer dizi fonksiyonları da Jagged dizilerde kullanılabilir fakat gireceğiniz değerlere birazcık dikkaet etmeniz gerekecektir. Dizinin Eleman Sayısını Öğrenme ArrayList‟in eleman sayısını öğrenmek için Count() fonksiyonu kullanılır. Örnek: private void button7_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[] { 1, 2, 3, 4, 5, 6 }; diziListe.AddRange(dizi); textBox1.Text = diziListe.Count.ToString(); //textBox1'in içine 6 yazar } Dizi İçindeki Herhangi Bir Aralığa Eleman Ekleme ArrayList içinde herhangi bir aralığa eleman eklemek için Insert() kullanılır. Araya eleman eklediğimiz için ArrayList‟in eleman sayısı da artmıĢ olur (tıpkı otobüs beklerken birinin araya girmesi gibi). Fonksiyonun ilk parametresine elemanı eklemek istediğimiz indis numarasını, ikinci parametreye ise elamanı yazarız. Örnek: private void button10_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); string[] dizi = new string[5] { "aa", "bb", "cc", "dd", "ee" }; // diziListe.AddRange(dizi); diziListe.Insert(2, "ff"); // diziListenin 2 numarali indisine ff ekledik. diziListenin eleman sayisi 6 oldu. textBox1.Text = diziListe[2].ToString(); // textBox1'in içine ff yazar. } 25
  • 26.
    nU Dizi İçindeki HerhangiBir Aralığa 1’den Fazla Eleman Ekleme ArrayList içinde herhangi bir aralığa birden fazla elemanı tek seferde eklemek için InsertRange () kullanılır. Örnek: private void button12_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 0, 1, 2, 3, 4 }; diziListe.AddRange(dizi); int[] eklenecek=new int[3]{ 10, 11, 12 }; diziListe.InsertRange(2, eklenecek); // diziListenin 2 numarali indisinden sonra {10,11,12} dizisini ekledik. diziListenin eleman sayisi 8 oldu. // diziListenin son hali{0,1,10,11,12,2,3,4,5} seklidedir. textBox1.Text = diziListe[2].ToString(); // textBox1'in içine 10 yazar. } Dizi İçindeki Elemanı Bulup Silme Fonksiyona parametre olarak girilen elemanı Arraylist‟in içinde bulup silmek için Remove () kullanılır. Böylece ArrayList‟in eleman sayısı 1 azalmıĢ olur. Örnek: private void button13_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 0, 1, 2, 3, 4 }; diziListe.AddRange(dizi); diziListe.Remove(3) textBox1.Text = diziListe[3].ToString(); // textBox1'in içine 4 yazar. } 26
  • 27.
    nU Dizi İçindeki Elemanıİndis Numarasına Göre Silme Fonksiyona parametre olarak girilen indis numarasını Arraylist‟in içinde bulup silmek için RemoveAt () kullanılır. Remove fonksiyonundan tek farkı parametre olarak elemanı değil elemanın indis numarasını almasıdır. Örnek: private void button15_Click(object sender, EventArgs e) { ArrayList diziListe = new ArrayList(); int[] dizi = new int[5] { 7, 8, 9, 10, 11 }; diziListe.AddRange(dizi); diziListe.Remove(2); textBox1.Text = diziListe[2].ToString(); // textBox1'in içine 10 yazar. } 27
  • 28.
    nU Dizilerle İlgili Örnekler Örnek1: Girilen sayıyı yazıya çeviren program Kodlar: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace YazıyaÇevir { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code private void InitializeComponent() { this.textBox1 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); this.textBox1.Location = new System.Drawing.Point(8, 24); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(200, 20); this.textBox1.TabIndex = 0; 28
  • 29.
    nU this.button1.Location = new System.Drawing.Point(216, 24); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 1; this.button1.Text = "Çevir"; this.button1.Click += new System.EventHandler(this.button1_Click); this.label1.BackColor = System.Drawing.SystemColors.ActiveCaption; this.label1.Location = new System.Drawing.Point(12, 56); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(48, 21); this.label1.TabIndex = 2; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 94); this.Controls.Add(this.label1); this.Controls.Add(this.button1); this.Controls.Add(this.textBox1); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); this.PerformLayout(); } #endregion [STAThread] static void Main() { Application.Run(new Form1()); } string çevir(string sayı) { int max_basamak_say = 18; //18 basamaklı-katrilyon string[] birler = { "", "bir", "iki", "üç", "dört", "beş", "altı", "yedi", "sekiz", "dokuz"}; string[] onlar = { "", "on", "yirmi", "otuz", "kırk", "elli", "altmış", "yetmiş", "seksen", "doksan"}; //Eğer 18 basamaktan daha fazla kullanacaksanız //katrilyondan önce o basamakları da ekleyin string[] binler = {"katrilyon", "trilyon", "milyar", "milyon", "bin", ""}; int i, uz ; int[] bas = new int[3]; string sonuç="", ara_sonuç=""; uz = sayı.Length; //sayının kullanılmayan basamaklarını sıfırla doldur sayı = sayı.PadLeft(max_basamak_say, '0'); //sayıyı üçerli basamaklar halinde ele al for (i = 0 ; i <= max_basamak_say / 3 - 1 ; i++) { 29
  • 30.
    nU bas[0] = int.Parse(sayı.Substring(i * 3, 1)); bas[1] = int.Parse(sayı.Substring((i * 3) + 1, 1)); bas[2] = int.Parse(sayı.Substring((i * 3) + 2, 1)); if (bas[0] == 0) ara_sonuç = ""; else if (bas[0] == 1) ara_sonuç = "yüz"; else ara_sonuç = birler[bas[0]] + "yüz"; ara_sonuç = ara_sonuç + onlar[bas[1]] + birler[bas[2]]; //basamak değeri oluşmadıysa yani 000 ise binler basamağını ekle if (ara_sonuç != "") ara_sonuç = ara_sonuç + binler[i]; //birbin olmaz if ((i > 1) && (ara_sonuç == "birbin")) ara_sonuç = "bin"; if (ara_sonuç != "") sonuç = sonuç + ara_sonuç + " "; } if (sonuç.Trim() == "") sonuç = "sıfır"; return sonuç.Trim(); } private void button1_Click(object sender, System.EventArgs e) { try { label1.Text = çevir(textBox1.Text); } catch { MessageBox.Show("Geçersiz sayı"); } } private void Form1_Load(object sender, System.EventArgs e) { this.AcceptButton=button1; } } } Ekran Çıktısı: 30
  • 31.
    nU Örnek 2: DinamikDizi Örneği Kayıt‟a tıklandığında; TextBox lara girilen değerleri alır, personel sayısını (girilen kayıt sayısı) , dizi boyutunu (textBox lara girilen bilgi sayısı) bulur. Listele butonuna tıklandığında forma girilen bilgileri 2. Formdaki ListBox‟a ekler. Kodlar: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace dinamikdizi { public partial class Form1 : Form { public Form1() { InitializeComponent(); } struct personel { public string ad, meslek, babaadi, dogumyeri, soyad; public override string ToString() { return "ADI=" + ad + ", SOYADI= " + soyad + " , MESLEĞĠ= " + meslek + ",BABA ADI=" + babaadi + ",DOĞUM YERĠ=" + dogumyeri; } } ArrayList Pers = new ArrayList(); private void button1_Click(object sender, EventArgs e) { personel p; p.ad = textBox1.Text; p.soyad = textBox2.Text; p.meslek = textBox3.Text; p.babaadi = textBox4.Text; p.dogumyeri = textBox5.Text; Pers.Add(p); label8.Text = Pers.Count.ToString(); label9.Text = Pers.Capacity.ToString(); } private void button2_Click(object sender, EventArgs e) { int i; Form2 frm = new Form2(); 31
  • 32.
    nU for (i = 0; i <= Pers.Count - 1; i++) frm.listBox1.Items.Add(Pers[i].ToString()); frm.Show(); } } } Ekran Çıktısı: 32
  • 33.
    nU Örnek 3: x1,x2,x3 0 ya da değerlerini alabilen değiĢkenler olmak üzere ax1+bx2+cx3=d denkleminin çözümünü sağlayan (x1,x2,x3) değerlerini sonuc1 label ına yazan, çözümü yoksa denklemin çözümü yok diye sonuç1 label ına yazan program. Bunun yanında d deki değerin asal olup olmadığını sonuc2 label ına yazan ve Temizle butonuna bastığında textBox ların içini 0 yapıp label lerin içini temizleyen program. Kodlar: Formun Kodları using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace deniz_tanır_04078541 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a1,a2,a3,a4; int[] sonuc = new int[3]; a1 = Convert.ToInt16(textBox1.Text); a2= Convert.ToInt16(textBox2.Text); a3 = Convert.ToInt16(textBox3.Text); a4 = Convert.ToInt16(textBox4.Text); sinav yeni = new sinav(a1, a2, a3, a4); sonuc = yeni.hesapla(); label5.Text = sonuc[0].ToString() + "," + sonuc[1].ToString()+","+sonuc[2].ToString(); if (sonuc[0] == 100) label5.Text = "çözüm yok"; } private void button2_Click(object sender, EventArgs e) { int a1, a2, a3, a4; int[] sonuc = new int[3]; a1 = Convert.ToInt16(textBox1.Text); a2 = Convert.ToInt16(textBox2.Text); a3 = Convert.ToInt16(textBox3.Text); 33
  • 34.
    nU a4 = Convert.ToInt16(textBox4.Text); sinav yeni = new sinav(a1, a2, a3, a4); label6.Text= yeni.asalmi(); } private void button3_Click(object sender, EventArgs e) { textBox1.Text = "0"; textBox2.Text = "0"; textBox3.Text = "0"; textBox4.Text = "0"; label5.Text = ""; label6.Text = ""; } } } Class Kodları using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace egesinav { class sinav { int a, b, c, d; int x1, x2, x3; public sinav(int a3, int b3, int c3, int d3) { a = a3; b = b3; c = c3; d = d3; } public int[] hesapla() { int[] k=new int[3]; k[0] = 100; x1 = 0; x2 = 0; x3 = 0; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; return k; } x1 = 0; x2 = 0; x3 = 1; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; 34
  • 35.
    nU return k; } x1 = 0; x2 = 1; x3 = 0; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; return k; } x1 = 0; x2 = 1; x3 = 1; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; return k; } x1 = 1; x2 = 0; x3 = 0; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; return k; } x1 = 1; x2 = 0; x3 = 1; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; return k; } x1 = 1; x2 = 1; x3 = 0; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; return k; } x1 = 1; x2 = 1; x3 = 1; if (x1 * a + x2 * b + x3 * c == d) { k[0] = x1; k[1] = x2; k[2] = x3; return k; } return k; } public string asalmi() { string k2; for (int i = 2; i < d; i++) 35
  • 36.
    nU if (d % i == 0) return "d sayısı asaldır"; return "d sayısı asal değildir"; } } } Ekran Çıktısı: 36
  • 37.
    nU Örnek 4: TersÇevir butonuna basıldığında textBox‟daki girilen değeri ListBox‟a ters çevirerek atar. Ekle butonuna basıldığında textBox‟a girilen değeri aynen ListBox‟a yazar. Maç Sonucu butonuna basıldığında textBox‟a girilen değere göre kazanan kazanamayanı belirleyip MessagaBox‟ta uyarı verir. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication6 { public partial class Form1 : Form { string[] isimler = new string[100]; int [] sans=new int [3]; int sayac,sayac2; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int i; try { label2.Text = ""; for (i = textBox1.Text.Length - 1; i >= 0; i--) { label2.Text += textBox1.Text.Substring(i, 1); } listBox1.Items.Add(textBox1.Text.PadRight(15) + label2.Text); } catch { ; } } private void Form1_Load(object sender, EventArgs e) { listBox1.Font = new Font("courier new", 10, FontStyle.Regular); listBox2.Font = new Font("courier new", 10, FontStyle.Regular); 37
  • 38.
    nU listBox3.Font = new Font("courier new", 10, FontStyle.Regular); listBox1.Items.Add("Kelime".PadRight(15) + "Tersi"); listBox2.Items.Add("Adı Soyadı".PadRight(15) + "Telefon No"); listBox3.Items.Add("Adı Soyadı"); } private void button2_Click(object sender, EventArgs e) { try { isimler[sayac] = textBox2.Text; sayac++; listBox2.Items.Add(textBox2.Text.PadRight(15) + textBox3.Text); } catch { ; } } private void button3_Click(object sender, EventArgs e) { int rsayi; Random r = new Random(); try { if (int.Parse(textBox4.Text) > int.Parse (textBox5.Text)) { while (sayac2 < 3) { rsayi = r.Next(sayac); if (Array.IndexOf(sans, rsayi) == -1) { sans[sayac2] = rsayi; sayac2++; } } for (int k = 0; k < sayac2; k++) { listBox3.Items.Add(isimler[sans[k]].PadRight(15)); } sayac2 = 0; } else { MessageBox.Show("Takımınız kaybettiğinden dolayı kontür kazanan olmamıştır"); } } catch { ; } 38
  • 39.
    nU } } } Ekran Çıktısı 39
  • 40.
    nU Örnek 5: 6tane sayı üretir ve bunları sıralar. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication10 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string sayilar; private void button1_Click(object sender, EventArgs e) { int sayi, i; Random rastgele = new Random(); for (i = 0; i < 6; i++) { sayi = rastgele.Next(1, 50); sayilar += sayi.ToString() + " "; label1.Text = sayilar; } } private void button2_Click(object sender, EventArgs e) { string[] sirala = new string[6]; int i; sirala = sayilar.Split(' '); Array.Sort(sirala); label2.Text = " "; for (i = 0; i < 6; i++) { label2.Text += sirala[i].ToString() + " "; }}}} Ekran Çıktısı 40
  • 41.
    nU Örnek 6: 0‟dan100 e kadar rastgele sayılara oluĢturulmaktadır. Daha sonra bu sayıların en büyüğü, en küçüğü ve ortalaması bulunmaktadır. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace dizidenemeleri { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int max, min, ortalama, toplam; Random rastgelesayi = new Random(); int[] dizi = new int[100]; for (int i = 0; i < 100; i++) { dizi[i] = rastgelesayi.Next(500); } max = dizi[0]; min = dizi[0]; toplam = 0; ortalama = 0; for (int i = 0; i < 100; i++) { if (max < dizi[i]) { max = dizi[i]; } if (min > dizi[i]) { min = dizi[i]; } toplam += dizi[i]; } label4.Text = max.ToString(); label5.Text = min.ToString(); ortalama = toplam / 100; label6.Text = ortalama.ToString(); int yedek; for (int i = 0; i < 100; i++) { 41
  • 42.
    nU for (int j = 0; j < 100; j++) { if (dizi[i] > dizi[j]) { yedek = dizi[j]; dizi[j] = dizi[i]; dizi[i] = yedek; } } } listBox1.Items.Clear(); for (int i = 0; i < 100; i++) { listBox1.Items.Add(dizi[i]); } } } } Ekran Çıktısı 42
  • 43.
    nU Örnek 7: SayısalLoto Programı; 1 ve 49 arası 6 tane sayı üretilir. Üretilen bu sayıların aynı olup olmadığına bakılır. Sayılar birbirinden farklı olduğunda üretilen sayıları sayac numarasına göre elemanlara atılır. Dizi elemanları küçükten büyüğe sıralanır. Label a aktarılır. Kodlar private void button1_Click(object sender, EventArgs e) { //sayısal lotoda 6 sayı üretildiği için 6 elemanlı dizi oluşturuldu. Random r = new Random(); int rastgele; int sayac=0; int[] sayilar = new int[6]; while (sayac < 6) { rastgele = r.Next(1, 50); //1 ile 49 arasında rastgele sayı üretilir if (Array.IndexOf(sayilar, rastgele) == -1) //dizinin içinde aynı sayı yoksa { sayilar[sayac] = rastgele; //üretilen rastgele sayiyi dizinin sayac kaç ise o elemanına ata sayac++; } } Array.Sort(sayilar);//diziyi küçükten büyüğe sıralar label1.Text = sayilar[0].ToString(); //label1 e sayilar dizisinin 1.elemanını yaz label2.Text = sayilar[1].ToString(); label3.Text = sayilar[2].ToString(); label4.Text = sayilar[3].ToString(); label5.Text = sayilar[4].ToString(); label6.Text = sayilar[5].ToString(); } Ekran Çıktısı 43
  • 44.
    nU Örnek 8: TextBox‟adeğer girilir. 2. textBox‟ a değiĢtirmek istediğiniz harfi,3. textBox‟a yeni değer girilir. “DeğiĢtir” butonuna tıklandığında label da kelimenin değiĢtirilmiĢ hali yazılır. Kodlar public string degistir(string cumle,char a,char b) { for (int i = 0; i < cumle.Length; i++) { if (cumle[i] == a) label4.Text += b.ToString(); else label4.Text += cumle[i].ToString(); } return cumle; } private void button1_Click(object sender, EventArgs e) { string cumle1 = textBox1.Text; char a = Convert.ToChar(textBox2.Text); char b = Convert.ToChar(textBox3.Text); degistir(cumle1, a, b); } Ekran Çıktısı 44
  • 45.
    nU Örnek 9: SuDoku Oyunu Form Ekranının Kodları: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Sudoku { public partial class sudoku_frm : Form { int[,] sudoku = new int[9, 9]; Sudoku_Kontrol kontrolet = new Sudoku_Kontrol(); Sudoku_Coz coz = new Sudoku_Coz(); public sudoku_frm() { InitializeComponent(); } private void Sayi_Giris(object sender, EventArgs e) { if (((TextBox)(sender)).Text == "1" || ((TextBox)(sender)).Text == "2" || ((TextBox)(sender)).Text == "3" || ((TextBox)(sender)).Text == "4" || ((TextBox)(sender)).Text == "5" || ((TextBox)(sender)).Text == "6" || ((TextBox)(sender)).Text == "7" || ((TextBox)(sender)).Text == "8" || ((TextBox)(sender)).Text == "9") { if (kontrolet.Ekleme_Izın(sudoku, Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)), Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1)), Convert.ToInt32(((TextBox)(sender)).Text))) { sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1))]=Convert.ToInt32(((TextBox)(sender)).Text); } else { sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)), Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1))] = 0; ((TextBox)(sender)).Text = null; } } else { sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)), Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1))] = 0; ((TextBox)(sender)).Text = null; } } 45
  • 46.
    nU private void sudoku_frm_Load(object sender, EventArgs e) { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { string isim = j.ToString() + i.ToString(); TextBox hucre = new TextBox(); hucre.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(162))); hucre.Location = new System.Drawing.Point(i*35+20, j*35+20); hucre.MaxLength = 1; hucre.Multiline = true; hucre.Name = isim; hucre.Size = new System.Drawing.Size(30, 30); hucre.TabIndex = 0; hucre.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; hucre.BackColor = Color.GhostWhite; hucre.AllowDrop = true; hucre.TextChanged+=new EventHandler(Sayi_Giris); hucre.DragDrop+=new DragEventHandler(hucre_DragDrop); hucre.DragOver+=new DragEventHandler(hucre_DragOver); hucre.Click += new EventHandler(hucre_Click); Controls.Add(hucre); } } } private void hucre_Click(object sender, EventArgs e) { for (int i = 0; i < 9; i++) { sayilarMenu.Items[i].Enabled=false; } for (int i = 1; i < 10; i++) { if (kontrolet.Ekleme_Izın(sudoku, Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)), Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1)), i)) { sayilarMenu.Items[i-1].Enabled=true; } } sayilarMenu.Show(((TextBox)(sender)).Location.X + this.Location.X+40, ((TextBox)(sender)).Location.Y + this.Location.Y+28); } private void sudoku_frm_Paint(object sender, PaintEventArgs e) { Pen kalem = new Pen(Brushes.Black, 3); e.Graphics.DrawLine(Pens.Chocolate, 18, 17, 332, 17); e.Graphics.DrawLine(kalem, 18, 122, 332, 122); e.Graphics.DrawLine(kalem, 18, 227, 332, 227); 46
  • 47.
    nU e.Graphics.DrawLine(Pens.Chocolate, 18, 332, 332, 332); e.Graphics.DrawLine(Pens.Chocolate, 17, 18, 17, 332); e.Graphics.DrawLine(kalem, 122, 18, 122, 332); e.Graphics.DrawLine(kalem, 227, 18, 227, 332); e.Graphics.DrawLine(Pens.Chocolate, 332, 18, 332, 332); e.Graphics.DrawLine(Pens.Black, 18, 52, 332, 52); e.Graphics.DrawLine(Pens.Black, 18, 87, 332, 87); e.Graphics.DrawLine(Pens.Black, 18, 157, 332, 157); e.Graphics.DrawLine(Pens.Black, 18, 192, 332, 192); e.Graphics.DrawLine(Pens.Black, 18, 262, 332, 262); e.Graphics.DrawLine(Pens.Black, 18, 297, 332, 297); e.Graphics.DrawLine(Pens.Black, 52, 18, 52, 332); e.Graphics.DrawLine(Pens.Black, 87, 18, 87, 332); e.Graphics.DrawLine(Pens.Black, 157, 18, 157, 332); e.Graphics.DrawLine(Pens.Black, 192, 18, 192, 332); e.Graphics.DrawLine(Pens.Black, 262, 18, 262, 332); e.Graphics.DrawLine(Pens.Black, 297, 18, 297, 332); } private void yeni_btn_Click(object sender, EventArgs e) { Random rdn = new Random(); int oyun = rdn.Next(1, 6); switch (mod_sec.Text) { case "Oyun Yarat": TextBox hucre = new TextBox(); for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") { hucre = (TextBox)this.Controls[i]; hucre.Text = null; hucre.ReadOnly = false; hucre.BackColor = Color.GhostWhite; } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { sudoku[i, j] = 0; } } break; case "Kolay": yukle("oyunlar/k" + oyun + ".sdk"); break; case "Normal": yukle("oyunlar/n" + oyun + ".sdk"); break; case "Zor": yukle("oyunlar/z" + oyun + ".sdk"); break; 47
  • 48.
    nU } } private void kaydet_btn_Click(object sender, EventArgs e) { if (kaydet()) { MessageBox.Show("Başarı ile kaydedildi.", "Mesaj"); } else { MessageBox.Show("Kayıt edilemedi.", "Mesaj"); } } private void yukle_btn_Click(object sender, EventArgs e) { if (yukle()) { MessageBox.Show("Başarı ile yüklendi.","Mesaj"); } else { MessageBox.Show("Yüklenemedi", "Mesaj"); } } bool kaydet() { SaveFileDialog kaydet = new SaveFileDialog(); kaydet.Title = "Sudoku Kaydet"; kaydet.Filter = "Sudoku Dosyası (*.sdk) |*.sdk"; if (kaydet.ShowDialog() != DialogResult.OK) { return false; } string veri = null; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { veri += sudoku[i, j] + ","; } veri += sudoku[i, 8] + "rn"; } for (int i = 0; i < 8; i++) { veri += sudoku[8, i] + ","; } veri += sudoku[8, 8]; System.IO.File.WriteAllText(kaydet.FileName, veri); TextBox hucre = new TextBox(); for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") { hucre = (TextBox)this.Controls[i]; hucre.Text = null; 48
  • 49.
    nU hucre.ReadOnly = false; hucre.BackColor = Color.GhostWhite; } } return true; } bool yukle() { int[,] gecici = new int[9, 9]; OpenFileDialog yukle = new OpenFileDialog(); yukle.Title = "Sudoku Yükle"; yukle.Filter = "Sudoku Dosyası (*.sdk) |*.sdk"; if (yukle.ShowDialog() != DialogResult.OK) { return false; } TextBox hucre = new TextBox(); for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") { hucre = (TextBox)this.Controls[i]; hucre.Text = null; hucre.ReadOnly = false; hucre.BackColor = Color.GhostWhite; } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { sudoku[i, j] = 0; } } string veri = System.IO.File.ReadAllText(yukle.FileName); string[] satirlar = veri.Split("r".ToCharArray()); for (int i = 0; i < 9; i++) { string LFsilme = satirlar[i]; if (i != 0) { LFsilme = satirlar[i].Substring(1, satirlar[i].Length - 1); } string[] hucreler = LFsilme.Split(Convert.ToChar(",")); for (int j = 0; j < 9; j++) { gecici[i, j] = Convert.ToInt32(hucreler[j]); } } int h = 0; int k = 0; for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") 49
  • 50.
    nU { hucre = (TextBox)this.Controls[i]; while (h < 9) { while (k < 9) { hucre.Text = gecici[k, h].ToString(); if (gecici[k,h]!=0) { hucre.ReadOnly = true; hucre.BackColor = Color.Goldenrod; } k++; break; } if (k == 9) { h++; k = 0; } break; } } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { sudoku[i, j] = gecici[i, j]; } } return true; } void yukle(string dosya) { int[,] gecici = new int[9, 9]; TextBox hucre = new TextBox(); for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") { hucre = (TextBox)this.Controls[i]; hucre.Text = null; hucre.ReadOnly = false; hucre.BackColor = Color.GhostWhite; } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { sudoku[i, j] = 0; } } string veri = System.IO.File.ReadAllText(dosya); string[] satirlar = veri.Split("r".ToCharArray()); 50
  • 51.
    nU for (int i = 0; i < 9; i++) { string LFsilme = satirlar[i]; if (i != 0) { LFsilme = satirlar[i].Substring(1, satirlar[i].Length - 1); } string[] hucreler = LFsilme.Split(Convert.ToChar(",")); for (int j = 0; j < 9; j++) { gecici[i, j] = Convert.ToInt32(hucreler[j]); } } int h = 0; int k = 0; for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") { hucre = (TextBox)this.Controls[i]; while (h < 9) { while (k < 9) { hucre.Text = gecici[k, h].ToString(); if (gecici[k, h] != 0) { hucre.ReadOnly = true; hucre.BackColor = Color.Goldenrod; } k++; break; } if (k == 9) { h++; k = 0; } break; } } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { sudoku[i, j] = gecici[i, j]; } } } private void coz_btn_Click(object sender, EventArgs e) { if (coz.Coz(sudoku, 0, 0)) { MessageBox.Show("Sudoku Çözüldü.","Mesaj"); 51
  • 52.
    nU TextBox hucre = new TextBox(); int[,] gecici = new int[9, 9]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { gecici[i, j] = sudoku[i, j]; } } for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") { hucre = (TextBox)this.Controls[i]; hucre.Text = null; hucre.ReadOnly = true; } } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { sudoku[i, j] = 0; } } int h = 0; int k = 0; for (int i = 0; i <= Controls.Count - 1; i++) { if (Controls[i].GetType().Name == "TextBox") { hucre = (TextBox)this.Controls[i]; while (h < 9) { while (k < 9) { hucre.Text = gecici[k, h].ToString(); k++; break; } if (k == 9) { h++; k = 0; } break; } } } } else { MessageBox.Show("Sudoku Çözülemedi.","Mesaj"); 52
  • 53.
    nU } } private void sayi_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ((Label)(sender)).DoDragDrop(((Label)(sender)).Image, DragDropEffects.All); } } private void hucre_DragOver(object sender, System.Windows.Forms.DragEventArgs e) { if (e.KeyState == 1) { e.Effect = DragDropEffects.Copy; } } private void hucre_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { if (e.Data.GetData(DataFormats.Bitmap) == sayi1.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "1"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi2.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "2"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi3.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "3"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi4.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "4"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi5.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "5"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi6.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "6"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi7.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "7"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi8.Image & ((TextBox)(sender)).ReadOnly == false) 53
  • 54.
    nU { ((TextBox)(sender)).Text = "8"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi9.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "9"; } } private void MenuSayi1_Click(object sender, EventArgs e) { SendKeys.Send("1"); } private void MenuSayi2_Click(object sender, EventArgs e) { SendKeys.Send("2"); } private void MenuSayi3_Click(object sender, EventArgs e) { SendKeys.Send("3"); } private void MenuSayi4_Click(object sender, EventArgs e) { SendKeys.Send("4"); } private void MenuSayi5_Click(object sender, EventArgs e) { SendKeys.Send("5"); } private void MenuSayi6_Click(object sender, EventArgs e) { SendKeys.Send("6"); } private void MenuSayi7_Click(object sender, EventArgs e) { SendKeys.Send("7"); } private void MenuSayi8_Click(object sender, EventArgs e) { SendKeys.Send("8"); } private void MenuSayi9_Click(object sender, EventArgs e) { SendKeys.Send("9"); } } } 54
  • 55.
    nU Class Ekranının Kodları 1. Sudoku_Kontrol Kodları using System; using System.Collections.Generic; using System.Text; namespace Sudoku { class Sudoku_Kontrol { private bool Satir_Kontrol(int[,] sudoku, int satir, int kontrol) { for (int j = 0; j < 9; j++) { if (sudoku[satir, j] == kontrol) { return false; } } return true; } private bool Sutun_Kontrol(int[,] sudoku, int sutun, int kontrol) { for (int i = 0; i < 9; i++) { if (sudoku[i, sutun] == kontrol) { return false; } } return true; } private bool Bolge_Kontrol(int[,] sudoku, int satir, int sutun, int kontrol) { for (int i = satir - (satir % 3); i < (satir - (satir % 3)) + 3; i++) { for (int j = sutun - (sutun % 3); j < (sutun - (sutun % 3)) + 3; j++) { if (sudoku[i, j] == kontrol) { return false; } } } return true; } 55
  • 56.
    nU public bool Ekleme_Izın(int[,]sudoku, int satir, int sutun, int kontrol) { if (Sutun_Kontrol(sudoku, sutun, kontrol) && Satir_Kontrol (sudoku, satir, kontrol) && Bolge_Kontrol(sudoku, satir, sutun, kontrol)) { return true; } return false; } } } 2. Sudoku_Coz Kodları Ekran Çıktısı Oyunun Kuralları 1. Sudoku 9*9 kareden oluĢan bir tablodan oluĢur. 2. Sudoku tablosu 3*3‟lük 9 kareye bölünür 3. Sudoku oyununda sütun ve satırlarda her rakam sadece 1 defa kullanılabilir. 4. Sudoku oyununda ayrıca 3*3‟lük kutucuklarda da 1‟den 9‟a kadar olan rakamlardan sadece biri bulunabilir. 5. Sudoku oyununda amaç boĢ karelere en kısa sürede doğru rakamları koyarak tüm tabloyu doldurmaktır. Form Ekranının Anlatılması Ġlk olarak ComboBox‟tan oyunun zorluk dereceleri seçilir. 1. Seçenek: Oyun Yarat ComboBox‟tan “Oyun Yarat” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk karelerden oluĢan bildiğimiz sudoku form ekranı boĢ olarak gelir. BoĢ olarak gelmesinin sebebi oyunu bizim yaratacak olmamızdandır. 56
  • 57.
    nU Bu boĢ kutucuklaratıkladığımızda 1-9 arası sayılar çıkar istediğimiz yerlere yerleĢtirebiliriz. Sayıları yerleĢtirirken kural gereği satır ve sütunlarda bunun yanında 3*3 lük karelerde aynı rakam tekrarı yapılmayacaktır. Kod da bunun kontrolü sağlanmıĢtır Sudoku_Kontrol.cs class dosyasıyla kontrol yapılmıĢtır. 57
  • 58.
    nU 2. Seçenek: Kolay ComboBox‟tan “Kolay” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak kolay seviyede gelir. 3. Seçenek: Normal ComboBox‟tan “Normal” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak normal seviyede gelir. 4. Seçenek: Zor ComboBox‟tan “Zor” u seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak zor seviyede gelir. 58
  • 59.
    nU Çöz Butonu “Çöz” butonunatıklandığında; Sudoku Çözüldü uyarısı gelir. “Tamam”, butonuna tıkladığımızda; sudoku çözülür. Sudokunun çözülmesi Sudoku_Coz .cs class dosyasıyla sağlanmıĢtır. Yükle Butonu Yükle butonuna tıkladığımızda herhangi bir yerdeki uzantısı .sdk olan dosyaları yükleyebiliriz. Nedeni sebebi filter özelliğinde sadece “ *.sdk|*.sdk “ uzantısının olmasıdır. Dosya yükleyemediğimizde; aĢağıdaki uyarıyı verir. 59
  • 60.
    nU Kaydet Butonu Kaydet butonunatıkladığımızda dosyayı istediğimiz yere kaydeder. Kaydedilemezse; aĢağıdaki uyarıyı verir. break; case "Kolay": yukle("oyunlar/k" + oyun + ".sdk"); break; case "Normal": yukle("oyunlar/n" + oyun + ".sdk"); break; case "Zor": yukle("oyunlar/z" + oyun + ".sdk"); break; Kodda yer alan oyunlar/k, oyunlar/n, oyunlar/z programın exe dosyasının bulunduğu yerdeki oyunlar klasöründen alınmıĢtır. Bu dosyaların uzantısı “.sdk ” (uzantı “ .txt ” de olabilirdi)diye kaydedilmiĢtir. Bu dosyaların içinde 9*9 Ģeklinde oyunun zorluk derecesine göre matrisler bulunmaktadır. 60
  • 61.
    nU Örnek 10: TextBox‟agirilen değeri “Sırala” butonuna bastığımızda a-z sırasına göre ListBox‟a listeler. Bunun yanında birden fazla değer varsa onları da sıraya sokar. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace dizidenemeleri { public partial class Form7 : Form { public Form7() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string st=""; st = textBox1.Text.ToString(); char[] harfler = new char[st.Length]; for (int i = 0; i<st.Length ; i++) { harfler[i] = st[i]; } Array.Sort(harfler ); foreach (char item in harfler) { listBox1.Items.Add(item); } } } } 61
  • 62.
    nU Ekran Çıktısı Örnek 11:Textbox‟a girilen sayıya kadar olan sayıları ListBox‟a dik üçgen olarak ekler. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace dizidenemeleri { public partial class Form6 : Form { public Form6() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int i = 0; int j = 0; string gec = null; gec = ""; listBox1.Items.Clear(); for(i=1;i<Convert.ToInt16(textBox1.Text);i++) { for(j=1;j<=i;j++) { 62
  • 63.
    nU gec=gec+""+j; } listBox1.Items.Add(gec); gec=""; } gec=""; listBox2.Items.Clear(); for(i=1;i<Convert.ToInt16(textBox1.Text);i++) { for(j=1;j<=i;j++) { gec=gec+""+j; } listBox2.Items.Add(gec); gec=""; } } } } Ekran Çıktısı 63
  • 64.
    nU Örnek 12: Klavyedengirilen n elemanlı bir a dizisinin elemanlarının karelerini alarak b dizisini; kareköklerini alarak c dizisini oluĢturup bu yeni 2 dizinin skaler çarpımını bulan programdır. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DiziDenemeleri2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int sayi1, a, b; sayi1 = int.Parse(textBox1.Text); int[] dizi1 = new int[sayi1]; double []dizi2= new double[sayi1]; double[] dizi3 = new double[sayi1]; double[] dizi4 = new double[sayi1]; Random rasgele = new Random(); for (a = 0; a < sayi1; a++) { dizi1[a] = rasgele.Next(1, 100); } for (a = 0; a < sayi1; a++) listBox1.Items.Add(dizi1[a]); for (b = 0; b < sayi1; b++) { dizi2[b] = dizi1[b] * dizi1[b]; listBox2.Items.Add(dizi2[b]); dizi3[b] = Math.Sqrt(dizi1[b]); listBox3.Items.Add(dizi3[b]); dizi4[b] = dizi2[b] * dizi2[b]; listBox4.Items.Add(dizi4[b]); } }}} 64
  • 65.
  • 66.
    nU Örnek 12: Klavyedenküçük harflerle girilen bir cümledeki sesli harflerin sayısını ve cümledeki yerlerini bulan program. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DiziDenemeleri2 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string[] sesli = { "a", "e", "ı", "i", "o", "ö", "u", "ü" }; string cumle; cumle = textBox1.Text.ToLower(); int sayac = 0, zemin = 0; for (int a = 0; a < sesli.Length; a++) { for (int b = 0; b < sesli.Length; b++) { if (sesli[a] == cumle.Substring(b, 1)) { sayac++; zemin = b + 1; //sesli harfin bulndğu yeri belirtiyoruz. listBox1.Items.Add(cumle[b] + "--cumlenin" + zemin + ".harfi"); } } } label2.Text = sayac.ToString() + " " + "sesli harf bulunmaktadır."; } } } 66
  • 67.
  • 68.
    nU Örnek 13: Dinamikdizi örneği 2. Bu örnekte kullanıcıdan kaç boyutlu dizi oluĢturmak istediği sorulmaktadır. Ardından kullanıcıdan bu dizinin elemanlarını girmelerini istemektedir. Elemanları ListBox‟a eklemektedir. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DiziDenemeleri2 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } string[] dizi = null; private void button1_Click(object sender, EventArgs e) { int dBoyut; if (!Int32.TryParse(textBox1.Text, out dBoyut)) { MessageBox.Show("Girilen Değer Sayısal Olmalı."); return; } dizi = new string[dBoyut]; MessageBox.Show(String.Format("{0} elemanlı bir dizi oluşturuldu.", dBoyut)); } int sIndex = 0; private void button2_Click(object sender, EventArgs e) { if (dizi == null || sIndex == dizi.Length) { MessageBox.Show("Dizi Boyutu Aşıldı veya dizi oluşturulmadı."); return; } dizi[sIndex++] = textBox2.Text; //dizinin tum elemanlarını listboxa sıfırdan atalım. listBox1.Items.Clear(); foreach (string eleman in dizi) { string nEleman = eleman; 68
  • 69.
    nU if (eleman == null) nEleman = "Değer Atanmamış"; listBox1.Items.Add(nEleman); } } } } Ekran Çıktısı Dizi boyutunu girip, “Dizi OluĢtur” butonuna tıklıyoruz. Böylece “5 elemanlı bir dizi oluĢturuldu” iletisi geliyor. “Tamam” butonuna tıkladıktan sonra; Değer kısmına gelip, 5 boyutlu oluĢturduğumuz dizinin elemanlarını giriyoruz. Elemanları girdikten sonra “Diziye Değer At” butonuna tıklıyoruz. Böylece girdiğimiz elemanlar ListBox‟a ekleniyor. 69
  • 70.
    nU Örnek 14: TextBox‟agirilen sayıları 200, 100, 50, 20, 10, 5, 1‟lik banknotlara bölüp listBox‟da gösteren uygulama Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DiziDenemeleri2 { public partial class Form4 : Form { public Form4() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int[] banknot = {200, 100, 50, 20, 10, 5, 1 }; int para, adet, i; listBox1.Items.Clear(); para = int.Parse(textBox1.Text); for (i = 0; i <= 6; i++) { adet = para / banknot[i]; listBox1.Items.Add(adet.ToString() + "adet" + Convert.ToString(banknot[i] + "YTL")); para %= banknot[i]; } } } } Ekran Çıktısı 70
  • 71.
    nU Örnek 15: TextBox1 ve TextBox2 „ye girilen elemanları Label‟lara ekliyip “KesiĢim” butonuna basıldığında 2 kümenin ortak elemanlarını veren program. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form12 : Form { int[] a = new int[5]; int[] b = new int[5]; int i = 0, j = 0; public Form12() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { a[i] = Convert.ToInt16(textBox1.Text); label1.Text = label1.Text + a[i].ToString()+" "; i++; textBox1.Text = ""; textBox1.Focus(); } private void button2_Click(object sender, EventArgs e) { b[j] = Convert.ToInt16(textBox2.Text); label2.Text = label2.Text + b[j].ToString()+ " "; j++; textBox2.Text = ""; textBox2.Focus(); } private void button3_Click(object sender, EventArgs e) { for (int x = 0; x <= a.Length - 1; x++) for (int y = 0; y < b.Length; y++) if (a[x] == b[y]) { label3.Text = label3.Text + a[x].ToString() + " " ; 71
  • 72.
    nU break; }}}} Ekran Çıktısı 72
  • 73.
    nU C#’ ta CLASS YAPISI C#’ta Class Yapısı Class‟ı bir aile gibi düĢünebilirsiniz. Ailenin bireylerin class değiĢkenleri olarak, aile fertlerinin çalıĢma hayatlarında kazandıkları mal varlıklarını o class‟ın fonksiyonu olarak gerçekleĢtirdikleri sosyal faaliyetleri de o class‟ın procedür‟ü olarak algılamak doğru olacaktır. Örnek olarak: BÜYÜKBABANIN ADI SOYADI: TAHĠR SARIKAYA BABANIN ADI SOYADI: ĠSMAĠL SARIKAYA ÇOCUĞUN ADI SOYADI: HAKAN SARIKAYA Yukarıdaki fertlerden oluĢan class‟ın isminin SARIKAYA class‟ı olduğunu düĢünelim. BaĢka bir soyadına sahip olan sülalenin (class‟ın) çocuğu tanıyabilmeleri için kullanacakları mantık SARIKAYA‟ dan TAHĠR OĞLU, ĠSMAĠL OĞLU HAKAN olacaktır. ĠĢte c# bunu SARIKAYA. TAHĠR. ĠSMAĠL. HAKAN olarak kullanır. (oğlu kelimesi (.) ile ifade edilmiĢtir.) Programın içinde noktaya (.) basılınca açıklayıcı seçeneklerin gelmesi tamamen bu yapının bir ürünüdür. C#‟ın içerisinde o kadar çok class tanımlanmıĢtır ki birçok uygulamada class tanımlamaya gerek kalmamaktadır. Kodlamada kullandığımız bütün fonksiyonların bir class‟ın üyesi olduğunu asla unutmayınız. Bir class‟ın içerisinde değiĢken, fonksiyon, procedur veya baĢka bir class bulunabilir. Bu yapıların tanımlanma Ģekilleri önem arz eder. Çünkü bu class‟taki bir değiĢkeni veya bir procedur‟ü baĢka bir class kullanacak mı yoksa bu class‟ımı kullanacak veya miras hakları olacak mı olmayacak mı bunlar iyice etüt edilmeli ona göre tanımlanmalıdır. 73
  • 74.
    nU Sınıflara örnek olarakrandom, pen, color, button, radioButton vb. örnek verebiliriz.Bu sınıflar c#.net kütüphanesinde bulunan hazır sınıflardır.Bu sınıflar gibi bizde kendimize özel sınıflar oluĢturabiliriz. : Metod. : Özellik. : Olay. Projeye class eklemek için; Project/ Add Class/ Class ve eklenir. Ekrana aĢağıdaki kodlar gelir. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassDenemeleri //Projenizin ismidir { class Class1 //class'ınızın ismini değiştirebilrisiniz { } } Örnek: Ġlk class örneğini yapacağız. Projemize yeniden bir class ekleyiniz. (Project/ Add Class/ Class yoluyla). Class‟ın using kısmına using System.Windows.Forms; ekleyiniz (MessagaBox.Show‟un çalıĢması için.) Class Kodları namespace ClassDenemeleri { class ilk { public void MesajVer() { MessageBox.Show("Ġlk class uygulaması"); } public double usVer(double taban,double us) { return Math.Pow(taban, us); 74
  • 75.
    nU } } } Form Kodları MesajVer() Fonksiyonu için; ilk yeni = new ilk(); private void button1_Click(object sender, EventArgs e) { yeni.MesajVer(); } usVer()Fonksiyonu için; ilk yeni = new ilk(); private void button1_Click(object sender, EventArgs e) { MessageBox.Show(yeni.usVer(2,5).ToString()); } Ekran Çıktısı 75
  • 76.
    nU Küçük Bilgiler Verilen bilgilerilerleyen konularda ayrıntılı olarak iĢlenecektir. 1- Class tanımlama yöntemleri Amacımız ogr. dan sonra ad ve soyadın görünüp onlarla iĢlem yapabilmekti. 2- Static Classlar Burada örneklem yazmadan no ve cinsiyet görünür. 3- Numaralandırıcı Tanımlama Sizemode mantığı yalnızca 2 değer alabilir. Burada örneklem yazmadan no ve cinsiyet görünür. 76
  • 77.
    nU Amacımız cinsiyet belirlerkencinsiyete değer atayabilmekti. 4- Constracter Sınıftan nesne üretilince otomatik olarak çalıĢacak olan metottur. Consracter’lar sınıfla aynı ismi alırlar ve otomatik çalışırlar. 5- Kullanıcının belli aralıklarda değer girmesini sağlamak a. Get: Kullanıcı değerleri okuyabilir. b. Set: Kullanıcı değerleri değiĢtirebilir. Örnek: public byte vize { get { return vize_notu; } set { if(value>=0 && value<=100) vize_notu= value; } } public byte final { get { return final_notu; } set { if (value >= 0 && value <= 100) final_notu = value; } } 77
  • 78.
    nU 6- This kullanımı public ogrenci() {// metod, 2.const., vize vefinali otomaik olarak 50 girer. this.vize_notu = 50; this.final_notu = 50; } 7- İşlem Yaptıran Veri Türleri public double ortalama() { return vize* 0.4 + final* 0.6; } Örnek: public class aile //class'ınızın ismini değiştirebilrisiniz { public static string adi_soyadi; //Form1 classından çağırılabilir private static string adresi; //Form1 class'ında çağırılmaz public int yasi; bool medeni_hal; public static string meslegi; long maasi; public const int sabit = 1000; public static long maashesapla(int katsayi, int kidem) { return sabit * katsayi * kidem; } public aile() { // // } } Örnek için yandaki tasarımı oluĢturunuz. Form1 çalıĢtırıldığında; 78
  • 79.
    nU Kıdem=5 Katsayı=3 girildiğindeMaaĢı=15000 olur. Örnek: Hesapla butonunun click olayına aĢağıdaki kodu ekleyin. private void button1_Click(object sender, EventArgs e) { aile.adi_soyadi = textBox1.Text; aile.adresi = textBox2.Text; aile.yasi = Convert.ToInt32(textBox3.Text); aile.medeni_hal = checkBox1.Checked; aile.meslegi = comboBox1.Text; aile.maasi = aile.maashesapla(Convert.ToInt32(textBox5.Text), Convert.ToInt32(textBox6.Text)); textBox4.Text = aile.maasi.ToString(); } Örneği inceleyecek olursanız; aile isminde bir class oluĢturulmuĢtur. Daha sonra bu class‟a ait özellikler ve “maashesapla” adında bir fonksiyon tanımlandı. Bu özellikler “public static” ile tanımlandığından Form1!in kod yordamından rahatlıkla çağırılabilir. Butona tıklandığında textBox‟larki tüm değerler aile class‟ının gerekli değiĢken değerlerine aktarılıp “maashesapla” fonksiyonu sayesinde “kidem” ve “katsayi” parametreleri kullanılarak “aile.maasi” hesaplanmıĢtır. Sonra da bu değer gerekli textBox4 sayesinde kullanıcıya gönderilmiĢtir. 79
  • 80.
    nU Bu örnekte kodyordamlarının herhangi bir tanesinde “aile.” yazdıktan sonra public static ile tanımladığımız tüm özelliklerin kolaylık olsun diye listelendiğidir, gerekli olanı seçebilirsiz. Class‟ların içerisindeki değiĢkenler, fonksiyonlar, procedure‟lerin hepsi public ile tanımlanmazlar (Genellikle public veya private kullanılır.). Çünkü public‟le tanımlananlara tüm classlar ulaĢabilir. ġimdi projenize herhangi bir isimde class ekliyoruz. public class nurdan { private int z = 5; private int hesapla(int kidem) { return kidem * z; } public nurdan() { // // // } } Button1 „in click olayına aĢağıdaki kodlar yazılır. private void button1_Click(object sender, EventArgs e) { int sonuc; nurdan yeni = new nurdan(); sonuc = yeni.hesapla(100); Form1.ActiveForm.Text = sonuc.ToString(); } Dikkat edecek olursanız hesapla function‟ı class‟ın içersinde public ile tanımlandığı için formdan “hesapla” function‟una ulaĢılabilir. Yalnız ulaĢma Ģekli ancak “nurdan” class‟ına yavru bir üye ile olabilir. Bu pojede yavru üye “yeni” olarak tanımlanmıĢtır. “yeni” yazıp “.” ‟ya basarsanız “hesapla” function‟u ekranda gözükecektir. Ġkinci önemli hususta “z” nin private tanımlanmasının bizim için Ģimdilik önem arz etmemesidir, çünkü “z” ye direkt olarak eriĢim söz konusu değildir (hesapla function kullanılarak dolaylı ulaĢım sağlanmıĢtır). Bu örnekte “nurdan” yazıp “.” Ya basarsanız, hesapla function‟una ulaĢamazsınız. Eğer ulaĢmak isterseniz hesapla procedur‟ünü static olarak tanımlamalısınız. Kodu aĢağıdaki gibi değiĢtirin. 80
  • 81.
    nU Class Kodları public classnurdan { private static int z = 5; public static int hesapla(int kidem) { return kidem * z; } public nurdan() { // // // } } Form1 Kodları private void button1_Click(object sender, EventArgs e) { int sonuc; sonuc = nurdan.hesapla(100); Form1.ActiveForm.Text = sonuc.ToString();//500 yazar. } Burada artık “hesapla” procedur‟üne yavru üyeyle ulaĢmak mümkün değildir. Yani; nurdan yeni = new nurdan(); yeni // hesapla proceduru gözükmez.çnkü o nurdan class'ının static üyesi olup sadece nurdan class'ı tarafından kullanılır. 81
  • 82.
    nU Protected Obje Tanımlamak Bazenbir class‟ın içersindeki objelerin free olarak her class tarafından çağırılmasını istemeyebilir, sadece sizin izin verdiğiniz class‟lar tarafından kullanılmasını sağlayabilirsiniz. Bu tip durumda objeyi (değiĢkeni, procedürü, function‟u) protected ile tanımlamanız ve o objeyi çağıracak olan class‟a da referans vermeniz gerekir. ĠĢte örnek projenize herhangi bir isimli class‟ı ekledikten sonra aĢağıdaki kodu ekleyiniz. Class Kodları public class nurdan1 { protected string ad = "Nurdan Sarıkaya"; //sadece belirtilen class'lar kullanabilsin. } public class gazi : nurdan1 //nurdan1 classında protected tanımlanan objeleri kullan, public'lerde kullanalabilir. { public string adlar() { return ad; } } Form Kodları private void button1_Click(object sender, EventArgs e) { string sonuc; gazi yeni = new gazi(); sonuc = yeni.adlar(); //gazi classındaki adlar() metodu çağırılyor. Form2.ActiveForm.Text = sonuc; } Artık Form‟un üzerindeki koda tıklarsanız Formun baĢlığında “Nurdan Sarıkaya” yazısını göreceksiniz. Protected tanımlama struct yapısı içerisinde asla yapılamaz. Porgramınız çalıĢmaz. 82
  • 83.
    nU Ekran Çıktısı Butona tıkladıktanönce Butona tıkladıktan sonra Yukarıda görüldüğü üzere butona tıkladıktan sonra Form2 „nin text‟i “Nurdan Sarıkaya” olarak değiĢmiĢtir. 83
  • 84.
    nU Virtual ve OverrideMetods Tanımlamak Bazen bir class‟ta tanımlamıĢ olduğunuz metod‟a baĢka bir class‟tan eklenti yaparak ulaĢmak isterseniz kullanabileceğiniz metodlardır. Burada Virtual tanımladığınız metod protected olamaz, Public olmalıdır. Örnek: Class Kodları public class nurdan1 { public virtual string meslek(string mes) { return mes; } public class gazi : nurdan1 //nurdan1 classındaki virtual'ı kullanblir. { public override string meslek(string ulas) { return ulas + "Mühendisi"; // parametreyle eklenti olarak Mühendisi döndürür } } } Form Kodları private void button2_Click(object sender, EventArgs e) { string sonuc; gazi x = new gazi(); sonuc = x.meslek("Ġnş."); //gazi class'ındaki meslek metodu çağırılıyor. Form2.ActiveForm.Text = sonuc; //Ġnş. Mühendisi yazar. } 84
  • 85.
    nU Base Class Constructors Bazıdurumlarda bir değiĢkeni bir class‟ta tanımlayabilir (protected ile) diğer class‟larında kullanmasını sağlayabilirsiniz. Fakat her kullanımda gene eski değerini almasını isteyebilirsiniz. ĠĢte bu durumlar için kullanabileceğiniz bir yöntem örneği inceleyiniz. Projeniz “prestige” isminde bir class dahil ediniz ve o class‟a aĢağıdaki kodu ekleyiniz. Class‟ın using kısmına using System.Windows.Forms; ekleyiniz. Programa “using System.Windows.Forms;” eklemezseniz; “MessageBox.Show()” metodu çalıĢmayacaktır. Class Kodları namespace ClassDenemeleri { public class prestige { protected string ad = "Nurdan Sarıkaya"; //sadece istediğim classlar kullansın. } public class ev : prestige { public void metod(string adlar) { base.ad = adlar; MessageBox.Show(base.ad, "Başlık"); } } public class sonuc : prestige { public string son() { return base.ad; //ad değişkeninin değerini döndür } } 85
  • 86.
    nU Form Kodları private voidbutton1_Click(object sender, EventArgs e) { string deger; ev yeni = new ev(); sonuc bul = new sonuc(); yeni.metod("Hakan Sarıkaya"); deger = bul.son(); Form3.ActiveForm.Text = deger; } Ekran Çıktısı Bu Ģekilde tek bir değiĢken tanımlayarak her class‟ta kullanabiliriz (performansta artar). 86
  • 87.
    nU Class‟ların içerisindeki değiĢkenler, fonksiyonlar, procedure‟lerin hepsi public ile tanımlanmazlar (genellikle public veya private kullanılır). Çünkü public‟le tanımlananlara tüm class‟larca ulaĢılabilir. Tanımlama seçenekleri ve anlamları aĢağıda verilmiĢtir. Tanımlama Şekli Çağrılma Seçenekleri Public Kısıtlaması yok her class‟tan her fonksiyon ve procedure çağırabilir. Private Sadece oluĢturulduğu class‟taki fonksiyon veya procedure‟lerden çağırılabilir. Protected Sadece oluĢturulduğu class‟tan ve onun referans gösterildiği diğer class‟lara ait fonksiyon ve procedure‟lerden çağırılabilir. İnternal Bu class‟ a ait assembly tarafından çağırılabilir. Protected İnternal Protected ve Ġnternal‟ın ikisinin yaptığını yapar. Örnek: Project / Add Class/ Class / … .cs yoluyla projemize class ekliyoruz. MessageBox.Show() kullanabilmek için “using System.Windows.Forms;” kodumuza ekliyoruz. Class Kodları namespace ClassDenemeleri { class mesajlar { public void mesaj1() { MessageBox.Show("merhaba1"); } public void mesaj2() { MessageBox.Show("Merhaba2"); } } 87
  • 88.
    nU } Form Kodları private voidbutton1_Click(object sender, EventArgs e) { mesajlar msj = new mesajlar(); msj.mesaj1(); } private void button2_Click(object sender, EventArgs e) { mesajlar msj = new mesajlar(); msj.mesaj2(); } Ekran Çıktısı Aynı örneğin Form ekranında yapılışı; Form Kodları private void button1_Click(object sender, EventArgs e) { mesajlar msj = new mesajlar(); msj.mesaj1(); } private void button2_Click(object sender, EventArgs e) { mesajlar msj = new mesajlar(); msj.mesaj2(); } }} class mesajlar { public void mesaj1() 88
  • 89.
    nU { MessageBox.Show("Merhaba 1"); } public void mesaj2() { MessageBox.Show("Merhb 2"); } } Class kodları namespace kodlarının dıĢına yazılır. 89
  • 90.
    nU BitArray Sınıfı Boolean veyabyte türünde değerleri barındıran koleksiyondur. Mantıksal iĢlemler için kullanılabilir.(And,Or gibi)Bu sınıfı kullanabilmek için using System.Collections kod satırını eklemeniz gerekir. Kodlar public partial class bitarray : Form { public bitarray() { InitializeComponent(); } bool[]a= {true,false,false,true,false,true}; private void button1_Click(object sender, EventArgs e) { BitArray aGiris = new BitArray(a); foreach (bool i in aGiris) { listBox1.Items.Add(i); } } } Ekran Çıktısı 90
  • 91.
    nU Hashtable Sınıfı Veriler key-value(anahtar-değer)Ģeklinde tutulmaktadır. Veri türü object yani tüm veri türlerini kullanabilirsiniz. Key değiĢtirilemez ve boĢ değer içeremez ama value değiĢtirilebilir ve boĢ değer içerebilir. Bu sınıfı kullanabilmek için using System.Collections kod satırını eklemeniz gerekir. Add metodu: Key ve value elemanlarını ekleme iĢlemi için kullanılır. Kullanımı: Add(key,value) ContainsKey metodu: Belirtilen key değeri tanımlanan Hashtable sınıfı içinde var ise true yok ise false değerini döndürür. Kullanımı: ContainsKey(key) ContainsValue metodu: Belirtilen value değeri tanımlanan Hashtable sınıfı içinde var ise true yok ise false değerini döndürür. Kullanımı: ContainsKey(value) Örnek: Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace ClassDenemeleri { public partial class Form5 : Form { public Form5() { InitializeComponent(); } Hashtable htablo = new Hashtable(); private void button1_Click(object sender, EventArgs e) { htablo.Add(textBox1.Text, textBox2.Text); } 91
  • 92.
    nU private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(DictionaryEntry i in htablo) { listBox1.Items.Add("Key: " + i.Key + "value: " + i.Value); } } private void button3_Click(object sender, EventArgs e) { label3.Text = htablo.ContainsKey(textBox3.Text).ToString(); } } } Ekran Çıktısı Anahtarı (key) belirtilen bir elemanın değerini (value) çağırmak için htablo[key] komutu kullanılır. Örnek ile daha iyi anlaĢılacaktır. Örnek: Aynı kodun Kontrol butonu click olayı değiĢtirilmiĢtir. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; 92
  • 93.
    nU using System.Windows.Forms; using System.Collections; namespaceClassDenemeleri { public partial class Form5 : Form { public Form5() { InitializeComponent(); } Hashtable htablo = new Hashtable(); private void button1_Click(object sender, EventArgs e) { htablo.Add(textBox1.Text, textBox2.Text); } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(DictionaryEntry i in htablo) { listBox1.Items.Add("Key: " + i.Key + "value: " + i.Value); } } private void button3_Click(object sender, EventArgs e) { label3.Text = htablo[textBox3.Text].ToString(); } } } Ekran Çıktısı 93
  • 94.
    nU SortedList Sınıfı Veriler key-value(anahtar-değer) Ģeklinde tutulmaktadır. Hashtable‟dan farkı eklenen verileri alfabetik olarak sıralı bir Ģekilde tutmasıdır. Veri türü object yani tüm veri türlerini kullanabilirsiniz. Key değiĢtirilemez ve boĢ değer içeremez ama value değiĢtirilebilir ve boĢ değer içerebilir. Bu sınıfı kullanabilmek için using System.Collections kod satırını eklemeniz gerekir. Add metodu: Key ve value elemanlarını ekleme iĢlemi için kullanılır. Kullanımı: Add(key,value) ContainsKey metodu: Belirtilen key değeri tanımlanan SortedList sınıfı içinde var ise true yok ise false değerini döndürür. Kullanımı: ContainsKey(key) ContainsValue metodu: Belirtilen value değeri tanımlanan SortedList sınıfı içinde var ise true yok ise false değerini döndürür. Kullanımı: ContainsKey(value) Örnek: Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace ClassDenemeleri { public partial class Form5 : Form { public Form5() { InitializeComponent(); } SortedList sListe = new SortedList(); private void button1_Click(object sender, EventArgs e) { sListe.Add(textBox1.Text, textBox2.Text); 94
  • 95.
    nU } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(DictionaryEntry i in sListe) { listBox1.Items.Add("Key: " + i.Key + "value: " + i.Value); } } private void button3_Click(object sender, EventArgs e) { label3.Text = sListe.ContainsValue(textBox3.Text).ToString(); } } } Ekran Çıktısı 95
  • 96.
    nU Stack Sınıfı Son girenilk çıkar prensibiyle çalıĢır. Varsayılan olarak 10 elemanlıdır. Veri türü object yani tüm veri türlerini kullanabilirsiniz. Bu sınıfı kullana bilmek için using System.Collections kod satırını eklemeniz gerekir. Push metodu: Kolkeksiyona eleman eklemek için kullanılır. Kullanımı: Push(eleman) Pop Özelliği: Son giren elemanı vererek kollleksiyondan siler. Peek Özelliği: Son giren elemanı verir. Kollleksiyondan silmez. Clear Özelliği: Kolleksiyonun temizlenmesini sağlar. Count Özelliği: Son Kolleksiyonun eleman sayısını verir. Örnek: Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace ClassDenemeleri { public partial class Form6 : Form { public Form6() { InitializeComponent(); } Stack s = new Stack(); private void button1_Click(object sender, EventArgs e) { s.Push(textBox1.Text); } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(object i in s) { listBox1.Items.Add(i); 96
  • 97.
    nU } } private void button3_Click(object sender, EventArgs e) { label1.Text=s.Pop().ToString(); } private void button4_Click(object sender, EventArgs e) { label1.Text = s.Peek().ToString(); } } } Ekran Çıktısı 97
  • 98.
    nU Queue Sınıfı Ġlk girenilk çıkar prensibiyle çalıĢır. Varsayılan olarak 32 elemanlıdır.Veri türü object yani tüm veri türlerini kullanabilirsiniz. Bu sınıfı kullanabilmek için using System.Collections kod satırını eklemeniz gerekir. Enqueue metodu: Kolkeksiyona eleman eklemek için kullanılır. Kullanımı: Push(eleman) Dequeue Özelliği: Ġlk giren elemanı vererek kollleksiyondan siler. Peek Özelliği: Ġlk giren elemanı verir. Kolleksiyondan silmez. Clear Özelliği: Kolleksiyonun temizlenmesini sağlar. Count Özelliği: Son Kolleksiyonun eleman sayısını verir. Örnek: Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace ClassDenemeleri { public partial class Form6 : Form { public Form7() { InitializeComponent(); } Queue q = new Queue(); private void button1_Click(object sender, EventArgs e) { q.Enqueue(textBox1.Text); } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(object i in q) 98
  • 99.
    nU { listBox1.Items.Add(i); } } private void button3_Click(object sender, EventArgs e) { label1.Text=q.Dequeue().ToString(); } private void button4_Click(object sender, EventArgs e) { label1.Text = q.Peek().ToString(); } } } Ekran Çıktısı 99
  • 100.
    nU Class İçindeki Setve Get Deyimleri Set değeri almak, Get göndermek için kullanılır. Alınan değer value ile alınıyor, return ile gönderiliyor. Örnek: Kelimeyi alıp tekrar bize gönderen basit bir class oluĢturalım. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ClassDenemeleri3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { kelimeOkuYaz s = new kelimeOkuYaz(); s.oku = textBox1.Text; label1.Text = s.yaz(); } } } class kelimeOkuYaz { private string kelime; public string oku { set { kelime = value; } get { return kelime; } } public string yaz() { return kelime; } } 100
  • 101.
    nU Ekran Çıktısı Kodlar Kelime alıpgönderme iĢlemini fonksiyon kullanarak yapabiliriz. class kelimeOkuYaz { private string kelime; public string oku { set { kelime = value; } get { return kelime; } } private string araislem() { string s; s = kelime; return s; } public string yaz() { return araislem(); } } 101
  • 102.
    nU Örnek: Get veSet deyimlerini kullanarak iki kelimeyi okuyup bunları birleĢtiren metodu sınıf içinde oluĢturalım. Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ClassDenemeleri3 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { sinif s = new sinif(); s.adyaz = textBox1.Text; s.soyadyaz = textBox2.Text; label1.Text = s.birlestir(); } } } class sinif { private string ad; public string adyaz { set { ad = value; } get { return ad; } } private string soyad; public string soyadyaz { set { soyad = value; } get { return soyad; } } private string birles() { string a, b, c; a = ad; b = soyad; c = a + " " + b; return c; } public string birlestir() { return birles(); } } 102
  • 103.
    nU Ekran Çıktısı Örnek: Class Kodları using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; namespace sinif { class ogrenci { public string ad; public string soyad; private byte vize_notu; private byte final_notu; public static int no; public enum cins { Kız, Erkek }; public cins cinsiyet; public ogrenci(string ad, string soyad) { vize_notu = 50; final_notu = 50; this.ad = ad; this.soyad = soyad; } public byte vize { get { return vize_notu; } 103
  • 104.
    nU set { if(value>=0 && value<=100) vize_notu= value; } } public byte final { get { return final_notu; } set { if (value >= 0 && value <= 100) final_notu = value; } } public double ortalama() { return vize* 0.4 + final* 0.6; } } } Form Kodları private void button1_Click(object sender, EventArgs e) { ogrenci ogr = new ogrenci("Nurdan", "Sarıkaya"); //Aşırı yüklenmiş constrctrlr ogr.cinsiyet = ogrenci.cins.Kız; ogr.vize = Convert.ToByte(textBox1.Text); ogr.final = Convert.ToByte(textBox2.Text); textBox4.Text = ogr.cinsiyet.ToString(); textBox3.Text = ogr.ortalama().ToString(); textBox5.Text = ogr.ad.ToString(); textBox6.Text = ogrenci.no.ToString(); } 104
  • 105.
  • 106.
    nU Mevcut Class’ları Kullanma Örnek:Ekrana bir buton ekleyelim ve bu hazır butona basınca kendi butonumuz oluĢsun kendi butonumuza tıklayınca bize merhaba mesajını versin. Kodlar private void tiklama(object nesne, EventArgs e) { MessageBox.Show("Merhaba"); } private void button1_Click(object sender, EventArgs e) { Button b1 = new Button(); b1.Text = "Merhaba"; b1.Left = 110; b1.Top = 60; b1.Parent = this; // b1.Parent=Panel1 (Panel1 eklenirse) b1.Click += new EventHandler(tiklama); } Ekran Görüntüsü Açıklama: Yukarıda yazılan buton classı somut bir classtır. Örneğin math classı soyut bir classtır bir parente “canvasa” ihtiyacı vardır. b1.Parent = this; // form1' in butonumuzun sahibi olduğunu kasteder. Bizim butonumuzun görsel hale gelmesini sağlar. Thisde bu form da oluĢması için kullanılır. This yerine label1 vb. yazılabilir. Kullanıcı kuontrollü classlarda parent mutlaka yazılmalıdır. Bunun yanısıra olay oluĢturmalı: b1.Click += new EventHandler(tiklama); // butona olay atamak:EventHandler Olay atamayı bilmiyorsak form1 de bir adet buton ekle ve Program.cs ye git orada buton oluĢturulma adımlarına bak ve iĢlemini tamamla. Bu yöntem diğer nesnelerin classlarını oluĢtururkende aynı Ģekilde uygulanabilir. 106
  • 107.
    nU Örnek: Kullanıcının istediğikadar buton oluĢturmasını ve her oluĢturduğu butonun ismi farklı olmasını sağlayan buton classını yazmak Kodlar private void tiklama(object sender, EventArgs e) { Button b = new Button(); b= (Button)sender; MessageBox.Show(b.Text); } private void button1_Click(object sender, EventArgs e) { Button [] b= new Button[10]; for (int i = 1; i <= Convert.ToInt16(textBox1.Text); i++) { b[i] = new Button(); b[i].Text = "Merhaba"+i.ToString(); b[i].Top = i * 75; b[i].Left = 50; b[i].Parent = this; b[i].Click += new EventHandler(tiklama); } } Ekran Görüntüsü 107
  • 108.
    nU Örnek: Ekranda biradet hazır buton olsun kullanıcı bu butona tıklayınca bize 2 adet radio buton üreten biri play diğeri stop isimli olan classı ve bu radio butonlara tıklayınca hangisine tıklanıldığını bize mesajla bildiren programı yazınız. Kodlar private void tiklama1(object sender, EventArgs e) { MessageBox.Show("Play'e tıklandı"); } private void tiklama2(object sender, EventArgs e) { MessageBox.Show("Stop'a tıklandı"); } private void button1_Click(object sender, EventArgs e) { RadioButton r1 = new RadioButton(); RadioButton r2 = new RadioButton(); string a = "Play"; string b = "Stop"; r1 = new RadioButton(); r1.Text = a.ToString(); r1.Left = 75; r1.Top = 50; r1.Parent = this; r1.Click += new EventHandler(tiklama1); r2 = new RadioButton(); r2.Text = b.ToString(); r2.Left = 200; r2.Top = 50; r2.Parent = this; r2.Click += new EventHandler(tiklama2); } Ekran Görüntüsü 108
  • 109.
    nU Örnek: Timer classınıkullanarak textboxta butona tıklayınca sayıları 1‟den baĢlayıp belli aralıklarla arttırmak. Kodlar public Form6() { InitializeComponent(); } int say = 0; private void myTick(object sender, EventArgs e) { say++; textBox1.Text = say.ToString(); } private void button1_Click(object sender, EventArgs e) { Timer t = new Timer(); t.Interval = 1000; t.Tick += new EventHandler(myTick); t.Start(); } Ekran Görüntüsü 109
  • 110.
    nU Örnek: Butona ekstrabir özellik “Kalıtım” oluĢturmak amacıyla buton classını oluĢturup, classı kullanarak butonda iĢlemler yapınız. Class Kodları Ġlk olarak Project – Add class (mybuton isimiyle) oluĢturulur. using System.Windows.Forms; namespace nisan { class mybutton: Button { private string deger_; public string deger { get { return deger_; } set { deger_=value; } }}} Form Kodları private void myClick(object sender, EventArgs e) { mybutton b = new mybutton(); b = (mybutton)sender; MessageBox.Show(b.deger); } private void button1_Click(object sender, EventArgs e) { mybutton b = new mybutton(); b.deger = "Barış"; b.Parent = this; b.Text = "MyButton"; b.Click += new EventHandler(myClick); } Ekran Görüntüsü 110
  • 111.
    nU Örnek: Mayın TarlasıOyunu Kodlar using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace _27Mayis { public partial class Form1 : Form { Button[,] myB = new Button[20, 20]; byte[,] matris; byte mayin_sayisi=5; byte boyut = 10; public Form1() { InitializeComponent(); } private void butonYokEt(byte boyut) { byte i, j; for (i = 0; i < boyut; i++) { for (j = 0; j < boyut; j++) { myB[i, j].Dispose(); } } } private void matrisOlustur(byte boyut,byte mayinSayisi) { matris = new byte[20, 20]; byte sayac = 0; Random r = new Random(); byte i, j; while (sayac < mayinSayisi) { i = (byte)r.Next(0, boyut - 1); j = (byte)r.Next(0, boyut - 1); if (matris[i, j] != 9) { matris[i, j] = 9; sayac++; } } 111
  • 112.
    nU //mayın etrafını bir artırma byte y, x; for (i = 0; i < boyut; i++) { for (j = 0; j < boyut; j++) { if (matris[i, j] == 9) { for (y = (byte)(i - 1); y <= i + 1; y++) { for (x = (byte)(j - 1); x <= j + 1; x++) { if((x>=0 && x<boyut&& y>=0 && y<boyut) && matris[y,x]!=9) { matris[y,x]++; } } } } } } } private void myClick(object sender, EventArgs e) { Button b = new Button(); b = (Button)sender; byte i = Convert.ToByte(b.Name.Substring(0, 1)); byte j = Convert.ToByte(b.Name.Substring(1, 1)); b.Text = matris[i, j].ToString(); b.FlatStyle = FlatStyle.Flat; if (matris[i, j] == 9) { b.Image = ımageList1.Images[0]; MessageBox.Show("game over"); butonYokEt(boyut); } } private void butonOlustur(byte boyut) { for (byte i = 0; i < boyut; i++) { for (byte j = 0; j < boyut; j++) { myB[i, j] = new Button(); myB[i, j].Parent = panel1; myB[i, j].Width = 30; myB[i, j].Height = 30; myB[i, j].Left = (panel1.Width - (boyut * 30)) / 2 + j * 30; myB[i, j].Top = (panel1.Height - (boyut * 30)) / 2 + i*30; myB[i, j].Name = i.ToString() + j.ToString(); myB[i, j].Click += new EventHandler(myClick); 112
  • 113.
    nU } } } private void toolStripMenuItem1_Click(object sender, EventArgs e) { matrisOlustur(boyut, mayin_sayisi); butonOlustur(boyut); } private void toolStripMenuItem3_Click(object sender, EventArgs e) { boyut = 10; } private void toolStripMenuItem4_Click(object sender, EventArgs e) { boyut = 15; } private void toolStripMenuItem5_Click(object sender, EventArgs e) { boyut = 20; } private void toolStripComboBox1_Click(object sender, EventArgs e) { if (toolStripMenuItem1.Text == "5") mayin_sayisi = 5; if (toolStripMenuItem2.Text == "10") mayin_sayisi = 10; if (toolStripMenuItem3.Text == "15") mayin_sayisi = 15; if (toolStripMenuItem3.Text == "20") mayin_sayisi = 20; } } } 113
  • 114.
    nU Ekran Görüntüsü 1. Mayın tarlasının boyutu ve toolStripComboBox1‟dan kaç tane mayın olacağı seçilir. 2. BaĢlat butonuna tıklandığında seçtiğimiz özellikteki mayın tarlası matris ekranı gelir. 3. Küçük karelere tıkladığımızda 1, 2, 3, 4 gibi puanlar gelir. Mayını açtığımızda “Game Over” uyarısı gelir. 114
  • 115.
    nU Örnek: “NumericUpDown” nesnesindenistediğimiz sayıyı belirleyip “OluĢtur” butonuna tıklıyoruz. Böylece class „da oluĢturduğumuz nesnelerden istediğimiz sayıda ve üzerinde 1-9 arası rastgele sayılardan oluĢacak Ģekilde form ekranımıza geliyor. Ardından bu sayı butonlarımızı mavi panele sürüklüyoruz. Label‟e baktığımızda sürüklediğimiz bu sayı butonlarının üzerindeki rakamların toplamını görüyoruz. Class Kodları using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; namespace sayibuton { public class sbuton:UserControl { private int s = 0; public int Sayi { get { return s; } set { s = value; OnPaint(null); } } protected override void OnPaint(PaintEventArgs e) { Graphics g=this.CreateGraphics(); Pen p = new Pen(Color.Red,20); Font f = new Font("Arial",20,FontStyle.Bold); SolidBrush b= new SolidBrush(Color.White); g.DrawEllipse(p, 10, 10, 20, 20); g.DrawString(s.ToString(), f, b, 8, 6); this.Width=40; this.Height=40; base.OnPaint(e); } private void InitializeComponent() { this.SuspendLayout(); 115
  • 116.
    nU // // sbuton // this.Name = "sbuton"; this.Load += new System.EventHandler(this.sbuton_Load); this.ResumeLayout(false); }}} Form Kodları using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using sayibuton; namespace renklisifir1 { public partial class Form1 : Form { private bool durum = false; Point xy = new Point(); sbuton[] myB = new sbuton[5]; Random r = new Random(); private int toplam = 0; public Form1() { InitializeComponent(); } private void my_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { xy.X = e.X; xy.Y = e.Y; durum = true; } } private void my_MouseUp(object sender, MouseEventArgs e) { sbuton sb = new sbuton(); sb = (sbuton)sender; if (sb.Left > panel1.Left && sb.Left < panel1.Left + panel1.Width && 116
  • 117.
    nU sb.Top > panel1.Top && sb.Top < panel1.Top + panel1.Height) { toplam += sb.Sayi; label1.Text = toplam.ToString(); sb.Visible = false; } durum = false; } private void my_MouseMove(object sender, MouseEventArgs e) { sbuton sb = new sbuton(); sb = (sbuton)sender; if (durum) { sb.Left += e.X - xy.X; sb.Top += e.Y - xy.Y; } } private void button1_Click(object sender, EventArgs e) { for (byte i = 0; i < numericUpDown1.Value; i++) { //butona bastgmzda s buton olştrr istediğmz sayıda , x ye koordnatı olarak ekraana yazdrdık, random rakamlar urettk class içersndekı sayı içersne aktardık. myB[i] = new sbuton(); myB[i].Parent = this; myB[i].Left = 50 + i * 75; myB[i].Top = 350; //üzerndeki sayıları yazcaz int sayi = r.Next(1, 9); myB[i].Sayi = sayi; myB[i].MouseMove += new MouseEventHandler(my_MouseMove); myB[i].MouseUp += new MouseEventHandler(my_MouseUp); myB[i].MouseDown += new MouseEventHandler(my_MouseDown); } } } } 117
  • 118.
  • 119.
    nU Nesne Yönelimli Programlamaİlkeleri Kılıflama (encapsulation) Nesne yapısı ve eriĢim hiyerarĢisi Veri üyeleri (data field/member), fonksiyon üyeleri Çok biçimlilik (polymorphism) Aynı isimli fakat farklı parametreli metot tanımlama Kalıtım (Inheritance) Nesne türetme Nesnelerin çoklu davranıĢ ve eriĢim izinleri Bu konu hakkında ayrıntı verilmemiĢtir. 119
  • 120.
    nU Açıklamalar  Örnekler yapılmıĢve uygulanmıĢtır. Herhangi bir hata yoktur.  Birçok kaynaktan yararlanılmıĢtır.  Ek olarak Visual c#.Net, Palme Zirvedeki Beyinler 2, Nihat Demirli & Yüksel Ġnan kitabından yararlanılmıĢtır.  Class ve dizilerin kullanıldığı Su Dokusu örneğini Liseden bir arkadaĢım yapmıĢtır. Açıklamalar bana aittir. Anladığım kadarıyla açıklamaya çalıĢtım. YanlıĢlarımı maruz görün Hocam.  Bilge Adam‟ın pdf dosyalarından yararlanılmıĢtır.  Visual c# MEB pdf dosyalarından yararlanılmıĢtır.  Ġnternetten alınan kodlar programda uygulanıp, yanlıĢları giderilerek kullanılmıĢtır.  Belgede yer alan form görüntülerinin hepsi bana aittir.  Son aĢamada word dosyası oluĢturulduktan sonra dıĢarıya pdf dosyası olarak da verilmiĢtir.  Try-Catch komutları olası hataları yakalama amaçlı kullanılmıĢtır.  Ayrıca sizin sınıfta yaptırmıĢ olduğunuz class uygulamaları kullanılmıĢtır.  Su doku örneği diziler yapısında verilmiĢtir fakat aynı zamanda class örneğidir.  Kılıflama, Çok bilimlilik, Kalıtım konuları anlatılmamıĢtır. Nurdan SARIKAYA 120