2 votes

Éviter les chemins de fichiers d'icônes codés en dur dans le fichier .resx

J'essaie de faire en sorte que notre application puisse gérer différents jeux d'icônes (pour qu'elle soit en quelque sorte skinnable). Je me suis renseigné sur la manière habituelle de le faire aquí . Lorsque j'ai essayé d'appliquer la solution proposée dans la réponse, j'ai remplacé tous les chemins d'accès aux icônes codés en dur dans les fichiers .resx par des chemins utilisant une variable d'environnement. Par exemple, j'ai remplacé...

<data name="btnDel" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\..\Icons\btnDel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

...avec :

<data name="btnDel" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>$(IconsFolder)\btnDel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

Ensuite, comme test initial, j'ai défini une variable d'environnement au niveau du système appelée IconsFolder J'ai appliqué les changements, redémarré Visual Studio et essayé de construire. Mais j'ai obtenu cette erreur :

D:\SVN.DRA.WorkingCopy\UserControl\My Project\Resources.resx(123,5): error MSB3103: Invalid Resx file. Could not find a part of the path 'D:\SVN.DRA.WorkingCopy\UserControl\My Project\$(IconsFolder)\btnDel.png'. Line 123, position 5.

Il semble que les fichiers .resx ne comprennent pas les variables d'environnement. Comment puis-je éviter de coder en dur ces chemins, alors ?

EDIT : Chaque icône peut être référencée par plus d'un projet, donc la variable d'environnement de n'importe quel mécanisme utilisé pour configurer les chemins doit être disponible à l'échelle de la solution, et je devrais être en mesure de la définir à l'intérieur d'un script de MSBuild.

EDIT 2 : Tous mes formulaires sont définis dans des projets C# ou VB.NET

0voto

blueberryfields Points 7097

Les variables d'environnement du système peuvent ne pas fonctionner. Vous pouvez essayer de suivre les instructions ici :

http://msdn.microsoft.com/en-us/library/ms173406.aspx

0voto

tdemay Points 219

Je ne pense pas qu'il y ait un moyen d'y parvenir en utilisant le fichier de ressources. Une façon d'y parvenir est de déposer votre bitmap sur votre projet, de faire un clic droit dessus et de changer l'action de construction en "Ressource incorporée". Ouvrez le fichier du projet dans un éditeur de texte et modifiez le chemin d'accès à votre variable d'environnement. (c'est la façon dont nous le faisons avec VS 2008, ils ont rendu les choses plus faciles depuis). Ensuite, dans le code, vous pouvez faire ceci : ....

Assembly myAssembly = Assembly.GetExecutingAssembly();
Stream myStream = myAssembly.GetManifestResourceStream("btnDel.png");
new System.Drawing.Bitmap(myStream);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X