Enumlarla Çalışmak

Merhabalar,

Bugün birlikte sabit olarak Türkçeleştirebileceğimiz enum’lar üzerinde duracağız. Öncelikle Enum’ları niçin kullanırız biraz bunun üzerinde duralım.

Arkadaşlar insanlara sabit seçeneklerin sunulması gerektiği anlarda enum tipine ihtiyaç duyarız. Nasıl mı, örneğin Cinsiyet bilgisi sabittir Erkek ve Kadın olmak üzere. Bir örnek daha verelim, bu da departmanlar olsun, bir şirketteki departmanlar (insan kaynakları, bilgi işlem, pazarlama vs) uzun yıllar boyunca değişmesi zor olan sabitlerdir esasında. Siz bu tarz verilerle karşılaşıp bunlar için veritabanınızda tablo oluşturmak yerine Enum’ları tercih edebilirsiniz. Bu sizi database üzerindeki bir tablonun yükünden kuratracak ve performans açısından daha verimli sonuçlar elde etmenizi sağlayacaktır.

Bir enumun class seviyesinde tanımlanabileceğini hatırlatıp bir senaryo üzerinden yazının konusu olan enumlarla nasıl çalışılır sorusunun cevabını aramaya başlayalım. Senaryomuz şu olsun;

X Üniversitesi Mezunlar Derneği’nin sahibi olduğumuzu düşünelim. Ve deneğe kayıt edeceğimiz üyelerimizin Ad, Soyad, Mail adresi ve öğrenim durumu bilgilerine ihtiyaç duyduğumuzu düşünelim. Şimdi gelin bunun için bir form hazırlayalım.



Bu formda bir tabControl kullanıyoruz ve 1. TabPage’de yukarıda da gördüğünüz gibi üye kaydetme işlemini gerçekleştiriyoruz. 2. TabPage ise kayıt ettiğimiz üyelerin gösteriminin yapılacağı sayfa olacaktır.



Üye ekleme işleminin yapılacağı tabPage’de öğrenim durumunun karşısında bir comboBox olduğu dikkatinizi çekmiştir. Bu comboBox, hazırlayacağımız enum için kullanacağımız kontrol olacaktır. Şimdi OOP’den de yardım alarak class ve enum’umumuzu oluşturalım;

    public enum OgrenimDurumu
    {
        Lise,
        Universite,
        Yuksek_Lisans,
        Doktora
    }

    public class Uye
    {
        public string AdSoyad { get; set; }
        public OgrenimDurumu Mezuniyet { get; set; }
        public string MailAdres { get; set; }

        public override string ToString()
        {
            return this.AdSoyad;
        }
    }

Enum ve class’ımız hazır olduğuna göre üye kayıtları gerçekleştirmeye başlayabiliriz. Yalnız unutmamamız gereken bir nokta var ki o da Form’un load’ında yani form yüklenirken combobox’ımızı OgrenimDurumu enumumuz ile doldurmaktır. Peki bunu nasıl yaparız? Bu sorunun cevabını aşağıdaki kod bloğunda bulabiliriz.

        private void Form1_Load(object sender, EventArgs e)
        {
            //# Enum tipi ile Combobox'ın içini nasıl doldururum?
            cbOgrenimDurumu.DataSource = Enum.GetValues(typeof(OgrenimDurumu));
        }

Bu kodun türkçesi şudur; öğrenim durumu tipinin değerlerini comboBox’ın veri kaynağı olarak ata. Combobox’ın veri kaynağını da belirledikten sonra kayıt yapmaya hazırız. Peki kaydet butonuna bastığımızda nasıl kayıt ekleyeceğiz? Arkadaşlar burada bir veritabanı kullanmayacağımız için kayıtları listbox’a doldurmamız yeterli olacaktır. Bunu sağlayacak kod bloğumuz ise aşağıdaki gibi olacaktır;

        private void btnEkle_Click(object sender, EventArgs e)
        {
            Uye eklenecekUye = new Uye { AdSoyad = txtAdSoyad.Text, Mezuniyet = (OgrenimDurumu)cbOgrenimDurumu.SelectedItem, MailAdres = txtMailAdres.Text };
            lstboxUyeler.Items.Add(eklenecekUye);
        }

Yukarıdaki kod bloğunda önemli olan kendisi de bir enum tipi olan Öğrenim Durumu property’sine atamayı nasıl gerçekleştireceğimizdi onu da combobox’ın seçili elemanını OgrenimDurumu enumuna çevirerek yaptık -> (OgrenimDurumu)cbOgrenimDurumu.SelectedItem.

Şimdi kaydettiğimiz bu üyeyi göstermeye geldi sıra. Dikkat edecek olursanız biz oluşturduğumuz üyeleri listbox’a ekliyoruz. Şimdi bu listbox’tan bir elemanın seçilmesi ile bilgileri pekala alıp sunabiliriz. Örnek olarak aşağıdaki kodu inceleyiniz;

        private void lstboxUyeler_SelectedIndexChanged(object sender, EventArgs e)
        {
            Uye seciliUye = lstboxUyeler.SelectedItem as Uye;
            lblAdSoyad.Text = seciliUye.AdSoyad;
            lblMezuniyet.Text = seciliUye.Mezuniyet.ToString();
            lblMail.Text = seciliUye.MailAdres;
        }

Bu kod bloğunda dikkate etmeniz gereken nokta enum tipi olan Mezuniyet’i ToString() metodu ile label’da göstermemizdir.

NOT : Enumların sayısal değerine ulaşmak için onları int ile convert etmeniz gerekmektedir. Örnek;
            lblMezuniyet.Text = ((int)seciliUye.Mezuniyet).ToString();


Bir sonraki yazımızda görüşmek dileğiyle, hoşçakalın..

0 yorum:

Yorum Gönder