2017-01-14 1 views
1

내 친구가 화면 전체에 닭의 사진을 생성하는 프로그램을 작성하라고했습니다. 그래서 전체 화면 자체가 그 안에 닭고기 그림이있는 그림 상자를 생성하려고하는 프로그램을 작성했습니다. 전체 화면이 작동하지만 그림 상자가 나타나지 않습니다. 어떤 도움이 필요합니까?C에서 타이머와 루프를 통해 여러 PictureBox 만들기

 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

PictureBox 이미지를 설정 한 직후'pb.SizeMode = PictureBoxSizeMode.Zoom; '을 추가하거나 추가 할 수 있습니다. PictureBox에 맞게 이미지 크기를 조정해야합니다 (비율을 유지하면서). 나는 필요한 수정으로 답을 편집했다. –

+0

그걸 고쳐 줘! 모든 도움을 주셔서 대단히 감사합니다! 해결책은 훌륭하게 작동했습니다 : D – Wolfie

0

계산이 정확하면 20 분 후에 창이 열립니다. 수면을 버리거나 타이머 틱마다 새 창을 만드는 것을 고려하십시오.

가 나타나지 않는 이유는 당신이 그것을 무효 반환과 비동기 방식을 사용하지 않는 것이 좋습니다 있지만

+0

잠자기를 삭제해도 여전히 작동하지 않습니다. – Wolfie

관련 문제