2017-01-14 6 views
1

Мой друг попросил меня написать программу, которая порождает фотографии кур на всем экране. Итак, я написал программу, в которой сам полноэкранный режим пытается создать тонны картинных ящиков с изображением курицы в них. Полноэкранный режим работает, но изображения не отображаются. Любая помощь?Сделайте несколько PictureBoxes через таймер и петлю в C#

 private void timer1_Tick(object sender, EventArgs e) 
    { 

     for (int i = 1; i < 2500; i++) 
     { 
      Thread.Sleep(500); 
      PictureBox pb = new PictureBox(); 
      this.Controls.Add(pb); 
      pb.Visible = true; 
      pb.Enabled = true; 
      Random r = new Random(); 
      pb.Image = Properties.Resources.chikoon; 
      //pb.SetBounds(xB, yB, 72, 78); 
      int xB = r.Next(0, 1920); 
      int yB = r.Next(0, 1080); 
      MessageBox.Show(xB.ToString() + ", " + yB.ToString()); 

      pb.Location = new Point(xB, yB); 
     } 

    } 

Таймер включен и MessageBox работает.

ответ

1

Хотя это лучше избегать использования методов асинхронных с недействительным возвращением, я не думаем, что есть большая проблема с это, учитывая, как это обработчик событий, который должен быть недействительным;

private async void timer1_Tick(object sender, EventArgs e) { 
    timer1.Stop(); 
    for (int i = 1; i < 2500; i++) { 
     await Task.Delay(500); // Thread.Sleep blocks the program 
     PictureBox pb = new PictureBox(); 
     pb.Image = Properties.Resources.chikoon; 
     // add the line below to make the image fit in the PictureBox 
     pb.SizeMode = PictureBoxSizeMode.Zoom; //---> resize the image to fit the PictureBox  
     pb.Visible = false; // set it to true only after you've positioned the PictureBox 
     this.Controls.Add(pb); // otherwise it will appear at (0, 0) and then move to a new location 
     Random r = new Random(); 
     int xB = r.Next(0, 1920); 
     int yB = r.Next(0, 1080); 
     pb.Location = new Point(xB, yB); 
     pb.Visible = true; 

     MessageBox.Show(xB.ToString() + ", " + yB.ToString()); 
    } 

} 
+0

Это работает, но изображение разрезается пополам. Любой способ исправить это? – Wolfie

+0

Вы можете попробовать добавить 'pb.SizeMode = PictureBoxSizeMode.Zoom;' сразу после установки изображения PictureBox. Это должно изменить размер (при сохранении отношения) изображения так, чтобы оно соответствовало PictureBox. Я отредактировал ответ с необходимой модификацией. –

+0

Это исправлено! Большое вам спасибо за вашу помощь! Решение (ы) отлично работало: D – Wolfie

0

Ваши окна будут отображаться через 20 минут, если мои вычисления верны. Погрузитесь в сон или подумайте о том, чтобы создать новое окно на таймер.

Причина они не появляются это вы заблокировали для Windows Message Pump со всеми Снами

+0

Убрано спит, все еще не работает. – Wolfie

 Смежные вопросы

  • Нет связанных вопросов^_^