Daha önceki yazılarımızda ArrayList sınıfı ve Array sınıfını incelemiştik. Bu sınıflarda elemanlara erişmek için bir index numarası kullanmak gerekiyordu. Fakat bazı durumlarda indeks numarası yerine bir koleksiyondaki elemanlara bir anahtar değer ile erişmek isteyebiliriz.Bu durumu System.Collections isim alanında bulunan Hashtable sınıfı kullanarak çözebiliriz. Hashtable sınıfında koleksiyonlar, bir anahtar (key) ve değer (value) ikilisi olarak saklanır. Bir Hashtable nesnesinin yapısını aşağıdaki şekilde düşünebiliriz.
Şimdi konuyu daha iyi anlayabilmek için basit bir örnek oluşturalım.
Örneğimizde İl Telefon Kodu ve İl Adı için “sehirler” isimli Hashtable koleksiyonuna ekleme yapma, Hashtable koleksiyonunu listview‘ de listeleme, koleksiyonda arama yapma ve Hashtable koleksiyonundan eleman silme işlemlerini gerçekleştireceğiz. Listeleme işlemini yaparken il koduna göre sıralama işleminide gerçekleştireceğiz. Öncelikle C# yeni bir Windows Form uygulaması açarak işe başlıyoruz. Formumuz listview, textbox, label ve buttonlardan oluşmakta.
Kodlarımıza geçecek olursak;
İlk olarak Hashtable sınıfını kullanabilmemiz için gerekli olan System.Collection isim alanını ekliyoruz.
1 2 3 | using System.Collections; |
Daha sonra public olarak Hashtable tanımlamamızı gerçekleştiriyoruz.
1 2 3 | Hashtable sehirler = new Hashtable(); |
Listview’ de listeleme işlemini çok sık kullanacağız. Bu yüzden bir metot olarak tanımlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public void Listele() { ListViewItem item = new ListViewItem(); ICollection kod = sehirler.Keys; listView1.Clear(); //Kolon Başlıkları ve Genişlikleri listView1.Columns.Add("İl Kodu",60); listView1.Columns.Add("İl Adı",120); listView1.View = View.Details; listView1.GridLines = true; foreach(String eleman in kod) { item = listView1.Items.Add(eleman); item.SubItems.Add(sehirler[eleman].ToString()); } //Küçükten büyüğe sıralama //www.yazilimkodlama.com listView1.Sorting = SortOrder.Ascending; } |
Form açıldığında koleksiyonumuza ilk değer atamalarını ve eklenen bu değerlerin listview‘ de listelenmesini aşağıdaki şekilde sağlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 | private void Form1_Load(object sender, EventArgs e) { //Hashtable değer ekleme. sehirler.Add("322", "ADANA"); sehirler.Add("416", "ADIYAMAN"); sehirler.Add("272", "AFYON"); sehirler.Add("472", "AĞRI"); sehirler.Add("382", "AKSARAY"); Listele(); } |
Şimdi de Ekle butonuna geçelim. EKLE butonuna basıldığında Textbox lara girilen değerlerin koleksiyonumuza eklenmesini ve Listview‘ de listelenmesini sağlıyoruz. Görüleceği gibi değer ekleme işlemi yapıldıktan sonra textbox’ ların içeriği temizleniyor.
1 2 3 4 5 6 7 8 9 | private void button1_Click(object sender, EventArgs e) { sehirler.Add(textBox1.Text, textBox2.Text); //Değer Ekleme textBox1.Text = ""; textBox2.Text = ""; Listele(); } |
Arama bölümünde Textbox’ a girilen Alan koduna göre şehir ismini Label3‘ te görüntüleyeceğiz.
1 2 3 4 5 6 7 8 | private void button2_Click(object sender, EventArgs e) { //Ara butonu string anahtar=textBox3.Text; label3.Text = sehirler[anahtar].ToString(); } |
1 2 3 4 5 6 7 | private void button3_Click(object sender, EventArgs e) { sehirler.Remove(textBox4.Text); Listele(); } |
Hepsi bu kadar :).
Kodlarımızın tamamı şu şekilde olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace hashtable_ { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Hashtable sehirler = new Hashtable(); public void Listele() { ListViewItem item = new ListViewItem(); ICollection kod = sehirler.Keys; listView1.Clear(); //Kolon Başlıkları ve Genişlikleri listView1.Columns.Add("İl Kodu",60); listView1.Columns.Add("İl Adı",120); listView1.View = View.Details; listView1.GridLines = true; foreach(String eleman in kod) { item = listView1.Items.Add(eleman); item.SubItems.Add(sehirler[eleman].ToString()); } //Küçükten büyüğe sıralama //www.yazilimkodlama.com listView1.Sorting = SortOrder.Ascending; } private void button1_Click(object sender, EventArgs e) { sehirler.Add(textBox1.Text, textBox2.Text); //Değer Ekleme textBox1.Text = ""; textBox2.Text = ""; Listele(); } private void button2_Click(object sender, EventArgs e) { //Ara butonu string anahtar=textBox3.Text; label3.Text = sehirler[anahtar].ToString(); } private void Form1_Load(object sender, EventArgs e) { //Hashtable değer ekleme. sehirler.Add("322", "ADANA"); sehirler.Add("416", "ADIYAMAN"); sehirler.Add("272", "AFYON"); sehirler.Add("472", "AĞRI"); sehirler.Add("382", "AKSARAY"); Listele(); } private void button3_Click(object sender, EventArgs e) { sehirler.Remove(textBox4.Text); Listele(); } } } |
🙂 Acil Lütfen
Hocam Ekle Kodu Çalışmıyor Lütfen Yardımcı Olurmusunuz
Teşekkürler.