30 Temmuz 2010 Cuma

C#DA RUN-TİME NESNE-KONTROL OLUŞTURMA

Diyelim ki c#da  bir sinema otomasyonu yapmanız gerekiyor.Formu dizayn ederken yapmanız gereken koltukları temsilen herhangi bir kontrol eklemektir.Bir sinema salonu 50 kişilik ve 4 tane de salon varsa toplamda formlarınız için 200 tane kontrol eklemeniz gerekmektedir.Oldukça uğraştırıcı ve zaman kaybettiren bir dizayn işlemi olacaktır sizin için.Programlama bilgisi çok iyi olmayan birinin yapacağı kontrolleri tek tek eklemek olacaktır,oysa ki object oriented programming(nesne yönelimli programlama)  dan ve nimetlerinden haberdar olan programcı ise kontrolleri tek tek eklemez onları kodu çalıştırırken yapabileceğini bilir.Benim bahsedeceğim de 2. seçenek,yani kontrolleri elle, tek tek değil de kod içerisinde oluşturup çalıştırmaktır, yani Run-Time(çalışma anında) nesne oluşturmak olacaktır.
Run-Time kontrol oluşturabilmek için o kontrolden bir nesne yaratmanız gerekecektir.
    Button btn = new Button();  diye tek bir nesne oluşturup döngüler yardımıyla istediğiniz kadar buton görüntüleyebilirsiniz.
Bu konuyla ilgili BilgeAdamda staj yaparken derste yazdığımız  şu  kodu beraber inceleyelim:

int x = 40; //başlangıç x koordinatı

int y = 40;//başlangıç y koordinatı
int b = 1; //yerleştirilen buton numarasının tutar
private void Form3_Load(object sender, EventArgs e) //işlemleri form yüklenirken yapsın
{
for (int i = 0; i < 10; i++)                          //matrix mantığı ile 100 tane buton oluşturacaz
{
        for (int j = 0; j < 10; j++)
{
Button btn = new Button();
                                  //butondan bir nesne oluşturmamız gerekecek
btn.Name = "btnNo" + b;
                           //her birinin adı oluşum sıralarının adını alacaktır
btn.Text = b.ToString();
btn.Size = new Size(40, 40);              //size her defasında 40-40 olacaktır
btn.Left = x;
x += 40;                                //x koordinatı tek bir satır için her defasında 40 yana kaymalı
btn.Top = y;                         //y koordinatı aynı satır aynı kalır alt satıra geçildiğinde 40 artar
b++;                             //butonun numarası her defasında bir artacaktır
btn.Click += new EventHandler(btn_Click);    //hatta isterrsek o butona event bile yazarız
                //butona basılma eventini tutar
                    //event olduğunu += gösterir
                               //bu formun kontrollerine oluşturduğun btn nesnesini eklemen gerek
this.Controls.Add(btn);                  //btn kontrolünün nereye ait olduğunu belirtmeiz gerekir,formun kontrolü
}
x = 40;                     //ilk 10 taneyi oluşturduktan sonra alt satıra geç ama lefti değişmeyecek
y += 40;                    //top üstten bir satır uzaklaştığı için +40 olmalı
}    }
void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
//sender içinde thisin verilerini tutar
MessageBox.Show("Merhaba " + btn.Text + " im..");


işte çıkan sonuç:



Butona tıkladığımızda da şöyle bir görüntü oluşur:


DERYA GÜNDÜZ

16 yorum:

Adsız dedi ki...

Merhaba Deryacim,
Konuyla alakasiz ama sana sormak istedigim ve ogrenmeyi cok istedigim bir sey var. Nasil calisiyorsun? Oturup devamli program mi yaziyorsun, dergi-kitap mi okuyorsun, hocalarina mi danisiyorsun nedir bunun sirri bize de soyler misin acaba? =)

DERYA GÜNDÜZ dedi ki...

merhaba ben de sizin kim olduğunuzu çok merak ettim isminizi bağışlarsanız çok mutlu olacam:)
Gelelim sorunuza,öncelikle ben bölümle ilgili kendimi herzaman çok eksik hissettim,çünkü okadar geniş ki...iyi olduğunu hissetmek imkansız gibi birşey.Bu yüzden mümkün olduğunca yoğunlaşmaya çalışıyorum.Devamlı program yazıyorum desem pek doğru olmayabilir,çünkü henüz sürekli program yazacak kadar iyi değilim.Ama etrafımda benden daha iyi olduklarını düşündüğüm insanlara bilmediğim şeyleri danışırım ,sonra internetten konuyla ilgili sürekli araştırma yapmaya çalışıyorum ve önüme gelen örnek kodu en küçük ayrıntısına kadar inceliyorum,kafama takılan en ufak bişey olsun hemen mutlaka birilerine sorarım.Hatta bazen çevremdekileri bıktırırm sorularımla:),çünkü konun özünü anlamak çok önemli.

