Як створити та використовувати ресурси в .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
@Andrei: Саме таким є ресурс. Після додавання він буде вбудований як частина складеного exe.
Меттью Шарлі

1
"... більшість проблем уже минули на цьому етапі" - Надто правдиво ... Дякую за те, що ви зробили це разом! Я знав, що це просто ... врешті-решт.
дорогиневідомі

1
Як бічна примітка, файли ресурсів блокуються під час компіляції. Отже, динамічна зміна їх під час виконання мало що може змінити існуючі значення. Використовуйте конфігураційні файли, якщо ви хочете змінити значення під час виконання. У випадку, якщо це допоможе комусь.
Пурусарта

1
У VB.NET доступ до ресурсів здійснюється, наприклад, "My.Resources.GreenIcon"
andy

9

Вищезазначене насправді не працювало для мене, як я очікував із Visual Studio 2010. Це не дозволило мені отримати доступ до Properties.Resources, сказав, що це було недоступно через проблеми з дозволом. Зрештою, мені довелося змінити параметри персистентності у властивостях ресурсу, і тоді я дізнався, як отримати доступ до нього через файл Resources.Designer.cs, де у нього був автоматичний геттер, який дозволив мені отримати доступ до значка, через MyNamespace.Properties.Resources .NameFromAddingTheResource. Це повертає об’єкт типу Icon, готовий до простого використання.


7

Вищеописаний метод працює добре.

Інший метод (я припускаю, що Інтернет тут) - це створити свою сторінку. Додайте елементи керування на сторінку. Потім перебуваючи в режимі дизайну, перейдіть до: Інструменти> Створити локальний ресурс . Файл ресурсу автоматично з’явиться у рішенні з усіма елементами управління на сторінці, відображеній у файлі ресурсу.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.