26 Eylül 2011 Pazartesi

C# Delegate Kullanimi


5 temel tipten biri olan delegelerin kullanım amaçları, metot adresi saklamaktır. Bazen metotlarımızı, ihtiyacımız olduğu anda çalıştırmak isteyebiliriz. Olay(event) tabanlı programlama ve asenkron programlama yaparken, anonim metot yazarken delegelerden faydalanırız. Bir diğer kullanım amacı da, bir metoda parametre olarak başka bir metot verebilmektir. Bu yazımızda temel olarak delegenin ne olduğununu, nasıl tanımlandığını, nasıl kullanıldığını ve nasıl bir mantıkla çalıştığını inceleyeceğiz.
Delegeler referans türlü bir tiptir. Dolayısı ile nesneleri heap’de durur. Girişte bahsettiğimiz gibi, görevleri metot adresi tutmaktır. Burada dikkat edilmesi gereken nokta; delegenin imzası, tuttuğu metodun imzası ile aynı olmalıdır. İmzadan kastımız, geriye dönüş tipi ve aldığı parametrelerdir. Bir delege, birden fazla metot adresi tutabilir. Bu durumda FIFO (ilk giren ilk çıkar) prensibi geçerlidir. Yani metotlar, delegeye bağlanma sırasına göre çalışırlar. Sonuç almak istediğimiz zaman, en son eklenen metodun yaptığı işi görürüz.
Şimdi basit bir örnek ile anlatmak istediklerimizi incelemeye çalışalım.
namespace DelegeKavrami
{
    delegate void Temsilci(); //Tanımladığımız bu delege, geriye dönüş tipi void olan ve parametre almayan metotların adreslerini saklayabilir.
   
    class Program
    {
        static void Main(string[] args)
        {
            Temsilci t = new Temsilci(Test);
            t.Invoke();
        }

        static void Test()
        {
            Console.WriteLine("Metot çalıştı");
        }
    }
}
İlk olarak, adresini tutacağımız metodun imzasına uygun bir delege tanımladık. Daha sonra Main metodu içerisinde, delege nesnemizi oluşturduk ve constructor metoduna parametre olarak metodumuzun adını verdik. t değişkeni üzerinden invoke metodunu çağırdımızıda da metodumuzu çalıştırmış olduk. (metodumuz parametre alsaydı, invoke metoduna parametre değerlerini vermemiz gerekecekti.)
Untitled

Şimdi de bir delegeye birden fazla metot bağladığımızda nasıl bir sonuç alacağımızı incelemeye çalışalım.
namespace DelegeKavrami
{
    delegate int Matematik(int x);
   
    class Program
    {
        static void Main(string[] args)
        {
            Matematik canta = new Matematik(KareAl);
            canta += new Matematik(KupAl);
            Console.WriteLine(canta.Invoke(5));
        }

        static int KareAl(int sayi)
        {
            return sayi * sayi;
        }

        static int KupAl(int sayi)
        {
            return sayi * sayi * sayi;
        }
    }
}
Yukarıdaki kod parçasını çalıştırdığımızda alacağımız sonuç aşağıdaki gibidir.
Untitled2
Delegemize iki metot bağlamamıza rağmen, invoke metodunu çağırdığımızda en son eklenen metodun çalıştığını gördük.
Son olarak yazım kolaylıklarından bahsedelim.
1) Bir delegeye += ile metot ekleyebildiğimiz gibi, –= ile de metot çıkartabilmemiz mümkündür.
Matematik canta = new Matematik(KareAl);
canta += new Matematik(KupAl);
canta -= new Matematik(KupAl);
Bu aşamada delegemizi invoke ettiğimizde KareAl metodu çalışacaktır.
2) Delege nesnesi oluştururken, new …(..) yazmayabiliriz.
Matematik canta = KareAl;
canta += KupAl;
Console.WriteLine(canta.Invoke(5));
3) canta değişkeni üzerinden invoke etmek yerine, bu değişkene direkt olarak parametreleri verebiliriz.
Matematik canta = new Matematik(KareAl);
int sonuc = canta(5);

Kaynak : http://onursalkaya.blogspot.com 
Share:

C# Interface Kullanimi


