Bu yazımızda C# ile kura çekimi ve eşleşme gerçekleştiren basit bir örnek oluşturacağız. Örneğimizde Listbox’ ta bulunan kişilerden belirlenen sayıdaki kişileri rastgele seçme işlemini gerçekleştiren veya yine ListBox içindeki kişileri 2 ayrı takıma rastgele yerleştiren kodları oluşturacağız. Örneğimizde Listbox içine kişilerin eklenmesi işlemini buton ve textBox kullanarak gerçekleştireceğiz. Bu işlemi dilerseniz veritabanındaki kişileri çekerekte yapabilirsiniz.Form tasarımını aşağıdaki şekilde oluşturarak örneğimize başlıyoruz.
Şimdi yukarıdaki formda neler yapılacağını kısaca açıklayalım. Öncelikle EKLE butonu için Listbox1 içine kişileri ekleme işlemini yapacağız. Kişileri ekleme işlemi için EKLE butonu üstündeki TextBox kontrolünü kullanacağız. TextBox içine girilen değerin ListBox içine eklenmesini sağlayan kodlarımız aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 | private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != "") { listBox1.Items.Add(textBox1.Text); } } |
Sırada AKTAR butonu var. Bu button ilgili textbox içine girilen kişi sayısı kadar kişinin listBox içine aktarılmasını sağlayan yani kura çekimi gerçekleştiren kodlardan oluşacak. Yukarıdaki örnekte aslında 2 farklı programın birleştirildiğini düşünebilirsiniz. Aktarılacak kişi sayısı girildikten sonra listBox1 içinden rastgele seçim yaparak listBox2′ ye aktarım sağlayan kodlarımız ve ekran çıktısı aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | private void button2_Click(object sender, EventArgs e) { try { int sayi = Int32.Parse(textBox2.Text); Random rnd = new Random(); for (int i = 1; i <= sayi; i++) { int tutulan = rnd.Next(0, listBox1.Items.Count); listBox2.Items.Add(listBox1.Items[tutulan]); listBox1.Items.RemoveAt(tutulan); } } catch { MessageBox.Show("Bilgileri kontrol edin."); } } |
Şimdi de eşleşme kurası için gereken kodlarımıza bakalım. Örnek olarak sınıflar arası bir yarışma ya da herhangi bir yarışmada rastgele eşleşme yapmak amacıyla bu kodlar kullanılabilir. EŞLEŞME butonuna basıldığı zaman listbox1 içindeki kişilerin eşit bir şekilde ListBox2 ve ListBox3 içine rastgele dağıtılmasını sağlayan kodlarımız ve çalışması aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | private void button3_Click(object sender, EventArgs e) { Random rnd = new Random(); int kisiSayisi = listBox1.Items.Count; for(int i=1;i<=kisiSayisi;i++) { int tutulan = rnd.Next(0, listBox1.Items.Count); if(i%2==1) { listBox2.Items.Add(listBox1.Items[tutulan]); listBox1.Items.RemoveAt(tutulan); } else { listBox3.Items.Add(listBox1.Items[tutulan]); listBox1.Items.RemoveAt(tutulan); } } } |
Yukarıda da belirttiğimiz gibi dilersek listBox içindeki kayıtların veritabanından alınmasıda sağlanarak bu şekilde bir eşleşme yada kura çekimi yapılabilir. ListBox içine veri çekme işleminin nasıl yapılacağına BURADAN ulaşabilirsiniz.
Kodlarımızın tamamı aşağıdaki şekilde olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace rasgele_eslesme { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != "") { listBox1.Items.Add(textBox1.Text); } } private void button2_Click(object sender, EventArgs e) { try { int sayi = Int32.Parse(textBox2.Text); Random rnd = new Random(); for (int i = 1; i <= sayi; i++) { int tutulan = rnd.Next(0, listBox1.Items.Count); listBox2.Items.Add(listBox1.Items[tutulan]); listBox1.Items.RemoveAt(tutulan); } } catch { MessageBox.Show("Bilgileri kontrol edin."); } } private void button3_Click(object sender, EventArgs e) { Random rnd = new Random(); int kisiSayisi = listBox1.Items.Count; for(int i=1;i<=kisiSayisi;i++) { int tutulan = rnd.Next(0, listBox1.Items.Count); if(i%2==1) { listBox2.Items.Add(listBox1.Items[tutulan]); listBox1.Items.RemoveAt(tutulan); } else { listBox3.Items.Add(listBox1.Items[tutulan]); listBox1.Items.RemoveAt(tutulan); } } } } } |
iyi günler kolay gelsin aklımda bir program var nasıl yapılacağını bilmiyorum. diyelim ki elimde 100 tane ingilizce türkçe karışık kelime var bunlardan rastgele birini atıyor ve karşı kutuya da ben türkçesini ya da ingilizcesini yazmak istiyorum eğer doğruysa rastgele bir tane daha atayacak. bu şekilde ezberlediğim ingilizce ve türkçe kelimelerle pratik yapmak istiyorum