nurdansarıkaya
DESCRIPTION
c#TRANSCRIPT
![Page 1: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/1.jpg)
nU
MARMARA ÜNİVERSİTESİ
ATATÜRK EĞİTİM FAKÜLTESİ
Nurdan SARIKAYA
200209019
Programlama Dilleri
Visual c# ‘ta Diziler veVisualc# Class Yapıları
2011, İstanbul
1
![Page 2: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/2.jpg)
nU
İçindekiler
C#’TA DİZİLER.........................................................................................4
C#’ta Dizi Değişkenlerinin Tanımlanması..............................................4
Çok Boyutlu Dizileri Tanımlamak...........................................................9
Dinamik Diziler....................................................................................11
Jagged Diziler......................................................................................12
Jagged Dizisinin Tanımlanması........................................................13
Koleksiyonlar....................................................................................16
Dizilerle İlgili Diğer İşlemler..................................................................17
Arraylist Fonksiyonları..........................................................................17
Dizinin Yavru Değişkenine Eleman Ekleme.......................................18
Dizinin Eleman Sayısını Öğrenmek...................................................19
Dizinin Boyutunu Öğrenmek.............................................................19
Belirtilen Dizi Boyutunun Eleman Sayısını Öğrenmek........................20
Dizide Belirtilen İndis Aralığındaki Değerleri Silme............................21
Diziye Değerin Olup Olmadığını Kontrol Etme...................................21
Dizinin Eleman Sırasını Tersine Çevirme............................................22
Dizi Elemanlarını Küçükten Büyüğe Sıralama....................................22
Dizi İçinde Aranan Değeri Bulma.......................................................23
Dizinin İçinde Aranan Değeri Sondan Başlayarak Bulma...................24
Dizide Belirtilen Boyutun Üst Sınırını Öğrenmek...............................24
Dizinin Eleman Sayısını Öğrenme......................................................25
Dizi İçindeki Herhangi Bir Aralığa Eleman Ekleme............................23
Dizi İçindeki Herhangi Bir Aralığa 1’den Fazla Eleman Ekleme..........26
Dizi İçindeki Elemanı Bulup Silme......................................................26
Dizi İçindeki Elemanı İndis Numarasına Göre Silme...........................27
2
![Page 3: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/3.jpg)
nU
Dizilerle İlgili Örnekler..........................................................................28
C#’ ta CLASS YAPISI...............................................................................73
C#’ta Class Yapısı..................................................................................73
Protected Obje Tanımlamak.................................................................82
Virtual ve Override Metods Tanımlamak.............................................84
Base Class Constructors.......................................................................85
BitArray Sınıfı.......................................................................................90
Hashtable Sınıfı....................................................................................91
SortedList Sınıfı....................................................................................94
Stack Sınıfı............................................................................................ 96
Queue Sınıfı.......................................................................................... 98
Class İçindeki Set ve Get Deyimleri.....................................................100
Mevcut Class’ları Kullanma....................................................................106
Açıklamalar............................................................................................. 119
3
![Page 4: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/4.jpg)
nU
C#’TA DİZİLER
C#’ta Dizi Değişkenlerinin Tanımlanması
Diziler tüm dillerde olduğu gibi c# içinde oldukça önemli yer tutar. Değişkenlerin dizi
olarak tanımlanabilmesi hem kod bloğunu kısalır, hem de programın çok daha hızlı
işlemesini sağlar.
Bellekte aynı türden sıralanmış verilerin oluşturduğu yapıya dizi denir. Tek bir tanımlama
yapılarak istenilen sayıda veri girişi sağlanabilir. Dizi elemanları bir indis numarasına
sahiptir. İndis numaraları varsayılan olarak sıfırdan başlar. Dizinin kaç elemanlı
olacağı dizinin tanımlandığı satırda veya daha sonra da belirtilebilir. Ayrıca dizi
tanımlaması yapıldığında dizinin eleman sayısı, kullanılacak eleman sayısından az ise dizi
yeniden boyutlandırılabilir.
Dizi değişkenin eleman sayısını belirtmek için new metodu kullanılır.
Örnek:
private void button1_Click(object sender, EventArgs e) { int[] dizidedegisken; dizidedegisken = new int[10]; dizidedegisken[9] = 100; label1.Text = dizidedegisken[9].ToString();
}
Dizilere tanımlandıkları anda değerler atayabilirsiniz.Aşağıdaki 5 elemanlı bir dizi tek satırda tanımlanıyor arkasından oluşturuluyor en sonunda da dizinin tğm elemanlarına değer atanıyor. İkinci satırda ise dizinin 4. Elemanı (dizi[3]) text’in içersinde yazdırılıyor.
Örnek:
private void button2_Click(object sender, EventArgs e) { int[] dizi = new int[5] { 0, 10, 20, 30, 40 }; textBox1.Text = dizi[3].ToString(); }
ya da
private void button3_Click(object sender, EventArgs e) { int[] dizi = { 0, 10, 20, 30, 40 }; textBox1.Text = dizi[3].ToString(); }
Yukardaki iki örnekte aynı şeyi yapar.
4
![Page 5: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/5.jpg)
nU
Örnek:
Bu örnekte InputBox nesnesi kullanılacağından References /Sağ Click/Add References/ Microsoft. VisualBasic ‘i ekliyoruz.
private void button1_Click(object sender, EventArgs e){ byte i; int[] dizi = new int[5]; for (i = 0; i < 5; i++) { dizi[i] = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (i + 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20));
} for (i = 0; i < 5; i++) { listBox1.Items.Add(dizi[i]); }}
Ekran Çıktısı
“Ekle” butonuna basıldığında ekrana
InputBox() ekranı gelir ve dizinin
elemanları girilir. Sonrasında InputBox()’a
girilen değerler ListBox’a eklenir.
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
5
![Page 6: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/6.jpg)
nU
“EKLE” butonu pasif haldedir. Dizi elemanlarının girişinden sonra “Dizi elemanlarını gir”
Butonu pasif hale “Ekle” butonu aktif hale gelmektedir. Ekle butonuna tıklandığında
dizi yeniden boyutlandırılarak InputBox()’tan diziye yeni eleman girişi yapılmakta ve aynı
zamanda liste kutusuna da eklenmektedir. Çıkış düğmesiyle de program
sonlandırılmaktadır.
int sayi;private void button1_Click(object sender, EventArgs e){ byte i; int[] dizi1 = new int[5]; for (i = 0; i < 5; i++) { dizi1[i] = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (i + 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20));
} for (i = 0; i < 5; i++) { listBox1.Items.Add(dizi1[i]); } sayi = 5; button1.Enabled = false; button2.Enabled = true;}byte s = 5;private void button2_Click(object sender, EventArgs e){ int[] dizi1 = new int[sayi + 1]; dizi1[sayi] = int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (s + 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20)); listBox1.Items.Add(dizi1[sayi]);}
private void button3_Click(object sender, EventArgs e){ Close();}
private void Form1_Load(object sender, EventArgs e){ button2.Enabled = false;}
6
![Page 7: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/7.jpg)
nU
Ekle butonuna bastığımızda InputBox
ekranı gelir. İstediğimiz sayıyı girip
“Tamam” butonuna bastığımızda
ListBox’a değer eklenir.
Örnek:
7
![Page 8: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/8.jpg)
nU
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];
}
Çok Boyutlu Dizileri Tanımlamak
8
![Page 9: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/9.jpg)
nU
Bazı durumlarda (özellikle büyük projelerde) çok boyutlu dizi tanımlamak zorunda kalabilirsiniz. Bu genlikle satır ve sütundan iki boyutlu bir dizi olacaktır. (Özellikle matris hesaplarıyla ilgilenen mühendisler için) Bazen daha büyük boyutlu da olabilir.
Çok boyutlu bir dizi tanımlamak, sizi tek boyutlu birçok dizi tanımlamak yerine bir tane çok boyutlu dizi tanımlayarak problemi çözme imkânı verir. Bu hem kod karmaşasından hem de hız açısından faydalıdır. Aşağıda iki boyutlu bir dizi tanımlanmış olup (2 satır, 3 sütunlu) ilk satır üçüncü sütunlu değere 200 değeri atanmıştır.
Örnek:
private void button3_Click(object sender, EventArgs e) { int[,] dizi = new int[2, 3]; dizi[0, 2] = 200; textBox1.Text=dizi[0,2].ToString(); }
dizi [2, 3] ün sonuçta 6 elemanlı bir dizi olduğu aşağıda anlatılmaya çalışıldı.dizi [0, 0], dizi [0, 1], dizi [0, 2], dizi [1, 0], dizi [1, 1], dizi [1, 2] görüldüğü gibi 6 elemanlı iki boyutlu bir dizi oluşturuldu.
Burada dizinin ilk ve ikinci elemanı yerine i,j değişkenleri kullanılarak bir çok işlem kolaylıkla yapılabilir.
9
![Page 10: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/10.jpg)
nU
10
![Page 11: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/11.jpg)
nU
Dinamik Diziler
C#’ ta diziler önce tanımlanıp daha sonra eleman sayısı belirlendiği için bu diziler aynı
zamanda dinamik dizi olarak da kullanılabilirler. Burada [] içerisindeki değer bir
textBox’tan veya bir inputBox’tan rahatlıkla alınabilir. Bu sayede bu diziler aynı zamanda
bir dinamik dizi görevi görürler.
Dinamik diziler öğrenci sayısının bilinmediği sınıflar için veya oyuncu sayısının bilinmediği
bilhassa network oyunları için kullanılır. Mesela öğrenci sayısını dinamik dizi olarak
tanımlamak çok doğru bir karardır. Çünkü A sınıfı 40 kişi, B sınıfı 50 kişiden ibaret olabilir.
Bu durumda öğrenci sayısını bir textBox’ a aldırarak [] içerisinde atayabilirsiniz. Onu da
for döngüsüyle işleme sokup tüm öğrencilerin, isimlerini, numaralarını tek satırlık kodla
aldırmanız mümkün olur aksi halde en büyük sınıfa göre bir dizi tanımlayacaktınız. Diğer
ufak sayılarda işlem yaparken artan değişkenler bellekte boşu boşuna yer işgal edecekti.
Bu iyi bir programcı için istenen bir şey değildir.
Bir diziyi arraylist sınıfından tanımlamak demek dizinin boyutunun ihtiyaç duyuldukça
arttırılması veya azaltılması demktir.10 elemanımız ve 10 elemanlı bir dizimiz varsa ve
listeye yeni eleman eklemek isteniyorsa dizinin elemanını ihtiyaç duyuldukça
arttırabilirsiniz. Üstelik dizinin eski hali korunacaktır. Aynı durum dizinin boyutunu
azaltmak içinde geçerlidir.
Arraylist sınıfı diziye her eleman eklendiğinde dizi boyutu arttırmaz Bunun yerine ilk
etapta 4 elemanlı bir dizi oluşturur. İlk 4 elemanda dizinin boyutu sabit kalır.5. eleman
eklendiğinde dizi boyutu 2 katına çıkarılır.
Not: Arraylist sınıfını kullanabilmek için öncelikle;
using System.Collections; kütüphanesini çağırmalıyız.
ArrayList Fonksiyonları ileriki sayfalarda işlenecektir.
11
![Page 12: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/12.jpg)
nU
Jagged Diziler
C# ile gelen güzel bir olay olan jagged dizilerdir. Bunu önceden benim gibi C kullanan
vatandaşlar pointer kullanarak yapıyordu. Bu şekilde malloc()'la yer isteyip sonra onu
dinamik oluşturup siliyorduk. Jagged (pürüzlü, düzensiz) dizilerde ise sizin istediğiniz
kadar temel eleman oluşturup bu elemanların her birinin alt dizisi ihtiyaca göre
oluşturulur. Oluşturacağımız dizilerde satırların eleman sayıları birbirinden farklıysa bu
durumlarda Jagged dizi tanımlanır.
Bir diziyi jagged olarak tanımlamak ona bir özellik kazandırmanız dizi ile ilgili tüm
işlemleri yine yapabilirsiniz.
Mesela diziyi tablo halinde ifade edecek olursak şöyle bir yapıda dizimiz olabilir.
Dizinin alt eleman sayısı farklılık gösterebiliyor. .net listview datagrid vs. gibi
bileşenlerdeki ekleme mantığıyla hareket edeceğiz. İlk önce itemleri (dizinin [i][0]) kısmını
ayarlayacağız. Sonra da o itemlere (dizi elemanlarına ait ) alt itemleri oluşturup
ekleyeceğiz.
Listview'e rastgele oluşturulmuş verileri rastgele boyutlu dizilere nasıl atılacağını
gösterelim.
Şimdi dizinin [i][0]. elemanları Listviewde item gibi olacak sonra listview e diğer kayıtlar
subitemler olarak gelecek. Bu şekilde iç içe for döngüsüyle yapacağız. Matrisler gibi
düşünürsek daha kolay anlaşılır.
Jagged Dizisinin Tanımlanması
Örnek:
12
![Page 13: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/13.jpg)
nU
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.
Örnek:
tut=r.Next(1,20);
13
![Page 14: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/14.jpg)
nU
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ırfor (int j = 0; j < aile[i].Length; j++){
listView1.Items[i].SubItems.Add(aile[i][j].ToString()); //Alt elemanlar subitem olacaktır }}
Sonuç:
14
![Page 15: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/15.jpg)
nU
Görüldüğü üzeri bazı alt diziler 2 bazısı 18 ... olmuş. Böylece bellek israfı önlenmiştir.
Örnek: Boyutu 3 olan diğer boyutu belli olmayan bir jagged dizi tanımlanarak 2.
boyutunun elemanlarını form yüklendiğinde diziye girilmektedir. Her bir sütun
elemanlarını ayrı ayrı liste kutusuna listeleyen ve bu dizinin rankını “Dizinin rankını
göster” düğmesine basıldığında mesaj kutusunda gösteren program.
string[][] aile = new string[3][];
private void Form5_Load(object sender, EventArgs e){ aile[0] = new string[] {"Nurdan","Nurşan","Hakan","Seçkin"}; aile[1] = new string[] {"Sen", "Ben", "O", "Biz", "Siz" }; aile[2] = new string[] {"Sevde", "Sercan", "Selçuk" };
for (int j = 0; j < 4; j++) listBox1.Items.Add(aile[0][j]);
for (int j = 0; j < 5; j++) listBox2.Items.Add(aile[1][j]);
for (int j = 0; j < 3; j++) listBox3.Items.Add(aile[2][j]);}
private void button1_Click(object sender, EventArgs e){ MessageBox.Show("Aile Dizisi"+(aile.Rank).ToString() +"boyutludur." ,"Rank"); }
15
![Page 16: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/16.jpg)
nU
Koleksiyonlar
Dizi eleman sayısının esnek şekilde tanımlanması için kullanılan yapılardır. Eleman sayısı,
programda kullanılacak eleman sayısına göre artırılır ya da azaltılır. Koleksiyonlar,
System.Collections isim alanında (namespace) bulunur. Koleksiyonlarla çalışmaya
başlamadan önce System.Collection’ı using deyimiyle projenin başına dâhil etmek
gerekir.
16
![Page 17: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/17.jpg)
nU
Dizilerle İlgili Diğer İşlemler
Arraylist Fonksiyonları
ArrayList oluşturabilmek için projemize using System.Collections; kodunu using
satırına eklemeliyiz. Bu kodla System.Collections kütüphanesini çağırmış oluruz.
Klasik dizilerle çalışırken karşılaşabileceğimiz temel sorunlar şunlardır.
Dizilerin sınırları sabittir. int[] dizi = new int[60];
Dizilerin tüm elemanları aynı türden olmalıdır. Örneğin; Hepsi int
Kullanmadığımız dizi elemanlarından dolayı bellek alanları
gereksiz yere işgal edilmektedir.
Örneğin sayısını bilemediğimiz bir dizinin eleman sayısını 500 olarak belirlediğimizi
varsayalım. Çalışma zamanında dizimizin sadece 10 elamanını kullandığımız durumda
diğer 490 elemanlık bellek alanı boş olarak kalır. Öte yandan dizimizde tutmak istediğimiz
değişkenlerin sayısı 501 bir olduğu bir durumda "IndexOutOfRangeException" istisnai
durumu ortaya çıkar ve program bu hatadan dolayı sonlanır.
Dizinin Yavru Değişkenine Eleman Ekleme
17
![Page 18: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/18.jpg)
nU
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.
Dizinin Eleman Sayısını Öğrenmek
Bir dizinin kaç elemandan oluştuğunu öğrenmek için Length kullanılır.
Örnek:
18
![Page 19: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/19.jpg)
nU
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];
jdizi[0][3] = 100; jdizi[2][1] = 500; Form1.ActiveForm.Text = jdizi.Rank.ToString();// 1 yazar. }
19
![Page 20: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/20.jpg)
nU
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.
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.
20
![Page 21: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/21.jpg)
nU
Ö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"); }}
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.
21
![Page 22: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/22.jpg)
nU
Ö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.}
Ö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}
22
![Page 23: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/23.jpg)
nU
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(); }
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:
23
![Page 24: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/24.jpg)
nU
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; 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.
24
![Page 25: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/25.jpg)
nU
Ö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.}
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 };
25
![Page 26: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/26.jpg)
nU
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.}
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 };
26
![Page 27: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/27.jpg)
nU
diziListe.AddRange(dizi); diziListe.Remove(2); textBox1.Text = diziListe[2].ToString(); // textBox1'in içine 10 yazar.}
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
27
![Page 28: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/28.jpg)
nU
{
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; 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;
28
![Page 29: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/29.jpg)
nU
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++) { 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
29
![Page 30: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/30.jpg)
nU
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ı:
Örnek 2: Dinamik Dizi ÖrneğiKayı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;
30
![Page 31: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/31.jpg)
nU
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(); for (i = 0; i <= Pers.Count - 1; i++) frm.listBox1.Items.Add(Pers[i].ToString()); frm.Show(); } }}
Ekran Çıktısı:
31
![Page 32: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/32.jpg)
nU
Örnek 3: x1,x2,x3
0 ya da değerlerini
alabilen değişkenler
olmak
üzere
ax1+bx2+cx3=d denkleminin çözümünü sağlayan (x1,x2,x3) değerlerini sonuc1 label ına
yazan, çözümü yoksa denklemin çözümü yok diye sonuç1 label ına yazan program.
Bunun yanında d deki değerin asal olup olmadığını sonuc2 label ına yazan ve Temizle
butonuna bastığında textBox ların içini 0 yapıp label lerin içini temizleyen program.
Kodlar:
Formun Kodları
using System;using System.Collections.Generic;
32
![Page 33: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/33.jpg)
nU
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); 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ı
33
![Page 34: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/34.jpg)
nU
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; 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;
34
![Page 35: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/35.jpg)
nU
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++) if (d % i == 0) return "d sayısı asaldır"; return "d sayısı asal değildir"; }
}}
Ekran Çıktısı:
35
![Page 36: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/36.jpg)
nU
Örnek 4: Ters Çevir butonuna basıldığında textBox’daki girilen değeri ListBox’a ters
çevirerek atar.
Ekle butonuna basıldığında textBox’a girilen değeri aynen ListBox’a yazar.
Maç Sonucu butonuna basıldığında textBox’a girilen değere göre kazanan kazanamayanı
belirleyip MessagaBox’ta uyarı verir.
36
![Page 37: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/37.jpg)
nU
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); 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;
37
![Page 38: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/38.jpg)
nU
sayac++; listBox2.Items.Add(textBox2.Text.PadRight(15) + textBox3.Text); } catch { ; } } private void button3_Click(object sender, EventArgs e) { int rsayi; Random r = new Random(); try { if (int.Parse(textBox4.Text) > int.Parse (textBox5.Text)) { while (sayac2 < 3) { rsayi = r.Next(sayac); if (Array.IndexOf(sans, rsayi) == -1) { sans[sayac2] = rsayi; sayac2++; } }
for (int k = 0; k < sayac2; k++) { listBox3.Items.Add(isimler[sans[k]].PadRight(15)); } sayac2 = 0; } else { MessageBox.Show("Takımınız kaybettiğinden dolayı kontür kazanan olmamıştır"); } } catch { ; } } }}
38
![Page 39: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/39.jpg)
nU
Ekran Çıktısı
Örnek 5: 6 tane sayı üretir ve bunları sıralar.
Kodlar
39
![Page 40: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/40.jpg)
nU
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ı
Ö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
40
![Page 41: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/41.jpg)
nU
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++) { for (int j = 0; j < 100; j++) { if (dizi[i] > dizi[j]) { yedek = dizi[j];
41
![Page 42: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/42.jpg)
nU
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ı
Ö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
42
![Page 43: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/43.jpg)
nU
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ı
Ö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
43
![Page 44: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/44.jpg)
nU
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ı
Örnek 9: Su Doku Oyunu
Form Ekranının Kodları:
using System;using System.Collections.Generic;using System.ComponentModel;
44
![Page 45: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/45.jpg)
nU
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; }
}
private void sudoku_frm_Load(object sender, EventArgs e) {
for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) {
45
![Page 46: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/46.jpg)
nU
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); 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);
46
![Page 47: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/47.jpg)
nU
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; } }
private void kaydet_btn_Click(object sender, EventArgs e) { if (kaydet()) { MessageBox.Show("Başarı ile kaydedildi.", "Mesaj");
47
![Page 48: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/48.jpg)
nU
} 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; hucre.ReadOnly = false; hucre.BackColor = Color.GhostWhite; } } return true; }
bool yukle()
48
![Page 49: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/49.jpg)
nU
{ 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") { hucre = (TextBox)this.Controls[i]; while (h < 9) { while (k < 9) { hucre.Text = gecici[k, h].ToString(); if (gecici[k,h]!=0)
49
![Page 50: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/50.jpg)
nU
{ 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()); for (int i = 0; i < 9; i++) { string LFsilme = satirlar[i]; if (i != 0) { LFsilme = satirlar[i].Substring(1, satirlar[i].Length - 1); }
50
![Page 51: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/51.jpg)
nU
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");
TextBox hucre = new TextBox();
int[,] gecici = new int[9, 9];
for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) {
51
![Page 52: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/52.jpg)
nU
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"); } }
private void sayi_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) {
52
![Page 53: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/53.jpg)
nU
((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) { ((TextBox)(sender)).Text = "8"; } else if (e.Data.GetData(DataFormats.Bitmap) == sayi9.Image & ((TextBox)(sender)).ReadOnly == false) { ((TextBox)(sender)).Text = "9"; }
53
![Page 54: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/54.jpg)
nU
}
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"); }
}}
Class Ekranının Kodları
1. Sudoku_Kontrol Kodları
using System;using System.Collections.Generic;
54
![Page 55: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/55.jpg)
nU
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; }
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))
55
![Page 56: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/56.jpg)
nU
{ return true; } return false;} }}
2. Sudoku_Coz Kodları
Ekran Çıktısı
Oyunun Kuralları
1. Sudoku 9*9 kareden oluşan bir tablodan oluşur.
2. Sudoku tablosu 3*3’lük 9 kareye bölünür
3. Sudoku oyununda sütun ve satırlarda her rakam sadece 1 defa kullanılabilir.
4. Sudoku oyununda ayrıca 3*3’lük kutucuklarda da 1’den 9’a kadar olan rakamlardan
sadece biri bulunabilir.
5. Sudoku oyununda amaç boş karelere en kısa sürede doğru rakamları koyarak tüm
tabloyu doldurmaktır.
Form Ekranının Anlatılması
İlk olarak ComboBox’tan oyunun zorluk dereceleri seçilir.
1. Seçenek: Oyun Yarat
ComboBox’tan “Oyun Yarat” ı seçip, “Yeni Oyun” butonuna tıkladığımızda
karşımıza 9*9 luk karelerden oluşan bildiğimiz sudoku form ekranı boş olarak gelir.
Boş olarak gelmesinin sebebi oyunu bizim yaratacak olmamızdandır.
56
![Page 57: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/57.jpg)
nU
Bu boş kutucuklara tıkladığımızda 1-9 arası sayılar çıkar istediğimiz yerlere
yerleştirebiliriz.
Sayıları yerleştirirken kural gereği satır ve sütunlarda bunun yanında 3*3 lük
karelerde aynı rakam tekrarı yapılmayacaktır. Kod da bunun kontrolü sağlanmıştır
57
![Page 58: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/58.jpg)
nU
Sudoku_Kontrol.cs class dosyasıyla kontrol yapılmıştır.
2. Seçenek: Kolay
ComboBox’tan “Kolay” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karşımıza 9*9 luk karelerden oluşan bildiğimiz sudoku form ekranı doldurulmuş olarak kolay seviyede gelir.
3. Seçenek: Normal
ComboBox’tan “Normal” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karşımıza 9*9 luk karelerden oluşan bildiğimiz sudoku form ekranı doldurulmuş olarak normal seviyede gelir.
4. Seçenek: Zor
ComboBox’tan “Zor” u seçip, “Yeni Oyun” butonuna tıkladığımızda karşımıza 9*9 luk karelerden oluşan bildiğimiz sudoku form ekranı doldurulmuş olarak zor seviyede gelir.
58
![Page 59: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/59.jpg)
nU
Çöz Butonu
“Çöz” butonuna tıklandığında; Sudoku Çözüldü uyarısı gelir.
“Tamam”, butonuna tıkladığımızda; sudoku çözülür.
Sudokunun çözülmesi Sudoku_Coz .cs class dosyasıyla sağlanmıştır.
Yükle Butonu
Yükle butonuna tıkladığımızda herhangi bir yerdeki uzantısı .sdk olan dosyaları yükleyebiliriz.
59
![Page 60: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/60.jpg)
nU
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.
Kaydet Butonu
Kaydet butonuna tıkladığımızda dosyayı istediğimiz yere kaydeder. Kaydedilemezse;
aşağıdaki uyarıyı verir.
break; case "Kolay":
yukle("oyunlar/k" + oyun + ".sdk"); break; case "Normal": yukle("oyunlar/n" + oyun + ".sdk"); break; case "Zor": yukle("oyunlar/z" + oyun + ".sdk"); break;
Kodda yer alan oyunlar/k, oyunlar/n, oyunlar/z programın exe dosyasının bulunduğu
yerdeki oyunlar klasöründen alınmıştır. Bu dosyaların uzantısı “.sdk ” (uzantı “ .txt ” de
olabilirdi)diye kaydedilmiştir. Bu dosyaların içinde 9*9 şeklinde oyunun zorluk derecesine
göre matrisler bulunmaktadır.
60
![Page 61: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/61.jpg)
nU
Örnek 10: TextBox’a girilen değeri “Sırala” butonuna bastığımızda a-z sırasına göre
ListBox’a listeler. Bunun yanında birden fazla değer varsa onları da sıraya sokar.
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace dizidenemeleri{ public partial class Form7 : Form { public Form7() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { string st=""; st = textBox1.Text.ToString(); char[] harfler = new char[st.Length];
for (int i = 0; i<st.Length ; i++) { harfler[i] = st[i]; } Array.Sort(harfler ); foreach (char item in harfler) { listBox1.Items.Add(item); } } } }
61
![Page 62: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/62.jpg)
nU
Ekran Çıktısı
Örnek 11: Textbox’a girilen sayıya kadar olan sayıları ListBox’a dik üçgen olarak ekler.
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace dizidenemeleri{ public partial class Form6 : Form { public Form6() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e)
62
![Page 63: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/63.jpg)
nU
{ 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++) { gec=gec+""+j; } listBox1.Items.Add(gec); gec=""; }
gec=""; listBox2.Items.Clear(); for(i=1;i<Convert.ToInt16(textBox1.Text);i++) { for(j=1;j<=i;j++) { gec=gec+""+j; } listBox2.Items.Add(gec); gec=""; } } }}
Ekran Çıktısı
63
![Page 64: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/64.jpg)
nU
Örnek 12: Klavyeden girilen n elemanlı bir a dizisinin elemanlarının karelerini alarak b
dizisini; kareköklerini alarak c dizisini oluşturup bu yeni 2 dizinin skaler çarpımını bulan
programdır.
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace DiziDenemeleri2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { int sayi1, a, b; sayi1 = int.Parse(textBox1.Text); int[] dizi1 = new int[sayi1]; double []dizi2= new double[sayi1]; double[] dizi3 = new double[sayi1]; double[] dizi4 = new double[sayi1];
Random rasgele = new Random(); for (a = 0; a < sayi1; a++) { dizi1[a] = rasgele.Next(1, 100); } for (a = 0; a < sayi1; a++) listBox1.Items.Add(dizi1[a]);
for (b = 0; b < sayi1; b++) { dizi2[b] = dizi1[b] * dizi1[b];
64
![Page 65: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/65.jpg)
nU
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]);
} }}}
Ekran Çıktısı
65
![Page 66: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/66.jpg)
nU
Örnek 12: Klavyeden küçük harflerle girilen bir cümledeki sesli harflerin sayısını ve
cümledeki yerlerini bulan program.
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace DiziDenemeleri2{ public partial class Form2 : Form { public Form2() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { string[] sesli = { "a", "e", "ı", "i", "o", "ö", "u", "ü" }; string cumle; cumle = textBox1.Text.ToLower(); int sayac = 0, zemin = 0; for (int a = 0; a < sesli.Length; a++) { for (int b = 0; b < sesli.Length; b++) { if (sesli[a] == cumle.Substring(b, 1)) { sayac++; zemin = b + 1; //sesli harfin bulndğu yeri belirtiyoruz. listBox1.Items.Add(cumle[b] + "--cumlenin" + zemin + ".harfi");
66
![Page 67: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/67.jpg)
nU
} } } label2.Text = sayac.ToString() + " " + "sesli harf bulunmaktadır."; } }}
Ekran Çıktısı
67
![Page 68: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/68.jpg)
nU
Örnek 13: Dinamik dizi örneği 2. Bu örnekte kullanıcıdan kaç boyutlu dizi oluşturmak
istediği sorulmaktadır. Ardından kullanıcıdan bu dizinin elemanlarını girmelerini
istemektedir. Elemanları ListBox’a eklemektedir.
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace DiziDenemeleri2{ public partial class Form3 : Form { public Form3() { InitializeComponent(); } string[] dizi = null; private void button1_Click(object sender, EventArgs e) { int dBoyut; if (!Int32.TryParse(textBox1.Text, out dBoyut)) { MessageBox.Show("Girilen Değer Sayısal Olmalı."); return; } dizi = new string[dBoyut]; MessageBox.Show(String.Format("{0} elemanlı bir dizi oluşturuldu.", dBoyut)); } int sIndex = 0;
private void button2_Click(object sender, EventArgs e) { if (dizi == null || sIndex == dizi.Length) {
68
![Page 69: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/69.jpg)
nU
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; if (eleman == null) nEleman = "Değer Atanmamış"; listBox1.Items.Add(nEleman); } } }}
Ekran Çıktısı
Dizi boyutunu girip, “Dizi Oluştur” butonuna tıklıyoruz. Böylece “5 elemanlı bir dizi
oluşturuldu” iletisi geliyor.
“Tamam” butonuna tıkladıktan sonra;
Değer kısmına gelip, 5 boyutlu
oluşturduğumuz dizinin elemanlarını giriyoruz.
Elemanları girdikten sonra “Diziye Değer At”
butonuna tıklıyoruz. Böylece girdiğimiz
elemanlar ListBox’a ekleniyor.
69
![Page 70: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/70.jpg)
nU
Örnek 14: TextBox’a girilen sayıları 200, 100, 50, 20, 10, 5, 1’lik banknotlara bölüp
listBox’da gösteren uygulama
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace DiziDenemeleri2{ public partial class Form4 : Form { public Form4() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { int[] banknot = {200, 100, 50, 20, 10, 5, 1 }; int para, adet, i; listBox1.Items.Clear(); para = int.Parse(textBox1.Text); for (i = 0; i <= 6; i++) { adet = para / banknot[i]; listBox1.Items.Add(adet.ToString() + "adet" + Convert.ToString(banknot[i] + "YTL")); para %= banknot[i]; } } }
70
![Page 71: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/71.jpg)
nU
}Ekran Çıktısı
Ö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(); }
71
![Page 72: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/72.jpg)
nU
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() + " " ;
break; }}}} Ekran Çıktısı
72
![Page 73: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/73.jpg)
nU
C#’ ta CLASS YAPISI
C#’ta Class Yapısı
Class’ı bir aile gibi düşünebilirsiniz. Ailenin bireylerin class değişkenleri olarak, aile
fertlerinin çalışma hayatlarında kazandıkları mal varlıklarını o class’ın fonksiyonu olarak
gerçekleştirdikleri sosyal faaliyetleri de o class’ın procedür’ü olarak algılamak doğru
olacaktır. Örnek olarak:
BÜYÜKBABANIN ADI SOYADI: TAHİR SARIKAYA
BABANIN ADI SOYADI: İSMAİL SARIKAYA
ÇOCUĞUN ADI SOYADI: HAKAN SARIKAYA
Yukarıdaki fertlerden oluşan class’ın isminin SARIKAYA class’ı olduğunu düşünelim. Başka
bir soyadına sahip olan sülalenin (class’ın) çocuğu tanıyabilmeleri için kullanacakları
mantık SARIKAYA’ dan TAHİR OĞLU, İSMAİL OĞLU HAKAN olacaktır. İşte c# bunu
SARIKAYA. TAHİR. İSMAİL. HAKAN olarak kullanır. (oğlu kelimesi (.) ile ifade edilmiştir.)
Programın içinde noktaya (.) basılınca açıklayıcı seçeneklerin gelmesi tamamen bu
yapının bir ürünüdür. C#’ın içerisinde o kadar çok class tanımlanmıştır ki birçok
uygulamada class tanımlamaya gerek kalmamaktadır. Kodlamada kullandığımız bütün
fonksiyonların bir class’ın üyesi olduğunu asla unutmayınız. Bir class’ın içerisinde
73
![Page 74: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/74.jpg)
nU
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.
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.
74
![Page 75: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/75.jpg)
nU
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); }
}}
Form Kodları
MesajVer() Fonksiyonu için;
ilk yeni = new ilk(); private void button1_Click(object sender, EventArgs e) { yeni.MesajVer(); }
usVer()Fonksiyonu için;
ilk yeni = new ilk();private void button1_Click(object sender, EventArgs e){ MessageBox.Show(yeni.usVer(2,5).ToString());
}
Ekran Çıktısı
75
![Page 76: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/76.jpg)
nU
Küçük Bilgiler
Verilen bilgiler ilerleyen konularda ayrıntılı olarak işlenecektir.
1- Class tanımlama yöntemleri
Amacımız ogr. dan sonra ad ve soyadın görünüp onlarla işlem yapabilmekti.
2- Static Classlar
76
![Page 77: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/77.jpg)
nU
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.
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
77
![Page 78: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/78.jpg)
nU
{ 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;
}}
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
78
![Page 79: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/79.jpg)
nU
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;
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;
79
![Page 80: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/80.jpg)
nU
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.
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();
80
![Page 81: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/81.jpg)
nU
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.
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;
81
![Page 82: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/82.jpg)
nU
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.
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ı
82
![Page 83: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/83.jpg)
nU
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.
Ekran Çıktısı
Butona tıkladıktan önce Butona tıkladıktan sonra
Yukarıda görüldüğü üzere butona tıkladıktan sonra Form2 ‘nin text’i “Nurdan Sarıkaya”
olarak değişmiştir.
83
![Page 84: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/84.jpg)
nU
Virtual ve Override Metods Tanımlamak
Bazen bir class’ta tanımlamış olduğunuz metod’a başka bir class’tan eklenti yaparak
ulaşmak isterseniz kullanabileceğiniz metodlardır. Burada Virtual tanımladığınız metod
protected olamaz, Public olmalıdır.
Örnek:
Class Kodları
public class nurdan1{ public virtual string meslek(string mes) { return mes; } public class gazi : nurdan1 //nurdan1 classındaki virtual'ı kullanblir. { public override string meslek(string ulas) { return ulas + "Mühendisi"; // parametreyle eklenti olarak Mühendisi döndürür
} }}
Form Kodları
private void button2_Click(object sender, EventArgs e) { string sonuc; gazi x = new gazi(); sonuc = x.meslek("İnş."); //gazi class'ındaki meslek metodu çağırılıyor. Form2.ActiveForm.Text = sonuc; //İnş. Mühendisi yazar.
84
![Page 85: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/85.jpg)
nU
}
Base Class Constructors
Bazı durumlarda bir değişkeni bir class’ta tanımlayabilir (protected ile) diğer class’larında
kullanmasını sağlayabilirsiniz. Fakat her kullanımda gene eski değerini almasını
isteyebilirsiniz. İşte bu durumlar için kullanabileceğiniz bir yöntem örneği inceleyiniz.
Projeniz “prestige” isminde bir class dahil ediniz ve o class’a aşağıdaki kodu ekleyiniz.
Class’ın using kısmına using System.Windows.Forms; ekleyiniz.
Programa “using System.Windows.Forms;” eklemezseniz;
“MessageBox.Show()” metodu çalışmayacaktır.
Class Kodları
namespace ClassDenemeleri
{
public class prestige
{
protected string ad = "Nurdan Sarıkaya";
//sadece istediğim classlar kullansın.
}
public class ev : prestige
{
public void metod(string adlar)
{
base.ad = adlar;
MessageBox.Show(base.ad, "Başlık");
}
85
![Page 86: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/86.jpg)
nU
} public class sonuc : prestige { public string son() { return base.ad; //ad değişkeninin değerini döndür }
}
Form Kodları
private void button1_Click(object sender, EventArgs e){ string deger; ev yeni = new ev(); sonuc bul = new sonuc(); yeni.metod("Hakan Sarıkaya"); deger = bul.son(); Form3.ActiveForm.Text = deger;
}
Ekran Çıktısı
Bu şekilde tek bir değişken
tanımlayarak her class’ta
kullanabiliriz (performansta
artar).
86
![Page 87: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/87.jpg)
nU
Class’ların içerisindeki değişkenler, fonksiyonlar, procedure’lerin hepsi public ile
tanımlanmazlar (genellikle public veya private kullanılır). Çünkü public’le tanımlananlara
tüm class’larca ulaşılabilir. Tanımlama seçenekleri ve anlamları aşağıda verilmiştir.
Tanımlama Şekli Çağrılma Seçenekleri
Public Kısıtlaması yok her class’tan her fonksiyon ve
procedure çağırabilir.
Private Sadece oluşturulduğu class’taki fonksiyon veya
procedure’lerden çağırılabilir.
Protected Sadece oluşturulduğu class’tan ve onun
referans gösterildiği diğer class’lara ait
fonksiyon ve procedure’lerden çağırılabilir.
İnternal Bu class’ a ait assembly tarafından çağırılabilir.
Protected İnternal Protected ve İnternal’ın ikisinin yaptığını yapar.
Örnek: Project / Add Class/ Class / … .cs yoluyla projemize class ekliyoruz.
MessageBox.Show() kullanabilmek için “using System.Windows.Forms;”
kodumuza ekliyoruz.
Class Kodları
namespace ClassDenemeleri
87
![Page 88: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/88.jpg)
nU
{ class mesajlar { public void mesaj1() { MessageBox.Show("merhaba1"); } public void mesaj2() { MessageBox.Show("Merhaba2"); } }
}
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();
88
![Page 89: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/89.jpg)
nU
msj.mesaj1();}
private void button2_Click(object sender, EventArgs e){ mesajlar msj = new mesajlar(); msj.mesaj2();}}}class mesajlar{ public void mesaj1() { MessageBox.Show("Merhaba 1"); } public void mesaj2() { MessageBox.Show("Merhb 2"); }}
Class kodları namespace kodlarının dışına yazılır.
89
![Page 90: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/90.jpg)
nU
BitArray Sınıfı
Boolean veya byte türünde değerleri barındıran koleksiyondur. Mantıksal işlemler için
kullanılabilir.(And,Or gibi)Bu sınıfı kullanabilmek için using System.Collections kod satırını
eklemeniz gerekir.
Kodlar
public partial class bitarray : Form { public bitarray() { InitializeComponent(); } bool[]a= {true,false,false,true,false,true}; private void button1_Click(object sender, EventArgs e) { BitArray aGiris = new BitArray(a); foreach (bool i in aGiris) { listBox1.Items.Add(i); } }
}
Ekran Çıktısı
90
![Page 91: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/91.jpg)
nU
Hashtable Sınıfı
Veriler key-value(anahtar-değer) şeklinde tutulmaktadır. Veri türü object yani tüm veri
türlerini kullanabilirsiniz. Key değiştirilemez ve boş değer içeremez ama value
değiştirilebilir ve boş değer içerebilir. Bu sınıfı kullanabilmek için using System.Collections
kod satırını eklemeniz gerekir.
Add metodu: Key ve value elemanlarını ekleme işlemi için kullanılır.
Kullanımı: Add(key,value)
ContainsKey metodu: Belirtilen key değeri tanımlanan Hashtable sınıfı içinde var ise true
yok ise false değerini döndürür.
Kullanımı: ContainsKey(key)
ContainsValue metodu: Belirtilen value değeri tanımlanan Hashtable sınıfı içinde var ise
true yok ise false değerini döndürür.
Kullanımı: ContainsKey(value)
Örnek:
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;
namespace ClassDenemeleri{ public partial class Form5 : Form { public Form5() { InitializeComponent(); } Hashtable htablo = new Hashtable();
private void button1_Click(object sender, EventArgs e) {
91
![Page 92: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/92.jpg)
nU
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.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;
92
![Page 93: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/93.jpg)
nU
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);
}
private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(DictionaryEntry i in htablo) { listBox1.Items.Add("Key: " + i.Key + "value: " + i.Value); } }
private void button3_Click(object sender, EventArgs e) { label3.Text = htablo[textBox3.Text].ToString(); } }}
Ekran Çıktısı
93
![Page 94: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/94.jpg)
nU
SortedList Sınıfı
Veriler key-value(anahtar-değer) şeklinde tutulmaktadır. Hashtable’dan farkı eklenen
verileri alfabetik olarak sıralı bir şekilde tutmasıdır. Veri türü object yani tüm veri
türlerini kullanabilirsiniz. Key değiştirilemez ve boş değer içeremez ama value
değiştirilebilir ve boş değer içerebilir. Bu sınıfı kullanabilmek için using System.Collections
kod satırını eklemeniz gerekir.
Add metodu: Key ve value elemanlarını ekleme işlemi için kullanılır.
Kullanımı: Add(key,value)
ContainsKey metodu: Belirtilen key değeri tanımlanan SortedList sınıfı içinde var ise true
yok ise false değerini döndürür.
Kullanımı: ContainsKey(key)
ContainsValue metodu: Belirtilen value değeri tanımlanan SortedList sınıfı içinde var ise
true yok ise false değerini döndürür.
Kullanımı: ContainsKey(value)
Örnek:
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;
namespace ClassDenemeleri{ public partial class Form5 : Form { public Form5() { InitializeComponent(); } SortedList sListe = new SortedList();
private void button1_Click(object sender, EventArgs e) { sListe.Add(textBox1.Text, textBox2.Text);
94
![Page 95: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/95.jpg)
nU
}
private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(DictionaryEntry i in sListe) { listBox1.Items.Add("Key: " + i.Key + "value: " + i.Value); } }
private void button3_Click(object sender, EventArgs e) { label3.Text = sListe.ContainsValue(textBox3.Text).ToString(); } }}
Ekran Çıktısı
95
![Page 96: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/96.jpg)
nU
Stack Sınıfı
Son giren ilk çıkar prensibiyle çalışır. Varsayılan olarak 10 elemanlıdır. Veri türü object
yani tüm veri türlerini kullanabilirsiniz. Bu sınıfı kullana bilmek için using
System.Collections kod satırını eklemeniz gerekir.
Push metodu: Kolkeksiyona eleman eklemek için kullanılır.
Kullanımı: Push(eleman)
Pop Özelliği: Son giren elemanı vererek kollleksiyondan siler.
Peek Özelliği: Son giren elemanı verir. Kollleksiyondan silmez.
Clear Özelliği: Kolleksiyonun temizlenmesini sağlar.
Count Özelliği: Son Kolleksiyonun eleman sayısını verir.
Örnek:
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;
namespace ClassDenemeleri{ public partial class Form6 : Form { public Form6() { InitializeComponent(); } Stack s = new Stack(); private void button1_Click(object sender, EventArgs e) { s.Push(textBox1.Text); }
private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); foreach(object i in s) { listBox1.Items.Add(i); }
96
![Page 97: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/97.jpg)
nU
}
private void button3_Click(object sender, EventArgs e) { label1.Text=s.Pop().ToString(); }
private void button4_Click(object sender, EventArgs e) { label1.Text = s.Peek().ToString(); } }}
Ekran Çıktısı
Queue Sınıfı
97
![Page 98: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/98.jpg)
nU
İ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) { listBox1.Items.Add(i); } }
98
![Page 99: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/99.jpg)
nU
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ı
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.
99
![Page 100: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/100.jpg)
nU
Ö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; }}
Ekran Çıktısı
100
![Page 101: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/101.jpg)
nU
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(); }
}
Örnek: Get ve Set deyimlerini kullanarak iki kelimeyi okuyup bunları birleştiren metodu
sınıf içinde oluşturalım.
101
![Page 102: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/102.jpg)
nU
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(); }}
Ekran Çıktısı
102
![Page 103: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/103.jpg)
nU
Ö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; } set { if(value>=0 && value<=100)
103
![Page 104: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/104.jpg)
nU
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();
}
Ekran Çıktısı
104
![Page 105: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/105.jpg)
nU
105
![Page 106: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/106.jpg)
nU
Mevcut Class’ları Kullanma
Örnek: Ekrana bir buton ekleyelim ve bu hazır butona basınca kendi butonumuz oluşsun
kendi butonumuza tıklayınca bize merhaba mesajını versin.
Kodlar
private void tiklama(object nesne, EventArgs e) { MessageBox.Show("Merhaba"); } private void button1_Click(object sender, EventArgs e) { Button b1 = new Button(); b1.Text = "Merhaba"; b1.Left = 110; b1.Top = 60; b1.Parent = this; // b1.Parent=Panel1 (Panel1 eklenirse) b1.Click += new EventHandler(tiklama);
}
Ekran Görüntüsü
Açıklama: Yukarıda yazılan buton classı
somut bir classtır. Örneğin math classı
soyut bir classtır bir parente “canvasa”
ihtiyacı vardır. b1.Parent = this; //
form1' in butonumuzun sahibi
olduğunu kasteder. Bizim butonumuzun
görsel hale gelmesini sağlar. Thisde bu
form da oluşması için kullanılır. This yerine
label1 vb. yazılabilir.
Kullanıcı kuontrollü classlarda parent
mutlaka yazılmalıdır. Bunun yanısıra olay
oluşturmalı: b1.Click += new
EventHandler(tiklama); // butona
olay atamak:EventHandler Olay
atamayı bilmiyorsak form1 de bir adet buton ekle ve Program.cs ye git orada buton
oluşturulma adımlarına bak ve işlemini tamamla. Bu yöntem diğer nesnelerin classlarını
oluştururkende aynı şekilde uygulanabilir.
106
![Page 107: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/107.jpg)
nU
Örnek: Kullanıcının istediği kadar buton oluşturmasını ve her oluşturduğu butonun ismi
farklı olmasını sağlayan buton classını yazmak
Kodlar
private void tiklama(object sender, EventArgs e) { Button b = new Button(); b= (Button)sender; MessageBox.Show(b.Text); } private void button1_Click(object sender, EventArgs e) { Button [] b= new Button[10]; for (int i = 1; i <= Convert.ToInt16(textBox1.Text); i++) { b[i] = new Button(); b[i].Text = "Merhaba"+i.ToString(); b[i].Top = i * 75; b[i].Left = 50; b[i].Parent = this; b[i].Click += new EventHandler(tiklama);
}
}
Ekran Görüntüsü
107
![Page 108: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/108.jpg)
nU
Örnek: Ekranda bir adet hazır buton olsun kullanıcı bu butona tıklayınca bize 2 adet radio
buton üreten biri play diğeri stop isimli olan classı ve bu radio butonlara tıklayınca
hangisine tıklanıldığını bize mesajla bildiren programı yazınız.
Kodlar
private void tiklama1(object sender, EventArgs e) { MessageBox.Show("Play'e tıklandı"); }private void tiklama2(object sender, EventArgs e) { MessageBox.Show("Stop'a tıklandı"); }private void button1_Click(object sender, EventArgs e) { RadioButton r1 = new RadioButton(); RadioButton r2 = new RadioButton(); string a = "Play"; string b = "Stop"; r1 = new RadioButton(); r1.Text = a.ToString(); r1.Left = 75; r1.Top = 50; r1.Parent = this; r1.Click += new EventHandler(tiklama1);
r2 = new RadioButton(); r2.Text = b.ToString(); r2.Left = 200; r2.Top = 50; r2.Parent = this; r2.Click += new EventHandler(tiklama2);
}
Ekran Görüntüsü
108
![Page 109: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/109.jpg)
nU
Örnek: Timer classını kullanarak textboxta butona tıklayınca sayıları 1’den başlayıp belli
aralıklarla arttırmak.
Kodlar
public Form6() { InitializeComponent(); } int say = 0;private void myTick(object sender, EventArgs e) { say++; textBox1.Text = say.ToString(); }private void button1_Click(object sender, EventArgs e) { Timer t = new Timer(); t.Interval = 1000; t.Tick += new EventHandler(myTick); t.Start();
}
Ekran Görüntüsü
109
![Page 110: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/110.jpg)
nU
Örnek: Butona ekstra bir özellik “Kalıtım” oluşturmak amacıyla buton classını oluşturup,
classı kullanarak butonda işlemler yapınız.
Class Kodları
İlk olarak Project – Add class (mybuton isimiyle) oluşturulur.
using System.Windows.Forms;
namespace nisan
{
class mybutton: Button { private string deger_; public string deger { get { return deger_; } set { deger_=value; }
}}}
Form Kodları
private void myClick(object sender, EventArgs e) { mybutton b = new mybutton(); b = (mybutton)sender; MessageBox.Show(b.deger); }private void button1_Click(object sender, EventArgs e) { mybutton b = new mybutton(); b.deger = "Barış"; b.Parent = this; b.Text = "MyButton"; b.Click += new EventHandler(myClick);
}
Ekran Görüntüsü
110
![Page 111: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/111.jpg)
nU
Örnek: Mayın Tarlası Oyunu
Kodlar
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;
namespace _27Mayis{ public partial class Form1 : Form { Button[,] myB = new Button[20, 20]; byte[,] matris; byte mayin_sayisi=5; byte boyut = 10;
public Form1() { InitializeComponent(); } private void butonYokEt(byte boyut) { byte i, j; for (i = 0; i < boyut; i++) { for (j = 0; j < boyut; j++) { myB[i, j].Dispose(); } } } private void matrisOlustur(byte boyut,byte mayinSayisi) { matris = new byte[20, 20]; byte sayac = 0; Random r = new Random(); byte i, j; while (sayac < mayinSayisi) { i = (byte)r.Next(0, boyut - 1); j = (byte)r.Next(0, boyut - 1); if (matris[i, j] != 9) { matris[i, j] = 9; sayac++; } }
111
![Page 112: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/112.jpg)
nU
//mayın etrafını bir artırma byte y, x; for (i = 0; i < boyut; i++) { for (j = 0; j < boyut; j++) { if (matris[i, j] == 9) { for (y = (byte)(i - 1); y <= i + 1; y++) { for (x = (byte)(j - 1); x <= j + 1; x++) { if((x>=0 && x<boyut&& y>=0 && y<boyut) && matris[y,x]!=9) { matris[y,x]++; } } } } } } } private void myClick(object sender, EventArgs e) { Button b = new Button(); b = (Button)sender; byte i = Convert.ToByte(b.Name.Substring(0, 1)); byte j = Convert.ToByte(b.Name.Substring(1, 1)); b.Text = matris[i, j].ToString(); b.FlatStyle = FlatStyle.Flat;
if (matris[i, j] == 9) { b.Image = ımageList1.Images[0]; MessageBox.Show("game over"); butonYokEt(boyut); } } private void butonOlustur(byte boyut) { for (byte i = 0; i < boyut; i++) { for (byte j = 0; j < boyut; j++) { myB[i, j] = new Button(); myB[i, j].Parent = panel1; myB[i, j].Width = 30; myB[i, j].Height = 30; myB[i, j].Left = (panel1.Width - (boyut * 30)) / 2 + j * 30; myB[i, j].Top = (panel1.Height - (boyut * 30)) / 2 + i*30; myB[i, j].Name = i.ToString() + j.ToString(); myB[i, j].Click += new EventHandler(myClick);
112
![Page 113: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/113.jpg)
nU
} } }private void toolStripMenuItem1_Click(object sender, EventArgs e) { matrisOlustur(boyut, mayin_sayisi); butonOlustur(boyut); }
private void toolStripMenuItem3_Click(object sender, EventArgs e) { boyut = 10; }
private void toolStripMenuItem4_Click(object sender, EventArgs e) { boyut = 15; }
private void toolStripMenuItem5_Click(object sender, EventArgs e) { boyut = 20; }
private void toolStripComboBox1_Click(object sender, EventArgs e) { if (toolStripMenuItem1.Text == "5") mayin_sayisi = 5; if (toolStripMenuItem2.Text == "10") mayin_sayisi = 10; if (toolStripMenuItem3.Text == "15") mayin_sayisi = 15; if (toolStripMenuItem3.Text == "20") mayin_sayisi = 20; }
}}
113
![Page 114: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/114.jpg)
nU
Ekran Görüntüsü
1. Mayın tarlasının boyutu ve toolStripComboBox1’dan kaç tane mayın olacağı seçilir.
2. Başlat butonuna tıklandığında seçtiğimiz özellikteki mayın tarlası matris ekranı
gelir.
3. Küçük karelere tıkladığımızda 1, 2, 3, 4 gibi puanlar gelir. Mayını açtığımızda
“Game Over” uyarısı gelir.
114
![Page 115: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/115.jpg)
nU
Örnek: “NumericUpDown” nesnesinden istediğimiz sayıyı belirleyip “Oluştur” butonuna
tıklıyoruz. Böylece class ‘da oluşturduğumuz nesnelerden istediğimiz sayıda ve üzerinde
1-9 arası rastgele sayılardan oluşacak şekilde form ekranımıza geliyor. Ardından bu
sayı butonlarımızı mavi panele sürüklüyoruz. Label’e baktığımızda sürüklediğimiz bu sayı
butonlarının üzerindeki rakamların toplamını görüyoruz.
Class Kodları
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Drawing;
namespace sayibuton{ public class sbuton:UserControl { private int s = 0; public int Sayi { get { return s; } set { s = value; OnPaint(null); } } protected override void OnPaint(PaintEventArgs e) { Graphics g=this.CreateGraphics(); Pen p = new Pen(Color.Red,20); Font f = new Font("Arial",20,FontStyle.Bold); SolidBrush b= new SolidBrush(Color.White); g.DrawEllipse(p, 10, 10, 20, 20); g.DrawString(s.ToString(), f, b, 8, 6); this.Width=40; this.Height=40;
base.OnPaint(e); }
private void InitializeComponent() { this.SuspendLayout(); // // sbuton //
115
![Page 116: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/116.jpg)
nU
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 && sb.Top > panel1.Top && sb.Top < panel1.Top + panel1.Height) {
116
![Page 117: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/117.jpg)
nU
toplam += sb.Sayi; label1.Text = toplam.ToString(); sb.Visible = false; } durum = false; } private void my_MouseMove(object sender, MouseEventArgs e) { sbuton sb = new sbuton(); sb = (sbuton)sender; if (durum) { sb.Left += e.X - xy.X; sb.Top += e.Y - xy.Y; }
}
private void button1_Click(object sender, EventArgs e) { for (byte i = 0; i < numericUpDown1.Value; i++) { //butona bastgmzda s buton olştrr istediğmz sayıda , x ye koordnatı olarak ekraana yazdrdık, random rakamlar urettk class içersndekı sayı içersne aktardık.
myB[i] = new sbuton(); myB[i].Parent = this; myB[i].Left = 50 + i * 75; myB[i].Top = 350;
//üzerndeki sayıları yazcaz int sayi = r.Next(1, 9); myB[i].Sayi = sayi; myB[i].MouseMove += new MouseEventHandler(my_MouseMove); myB[i].MouseUp += new MouseEventHandler(my_MouseUp); myB[i].MouseDown += new MouseEventHandler(my_MouseDown);
} } }}
117
![Page 118: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/118.jpg)
nU
Ekran Görüntüsü
118
![Page 119: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/119.jpg)
nU
Nesne Yönelimli Programlama İlkeleri
Kılıflama (encapsulation)
Nesne yapısı ve erişim hiyerarşisi
Veri üyeleri (data field/member), fonksiyon üyeleri
Çok biçimlilik (polymorphism)
Aynı isimli fakat farklı parametreli metot tanımlama
Kalıtım (Inheritance)
Nesne türetme
Nesnelerin çoklu davranış ve erişim izinleri
Bu konu hakkında ayrıntı verilmemiştir.
Açıklamalar
Örnekler yapılmış ve uygulanmıştır. Herhangi bir hata yoktur.
119
![Page 120: NurdanSarıkaya](https://reader033.vdocuments.site/reader033/viewer/2022061108/544fafe3b1af9f1c168b4664/html5/thumbnails/120.jpg)
nU
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.
Belge içerisinde rahat gezinebilmeniz amacıyla bu word dosyası pdf olarak
yayımlanmıştır.
Nurdan SARIKAYA
120