30 Kasım 2012 Cuma

C# Giriş Ders 1

Temel C# Konuları 1.(TextBox,Label ve Buton Kullanımı)
Merhaba arkadaşlar.Bu ilk konumuz olacak.Bir süre C# ile ilgili araçların kullanımdan bahsetmeye çalışacağım.Daha sonra C# ta yararlı ve öğretici uygulamalar yapacağız.Bugünkü konumuz TextBox ve buton kullanımı.

Textbox ve Buton C#'ın vazgeçilmez iki bileşenidir. Genelde Texbox içerisindeki veriyi butonla kontrol ederiz.Bunu örneklerle daha iyi anlayacaksınız.
Öncelikle visual studio açalım.Sırasıyla File-New-Project tıklayalım.

Daha sonra gelen ekranda Sol sekmede C# altında Windows'u seçelim ve sağ tarafta Windows Form Application'ı seçelim.

Burada Projemize bir isim verip nereye kaydedeceğimiz seçip OK tuşuna basalım.Şuan bulunduğumuz form projemizi şekillendireceğimiz yerdir.Bu form üzerine elemanlarımızı ToolBox üzerinden yerleştiririz.


Kullanacağımız bütün elemanlar ToolBox içindedir.Herhangi bir elemanı sürükleyerek yada çift tıklayarak formumuza ekleyebiliriz.Bu örneğimizde bir adet Textbox,bir adet Button ve bir adet Label kullanacağız.Bunları sayfamıza ekleyelim.Aşağıdaki gibi bir görünüm elde edeceğiz.


Şimdi yapmak istediğimizi anlatayım.Çok basit bir uygulama yapacağız.TextBox ' a girilen içeriği buttona basıldığı anda label'a yazacağız.Bunu yapmak için button1'e çift tıklayıp click özelliğine giriyoruz.Click'in anlamı butona basıldığı zaman içerisindeki kodları çalıştır olarak düşünebilirsiniz.Bunu ilerleyen derslerde daha detaylı bir şekilde yapacağız.Çift tıklayıp butonun içerisine girdik.Aşağıdaki gibi bir görüntü elde edeceğiz.


Bu ekran bizim kod kısmımız.Diğer taraf Desing kısmımızdı istediğimiz anda diğer tarafa geçebiliriz.Burada button1_Click'e ait iki tane süslü parantez var.Butona tıklanınca çalıştırmak istediğimiz kodları buraya yazacağız.Aşağıda yazdığım kodları oraya ekleyin.Buarada buarada yazdığım kodları kopyala yapıştır yoluyla almazsanız sizin açınızdan daha iyi olur kod yazmada alışkanlık kazanmış olursunuz.


label1.Text = textBox1.Text;

bu kodu ekledik ve yukarıdaki yeşil play düğmesinden programımızı çalıştırıyoruz.TextBox'a herhangi birşey yazın ve buton'a basın.TextBox'a yazmış olduğunuz yazının label1'e yazıldığını göreceksiniz.

Programı kısaca anlatmaya çalışacağım.TextBoxlar ve Label'lar her zaman string ifade tutar.Sayısal rakamlarda tutarlar ancak yinede içerisinde gösterebilmemiz için string'e çevirmemiz gerekir.Mesela bu örnekte TextBox'ın textine yazığımız ifayi label'ın textinde gördük.Yani text dediğimiz şey aslında görünen kısımdır.Yani bir elemanın içerisinde ne görmek istiyorsak onun text özelliğine yazarız.

Burada Butona basdığımız anda(Click Olayı) Textbox'ın içindeki veriyi alıp Label'ın Text'ine atıyor.Yani görünen kısmına atıyor.

C# Basit Kdv Programı

Merhaba arkadaşlar.Bugün C#'ta combobox,textbox,label ve button kullanarak basit bir fiyat hesaplayıcı programı yapacağız.Öncelikle aşağıdaki formu hazırlayalım.

