120
nU 1 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

Nurdan sarıkaya

Embed Size (px)

DESCRIPTION

Visual c#'ta Diziler Visual c#'ta Class Yapıları

Citation preview

Page 1: Nurdan sarıkaya

nU

1

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

Page 2: Nurdan sarıkaya

nU

2

İç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

Page 3: Nurdan sarıkaya

nU

3

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

Page 4: Nurdan sarıkaya

nU

4

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.

Page 5: Nurdan sarıkaya

nU

5

Ö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.

Page 6: Nurdan sarıkaya

nU

6

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;

}

Page 7: Nurdan sarıkaya

nU

7

Ekle butonuna bastığımızda InputBox

ekranı gelir. Ġstediğimiz sayıyı girip

“Tamam” butonuna bastığımızda ListBox‟a

değer eklenir.

Page 8: Nurdan sarıkaya

nU

8

Ö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];

}

Page 9: Nurdan sarıkaya

nU

9

Ç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.

Page 10: Nurdan sarıkaya

nU

10

Page 11: Nurdan sarıkaya

nU

11

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.

Page 12: Nurdan sarıkaya

nU

12

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.

Page 13: Nurdan sarıkaya

nU

13

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.

Page 14: Nurdan sarıkaya

nU

14

Ö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

}

}

Page 15: Nurdan sarıkaya

nU

15

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");

}

Page 16: Nurdan sarıkaya

nU

16

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.

Page 17: Nurdan sarıkaya

nU

17

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.

Page 18: Nurdan sarıkaya

nU

18

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.

Page 19: Nurdan sarıkaya

nU

19

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];

Page 20: Nurdan sarıkaya

nU

20

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.

Page 21: Nurdan sarıkaya

nU

21

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");

}

}

Page 22: Nurdan sarıkaya

nU

22

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.

}

Page 23: Nurdan sarıkaya

nU

23

Ö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();

}

Page 24: Nurdan sarıkaya

nU

24

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;

Page 25: Nurdan sarıkaya

nU

25

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.

}

Page 26: Nurdan sarıkaya

nU

26

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.

}

Page 27: Nurdan sarıkaya

nU

27

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.

}

Page 28: Nurdan sarıkaya

nU

28

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;

Page 29: Nurdan sarıkaya

nU

29

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++)

{

Page 30: Nurdan sarıkaya

nU

30

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ı:

Page 31: Nurdan sarıkaya

nU

31

Ö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();

Page 32: Nurdan sarıkaya

nU

32

for (i = 0; i <= Pers.Count - 1; i++)

frm.listBox1.Items.Add(Pers[i].ToString());

frm.Show();

}

}

}

Ekran Çıktısı:

Page 33: Nurdan sarıkaya

nU

33

Ö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);

Page 34: Nurdan sarıkaya

nU

34

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;

Page 35: Nurdan sarıkaya

nU

35

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++)

Page 36: Nurdan sarıkaya

nU

36

if (d % i == 0)

return "d sayısı asaldır";

return "d sayısı asal değildir";

}

}

}

Ekran Çıktısı:

Page 37: Nurdan sarıkaya

nU

37

Ö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);

Page 38: Nurdan sarıkaya

nU

38

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

{

;

}

Page 39: Nurdan sarıkaya

nU

39

}

}

}

Ekran Çıktısı

Page 40: Nurdan sarıkaya

nU

40

Ö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ı

Page 41: Nurdan sarıkaya

nU

41

Ö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++)

{

Page 42: Nurdan sarıkaya

nU

42

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ı

Page 43: Nurdan sarıkaya

nU

43

Ö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ı

Page 44: Nurdan sarıkaya

nU

44

Ö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ı

Page 45: Nurdan sarıkaya

nU

45

Ö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;

}

}

Page 46: Nurdan sarıkaya

nU

46

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);

Page 47: Nurdan sarıkaya

nU

47

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;

Page 48: Nurdan sarıkaya

nU

48

}

}

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] + "\r\n";

}

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;

Page 49: Nurdan sarıkaya

nU

49

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")

Page 50: Nurdan sarıkaya

nU

50

{

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());

Page 51: Nurdan sarıkaya

nU

51

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");

Page 52: Nurdan sarıkaya

nU

52

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");

Page 53: Nurdan sarıkaya

nU

53

}

}

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)

Page 54: Nurdan sarıkaya

nU

54

{

((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");

}

}

}

Page 55: Nurdan sarıkaya

nU

55

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;

}

Page 56: Nurdan sarıkaya

nU

56

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.

Page 57: Nurdan sarıkaya

nU

57

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.

