2016-03-21 15 views
0

私は3つの異なるPictureBoxesランダム画像で表示しようとしています。スロットマシンのように。イメージをイメージリストに追加しました。しかし、私はプログラムを実行すると、私はすべての3つのボックスで正確に同じ画像を取得し続けます。どんな助けでも大歓迎です。 ここに私のコードスニペットがあります。C#初心者

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

'指数= rand.Next(imageList1.Images.Countは)'すべての画像 –

+0

を設定する前に、問題はあなたがすべての画像ボックスに同じ乱数を使用していることである – AdamK

+0

どうもありがとうです。 – Dhanuka777

答えて

-1

はあなたのでindexは、すべての画像

0

これを試してみてくださいする前にrand.Nextに割り当てindexrand.Next(imageList1.Images.Count);

後に変更することはありません。 Randomの初期化をグローバルスコープに入れます。今度は、「次へ」を呼び出すたびにオブジェクトを再作成する必要はありません。それは速く、より少ないメモリを使用します。また、Randomは現在の時刻を使用して数値を生成するので、同じ番号を返すこともできません。それを作り直して数値を生成すると、同じ値を繰り返し返す傾向があります。

だから、最後の部分:ランダムな画像のインデックスを取得するための関数を作成し、これはあなたのコードクリーナー、簡潔を行います。 :)

幸運な男は、プログラミングは素晴らしい趣味です。それがあなたによく役立つことを願っています!

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

それは多くの助けになります。ありがとうございました。スロットマシンのように画像が同じであるかどうかを比較しようとしている場合、私は何かの行に沿って何かを使用しますか?if(picturebox1.Image == picturebox2.Image) – AdamK

+0

ちょっとしたこと、私は答えを修正しましたあなたのためにこれを追加する。 – Nobody