Как создавать и использовать ресурсы в .NET

192

Как мне создать ресурс, на который я могу легко ссылаться и использовать в различных частях моей программы?

Моя конкретная проблема заключается в том, что у меня есть NotifyIcon, значок которого я хочу изменить в зависимости от состояния программы. Обычная проблема, но с которой я долго боролся.

Мэтью Шарли
источник

Ответы:

325

Что ж, после поиска вокруг и объединения различных точек вокруг StackOverflow (ну и дела, я люблю это место уже), большинство проблем уже прошли этот этап. Мне все-таки удалось найти ответ на мою проблему.

Как создать ресурс:

В моем случае я хочу создать иконку. Это аналогичный процесс, независимо от того, какой тип данных вы хотите добавить в качестве ресурса.

  • Щелкните правой кнопкой мыши проект, в который вы хотите добавить ресурс. Сделайте это в обозревателе решений. Выберите опцию «Свойства» из списка.
  • Нажмите на вкладку «Ресурсы».
  • Первая кнопка в верхней части панели позволит вам выбрать тип ресурса, который вы хотите добавить. Это должно начаться на строке. Мы хотим добавить иконку, поэтому нажмите на нее и выберите «Иконки» из списка опций.
  • Далее перейдите ко второй кнопке «Добавить ресурс». Вы можете добавить новый ресурс или, если у вас уже есть значок, вы можете добавить его тоже. Следуйте инструкциям для любого варианта, который вы выберете.
  • На этом этапе вы можете дважды щелкнуть вновь добавленный ресурс, чтобы отредактировать его. Обратите внимание, что ресурсы также отображаются в обозревателе решений, и двойной щелчок там также эффективен.

Как использовать ресурс:

Отлично, у нас есть наш новый ресурс, и мы жаждем иметь эти прекрасные меняющиеся иконки ... Как мы это делаем? Что ж, повезло нам, C # делает это чрезвычайно легко.

Существует статический класс, Properties.Resourcesкоторый дает вам доступ ко всем вашим ресурсам, поэтому мой код оказался таким простым:

paused = !paused;
if (paused)
    notifyIcon.Icon = Properties.Resources.RedIcon;
else
    notifyIcon.Icon = Properties.Resources.GreenIcon;

Готово! Законченный! Все просто, когда знаешь как, не так ли?

Мэтью Шарли
источник
спасибо за это, искал точно такую ​​же вещь. Есть ли способ встроить файлы .ico в исполняемый файл, чтобы они не отображались как отдельные файлы? Я надеюсь, что мой вопрос имеет смысл. С уважением,
Amc_rtty
1
@ Андрей: Это именно то, что ресурс. Как только он будет добавлен, он будет встроен как часть скомпилированного exe.
Мэтью Шарли
1
«... большинство проблем уже прошли этот этап» - слишком верно ... Спасибо, что соединили это! Я знал, что это было просто ... в конце концов.
roadsunknown
1
Как примечание, файлы ресурсов заблокированы во время компиляции. Таким образом, их динамическое изменение во время выполнения мало что меняет для изменения существующих значений. Используйте файлы конфигурации, если вы хотите изменить значения во время выполнения. На случай, если это кому-нибудь поможет.
Пурушарта
1
В VB.NET ресурсы доступны через , например , «My.Resources.GreenIcon»
ANDY
9

Вышеописанное на самом деле не сработало для меня, как я ожидал в Visual Studio 2010. Оно не позволило мне получить доступ к Properties.Resources, заявив, что он недоступен из-за проблем с разрешениями. В конечном итоге мне пришлось изменить параметры сохраняемости в свойствах ресурса, а затем я нашел способ доступа к нему через файл Resources.Designer.cs, где у него был автоматический метод получения, который позволял мне получать доступ к значку через MyNamespace.Properties.Resources. .NameFromAddingTheResource. Это возвращает объект типа Icon, готовый к использованию.

Quinxy von Besiex
источник
7

Вышеуказанный метод работает хорошо.

Другой метод (я предполагаю, что веб здесь) - создать вашу страницу. Добавить элементы управления на страницу. Затем, находясь в режиме разработки, перейдите: Инструменты> Создать локальный ресурс . Файл ресурсов автоматически появится в решении со всеми элементами управления на странице, отображенными в файле ресурсов.

Чтобы создать ресурсы для других языков, добавьте 4-символьный язык в конец имени файла перед расширением ( Account.aspx.en-US.resx, Account.aspx.es-ES.resx ... и т. Д.).

Для того, чтобы получить определенные записи в коде-позади, просто вызовите этот метод: GetLocalResourceObject([resource entry key/name]).

Чак Конвей
источник