Page 58: Nurdan sarıkaya

nU

58

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.

Page 59: Nurdan sarıkaya

nU

59

Çö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.

Page 60: Nurdan sarıkaya

nU

60

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.

Page 61: Nurdan sarıkaya

nU

61

Ö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);

}

}

}

}

Page 62: Nurdan sarıkaya

nU

62

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++)

{

Page 63: Nurdan sarıkaya

nU

63

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ı

Page 64: Nurdan sarıkaya

nU

64

Ö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]);

}

}}}

Page 65: Nurdan sarıkaya

nU

65

Ekran Çıktısı

Page 66: Nurdan sarıkaya

nU

66

Ö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.";

}

}

}

Page 67: Nurdan sarıkaya

nU

67

Ekran Çıktısı

Page 68: Nurdan sarıkaya

nU

68

Ö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;

Page 69: Nurdan sarıkaya

nU

69

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.

Page 70: Nurdan sarıkaya

nU

70

Ö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ı

Page 71: Nurdan sarıkaya

nU

71

Ö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() + " " ;

Page 72: Nurdan sarıkaya

nU

72

break;

}}}}

Ekran Çıktısı

Page 73: Nurdan sarıkaya

nU

73

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.

Page 74: Nurdan sarıkaya

nU

74

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);

Page 75: Nurdan sarıkaya

nU

75

}

}

}

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ı

Page 76: Nurdan sarıkaya

nU

76

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.

Page 77: Nurdan sarıkaya

nU

77

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;

}

}

Page 78: Nurdan sarıkaya

nU

78

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;

Page 79: Nurdan sarıkaya

nU

79

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.

Page 80: Nurdan sarıkaya

nU

80

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.

Page 81: Nurdan sarıkaya

nU

81

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.

Page 82: Nurdan sarıkaya

nU

82

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.

Page 83: Nurdan sarıkaya

nU

83

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.

Page 84: Nurdan sarıkaya

nU

84

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.

}

Page 85: Nurdan sarıkaya

nU

85

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

}

}

Page 86: Nurdan sarıkaya

nU

86

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).

Page 87: Nurdan sarıkaya

nU

87

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");

}

}

Page 88: Nurdan sarıkaya

nU

88

}

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()

Page 89: Nurdan sarıkaya

nU

89

{

MessageBox.Show("Merhaba 1");

}

public void mesaj2()

{

MessageBox.Show("Merhb 2");

}

}

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

Page 90: Nurdan sarıkaya

nU

90

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ı

Page 91: Nurdan sarıkaya

nU

91

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);

}

Page 92: Nurdan sarıkaya

nU

92

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;

Page 93: Nurdan sarıkaya

nU

93

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ı

Page 94: Nurdan sarıkaya

nU

94

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);

Page 95: Nurdan sarıkaya

nU

95

}

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ı

Page 96: Nurdan sarıkaya

nU

96

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);

Page 97: Nurdan sarıkaya

nU

97

}

}

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ı

Page 98: Nurdan sarıkaya

nU

98

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)

Page 99: Nurdan sarıkaya

nU

99

{

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ı

Page 100: Nurdan sarıkaya

nU

100

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;

}

}

Page 101: Nurdan sarıkaya

nU

101

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();

}

}

Page 102: Nurdan sarıkaya

nU

102

Ö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();

}

}

Page 103: Nurdan sarıkaya

nU

103

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;

}

Page 104: Nurdan sarıkaya

nU

104

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();

}

Page 105: Nurdan sarıkaya

nU

105

Ekran Çıktısı

Page 106: Nurdan sarıkaya

nU

106

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.

Page 107: Nurdan sarıkaya

nU

107

Ö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ü

Page 108: Nurdan sarıkaya

nU

108

Ö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ü

Page 109: Nurdan sarıkaya

nU

109

Ö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ü

Page 110: Nurdan sarıkaya

nU

110

Ö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ü

Page 111: Nurdan sarıkaya

nU

111

Ö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++;

}

}

Page 112: Nurdan sarıkaya

nU

112

//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);

Page 113: Nurdan sarıkaya

nU

113

}

}

}

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;

}

}

}

Page 114: Nurdan sarıkaya

nU

114

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.

Page 115: Nurdan sarıkaya

nU

115

Ö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();

Page 116: Nurdan sarıkaya

nU

116

//

// 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 &&

Page 117: Nurdan sarıkaya

nU

117

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);

}

}

}

}

Page 118: Nurdan sarıkaya

nU

118

Ekran Görüntüsü

Page 119: Nurdan sarıkaya

nU

119

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.

Page 120: Nurdan sarıkaya

nU

120

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