.Net’in 5 temel tipinden (class,interface,delegate,struct,enum) biridir. Çoklu kalıtım ihtiyacını gidermek amacı ile kullanılırlar. Interface’leri, yetenek kazandıran şablonlar olarak tanımlayabiliriz. Bir başka deyişle; tüm üyeleri abstract olan sınıflara benzetilebilirler. Bir sınıf birden fazla sınıftan kalıtılamaz, ancak bir sınıfa birden fazla interface’I implement etmek mümkündür. Genelde kullanım amaçları, uygulandığı tiplere bazıkurallar koymak ya da bazı yetenekler kazandırmaktır.
NOT: Interface’ler de, kalıtım yapar gibi  ‘ : ’ işareti ile uygulanırlar. ‘ : ‘ işaretinden sonra bir sınıf gelirse, buna “kalıtmak” ya da “extend etmek” deriz. Eğer bir interface gelirse, buna “uygulamak” veya “implement etmek” deriz.
Temel özellikleri;
  1. Tüm üyeleri abstract olmak zorundadır. (Üyeleri tanımlarken bizim belirtmemize gerek yoktur. Zaten default olarak abstact’tırlar.)
  2. Uygulandığı sınıf, o interface’in tüm üyelerini ezmek zorundadır. (override anahtar sözcüğünü kullanamayız)
  3. Üyeleri tanımlarken access modifier (erişim belirleyici) yazamayız. Üyeler default olarak public’tir.
Şİmdi basit bi örnek üzerinde inceleyelim.
Aslan,Kaplan,At ve Inek adında 4 tane sınıf tasarlayalım. İçerisine herhangi bir üye tanımlaması yapmayacağız.
    class Aslan
    {
    }
   
    class Kaplan
    {
    }
   
    class At
    {
    }
   
    class Inek
    {
    }
Şimdi de Etçil ve Otçul adında iki sınıf tasarlayalım. Bu sınıflarımızı abstract olarak tanımlayacağız. Çünkü amaçları, yukarıda yazdığımız sınıflara base class olmaktır.
    abstract class Etcil
    {
        public abstract void BeslenmeSekli_1();
    }

    abstract class Otcul
    {
        public abstract void BeslenmeSekli_2();
    }
En başta tanımladığımız 4 sınıfı, türlerine göre Etcil ve Otcul sınıflarından kalıtalım;
    class Aslan:Etcil
    {
        public override void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class Kaplan:Etcil
    {
        public override void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class At:Otcul
    {
        public override void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Inek:Otcul
    {
        public override void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }
Simdi de Ayi adında bir sınıf tasarlayalım. Bildiğiniz gibi ayılar hem otçul hem de etçil hayvanlardır. Yani hem etçil hem de otçul sınıfından kalıtım yapmamız gerekecek. Ancak .Net mimarisi çoklu kalıtıma izin vermez. İşte bu noktada interface'ler imdadımıza yetişecektir. Etcil ve Otcul sınıflarını interface olarak tasarlayıp, sınıflarımıza uygulayalım.
    public interface IEtcil
    {
        void BeslenmeSekli_1();
    }

    public interface IOtcul
    {
        void BeslenmeSekli_2();
    }
.Net’de interface adlandırmaları büyük ‘I’ harfi ile başlar. Bu bir zorunluluk değildir ancak standartlara uymak açısından, bu tip adlandırmalar tercih etmek daha doğru olur.
    class Aslan : IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class Kaplan : IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class At : IOtcul
    {
        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Inek : IOtcul
    {
        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Ayi : IOtcul, IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }

        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }
Görüldüğü gibi, interface kullanarak sorunumuzu çözmüş olduk. Bu sayede Ayi sınıfımıza hem etçil hem de otçul olma özelliğini kazandırmış olduk

Kaynak : onursalkaya.blogspot.com
Share:

Div Ortalama

800 piksellik bir Div'iniz var ve istiyorsunuz ki ekranınızın genişliği ne olursa olsun o daima ortada kalsın. Table'daki gibi Align="Center" diyerek yapamayız:) 

Öyleyse Divi Nasıl Ortalanır;

<div style="width:800px; margin-left:auto; margin-right:auto;">
        İçerik buraya gelecek.
< /div>
Share:

16 Eylül 2011 Cuma

Flash boyutu sayfada değişmesin

Html sayfa içerisine koyduğumuz bir flashın boyutunun sayfayı kaplamasını ama sayfa boyutu değiştirilince küçülme ve büyüm yapmamasını istiyorsak aşağıdaki kodları kullanmamız kafi olacaktır.

Burada dikkat edilmesi gereken kısım;

<param name="SCALE" value="NoScale">

KODLAR;

<div id="menu">
<object data="images/menu.swf" type="application/x-shockwave-flash" width="100%" height="150px">
<param name="movie" value ="images/menu.swf"/>
<param name="SCALE" value="NoScale">
</object>
</div>



Hakan ÖNCEL
Share:

Oracle Client X64 Bit Windows 7 Üzerine Kurulumu

Bildiğiniz gibi Oracle 10 g x64 Bit Client Windows 7 üzerine kurulamıyor, veya kurulsa bile ODBC bağlantılarında servis isimleri çıkmıyordu.

Yapmış olduğum araştırmalar sonucunda ulaştığım çözümü sizlerle paylaşıyorum;

Öncelikle elinizdeki kurulum 32 Bit Client kurulum dosyanızı 64 Bit üzerine kuramıyorsanız yada işletim sisteminiz Microsoft Windows 7 olduğundan dolayı kurulum işlemini gerçekleştiremiyorsanız aşağıdaki işlemleri yapmamız gerekmekte.

ADIM 1)
Window7 de Oracle 11g kurulumu tamamlandıktan sonra aşağıdaki hatayı alıyorsanız.!

Checking operating system requirements ...
Expected result: One of 5.0,5.1,5.2,6.0
Actual Result: 6.1
Check complete. The overall result of this check is: Failed <<<<
Problem: Oracle Database 11g is not certified on the current operating system.
Recommendation: Make sure you are installing the software on the correct platform.
================================================== ======

Şu işlemleri yaparsanız hatayı gidermiş olursunuz.

C:\Users\KULLANICIADINIZ\AppData\Local\Temp\OraIns tall2009-10-19_01-53-02PM\client
dizini altındaki refhost.xml dosyasını açın ve
<!--Microsoft Windows Vista-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.0"/>
</OPERATING_SYSTEM> in altına;

<!--Microsoft Windows 7-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>
ekleyin. Gereksinimleri Retry dediğinizde hatanın Success e dönüştüğünü göreceksiniz.


ADIM 2)