Yapmak istediğimiz şey butona bastığımızda girilen fiyatı adet ve kdv oranıyla çarpıp ödenecek tutar kısmına sonucu yazması.Butona bastığımızda işlem yapılacağı için butonun click olayına kodları yazmamız gerekiyor ama kdv oranlarının form açıldığı anda combobox'a yüklenmesini sağlamak için form'un load kısmına da bi kaç kod yazmamız gerekiyor.Form'da herhangi bir boş yere çift tıklayıp form'un load kısmına gelip aşağıdaki kodları yazalım.

private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("8");
comboBox1.Items.Add("18");
comboBox1.Items.Add("25");
}



Bu kodu eklediğimizde form açıldığı anda combobox'ın içerisini belirlediğimiz kdv oranlarıyla doldurmuş oluyoruz.Bu işlemi manual olarakta yapabiliriz.Combobox seçiliyken properties pencerisinde items özelliğine tıklayarak oraya direkt kdv oranlarını ekleyebiliriz.Bunları yaptıktan sonra artık asıl işi yapacak kodumuzu butonun içerisine yazıyoruz.


private void button1_Click(object sender, EventArgs e)
{
textBox3.Text = Convert.ToString((Convert.ToDouble(textBox1.Text) + ((Convert.ToDouble(textBox1.Text) * Convert.ToInt32(comboBox1.SelectedItem)) / 100)) * Convert.ToInt32(textBox2.Text));
}



Bu kodu yazdığımızda olan olay şu:

Textboxlar string tipinde değer tutarlar.Bu yüzden textboxların içerisine direkt olarak sayısal değer atayamayız yani double,int gibi.Öncelikle textbox'ın içindekini convert etmemiz gerekir.Eğer ondalıklı bir sayı tutacaksak convert.todouble ifadesini kullanırız.Eğer ondalıklı olmayan bir sayı tutacaksak convert.toint32 işimizi görür.

Dikkat ederseniz textboxlarımızı comboboxları hep convert ederek işlem yaptık.Çünkü öbür türlü işlem sonucu alamayız sadece string olarak toplamış olursunuz.Buda bizim işimize şuan yaramaz.

Combobox içerisindeki değeri combobox.text olarakta alabiliriz.Ama ileride bu yöntem bize lazım olacağı için combobox1.selecteditem olarak aldık.

En sonda bütün işlemlerin sonucunu textbox'a yazmak için convert.tostring özelliğini kullanmamız gerekiyor çünkü Textbox sadece string değer alıyordu hatırlarsanız.Biz bütün işlemleri sayısal olarak yaptıktan sonra string'e çevirip atmamız gerekiyor.Textbox3.text bizim sonucumuzun görünecek kısmı.

Yaptığımız işlem ise şu
( girilenpara+ ( ( girilenpara * kdvoranı) / 100 ) ) * adet sonucu git Textbox3.text'e yaz.

girilenpara=Texbox1.text
kdvoranı=Combobox1.selecteditem veya Combobox1.text
adet=Textbox2.text



Girilen tüm bilgileri convert ederek işlem yaptık ve sonucunu bir textbox'a yazdırdık.
Eğer aklınıza takılan bir yer varsa lütfen sorun iyi akşamlar.


c# İçin For Döngüsü

C# For Döngüsü
C#'ta döngü kullanımları bir çok işimizi kolay hale getirir.Bir döngü kurarak normalde yazmamız gereken bir çok satırı, kurduğumuz döngü sayesinde bir kaç satırla yazabiliriz.Ayrıca döngülerle kontrol işlemleri de yapabiliriz.Yani anlayacağınız döngüler tüm programlama dillerinin vazgeçilmez bir parçasıdır.Bugün döngü tiplerinden For döngüsünü anlatmaya çalışacağım.

For döngüsü en çok kullanılan döngü tiplerinden biridir.



1)

int sayac=0;
for( int i=0 ; i<=10 ; i++ )
{
sayac++;
}

