2014-01-12 81 views
1

我在C#項目中有多個圖像,我必須隨機訪問它們。 假設我有5張圖像(_1,_2,...),並生成1到5之間的隨機數字。 如何訪問與該數字相對應的文件?C#按名稱訪問圖像

pictureBox.Image = Properties.Resources._1 
+0

付諸5個圖像的引用到一個數組並使用RNG挑出單個圖像 –

+0

數組是可行的。另一種不依賴數組的方法是使用'Properties.Resources.ResourceManager.GetObject'(與String.Format一起生成數字資源名稱)。 – elgonzo

回答

1

你可以做這樣的事情:

Random rnd = new Random(); 
this.pictureBox1.Image = new Bitmap(System.IO.Path.Combine("youFolder",String.Format("_{0}.yourExtension",rnd.Next(0,6))); 

爲了創建隨機數我有使用Next(min,max)隨機的方法。然後,我只需將一個新的圖像添加到pictureBox。

Here你可以找到Path.Combine

而且here Random.Next(最小值,最大值)的基準的參考;

+2

這不是一個答案,因爲他想訪問一個propertie –

1

看到這個sample

Random random= new Random(); 
    string path=random+".jpeg"; 
    Image image = Image.FromFile(path); 
    pictureBox.Image = image; 
    pictureBox.Height = image.Height; 
    pictureBox.Width = image.Width; 

您還可以使用:

Random random= new Random(); 
    string path=random+".jpeg"; 
    pictureBox.Image = new Bitmap(path); 
+1

這不是一個答案,因爲他想訪問一個propertie –

1

只要使用類似這樣

Random rnd = new Random(); 
int im = rnd.Next(0, 5); 
Image[] images = new Image[]{Properties.Resources._1,Properties.Resources._2,Properties.Resources._3,Properties.Resources._4,Properties.Resources._5} 
pictureBox.Image = images[im]; 
+0

你的隨機數將在[1 ... 4]範圍內。使用這個作爲數組索引會導致_1圖像永遠不會被使用... – elgonzo

+0

對不起,我已經更新了我的答案 –

+0

不好,遺憾的是仍然不正確:(請閱讀有關Random.Next()的MSDN文檔。 'rnd.Next(5)' – elgonzo

0

使用此:

//generate your random number 
Random rnd = new Random(); 
string rndNumber = rnd.Next(0,6).ToString(); 
var myImg = ResourceManager.GetObject(rndNumber) as Bitmap; 

如果圖像文件名一樣_1,_2等則:

string rndNumber = "_" + rnd.Next(0,5).ToString(); 
+0

隨機數將是[0 ... 4]。所以你需要做'(rnd.Next(0,5)+1).ToString()'來得到區間[1 ... 5] – elgonzo

+0

是的數字,或者我們可以這樣做:'rnd.Next (0,6)' –

+0

不,你不能,除非你有一個名爲「_0」的圖像資源。 ;) – elgonzo

2

假設,你的圖像資源被命名爲_1,_2,_3, ... 然後,你可以做這樣的事情:

int maxNumberOfImages = ..... the number of images you have 
Random rnd = new Random(); 

pictureBox.Image = Properties.Resources.ResourceManager.GetObject(
    String.Format("_{0}", rnd.Next(maxNumberOfImages) + 1) 
) as Bitmap; 
0

試試這個, 保護無效的Page_Load(對象發件人,EventArgs的){ 如果 (!的IsPostBack){ getImage(); } }

private void getImage() 
{ 
    Random rand = new Random(); 
    int i = rand.Next(1, 6); 
    Image1.ImageUrl = "~/image/" + i.ToString() + ".jpg"; 
    Label1.Text = "image no :" + i.ToString(); 
} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    getImage(); 
}