2013-07-22 101 views
2

我目前使用下面的代碼將圖像加載到圖片框上。在Visual Studio中使用PictureBox

pictureBox1.Image = Properties.Resources.Desert; 

我會用'變量'替換「沙漠」,代碼的工作原理如下。

String Image_Name; 
Imgage_Name = "Desert"; 
pictureBox1.Image = Properties.Resources.Image_Name; 

我有很多想象的,我需要加載並想用一個變量圖像名稱,而不必寫爲每個圖像單獨的一行。這可能嗎 ?

回答

2

您可以在資源循環..這樣的事情:

using System.Collections; 

string image_name = "Desert"; 

foreach (DictionaryEntry kvp in Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true)) { 
    if ((string)kvp.Key == image_name) { 
     var bmp = kvp.Value as Bitmap; 
     if (bmp != null) { 
      // bmp is your image 
     } 
    } 
} 

你可以在一個不錯的小功能,把它包..像這樣的:

public Bitmap getResourceBitmapWithName(string image_name) { 
    foreach (DictionaryEntry kvp in Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true)) { 
     if ((string)kvp.Key == image_name) { 
      var bmp = kvp.Value as Bitmap; 
      if (bmp != null) { 
       return bmp; 
      } 
     } 
    } 

    return null; 
} 

用法:

var resourceBitmap = getResourceBitmapWithName("Desert"); 
if (resourceBitmap != null) { 
    pictureBox1.Image = resourceBitmap; 
} 
+0

非常感謝您的努力。 如果我可以,什麼是'kvp'? – user2605318

+0

我將它命名爲「kvp」,因爲它代表「鍵 - 值對」。字典項目。 –

1

請查看:Programatically using a string as object name when instantiating an object。默認情況下,C#不允許你這樣做。但是您仍然可以使用stringDictionary訪問您想要的圖像。

你可以嘗試這樣的事情:

Dictionary<string, Image> nameAndImg = new Dictionary<string, Image>() 
{ 
    {"pic1", Properties.Resources.pic1}, 
    {"pic2", Properties.Resources.pic2} 
    //and so on... 
}; 

private void button1_Click(object sender, EventArgs e) 
{ 
    string name = textBox1.Text; 

    if (nameAndImg.ContainsKey(name)) 
     pictureBox1.Image = nameAndImg[name]; 

    else 
     MessageBox.Show("Inavlid picture name"); 
} 
相關問題