Стандартные меню приложений
Упражнение 4. Использование списка изображений для хранения пиктограмм меню
В этом упражнении мы создадим заготовку меню с пиктограммами, которые будем присоединять к элементам меню из списка изображений. Сам список с изображениями можно заполнять из хранилища ресурсов, которое находится внутри файла исполнимой сборки нашего приложения. В свою очередь, хранилище ресурсов сборки заполняется при компиляции сборки из указанного XML -файла, который нужно сформировать заранее и поместить в него ссылки на необходимые текстовые или двоичные ресурсы. XML - или двоичный файл можно создать декларативно (вручную) или программно, написав соответствующую консольную утилиту.
Таким образом, план действий будет таким:
- Написать утилиту, создающую и наполняющую файл двоичными ресурсами изображений и текстовым ресурсом заголовка окна
- Создать метод, извлекающий элементы ресурсов в список изображений
- Создать окно с заготовкой меню и присоединить к его элементам пиктограммы из списка изображений
Создание файла ресурсов программным способом
В пространстве имен System.Resources двух библиотечных сборок mscorlib.dll и System.Windows.Forms.dll находятся все необходимые типы, которые обеспечивают программную работу с ресурсами. Необходимые для работы приложения ресурсы находятся в готовой исполнимой сборке в специальной секции, называемой хранилищем ресурсов, или отдельно в двоичном файле. В хранилище ресурсов они попадают при компиляции приложения из предварительно подготовленного файла ресурсов. На рисунке приведены варианты формирования хранилища ресурсов сборки
Разработаем утилиту, которая будет создавать файл ресурсов и наполнять его нужными объектами. Для разнообразия в файле ресурсов сохраним и строковую информацию заголовка окна с заготовкой меню.
- Добавьте к текущему решению командой File/Add/New Project еще один проект с именем UtilityResource типа консольного приложения
- Добавьте к проекту UtilityResource ссылки на сборки System.Windows.Forms и System.Drawing. Для этого выделите в панели Solution Explorer узел UtilityResource и выполните команду Project/Add Reference
- В панели Solution Explorer скопируйте файлы Cut.bmp, Copy.bmp, Paste.bmp, Delete.bmp, Open.bmp, Save.bmp из узла Resources проекта StripControls в корневой узел проекта UtilityResource (или добавьте напрямую из прилагаемой папки Source, как показано ниже для иконки приложения)
- В панели Solution Explorer вызовите контекстное меню для корневого узла UtilityResource и выполните команду Add/Existing Item. В прилагаемом каталоге Source выберите иконку, например 1.ico, и добавьте ее в проект UtilityResource
- Выделите все добавленные к проекту UtilityResource файлы изображений и в панели Properties определите для них опции Copy to Output Directory=Copy always, Build Action=None, чтобы при исполнении проекта оболочка копировала их в каталог размещения сборки
- Откройте на редактирование файл Program.cs проекта UtilityResource и заполните его следующим кодом создания бинарного файла ресурсов
using System; namespace UtilityResource { using System.Resources; using System.Drawing; class Program { static void Main(string[] args) { // Создаем объект для записи в двоичный файл ресурсов ResourceWriter rw = new ResourceWriter("ResXForm4.resources"); // Добавляем в файл описание ресурсов 'Ключ-Значение' (Key-Value) // Ресурсы должны находиться в одном каталоге с утилитой!!! rw.AddResource("Cut", new Bitmap("Cut.bmp")); rw.AddResource("Copy", new Bitmap("Copy.bmp")); rw.AddResource("Paste", new Bitmap("Paste.bmp")); rw.AddResource("Delete", new Bitmap("Delete.bmp")); rw.AddResource("Open", new Bitmap("Open.bmp")); rw.AddResource("Save", new Bitmap("Save.bmp")); rw.AddResource("strTitle", "Список изображений"); rw.AddResource("icoTitle", new Icon("1.ico")); // Сохраняем файл с добавленными ресурсами и закрываем его rw.Generate(); rw.Close(); } } }Листинг 28.34. Код создания файла ресурсов проекта UtilityResource
- В панели Solution Explorer вызовите контекстное меню для узла UtilityResource и выполните команду Set as StartUp Project, чтобы сделать проект стартовым (либо просто щелкните левой кнопкой мыши на узле UtilityResource ). Корневой узел стартового проекта выделяется в панели Solution Explorer жирным шрифтом и должен быть в решении только один
- Выполните проект UtilityResource, чтобы создать файл ресурсов с именем ResXForm4.resources программным способом
- В панели Solution Explorer вызовите контекстное меню для узла проекта UtilityResource и исключите его из решения командой Remove
- В панели Solution Explorer вызовите контекстное меню для корневого узла проекта StripControls и командой Add/Existing Item добавьте созданный ранее файл ресурсов ResXForm4.resources из каталога UtilityResource/bin/Debug отсоединенного проекта (при поиске файла не забудьте настроить фильтр диалогового окна на отображение всех файлов)
- Настройте через панель Properties добавленный к проекту StripControls файл ресурсов ResXForm4.resources так, чтобы он стал копируемым при компиляции проекта в каталог размещения сборки, т.е. установите опции Copy to Output Directory=Copy always, Build Action=None
На этом подготовительная часть по формированию файла ресурсов из конкретных источников с рисунками закончена и можно приступать к использованию этих ресурсов в меню приложения.