2009-05-11 6 views
5

Basé sur un ID, je voudrais charger automatiquement une image dans mon interface graphique. Pour ce faire, j'aimerais pouvoir extraire toutes les images du fichier Resources.resx dans Visual Studio 2008 (en utilisant C#). Je sais que je suis en mesure d'obtenir un à la fois si je sais ce qu'ils sont:Obtenir toutes les (propriétés.Ressources) à stocker dans un dictionnaire

Image myPicture = Properties.Resources.[name of file]; 

Cependant ce que je suis à la recherche est le long de ces lignes ...

foreach(Bitmap myPicture in Properties.Resources) {Do something...} 

Répondre

11

Il suffit d'utiliser LINQ (tm)

ResourceManager rm = Properties.Resources.ResourceManager; 

ResourceSet rs = rm.GetResourceSet(new CultureInfo("en-US"), true, true); 

if (rs != null) 
{ 
    var images = 
    from entry in rs.Cast<DictionaryEntry>() 
    where entry.Value is Image 
    select entry.Value; 

    foreach (Image img in images) 
    { 
    // do your stuff 
    } 
} 
+0

J'aime, surtout s'il y a d'autres types de données dans le fichier Resource.resx. Je n'ai pas encore étudié Linq, donc je suppose que cela va générer du code pour faire cette tâche. N'importe quelle idée quelle sera la différence de vitesse de la réponse ci-dessus? Je suppose que ce sera négligeable, mais toujours préférable de demander. Merci pour la réponse! – Billy

+0

il n'y a pas de codegen, c'est le code. Quant à la vitesse, elle devrait être dans le même ordre de grandeur. –

+0

Merci pour votre aide Shay! – Billy

1

Ok cela semble travailler, mais je serais heureux d'avoir d'autres réponses.

ResourceManager rm = Properties.Resources.ResourceManager; 

ResourceSet rs = rm.GetResourceSet(new CultureInfo("en-US"), true, true); 

if (rs != null) 
{ 
    IDictionaryEnumerator de = rs.GetEnumerator(); 
    while (de.MoveNext() == true) 
    { 
     if (de.Entry.Value is Image) 
     { 
     Bitmap bitMap = de.Entry.Value as Bitmap; 
     } 
    } 
} 
Questions connexes