Comment créer et utiliser des ressources dans .NET

192

Comment créer une ressource que je peux référencer et utiliser facilement dans diverses parties de mon programme?

Mon problème spécifique est que j'ai un NotifyIcon dont je veux changer l'icône en fonction de l'état du programme. Un problème courant, mais avec lequel je me bats depuis longtemps.

Matthew Scharley
la source

Réponses:

325

Eh bien, après avoir cherché et bricolé divers points de StackOverflow (gee, j'aime déjà cet endroit), la plupart des problèmes avaient déjà dépassé ce stade. J'ai réussi à trouver une réponse à mon problème.

Comment créer une ressource:

Dans mon cas, je souhaite créer une icône. C'est un processus similaire, quel que soit le type de données que vous souhaitez ajouter en tant que ressource.

  • Cliquez avec le bouton droit sur le projet auquel vous souhaitez ajouter une ressource. Faites cela dans l'Explorateur de solutions. Sélectionnez l'option "Propriétés" dans la liste.
  • Cliquez sur l'onglet "Ressources".
  • Le premier bouton en haut de la barre vous permettra de sélectionner le type de ressource que vous souhaitez ajouter. Il devrait commencer sur la chaîne. Nous voulons ajouter une icône, alors cliquez dessus et sélectionnez "Icônes" dans la liste des options.
  • Ensuite, passez au deuxième bouton, "Ajouter une ressource". Vous pouvez soit ajouter une nouvelle ressource, soit si vous avez déjà une icône déjà créée, vous pouvez l'ajouter également. Suivez les invites pour l'option choisie.
  • À ce stade, vous pouvez double-cliquer sur la ressource nouvellement ajoutée pour la modifier. Notez que les ressources s'affichent également dans l'Explorateur de solutions et qu'un double-clic est tout aussi efficace.

Comment utiliser une ressource:

Super, nous avons donc notre nouvelle ressource et nous avons hâte d'avoir ces jolies icônes changeantes ... Comment pouvons-nous faire cela? Eh bien, chanceux, C # rend cela extrêmement facile.

Il existe une classe statique appelée Properties.Resourcesqui vous donne accès à toutes vos ressources, donc mon code a fini par être aussi simple que:

paused = !paused;
if (paused)
    notifyIcon.Icon = Properties.Resources.RedIcon;
else
    notifyIcon.Icon = Properties.Resources.GreenIcon;

Terminé! Fini! Tout est simple quand on sait comment, n'est-ce pas?

Matthew Scharley
la source
merci pour cela, cherchait exactement la même chose. existe-t-il un moyen d'incorporer les fichiers .ico dans l'exécutable afin qu'ils ne s'affichent pas en tant que fichiers séparés? J'espère que ma question a un sens. salutations,
Amc_rtty
1
@Andrei: C'est exactement ce qu'est une ressource. Une fois ajouté, il sera intégré dans l'exe compilé.
Matthew Scharley
1
"... la plupart des problèmes avaient déjà dépassé ce stade" - Trop vrai ... Merci d'avoir mis cela ensemble! Je savais que c'était simple ... à la fin.
Roadsunknown
1
En remarque, les fichiers de ressources sont verrouillés au moment de la compilation. Ainsi, les modifier dynamiquement au moment de l'exécution ne modifie pas les valeurs existantes. Utilisez des fichiers de configuration, si vous souhaitez modifier les valeurs lors de l'exécution. Au cas où cela aiderait quelqu'un.
Purusartha
1
Dans VB.NET, les ressources sont accessibles via par exemple "My.Resources.GreenIcon"
andy
9

Ce qui précède n'a pas fonctionné pour moi comme je l'avais prévu avec Visual Studio 2010. Il ne me permettrait pas d'accéder à Properties.Resources, a déclaré qu'il était inaccessible en raison de problèmes d'autorisation. J'ai finalement dû modifier les paramètres de persistance dans les propriétés de la ressource puis j'ai trouvé comment y accéder via le fichier Resources.Designer.cs, où il y avait un getter automatique qui me permettait d'accéder à l'icône, via MyNamespace.Properties.Resources .NameFromAddingTheResource. Cela renvoie un objet de type Icon, prêt à être utilisé.

Quinxy von Besiex
la source
7

La méthode ci-dessus fonctionne bien.

Une autre méthode (je suppose le Web ici) consiste à créer votre page. Ajoutez des contrôles à la page. Ensuite, en mode conception, accédez à: Outils> Générer une ressource locale . Un fichier de ressources apparaîtra automatiquement dans la solution avec tous les contrôles de la page mappés dans le fichier de ressources.

Pour créer des ressources pour d'autres langues, ajoutez la langue à 4 caractères à la fin du nom de fichier, avant l'extension ( Account.aspx.en-US.resx, Account.aspx.es-ES.resx ... etc).

Pour récupérer des entrées spécifiques dans le code-behind, il suffit d' appeler cette méthode: GetLocalResourceObject([resource entry key/name]).

Chuck Conway
la source