Client kurulum dosyasını (ZIP) açtığınız klasörün altındaki "install" dizinine gidin. Orada oraparam.ini dosyasını açıp içindeki "Windows=5.0,5.1,5.2,6.0" satırını "Windows=5.0,5.1,5.2,6.0,6.1" yapın. Bunu yaptıktan sonra kurulum sırasında prerequest check fail etmeyecektir.

Şimdi kurulumu sorunsuz olarak yapabiliriz, kurulum işlemi tamamlandıktan sonra yapacağımız son bir işlem daha kaldı,

ADIM 3 )

%windir%\SysWOW64\odbcad32.exe Klasörü içerisindeki OBDAC32.EXE dosyasını kullanarak ODBC bağlantılarımızı yapabiliriz.
Share:

2 Ağustos 2011 Salı

Outlook 2007'de yeni bir mail yazarken Ş tuşuna bastığınızda veya Türkçe Karakterler çıkmıyorsa ! İşte çözümü

Outlook 2007'de yeni bir mail yazarken Ş tuşuna bastığınızda karakter çıkmıyorsa veya türkçe karakterli kelimeler yazarken klavye sanki çalışmıyormuş hissine kapılıyorsanız yanlız değilsiniz ;) Bunun nedeni Outlook'un bir Eklentisi, Adı da "Redemption Helper Outlook Extension" . Sorunun çözümü ise oldukça basit. Outlook'ta üst menüden Araçlar-> Güven Merkezi -> Eklentiler  kısmında Yönet bölümünde Exchange İstemci Uzantıları kısmını açıyoruz. Burada Redemption Helper Outlook Extension check'ini kaldırıyoruz. Tamam diyerek kapatıyoruz ve Outlook'u restart ediyoruz. Sorun çözüldü
Share:

Outlook 2007'de Türkçe Karakter Sorunu (Redemption Helper Outlook Extension)

Outlook 2007'de yeni bir mail yazarken Ş tuşuna bastığınızda karakter çıkmıyorsa veya türkçe karakterli kelimeler yazarken klavye sanki çalışmıyormuş hissine kapılıyorsanız yanlız değilsiniz ;) Bunun nedeni Outlook'un bir Eklentisi, Adı da "Redemption Helper Outlook Extension" . Sorunun çözümü ise oldukça basit. Outlook'ta üst menüden Araçlar-> Güven Merkezi -> Eklentiler kısmında Yönet bölümünde Exchange İstemci Uzantıları kısmını açıyoruz. Burada Redemption Helper Outlook Extension check'ini kaldırıyoruz. Tamam diyerek kapatıyoruz ve Outlook'u restart ediyoruz. Sorun çözüldü
Share:

