2013-05-11 54 views
2

我正在使用Winform,我有這個圖片框。我有52個不同的圖像,只有1個圖像將在這個特定的圖片框中顯示。我不確定我應該如何做到這一點,而不會結束52個if語句。誰能幫我這個因爲我還是有點新的編程:)圖片框c的隨機輸出圖像#

我在C#編程很

謝謝! :D

+0

你爲什麼不辦一個循環? – 2013-05-11 18:01:33

+0

聽起來像你需要一個數組或列表的文件名或圖像本身。然後,您可以使用隨機生成的數字來獲取您想要設置的圖片,例如imageList [random.Next(0,51)] – 2013-05-11 18:07:20

回答

1

第一步是製作某種列表來存儲所有圖像。您可以選擇圖像列表或其路徑列表。

如果您使用的是圖像路由,您可以創建一個包含List<Image> images = new List<Image>();的圖像列表,併爲每個圖像添加images.Add(image);每個圖像image

如果您使用路徑路線,您可以創建一個包含List<String> paths = new List<String>();的路徑列表,併爲每個path添加每個圖像paths.Add(path);

然後,當您將圖片框設置爲隨機圖像時,您可以生成一個隨機數並從列表中選取一個。

對於圖片:

Random random = new Random(); 
pictureBox1.Image = images[random.Next(0, images.Count - 1)]; 

對於路徑:

Random random = new Random(); 
pictureBox1.ImageLocation = paths[random.Next(0, images.Count - 1)]; 

由於Tuukka說,使用的路徑是一個更好的主意(內存使用明智的),除非你已經創建了動態圖像,或者出於其他原因已經具有圖像。

+0

製作52張圖片列表列表對於內存使用來說只是一個可怕的想法。字符串是推薦列表。 – 2013-05-11 18:20:18

+0

非常真實,但他可能已經有了圖像,例如,如果他在運行時創建它們。我編輯了我的帖子以包含您的建議。 – 2013-05-11 18:23:28

1

小例子:

// Controls: 
// pictureBox1 
// Dock: Fill 
// SizeMode: StretchImage 
// timer1 

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Windows.Forms; 
using System.Linq; 

namespace RandomImg 
{ 
    public partial class Form1 : Form 
    { 
     // List of files to show 
     private List<string> Files; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     // StartUp 
     private void Form1_Load(object sender, EventArgs args) 
     { 
      // basic settings. 
      var ext = new List<string> {".jpg", ".gif", ".png"}; 

      // we use same directory where program is. 
      string targetDirectory = Directory.GetCurrentDirectory(); 

      // Here we create our list of files 
      // New list 
      // Use GetFiles to getfilenames 
      // Filter unwanted stuff away (like our program) 
      Files = new List<string> 
       (Directory.GetFiles(targetDirectory, "*.*", SearchOption.TopDirectoryOnly) 
       .Where(s => ext.Any(e => s.EndsWith(e)))); 

      // Create timer to call timer1_Tick every 3 seconds. 
      timer1 = new System.Windows.Forms.Timer(); 
      timer1.Tick += new EventHandler(timer1_Tick); 
      timer1.Interval = 3000; // 3 seconds 
      timer1.Start(); 

      // Show first picture so we dont need wait 3 secs. 
      ChangePicture(); 
     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
      // Time to get new one. 
      ChangePicture(); 
     } 

     private void ChangePicture() 
     { 
      // Do we have pictures in list? 
      if (Files.Count > 0) 
      { 
       // OK lets grab first one 
       string File = Files.First(); 
       // Load it 
       pictureBox1.Load(File); 
       // Remove file from list 
       Files.RemoveAt(0); 
      } 
      else 
      { 
       // Out of pictures, stopping timer 
       // and wait god todo someting. 
       timer1.Stop(); 
      } 
     } 
    } 
}