Burada for döngüsü içinde 1.blokta "i" değişkeni tanımlanmıştır.Başlangıç değeri olarak 0 atanmıştır.Yani i değişkeni 0 dan başlayacaktır.2. blokta for döngüsünün koşulu belirlenmiştir.Yani i değişkeni 10 dan küçük olduğu sürece bu döngünün devam edeceği belirtilmiştir. 3. blokta ise i değişkenin artış miktarı belirtilmiştir.Yani döngü her bir dönüşünde i değerinin 1 artacağını belirtmiş oluyoruz.

Döngü ilk çalıştığında i değişkenine 0 atıyor.Daha sonra gelip 10 dan küçük olup olmadığına bakıyor.10 dan küçük olduğu için sayac değişkenini 1 arttırıyor.sayac değişkenini arttırdıktan sonra for döngüsünün 3 bloğuna geliyor döngü ve i değişkenini yine 1 arttırıyor.Sonra 2 bloğa gelip yine 10 dan küçük olup olmadığını kontrol ediyor.Bu şekilde döngü i değişkeni 10 olana kadar bu işlemler her defasında tekrar tekrar gerçekleşiyor.Bu işlem her tekrar ettiğinde sayac değişkeni 1 arttıyor ve son olarak 10 oluyor ve döngü bitiyor.For döngüsü devam ettiği sürece süslü paratezler arasındaki bütün işlemleri teker teker gerçekleştirir.

2)

int sayac=0;
for (int i = 0; i < 10; i++)
{

for (int j = 0; j < 10; j++)
{
sayac++;
}
}
textBox1.Text = ikinci.ToString();


Bu kısımda iç içe for döngüleri kullanılmıştır.İlk döngü bir kere çalıştıktan sonra alttaki döngüye geçer ve bu döngünün koşulunu sağlayana kadar döngü devam eder.Alttaki döngünün koşulu tamamlandıktan sonra ilk döngüye geri döner.Eğer koşul hala sağlanmamışsa alttaki döngü tekrar çalışır.Bu şekilde döngüler koşullar sağlanana kadar devam eder.Yaptığımız bu örnekte bu kod satırları tam 100 defa çalışır.Gördüğünüz gibi bir kaç satırda 100 defalık bir işlem yapmış olduk.Döngüden çıktıktan sonra sayac değişkeninin değeri Textbox'a 100 olarak basılır.Birden fazla döngüyü iç içe alabiliriz.Bu bizim yapacağımız yazılma göre şekillenir.

Bundan sonraki konum yine döngüler olacak.For ve diğer döngüler ile ilgili örnekler ve açıklamalar yapmaya devam edeceğim.

c# Dilinde Özellikler

Evet ilk makalemizle karşınızdayız ;

Nesne yönelimli programlamanın günümüzde ne kadar yaygın olduğunu programlama ile ilgilenen herkes bilmektedir. Nesne Yönelimli Programlama (NYP) yaklaşımında temel olan prensiplerden birisi bilgi gizleme (information hiding)'dir. Bu prensibi projelerimizde uygulamak için C#'in sunduğu en önemli araçlardan biri olan sınıf özellikleri (class properties) konusunu inceleyeceğiz.
Bildiğiniz gibi, C# dilinde tasarlanmış bir sınıfta iki temel unsur bulunur. Birincisi sınıfın özellikleri (fields), ikinicisi ise sınıfın metodlari (methods)'dır. Herhangi bir sınıfın özellikeri sınıfta tutulan ilişikili verilerlerdir. Diğer taraftan sınıfın bizim için değişik işleri yapmasını metodları vasıtasıyla sağlarız. Sınıf tasarımı çok önemli bir iş olup; deneyim, konsantrasyon ve dikkat ister. Sınıfımızın özelliklerini tutan veriler, program akışı sırasında sınıf dışında değiştirilebilir veya bu değerlere ulaşmak istenebilir.
Bu durumda akla ilk gelen çözüm sınıfın verilerinin hepsinin dışarıdan ulaşilabilmesini ve değiştirilebilmesine olanak sağlayan public anahtari ile tanımlamakdir. Aşağıdaki programda bu tür bir çözümün uygun olabileceği düşünülmüştür:

