Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 889 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 28:

Стандартные меню приложений

Упражнение 4. Использование списка изображений для хранения пиктограмм меню

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

Таким образом, план действий будет таким:

  1. Написать утилиту, создающую и наполняющую файл двоичными ресурсами изображений и текстовым ресурсом заголовка окна
  2. Создать метод, извлекающий элементы ресурсов в список изображений
  3. Создать окно с заготовкой меню и присоединить к его элементам пиктограммы из списка изображений

Создание файла ресурсов программным способом

В пространстве имен 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

На этом подготовительная часть по формированию файла ресурсов из конкретных источников с рисунками закончена и можно приступать к использованию этих ресурсов в меню приложения.