Bu örneğimizde c# da dinamik olarak form nesnelerinin nasıl oluşturulduğunu ve bunlara eylemlerin nasıl eklendiğini incelemeye çalışacağız. Bu örneğimizde şu ön bilgilere ihtiyacınız olacak: random() fonksiyonunu kullanma ve for/while döngüsü ve foreach döngüsü.
Örneğimizde, bir butona tıkladığımızda çalışma zamanlı olarak 10 tane textbox ve 1 tane buton oluşturulacak ve butona tıkladığımızda textbox lar içerisine rasgele sayılar atanacak ve bunların toplamı ve ortalaması yine çalışma zamanlı oluşturulan bir label'e yazdırılacak. Zor gibi görünmesine rağmen adım adım kolaylıkla yapılacak bir uygulama. Önce tasarım ekranıyla başlayalım.
Örneğimizde tasarım ekranında sadece bir buton ve bir panel olacak, tasarım ekranı aşağıdaki gibi düzenleyin. ! formunuza panel eklemek zorunda değilsiniz ancak bu bazı işlemlerin daha kolay yürütülmesi için size bir kolaylık sağlayabilir.
Şimdi öncelikle Başla butona tıkladığımızda, çalışma zamanlı olarak 1 tane buton ve 10 tane textbox'ın oluşmasını istiyoruz. Textbox'ları Groupboxiçerisinde oluşturursanız örneği geliştirme adına daha kolay hareket edebilirsiniz. Bunun için aşağıdaki gibi bir kod yazmamız yeterli olacaktır.
Button btn = new Button();
btn.Text = "Topla";
btn.Location = new Point(10,50);
this.Controls.Add(btn);
int i = 0;
int top = 23;
int left = 10;
do
{
TextBox txt = new TextBox();
txt.Location = new Point(left, top * (i + 1));
groupBox1.Controls.Add(txt);
i++;
} while (i < 10);
Yukarıdaki koda bölüm bölüm bakalım. Öncelikle btn değişkenine buton özelliği aktarılıyor, sıralıyla buton adı "Topla", butonun formadaki yeri x=10 (Yani butonun formun soluna olan mesafesi) y=50 (yani butonun formun üstüne olan mesafesi) ayarlanıyor. Son olarak, belirlenen özelillkleriyle btn form'a ekleniyor. !burada this'in oluşturdğunuz formu temsil etiğini unutmayın.
İkinci bölümde ise, groupbox'ın içine ekleyeceğimiz 10 adet textbox için oluşturulacak döngüde gereken değişkenler belirleniyor. Burada ben do while kullandım ancak siz bunu farklı döngü yapılarıylada deneyebilirsiniz. bu bölümde i döngü için, top ve left ise değişkenleri textboxlar içinde yer belirlemede kullanacağız.
yukarıdaki kod bloğunda yer alan son bölümde ise, döngü oluşturuluyor ve 10 adet textbox oluşturuluyor. ! burada dikkat etmeniz gereken nokta butonları alt alta eklemek istediğim için sadece y değerini yani bu örnek için top değerini her seferinde belli ölçüde artırmak. Ben burada i değişkeni ile top değişkenini çarparak her seferinde 23 birim aşağı gitmesini sağladım. Siz bunu istediğiniz gibi artırıp azaltabilirsiniz.
Şimdi çalışma zamanlı oluşturduğumuz "Topla" isimli butona bir olay eklememiz gerekiyor. Bunun için yukarıdaki kodun birinci bölümüne "this.Controls.Add(btn);" satırından önce aşağıdaki kod satırını eklemeniz yeterli olacaktır.
btn.Click += new EventHandler(topla);
şimdi topla isimli bir fonksiyon oluşturmamız ve gerekli kodları eklememiz gerekiyor.
Burada önemli olan nokta, fonksiyon içerisinde parametre olarak (object sender, EventArgs e)'nin eklenmesidir. Kalan kısım önceki açıklamalarıma göre kolaylıkla anlaşılabilir. Öncelikle birince bölümde, yine dğeişkenler oluşturuluyor, ikinci bölümde groupbox içerisinde oluşturuduğumuz textbox'lara tek tek ulaşarak 0 ile 99 arası bir değer atanıyor ve atanan bu değer sayı değişkeninde toplanıyor. Ve son olarak yine çalışma zamanlı bir label eklenerek bunun text değerine toplam ve ortalama değerleri yazılıyor. Hepsi bu kadar. Umarım kolayca yapabilirsiniz.
void topla(object sender, EventArgs e) {
Random rnd = new Random();
int sayi = 0;
int rst = 0;
foreach(Control abc in groupBox1.Controls)
{
rst = rnd.Next(100);
abc.Text = rst.ToString();
sayi += rst;
}
Label lbl = new Label();
lbl.Text = "Toplam: " + (sayi).ToString()
+"\n"+"Ortalama: "+ (sayi / 10).ToString();
lbl.Location = new Point(groupBox1.Left,groupBox1.Top+groupBox1.Height);
lbl.AutoSize = true;
this.Controls.Add(lbl);
}
Eğer yukarıda verilen bütün kodları doğru bir şekilde yazarsanız aşağıdaki gibi bir son ekran elde edeceksiniz. Başlat'a tıkladığınızda önce topla butonu ve textbox'lar oluşacak, sonra Topla butonuna tıkladığınızda rasgele sayılar oluşacak ve bu sayıların toplamı ve ortalaması label'e yazdırılacak.
! unutmayın. Bu örneği sayfadan bakarak yaptıktan sonra bakmadan yeniden yapmalısınız, böylece kesin olarak yapı aklınızda kalabilir. Örnekle ilgili yorumlarınızı bekliyorum.
Muhammed merhaba, bildiğin üzere çalışma zamanlı oluşturduğun bir nesneye olay aktarmak aşağıdaki gibi bir kod yazman gerek:
yukarıdaki kod a nesnesinin click olayına tıkla fonksiyonunu atıyor. Sende benzer bir kodu sürükle bırak için ekleyebilirsin.
burada tıkla fonksiyonunun içeriği aşağıdaki gibi olabilir. Bu kod senin işini görebilir.
sayısal 3 adet değerimiz var başlangıçta bütün değerler 0 dır
butona ilk tıklandığında birinci sayıyı textbox kutusu içinde yazılan değer yapan
butona ikinci tıklandığında ikinci sayıyı textbox kutusu içinde yazılan yeni değer yapan
butona üçüncü tıklandığında üçüncü sayıyı textbox kutusu içinde yazılan yeni değer yapan algortitmayı yazınız
yardımcı olur musunuz
fsafa merhaba, ne yazık ki bu tür ödev sorularına cevap vermiyorum.
Zeynep, benim zaten böyle bir iddam yok. C# ta çalışma zamanlı form nesneleri bu şekilde oluşturulur, ancak dersinizde ne gördünüz ya da aynı konu ise neden farklı onu bilmiyorum :)
merhaba, bunu yapabilmek için ya veri tabanı kullanacaksınız ya da bir txt dosyası içerisinde bilgileri saklayacaksınız. Ya da son seçenek olarak xml dosyasında bütün bilgileri tutup, programı açarken o dosyayı okuyup formu yeniden oluşturabilirsiniz.
Vermiş olduğunuz bilgiler için teşekkür ederim. Güzel bir çalışma olmuş.
Bir şey soracaktım buttonunu yanına textbox koysak o textbox içinde her hangi bi sayı (100 varsayarak)
listtextbox ta 100 nokta çıkması gerek
bunu nasıl yapıcaz. ?
Nur, anladığım kadarıyla sorunu cevaplamaya çalışayım. Şimdi aşağıdaki kod listbox içerisinde kaç tane textbox olacağını belirliyor.
Bu kod bloğunda gördüğün üzere "while (i<10)" kodu sadece 10 tane textbox oluşturulacağını söylüyor. Eğer bu kod içerisinde, "10" yerine formda bir textbox oluturup içerisinde yazan değeri kullanırsanız, o kadar textbox oluşturabilirsiniz.
Sibel Hanım yorumlarınız için teşekkürler. Bu yolda size başarılar dilerim. Programlama zor gibi görünsede yeterince merak ve motivasyonla, oldukça zevkli ve eğlenceli olabilir. Sorunuz olursa lütfen çekinmeyin.
Öncelikle emeğinize sağlık.
Butona tıklayınca combobox ve textbox oluşturuyorum.
Combobox'a veritabanından veri çekmek ve textboxa kullanıcı tarafından girilen verinin veritabanına eklenmesini sağlamak istiyorum.
Bunu nasıl sağlayabilirim.
Teşekkürler
Kadir Merhaba
C#'da SQL Server dan veri tabanı bağlatısı yapma ve diğer işlemleri (listeleme, ekleme, kaydetme,silme) gerçekleştirme konusudunda en kısa zamanda bir yazı ekleyeceğim. Bunu yaptığımda, sana mail atabilirim. Ancak şu an en kısa cevabı:
Örnek kod aşağıdaki gibi olabilir:
kaynak: https://social.msdn.microsoft.com/Forums/en-US/9387c998-3373-4d58-85dc-87bb9234e108/how-to-fill-combo-box-from-database-using-c?forum=csharplanguage
Hocam kendimi yanlış ifade ettim.Üzgünüm.
Aslında sql'e veri ekleme bölümünde problemim yok. Prosedürler oluşturup ekleme ve listeleme yapabiliyorum. Fakat c# tarafında dinamik olarak oluşturulan nesneleri, yine sql tarafında oluşturulacak olan dinamik kolonlara eşleştirmek istiyorum. Bu işlemin biraz zor ve karmaşık olduğunun farkındayım. Fakat yinede araştırmak istedim.
İlginiz için teşekkürler.