2016-03-21 17 views
0

3 farklı PictureBox rasgele görüntüde göstermeye çalışıyorum. Bir slot makinesi gibi. Resimlerimi bir imge listesine ekledim. Ancak programı çalıştırdığımda, 3 kutunun hepsinde aynı resimleri almaya devam ediyorum. Herhangi bir yardım büyük beğeni topluyor. İşte kod snipetim.C# Örnek Başlangıç ​​

private void button1_Click(object sender, EventArgs e) 
{ 
    Random rand = new Random(); 
    int index = rand.Next(imageList1.Images.Count); 
    pictureBox1.Image = imageList1.Images[index]; 
    pictureBox2.Image = imageList1.Images[index]; 
    pictureBox3.Image = imageList1.Images[index]; 
    } 
+3

yapmak 'endeksi = rand.Next (imageList1.Images.Count)' –

+0

size sorun – AdamK

+0

çok teşekkür ederim her görüntüyü ayarlamadan önce tüm resim kutuları için aynı rasgele sayı kullanıyor olmasıdır. – Dhanuka777

cevap

-1

SİZİN Çünkü index her görüntünün

0

bu deneyin önce rand.Next ile Ata indexrand.Next(imageList1.Images.Count);

sonra değişti asla. Rastlantının başlatılmasını global kapsamda yapın. Artık, her aradığınızda, nesneyi yeniden oluşturmanız gerekmez. Daha hızlı ve daha az bellek kullanıyor. Ayrıca aynı sayıyı döndürmesini de engeller, çünkü Random sayıları oluşturmak için şu anki zamanı kullanır. Yeniden oluşturmaya ve bir sayı oluşturmaya devam ederseniz, aynı değeri tekrar tekrar döndürme eğilimi gösterir.

Son bölüm: Rastgele bir resim dizini elde etmek için bir işlev oluşturun, bu, kodunuzu daha temiz ve net hale getirecektir. :)

İyi şanslar dostum, programlama harika bir hobidir. Umarım size iyi hizmet eder!

private readonly Random rand = new Random(); 
    private int[] _imgIndexes = new int[3]; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // generate the random index, and pick that image with that index, then store the index number in an array so we can compare the results afterwards. 
     var randomIndex = getRandomImageIndex(); 
     pictureBox1.Image = imageList1.Images[randomIndex]; 
     _imgIndexes[0] = randomIndex; 

     randomIndex = getRandomImageIndex(); 
     pictureBox2.Image = imageList1.Images[randomIndex]; 
     _imgIndexes[1] = randomIndex; 

     randomIndex = getRandomImageIndex(); 
     pictureBox3.Image = imageList1.Images[randomIndex]; 
     _imgIndexes[2] = randomIndex; 

     if (_imgIndexes[0] == _imgIndexes[1] && _imgIndexes[1] == _imgIndexes[2]) 
     { 
      MessageBox.Show("same"); 
     } 
     // reset the result array so we can compare again. 
     _imgIndexes = new int[3]; 
    } 

    private int getRandomImageIndex() 
    { 
     return rand.Next(imageList1.Images.Count); 
    } 
+0

Bu çok yardımcı olur. Teşekkür ederim. Görüntüler aynı ise, bir slot makinesi gibi, karşılaştırmak için çalışıyorsanız, ben ... (picturebox1.Image == picturebox2.Image) – AdamK

+0

gibi bir şey kullanacak mıyım? Bunu sizin için eklemek için. – Nobody

İlgili konular