Стандартные меню приложений
Упражнение 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
На этом подготовительная часть по формированию файла ресурсов из конкретных источников с рисунками закончена и можно приступать к использованию этих ресурсов в меню приложения.





