2016-09-03 7 views
2

Я хотел бы одновременно отображать четыре изображения и при загрузке формы изображения переключаться местами. В настоящее время изображения будут отображаться в разных номерах, например: появится 1 изображение или 2 изображения и т. Д. 4. Я также хочу убедиться, что дубликаты не появятся.Цикл нескольких изображений через несколько картинных ящиков

код из Form1_Load:

PictureBox[] boxes = new PictureBox[4]; 

boxes[0] = pictureBox0; 
boxes[1] = pictureBox1; 
boxes[2] = pictureBox2; 
boxes[3] = pictureBox3; 

for (int i = 0; i < boxes.Length; i++) 
{ 
    int switcher = r.Next(0, 5); 

    switch (switcher) 
    { 
     case 0: 
      { boxes[i].Image = Properties.Resources.dog0; } break; 
     case 1: 
      { boxes[i].Image = Properties.Resources.dog1; } break; 
     case 2: 
      { boxes[i].Image = Properties.Resources.dog2; } break; 
     case 3: 
      { boxes[i].Image = Properties.Resources.dog3; } break; 
    } 
} 

enter image description here Два примера, приведенные выше, как к тому, что в настоящее время происходит.

Update - Работа

Теперь программа перемещает изображения вокруг по нагрузке и нет никаких дубликатов :)

List<Bitmap> resources = new List<Bitmap>(); 
resources.Add(Properties.Resources.dog0); 
resources.Add(Properties.Resources.dog1); 
resources.Add(Properties.Resources.dog2); 
resources.Add(Properties.Resources.dog3); 

resources = resources.OrderBy(a => Guid.NewGuid()).ToList(); 

for (int i = 0; i < resources.Count; i++) 
{ 
    pictureBox0.Image = resources[0]; 
    pictureBox1.Image = resources[1]; 
    pictureBox2.Image = resources[2]; 
    pictureBox3.Image = resources[3]; 
} 

enter image description here enter image description here

Два приведенный выше пример, показывающий, что происходит сейчас что он работает.

+1

создать массив изображений и перемешайте его. итерации через этот массив. http://stackoverflow.com/a/26931594/4767498 –

+1

проверьте еще один [ответ] (http://stackoverflow.com/a/39310462/6290553) :) –

+0

Цикл for в вашем обновлении абсолютно не нужен. Он просто указывает один и тот же ресурс на изображение четыре раза. –

ответ

1

Реализация довольно проста. Во-первых, вам нужно перетасовать массив, а затем повторить его. Fisher–Yates shuffle.

Создайте метод ShuffleImages, как показано ниже:

public void ShuffleImages(PictureBox[] img) 
{ 
    Random r = new Random(); 
    for (int i = 0; i < img.Length - 1; i++) 
    { 
     int j = r.Next(i, img.Length); 
     PictureBox temp = img[j]; 
     img[j] = img[i]; 
     img[i] = temp;     
    } 
} 

и вызвать метод в Form1_Load события:

private void Form1_Load(object sender, EventArgs e) 
{ 
    PictureBox[] boxes = new PictureBox[4]; 
    boxes[0] = pictureBox0; 
    boxes[1] = pictureBox1; 
    boxes[2] = pictureBox2; 
    boxes[3] = pictureBox3; 

    ShuffleImages(boxes); //call the method 

    for (int i = 0; i <= 3; i++) 
    { 
     switch (i) 
     { 
      case 0: 
       { boxes[i].Image = Properties.Resources.dog0; } 
       break; 
      case 1: 
       { boxes[i].Image = Properties.Resources.dog1; } 
       break; 
      case 2: 
       { boxes[i].Image = Properties.Resources.dog2; } 
       break; 
      case 3: 
       { boxes[i].Image = Properties.Resources.dog3; } 
       break; 
     } 
    } 
} 

shuffled_imgs

1

Как M.kazem Ahkhary указывает, что вам нужно перетасовать изображения:

List<Bitmap> resources = new List<Bitmap>(); 
resources.Add(Properties.Resources.dog0); 
resources.Add(Properties.Resources.dog1); 
resources.Add(Properties.Resources.dog2); 
resources.Add(Properties.Resources.dog3); 

resources = resources.OrderBy(a => Guid.NewGuid()).ToList(); // Dirty but effective shuffle method 

pictureBox0.Image = resources[0]; 
pictureBox1.Image = resources[1]; 
pictureBox2.Image = resources[2]; 
pictureBox3.Image = resources[3]; 
+0

Спасибо, как это реализовать? Должен ли я заменить что-нибудь? – Boats

+0

Сделал некоторые изменения, это было не совсем правильно. Обычно вы можете просто вставить этот код по предоставленному коду –

+0

Это дает мне ошибки по одному от каждого из «resources.Add» о невозможности конвертировать Bitmap в String, а другая ошибка. Невозможно неявно преобразовать тип «System.Linq. IOrderedEnumerable 'to' System.Collections.Generic.List '. Явное преобразование существует (вы пропускаете листинг?) и что «ресурс» не существует в текущем контексте. – Boats