2011-10-21 3 views
2

Ce problème m'a laissé me gratter la tête! Je vais essayer d'être aussi concis que possible.Designer forçant les ressources à être incorporées dans le formulaire, plutôt que d'utiliser Resources.resx?

Sur un niveau élevé:

Le problème est que même si le projet fonctionne très bien et le code me semble bon. Chaque fois que j'édite et crée certains formulaires, Visual Studio réécrit les fichiers *.Designer.cs d'une manière qui n'est pas souhaitable. Je suis assez confiant que ces fichiers *.Designer.cs n'ont pas été édités (en particulier la partie générée automatiquement) dans le passé.

De façon plus détaillée:

Notre projet utilise des contrôles personnalisés, certains qui héritent de PictureBox. Sur les formulaires où ces contrôles sont présents, si je vois le fichier *.Designer.cs, je vois soit que la propriété Image n'est pas définie, soit la propriété Image fait référence à une image stockée dans le fichier resx du projet comme ci-dessous, ce qui est très bien .

this.customButton.Image = global::MyProject.Properties.Resources.buttonImage; 

Cependant, si je modifie simplement ce formulaire en ajoutant un autre contrôle (faites glisser un autre bouton sur la forme) et construire le projet, Visual Studio édite intensivement les fichiers MyForm.Designer.cs et MyForm.resx, même pour les contrôles existants sur le formulaire qui n'ont pas été touchés. Il semble qu'il intègre toutes les images nécessaires par les contrôles dans le fichier MyForm.resx et se réfère ensuite à eux dans le MyForm.Designer.cs comme suit:

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MyForm)); 
this.customButton.Image = ((System.Drawing.Image)(resources.GetObject("customButton.Image"))); 

Ceci est évidemment pas ce que je veux. Pourquoi Visual Studio souhaite-t-il que le formulaire utilise maintenant une ressource locale au lieu de celle incorporée dans le fichier Resources.resx du projet, comme il était content de le faire avant la modification du formulaire? Si je vais au concepteur, voir les propriétés du customButton, et essayez de définir la propriété Image à l'image dans le fichier de ressources du projet, il le permet, mais sur le clic suivant, il va immédiatement revenir à la référence locale intégrée dans MyForm.resx.

Des idées pour lesquelles cela se passe?

Répondre

3

Je compris cela avec l'aide de another question

En fait, même si je l'ai vu plusieurs recommandations visant à centraliser les ressources de votre application dans un seul ensemble, cela semble être un mauvais choix. Le concepteur VS n'aime pas avoir à accéder à des ressources externes à l'assemblage actuel et, bien qu'il puisse le faire, il changera également votre code pour intégrer ces ressources dans l'assemblage en cours en les intégrant, contrecarrant vos efforts pour conserver les ressources un seul assemblage.

Je devais fondamentalement revenir à garder des ressources dans l'ensemble les utilise.

Questions connexes