2010-08-04 4 views
3

Nous avons une application winform qui a été en développement depuis un certain temps. Il a plusieurs images et couleurs de contrôle qui créent une expérience de marque. Nous avons un deuxième client qui aimerait le même produit, mais avec une image de marque différente.Comment puis-je modifier les fichiers de ressources pour une application C# winform, sans modifier la culture?

Nous avons donc des lignes de code dans le contrôle Designer.cs fichiers comme:

this.BackgroundImage = global::MyNameSpace.Properties.Resources.background; 

Il semble que les fichiers de ressources sont la voie à suivre, comme je ne pouvais tout simplement changer la culture et un fichier de ressources distinct avec des images différentes.

Mais je ne veux pas changer la culture (je ne veux pas que l'affichage des dates, monnaie, etc.) soit modifié et ça sent juste. Puis-je modifier manuellement le fichier de ressources au moment de l'exécution ou de la compilation sans avoir à modifier la culture?

Existe-t-il un meilleur moyen d'atteindre ce résultat?

De même, comment pouvez-vous/pouvez-vous utiliser les fichiers de ressources pour définir les couleurs des contrôles (par exemple, changer tous les arrière-plans du noir au rouge)?

+0

Vous pouvez publier ce dernier bit comme une question distincte. –

Répondre

1

Vous pouvez lire dans les ressources à partir d'un fichier séparé qui a juste les ressources (mais ne dépend pas du mécanisme d'assemblage de satellites globalisé). Vous pouvez également compiler les ressources par défaut avec votre assembly principal en tant que solution de repli.

Vous pouvez utiliser Resgen.exe pour créer un fichier .resources à partir, par exemple, un fichier .resx puis utilisez ResourceManager pour le lire:

//note that resourceFilename does NOT include the ".resources" extension 
var rm = ResourceManager.CreateFileBasedResourceManager(resourceFilename 
                 ,resourceDir 
                 ,null); 
this.BackgroundImage = (Image) rm.GetObject("background"); 
+0

Mark, ça semble prometteur. Pouvez-vous me désigner une ressource qui peut m'aider à créer et à lire des ressources provenant d'une assemblée distincte? – Handleman

+0

J'ai changé ma réponse puisque vous avez juste besoin du fichier de ressources sans vous lier à un assemblage. J'ai inclus les instructions d'utilisation + le code. –

+0

Merci pour l'aide et le code. Cette solution semble que je devrais changer le code dans les fichiers de concepteur existants de this.BackgroundImage = global :: MyNameSpace.Properties.Resources.background; à this.BackgroundImage = (Image) rm.GetObject ("arrière-plan"); et devrait avoir "rm" dans la portée de ces fichiers. Cela ne produira-t-il pas et erreur quand je charge le contrôle dans le concepteur? – Handleman

0

Une option que vous pourriez envisager de créer un culture personnalisée, par exemple, vous pouvez créer une culture appelée

ClientA-fr-FR 
ClientB-fr-FR 

Le vous créer des ressources pour chacun et vous devriez être en mesure de définir la culture du fil de façon appréciable.

Voici un lien "How to: Create Custom Cultures"

Questions connexes