cs_Zap
Messages postés78Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention14 août 2010
-
19 oct. 2006 à 14:52
DedeSurf
Messages postés156Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention23 novembre 2011
-
6 mars 2011 à 17:23
Bonjour,
J'ai un fichier de ressources qui contient plusieurs images.
Je n'ai pas de problème pour accéder aux différentes ressources qui le compose tant que j'utilise les classes spécifiques au projet.
Cependant pour des questions de réutisabilité, je voudrai pouvoir créer une classe générique me permettant d'accèder à une ressource sans avoir à préciser obligatoirement le nom de la classe utilisée par la form.
Exemple :
Dans mes projets skinnés, j'ai créé une classe nommé SkinEngine.cs dans laquelle j'ai la méthode suivante :
public static Bitmap GetResourceBitmap(string ResourceName, int width, int height)
{
Bitmap bmp = new Bitmap(width, height);
string sName = ResourceName.ToUpper();
sName = sName.Replace("SKIN_", "");
switch (sName)
{
case "BTN_CLOSE":
bmp = BlackBox. Properties.Resources.BTN_Close; break;
case "BTN_ICONIZE":
bmp = BlackBox.Properties.Resources.BTN_Iconize; break;
case "BTN_RESTORE":
bmp = BlackBox. Properties.Resources.BTN_Restore; break;
case "BTN_MAXIMIZE":
bmp = BlackBox.Properties.Resources.BTN_Maximize; break;
case "BTN_DOCKOUT":
bmp = BlackBox. Properties.Resources.BTN_DockOut; break;
case "BTN_DOCKIN":
bmp = BlackBox.Properties.Resources.BTN_DockIn; break;
case "BTN_ABOUT":
bmp = BlackBox. Properties.Resources.BTN_About; break;
default: bmp = BlackBox.Properties.Resources.BTN_Push; break;
}
return bmp;
}
Dans l'exemple ci-dessus partout ou figure BlackBox. je voudrai utiliser un nom générique au lieu du nom spécifique du projet.
Ou à la rigueur utiliser une MACRO du style
MACRO SkinForm = BlackBox
afin de pouvoir obtenir un code réutilisable sans avoir à chaque fois à modifier les lignes à la main.
(mais les macros ne sont pas disponibles en C#)
cs_Zap
Messages postés78Date d'inscriptionmardi 31 décembre 2002StatutMembreDernière intervention14 août 2010 19 oct. 2006 à 16:21
Bidou - Merci pour le lien,
mais justement je ne veux pas avoir à préciser le NameSpace.
Je veux un code indépendant comme je pourrai le faire en mode procédural pour charger une ressource à partir d'un EXE ou d'une DLL Win32 en utilisant l'API LoadImage.
Sébastien -
dans l'exemple que vous donnez,
je ne sais pas à quoi doit correspondre "tonType" ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 20 oct. 2006 à 05:54
Salut, si il s'agit de réutiliser ton code à la compilation, tu peux faire un clique droit dans ton projet sur le fichier "Resources.resx" et changer sa propriété "Espace de noms de l'outil" ( rebuild si ça prend pas effet tout de suite ).
Sinon pour eviter les noms à rallonge générés par VS2005 tu peux créer ton propre fichier *.resources qui contiendra donc déja toutes tes images ( c'est plus simple avec Resourcer.NET ) et puis pour les récupérer :
ResourceManager rm = new ResourceManager( "MyRes", typeof( MainForm ).Assembly );
bmp = new Bitmap( ( Bitmap )rm.GetObject( "MyBitmap.bmp" ) );
Le problème c'est que ça marche très bien avec le compilo en ligne de commande ( csc.exe -t:winexe -resource:MyRes.resources main.cs ) mais j'ai pas trouvé comment faire avec Visual Studio, apparemment il créer les fichiers *.resources à partir des *.resx mais il ne les prend pas en charge directement. ( j'ai que la version Express d'installée c'est peut être pour ça aussi.. ).
Je sais pas si ça répond vraiment à ta question.. ^^
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 20 oct. 2006 à 15:34
Petite précision sur ce que j'ai dit.. Entre temps j'ai refait des tests, et donc visual studio ( même la version Express ) prend bien en charge les fichiers *.resources. la seul différence avec le compilateur en ligne de commande c'est qu'il rajoute le namespace au nom de la ressource.
DedeSurf
Messages postés156Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention23 novembre 2011 6 mars 2011 à 17:23
Et comment récupérer une resource (genre image) dans un projet WPF qui ne figure pas dans le MyAssembly.Properties.Resources.MyResource. La resource (ou fichier) a dans ses options l'action de génération à "Contenu" ou "Resource" donc dans l'éditeur WPF les resources sont accessible par "pack://application:,,,/Dossier/nomimage.extension" example
.
Mais pour crée un control Image (et pas un PictureBox en WinForm) pour lui donner une image ont doit lui assigne le chemin du fichier via Source et en code (C#) je ne sais pas comment lui assigner cette valeur si je copie pas le fichier dans le dossier de sortie. Quelqu'un aurait une idée ?