Exchange 2007'de Mailbox Defrag

Exchange 2007 sisteminde mailbox databaselerinizde belli zamanlardan sonra şişme olduğunu fark edebilirsiniz. Bu durumda Microsoft Exchange Sisteminde imdadımıza Eseutil aracı yetişmektedir. Kullanımı oldukça basit olan eseutil kullanmadan önce dikkat etmeniz gereken en önemli şey Exchange'inizi kurduğunuz Yerel diskinizde Mailbox büyüklüğünüzün %110'u kadar free space'e sahip olmanız gerektiğidir. Örneğin Mailbox1.mdb mailbox database'iniz 30 GB büyüklüğü sahip öyleyse yerel diskinizde 30 GB'ın %110 u yani 33 GB boş yeriniz olması gerekmektedir. Eğer buna dikkat etmeden defrag işlemine başlarsanız "diskfull" hatası alacaksınız. Eğer Exchange sisteminizin kurulu olduğu yerel diskinizde yeterli yeriniz yok ise yine eseutil aracı yardımınıza yetişiyor /t paramatresini kullanarak defrag işlemini diğer yerel disk üzerinde temp bir db yaratarak halledebiliyorsunuz.
Başlamadan önce :

Admin hesabıyla sisteme giriş yaptığınızdan emin olun.
Diskinizde yeterli boş alana ihtiyacınız olduğuna emin olun.
Defrag yapacağınız mailboxı defrag işlemine başlamadna önce dismount yapın. Defrag boyunca kullanıcılar mailboxa erişemeyeceklerdir.
Bir Mailbox sunucu üzerinde Mailbox Defragmantasyonu :

Exchange Managment Consol üzerinde , defrag yapmak istediğiniz mailbox2a sağ tıklayıp Dismount Database'i seçin.

Komut satırında Exchange'in kurulu olduğu klasörün içerisindeki \bin klasörüne girin. Örnek : C:\Program Files\Microsoft\Exchange Server\bin
bin klasörüne konumlandıktan sonra eseutil /d yazıp mailboxı komut satırının üzerine sürükleyin yada mailboxınızın tam yolunu yazın.

Örnek
C:\program files\microsoft\exchange server\bin Eseutil /d c:\program files\exchange server\mailbox\\.edbVe enter'a basarak defrag işlemini başlatın.