using System;
namespace Property_Makale
{
class Otomobil
{
public int model;
public string marka;
public string renk;
public Otomobil(int model, string marka, string renk)
{
if(model>DateTime.Now.Year)
this.model=DateTime.Now.Year;
else this.model=model;

this.marka=marka;
this.renk=renk;
}
public void OzellikleriGoster()
{
Console.WriteLine("\nOtomobilimizin Özellikleri: ");
Console.WriteLine("\t Marka: "+ marka);
Console.WriteLine("\t Model: "+ model);
Console.WriteLine("\t Renk: "+ renk+"\n" );
}
}
class OtomobilTest
{
static void Main(string[] args)
{
Otomobil oto1 = new Otomobil(2000, "BMW" , "Siyah");
oto1.OzellikleriGoster();
oto1.model=300;
oto1.OzellikleriGoster();
}
}
}

Yukarıdaki kod örneğimizde iki tane sınıf bulunmaktadır. Otomobil sınıfı ile otomobil nesnelerimizi oluşturabiliriz. Ayrıca bu sınıfın OzellikleriGoster() metodu ile herhangi bir otomobil nesnemizin özelliklerini görmek için ekrarana yazdırıyoruz. İkinci sınıfımızda (OtomobilTest) ise Otomobil sınıfımızdan nesneler oluşturmak ve onların özellikerini çağırmak için kullanacağız. Şimdi isterseniz Main() fonksiyonunu incelemeye başlayalım. Metodun hemen ilk başında oto1 isimli nesnemizi oluşturuyoruz. oto1 nesnemizin özellikleri 2000 model, siyah ve BMW olsun. Bir sonraki satırda oto1 nesnemizin modelini 300 yapıyoruz. İşte burda büyük bir hata yapılıyor! Çünkü 300 yılında henüz otomobil üretilmemişti. Böyle bir hatayı nasıl önleriz? Çözüm olarak otomobil nesnemizin herhangi bir özelliğini değiştirmek için ayrı bir metod yazmamız gerekir. O zaman programızı şu şekilde değiştirmemiz gerekiyor:

using System;
namespace Property_Makale
{
class Otomobil
{
private int model;
public string marka;
public string renk;
public Otomobil(int model, string marka, string renk)
{
if(model>DateTime.Now.Year)
this.model=DateTime.Now.Year;
else this.model=model;

this.marka=marka;
this.renk=renk;
}
public void OzellikleriGoster()
{
Console.WriteLine("\nOtomobilimizin Özellikleri: ");
Console.WriteLine("\t Marka: "+ marka);
Console.WriteLine("\t Model: "+ model);
Console.WriteLine("\t Renk: "+ renk+"\n" );
}
public void ModelDegistir(int yeniModel)
{
if( (yeniModel>DateTime.Now.Year)||(yeniModel<1900) )
Console.WriteLine("Otomobilin modeli su an ki yildan büyük veya 1900'den küçük olamaz ! ");
else this.model=yeniModel;
}
}
class OtomobilTest
{
static void Main(string[] args)
{
Otomobil oto1 = new Otomobil(2000, "BMW" , "Siyah");
oto1.OzellikleriGoster();
oto1.ModelDegistir(300);
oto1.OzellikleriGoster();
}
}
}

