Как управлять иконками в решении с несколькими проектами? - PullRequest
3 голосов
/ 12 апреля 2011

У меня есть пять проектов в моем решении.Каждый из них использует несколько значков (многие из этих значков одинаковы в разных проектах) , и я хочу хранить их в одном месте.

Я пытался использовать отдельный проект для хранения значков, но я потерпел фиаско ..

Когда я использую значок из другого проекта ( проект, который содержит все значки) Visual Studio автоматически скопировал эти значки в файл form.resx.

Объяснение: Первым делом я не могу прикрепить значок (из другого проекта) к своему button из designer.Поэтому мне нужно перейти на form.designer.cs и вручную прикрепить значок к кнопке.После этих операций VS восстановил автоматически сгенерированную деталь в form.designer.cs, заменил мой код на собственный и скопировал значок в файл form.resx.

//my code
this.btnCompile.Image = SharedProject.Properties.Resources.compile;

//code replaced with VS
this.btnCompile.Image = ( (System.Drawing.Image)( resources.GetObject( "compile.Image" ) ) );

Вы можете видеть, что изображение было скопировано вместный проект на ресурсы.В этом случае изменить изображение кнопки недостаточно, чтобы заменить только мое изображение (compilation.png) в общем проекте.Мне нужно также заменить его в каждой форме, где он использовался.

Вопрос: Как управлять иконками в решении, чтобы избежать дублирования и этого большого неудобства?

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Я решил точно такую ​​же проблему, но с одним ограничением. Давайте посмотрим на две возможности:

1) Вы хотите иметь возможность обновлять все изображения, переопределяя одну папку с изображениями в папке приложения.
Вы можете использовать Сервис, как предложено @Farzin Zaker. Недостаток этого решения заключается в том, что вы должны динамически настраивать изображения для элементов управления, а в режиме разработки вы не увидите элемент управления с правильными изображениями.

2) Вы хотите использовать Дизайнер.
В этом случае вы должны добавить эти изображения в качестве ресурсов. Хитрость заключается в том, чтобы заставить VS использовать относительный путь к изображениям из указанной папки. По умолчанию VS копирует все файлы ресурсов в папку проекта Resources . Но если VS видит, что в папке «Ресурсы» «зарегистрирован» другой файл с таким же именем VS хранит в .resx относительный путь к изображению. Поэтому, если вы хотите добавить одно и то же изображение в два проекта, вам необходимо:
- Создать папку Ресурсы
- Добавить изображение как существующий элемент (как ссылку): в VS вы увидите ссылку на изображение, установите действие Нет
- Добавить изображение в раздел ресурсов проекта.

1 голос
/ 12 апреля 2011

Вы можете разработать Сервисный проект, который будет обслуживать иконки или другие ресурсы для других ваших проектов.вы должны просто реализовать такой интерфейс в своем приложении:

public interface IResourceProvider
{
   Image RetrieveIcon(string key);
   //you can add other resource types here.
}

, затем реализовать этот интерфейс в новом классе и вернуть связанный значок каждому ключу, передаваемому его методам.здесь вам нужно просмотреть файл resx этого проекта для запрашиваемого Icon (Resource)

, тогда в вашем приложении вы просто должны вызвать свой класс ResourceProvider для приведения в соответствие требуемых элементов ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...