(Eğer diskinizde yeterli yeriniz yoksa üstte belirttiğimiz gibi /t parametresini kullanın. Örnek :C:\program files\microsoft\exchange server\bin Eseutil /d c:\program files\exchange server\mailbox\\.edb /t d:temp.edbDefrag işlemi db nizin boyutuna göre bir süre devam edecektir. 30 GB lık mailbox dbniz ortalam 20 dk da defrag olacaktır. Defrag bittikten sonra dbnizin boyutunu kontrol ederek dbnizi yeniden mount edebilirsiniz
Share:

28 Temmuz 2011 Perşembe

C#'da Settings Kullanımı

Özet :
Uygulamalarımızda kullanıcı bazında veya uygulama bazında ayarlar yapmak için Settings class'ını kullanabiliriz. Settings class'ı ile uygulamayı kullanacak olan kişilere uygulamanın bazı özelliklerini kendilerinin belirleyecekleri şekilde kullanmalarına olanak sağlayabilir veya uygulamanın çalışması için gerekli olan bazı değerleri Settings içinde tutarak uygulamadan bu değerlere erişebiliriz.

Merhabalar,

Uygulamalarımızda kullanıcı bazında veya uygulama bazında ayarlar yapmak için Settings class'ını kullanabiliriz. Settings class'ı ile uygulamayı kullanacak olan kişilere uygulamanın bazı özelliklerini kendilerinin belirleyecekleri şekilde kullanmalarına olanak sağlayabilir veya uygulamanın çalışması için gerekli olan bazı değerleri Settings içinde tutarak uygulamadan bu değerlere erişebiliriz. Settings class'ı C#'da Properties namespace'i aldında bulunur ve dört önemli property'e sahiptir. Bunlardan birincisi Name property'sidir. Name property'si uygulamada tutulacak olan ayarın adının belirlendiği ve ilgili ayara değer atarken erişilmesine olanak sağlayan property'dir. İkinci property olan Type ise ayarın alacağı değerin tipinin tutulduğu property'dir. Örneğin string, boolean veya Color. Scope property'si ise User veya Application değerlerinden birini alır. Bir ayarın Scope'ı Application olarak set edilmişse bu ayar uygulamada kullanıcı tercihlerine bağlı olarak kullanıcı tarafından değiştirilemeyen, uygulamanın çalışmasını önemli derecede etkileyen ayardır. Örneğin uygulamanın veritabanının connection string'i. User scope'lı ayarlar ise kullanıcı bazında değişebilen ve uygulamanın çalışması açısından o kadar da önemli olmayan ayarlardır. Örneğin uygulamadaki butonların rengi gibi. Bu iki değer arasında önemli olan bir fark daha bulunmaktadır. User scope'lı ayarlar uygulama çalışırken erişilebilir ve yeniden ayarlanabilir özelliğe sahipken, Application scope'lı ayarlar uygulama çalışırken read-only'dirler. Application scope'lı ayarları sadece designer ekranından veya .settings dosyasını elle değiştirerek değiştirebilirsiniz.

Şimdi örnek bir uygulamada Settings class'ının kullanımını inceleyelim. Uygulamamızda Settings class'ı yardımıyla form text'i, arkaplan rengi gibi bazı ayarları nasıl oluşturabileceğimizi inceleyeceğiz. İlk olarak yeni bir Windows uygulaması oluşturalım. Oluşturduğumuz uygulamada set edeceğimiz ayarlar aşağıdaki gibi olacak:
- Form text'i
- Form arkaplan rengi
- Uygulamanın açılış sesi
- Formun maximize edilip edilemeyeceği

Bu ayarların hepsine bir ad, alacağı değerin tipi ve ayarın scope'ını belirleyeceğimiz .settings dosyasını açıyoruz ve yukarıda belirtilen öğeleri designer ekranından giriyoruz:


Uygulamamız açılırken çalmasını istediğimiz .wav dosyasının lokasyonunu string tipinde AcilisSesi property'sinde tutacağız. Formun arkaplan rengini Color tipinde FormArkaplanRenk property'sinde, text'ini FormText property'sinde tutacağız. Son olarak formun maximize edilip edilemeyeceğini de boolean tipinde MaximizeEnabled property'sinde tutacağız. Bütün property'lerin Scope'larını User olarak belirleyip Value'larını boş bırakalım.
Sıra uygulamamızın ekranlarını tasarlamaya geldi. Uygulamamızda iki adet form olacak, bunlardan birincisi set edilmiş ayarların gösterileceği ana ekran ve diğeri de ayarları set edebileceğimiz ayarlar ekranı olacak. Ana ekranı aşağıdaki gibi tasarlayalım:


Bu formdaki MenuStrip öğelerinden Ayarlar'a tıklandığında ayarlar ekranı açılacak, Ayarları Yükle'ye basıldığında ise ayarlar ekranında set edilmiş olan ayarların güncel hali yüklenecek. Ayarları yapacağımız ikinci ekranı ise aşağıdaki gibi tasarlayalım:

Şimdi ilk olarak Ayarlar ekranının kodunu yazmaya başlayalım. Arkaplan rengini belirlemek için formumuza bir ColorDialog kontrolü ekliyoruz ve Arkaplan Rengi label'ının hizasında olan butonun click event'ine aşağıdaki kodu yazıyoruz:

private void btnOpenColorDialog_Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
lblArkaplanDeger.BackColor = colorDialog1.Color;
}

Butonun click event'inde color dialog'u açıyor ve seçilen rengi fomdaki label'ın arkaplan rengi property'sine atıyoruz. Sırada uygulama açıldığı zaman çalacak olan .wav dosyasının belirlenmesi var. Bunun için de formumuza Açılış Sesi label'ının hizasında olan butona tıklandığında açılacak olan bir OpenFileDialog nesnesi ekliyoruz ve butonun Click event'ine aşağıdaki kodu yazıyoruz:

private void btnPickAcilisSesi_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
lblAcilisSesiDeger.Text = openFileDialog1.FileName.Substring(openFileDialog1.FileName.LastIndexOf(@"\") + 1);
lblAcilisSesiDeger.Tag = openFileDialog1.FileName;
}

Ayarlara atanacak değerler için yazmamız gereken başka bir kod kalmadığına göre artık ayarları kaydetme aşamasına gelebiliriz. Kaydet butonunun click event'ine aşağıdaki kodu yazıyoruz:

private void btnKaydet_Click(object sender, EventArgs e)
{
Settings.Default.AcilisSesi = lblAcilisSesiDeger.Tag.ToString();
Settings.Default.FormArkaplanRenk = lblArkaplanDeger.BackColor;
Settings.Default.FormText = txtFormTextDeger.Text;
Settings.Default.MaximizeEnabled = chkMaximizeEnabled.Checked;
Settings.Default.Save();
this.Close();
}

Butonun click event'inde tek yapmamız gereken bu property'lere formun üstündeki kontrollerin değerlerini atamak. AcilisSesi property'sine label'ın tag'ına atadığımız değeri, FormArkaplanRenk property'sine lblArkaplanDeger label'ının BackColor property'sinin değerini, FormText property'sine textbox'da yazan yazıyı ve MaximizeEnabled property'sine de checkbox'ın değerini atıyoruz. Ardından da Settings nesnesinin Save metodunu çağırarak ayarları kaydediyoruz ve Ayarlar formunu kapatıyoruz.

Son olarak Ayarlar formu yüklendiği zaman mevcut ayarların görüntülenmesi için formun Load'ına aşağıdaki kodu yazalım:

private void frmAyarlar_Load(object sender, EventArgs e)
{
lblAcilisSesiDeger.Text = Settings.Default.AcilisSesi.Substring(Settings.Default.AcilisSesi.LastIndexOf(@"\") + 1);
lblAcilisSesiDeger.Tag = Settings.Default.AcilisSesi;
lblArkaplanDeger.BackColor = Settings.Default.FormArkaplanRenk;
txtFormTextDeger.Text = Settings.Default.FormText;
chkMaximizeEnabled.Checked = Settings.Default.MaximizeEnabled;
}

Yukarıda görüldüğü gibi biraz önceki işlemin tam tersini yapıyoruz ve form üstündeki kontrollere mevcut ayarların değerlerini atıyoruz. Ayarlar ekranında yazmamız gereken kodlar bunlardan ibaret. Şimdi uygulamanın ana ekranına geçelim. Bu ekran yüklenirken yani uygulama başlatıldığında formun yüklenmiş ayarlarla beraber açılması gerekiyor. Bu yüzden formun Load'ında settings dosyasından alınan değerleri formun text'ine, arkaplanına vs atayacağız:

private void Form1_Load(object sender, EventArgs e)
{
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation = Settings.Default.AcilisSesi;
sp.Play();
this.BackColor = Settings.Default.FormArkaplanRenk;
this.Text = Settings.Default.FormText;
this.MaximizeBox = Settings.Default.MaximizeEnabled;
}

Settings'de tutulan property'lerin değerlerini okuyarak form açılırken AcilisSesi property'sinde belirlenmiş olan .wav dosyasının çalınmasını, FormArkaplanRenk property'sinde belirlenmiş olan rengin arkaplan rengi olarak atanmasını, FormText property'sinde belirlenmiş olan yazının formun text'ine atanmasını ve MaximizeEnabled property'sindeki değere bağlı olarak da formun maximize edilip edilemeyeceğini sağlamış olduk. Şimdi formdaki iki menustrip öğesine tıklandığında çalışacak olan kodu yazalım:

private void ayarlarToolStripMenuItem_Click(object sender, EventArgs e)
{
frmAyarlar f = new frmAyarlar();
f.ShowDialog();
}

private void ayarlarıYükleToolStripMenuItem_Click(object sender, EventArgs e)
{
this.BackColor = Settings.Default.FormArkaplanRenk;
this.Text = Settings.Default.FormText;
this.MaximizeBox = Settings.Default.MaximizeEnabled;
}

Ayarlar'a tıklandığında Ayarlar ekranı açılacak ve Ayarları Yükle'ye tıklandığında ise Settings nesnesinde tutulan ayarlar form'un property'lerine tekrar yüklenecek ve ekran en güncel haliyle görüntülenecek. Uygulamamızı çalıştırıp ayarları aşağıda görüldüğü gibi set edelim:


Kaydet butonuna basıp ayarları kaydedelim ve ana ekranda Ayarları Yükle'ye basalım. Formun arkaplan rengi, text'i ve maximize butonu bizim belirlediğimiz şekilde yüklenecektir:

Uygulamayı kapatıp yeniden çalıştırdığımızda ise açılışta çalmasını istediğimiz .wav dosyası çalacaktır.

Bu makalemde Settings class'ı yardımıyla uygulamamızda ayar oluşturmaktan bahsettim. Faydalı olmasını umarım.

Işıl ORHANEL ' e teşekkürler.
Share:

Blog Arşivi