Yukarıdaki programda Otomobil sınıfına ModelDegistir(int yeniModel) metodunu ekledik. Bu metod ile modeli değiştirilecek nesnenin modelinin şu anda bulunulan yıldan sonra ve 1900'den önce yapılmak istendiğinde hata mesajı veriyor ve modelini değiştirmiyor. Ayrıca sınıf içindeki model değişkenin tanımlanmasında private anahtarını da kullandığımıza dikkat ediniz. Bu şekildeki bir yaklaşım ile hem sınıfın iç işleyişini sınıf dışından saklamış oluyoruz hem de sınıfa ait verilerin değiştirilmesini sırasındaki hataları en az seviyede tutmayı sağlıyoruz.
Fakat yukarıdaki yöntemi genelde C++ programcıları kullanır(dı). Bizler C# programcıları olarak daha gelişmiş bir yola sahibiz. Sınıf içindeki değerleri değiştirmek ve ulaşmak için özellik (Property) aracını kullanırız. Aşağıdaki program ise C#'ın özellikleri nasıl kullandığına bir örnektir:

using System;
namespace Property_Makale
{
class Otomobil
{
private int model;
public string marka;
public string renk;
public Otomobil(int model, string marka, string renk)
{
if(model>DateTime.Now.Year)
this.model=DateTime.Now.Year;
else this.model=model;

this.marka=marka;
this.renk=renk;
}
public void OzellikleriGoster()
{
Console.WriteLine("\nOtomobilimizin Özellikleri: ");
Console.WriteLine("\t Marka: "+ marka);
Console.WriteLine("\t Model: "+ model);
Console.WriteLine("\t Renk: "+ renk+"\n" );
}
public int Model
{
get
{
return model ;
}
set
{
if((value>DateTime.Now.Year)||(value<1900) )
{
Console.WriteLine("Otomobilin modeli su an ki yildan büyük veya 1900'den küçük olamaz ! \n");
}
else this.model=value;
}
}
}
class OtomobilTest
{
static void Main(string[] args)
{
Otomobil oto = new Otomobil(2000, "BMW" , "Siyah");
Console.WriteLine("Otomobilimizin modeli: "+ oto.Model);
oto.Model=300;
oto.OzellikleriGoster();
}
}
}

Çıktısını gördüğünüz program kodunda C#'ın özellik tanımlama ve kullanma yöntemini kullandık. Özellikler ile herhangi bir nesneye ait değişkenin değerini öğrenebilir ve değiştirebiliriz. Yukarıdaki örnek kodda yeralan aşağıdaki kısımda bir özellik(Property) tanımlıyoruz. Genellikle bir özelliğin ismi üzerinde iş yaptığı değişkenin ismi ile aynı olup sadece ilk harfi büyük olur. Aslında bu bir zorunluluk değil. Sadece C#'da bu bir gelenektir. Bu şekilde bir kullanım bizim kodumuzu okuyanların kodu daha kolay anlaması ve bizim başkalarının kodlarını daha kolay anlamamıza yardımcı olur. Bir özelliğin tanımında özellik isminden önce ne tür bir değer dönderecekse onun tipini belirtmeliyiz. Bu genelde özelliğin ilgili olduğu değişkenin tipidir

public int Model
{
get
{
return model ;
}
set
{
if((value>DateTime.Now.Year)||(value<1900) )
{
Console.WriteLine("Otomobilin modeli su an ki yildan büyük veya 1900'den küçük olamaz ! \n");
}
else this.model=value;
}
}
}

Özellikler içinde get ve set olmak üzere iki ayrı blok kod olur. İstersek sadece get veya sadece set blokları olan özellikler de yazabiliriz. get bloğunda ilgili değişkenimizin değerini dışarıya döndeririz. set bloğunda ise değişkenimizin değerini değiştiririz. Burda gereken kontrolleri yapıp daha sonra uygunsa girilen değeri kabul edebiliriz. Eminimki get bloğu içinde dikkattinizi değişkeni ismi yerine value şeklinde çağırmamız çekmiştir. Bu sayede kod içinde karışıklık olmaz. Zaten sadece bir tane değişken üzerinde çalışıyorsunuz.
Bu makalemizde C# dilinde yeralan özellik (Property) kavramını inceledik.Bir sonraki makalemizde görüşmek üzere.