Adsız dedi ki...

c gelişmiş diller arasında yer alıyor kendini geliştirdiğin takdirde bölümünde ilerleyeceğine inanıyorum .Ancak şunu merak ediyorum şuan mühendislik kaçıncı sınıftasın ve c'yi ne kadar zamandır kullanıyorsun. Blogunda okuduğum kadarı ile bilge adamın yanında staj yapmışsın da bence hata yapmışsın. ileri derece visual basic ( Geleceğe yönelik bir dil olmasada ) ve uzmanlık derecesinde php ve delphi biliyorum webprogramlama dillerinin hemen hemen hepsini biliyorum . Açıkçası bu işin okulunuda okumadım. Umarım iyi yerlere gelirsin.

DERYA GÜNDÜZ dedi ki...

önce merak ettiğin soruyu cevaplandırmayım,bilgisayar mühendisliği 3. sınıfa geçiyorum,cyi 1. sınkıfta öğrenmeye başladım,fakat şimdi pek kullanmıyorum zaten.BilgeAdamdaki stajımdan da gayet memnun kaldım ayrıca.Ama yazında tam olarak neyi kasettiğini anlayamadım açıkçası,eleştirdin mi neyi eleştirdin anlaymadım,biraz daha açarsan söylemek istediklerini daha iyi anlaşabiliriz.

Adsız dedi ki...

Öncelikle ilk sorumda c'yi ne kadar zamandır çalıştığını örenmek istedim. herhangi bir eleştiri yokta Bilge adamın yanındaki stajının ne kadar yararlı olduğunu düşündüm sadece.
Bu adamlar
Yazılım ve Veritabanı Uzmanlığı, Sistem ve Ağ Uzmanlığı, Web ve Grafik Tasarımcılığı, Teknik Çizim ve 3D Uzmanlığı .... v.s v.s bi sürü şeyden bahsediyor Ancak elle tutulur bir projeye imza attıklarına şahit olmadım.
Microsoft yanlısı adamlar olduklarını biliyoruz . O yüzden windows u çok seviyorlar ve sadece microsoft tabanlı bakıyorlar vb.net öretiyorlar . Veritabanı uzmanlığı deyip sadece mssql üzerinde bilgi sahibi yapıyorlar.
Ancak geleceğe yönelik bakıldığı zaman , heleki bir Bilgisayar mühendisi gözünden bakıldığı zaman işletim sistemlerinde Linux , Unix Mac os , v.s daha özgür sistemler olduğunu görüyoruz ve bunların Genel itibari ile php ve mysql kullandığını biliyoruz. Böyle bir ekibin seni bu sistemler üzerinde ne kadar bilgi sahibi ettiğini merak ediyorum . Ne tip bir eğitim verildi desem daha kısa olur sanırım :) .

mehmet dedi ki...

çok teşekkür ederim :)
kontrolleri runtime da eklemeyi az çok öğrenmiştim, ama event larla ilgili bilmiyordum :(
kolay gelsin....

DERYA GÜNDÜZ dedi ki...

BilgeAdamın Microsoft yanlısı olduğu ve özgür yazılımla ilgili eğitimlerinin olmadığı doğru fakat bu benim staj yaptığım süreçte beni pek ilgilendirmedi.Stajımı yazılım departmanında yaptım,sql,ado.net ve .net girişi derslerine katılabilme imkanı bulabildim.Benim açımdan bayağı bir verimli geçti yani.

DERYA GÜNDÜZ dedi ki...

Faydalı olduysa ne mutlu Mehmet arkadaşım....

Adsız dedi ki...

Bir ödev üstünde çalışıyorum.
İlaç gibi geldi.

Ergün dedi ki...

Derya Hanım bende böyle birden çok buton oluşturmayı arıyordum uğraşak vaktim yoktu çok acil lazımdı çok işime yaradı. Emegine sağlık.

DERYA GÜNDÜZ dedi ki...

İşine yaradıysa sevindim Ergün.

Unknown dedi ki...

Bu Kodlar Bende Neden Çalışmıyor Class Açılması Gerekiyor mu???

Unknown dedi ki...

Namespace Diyecektim Sabah Sabah Yanlışlık Olabiliyor =)

derya dedi ki...

Evet namespacenin olması gerek elbette,ben sadece eklenen kısmını yazmıştım.Hazır bir proje açıp içine bu kısmı kopyalayabilirsin.

Unknown dedi ki...

İyi günler şuan bir proje ile uğraşıyorum fakat takıldığım bir iki nokta oldu yardımcı olabilir misiniz? :(

DERYA GÜNDÜZ dedi ki...

Merhaba mail atabilirsiniz,yardımcı olmaya çalışırm.

 
Facebook

Bizi takip edin!

ESOGÜ Bilişim GünleriESOGÜ Bilişim Günleri