Стандартные меню приложений
Способ 3. Присоединение рисунка к свойству Image элемента меню через стандартный файл глобальных ресурсов проекта
Присоединим к свойству Image элемента меню itemDelete файл с рисунком Delete.bmp через стандартный файл глобальных ресурсов. Этот файл может хранить в себе множественные ресурсы, которые доступны в любом месте кода программы.
- Откройте файл Form3.cs в режиме View Designer, выделите через раскрывающийся список панели Properties элемент itemDelete, раскройте его свойство Image и для режима Project resource file загрузите в элемент кнопкой Import файл Delete.bmp из прилагаемого к работе каталога Source
Загруженная пиктограмма немедленно появится слева от команды Delete на меню формы
- Откройте в каталоге Properties проекта стандартный файл глобальных ресурсов Resources проекта в режиме View Em и убедитесь, что оболочка поместила относительную ссылку на Delete.bmp в этот файл
<data name="Delete" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\Delete.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data>
- Откройте файл Form3.Designer.cs и в секции #region убедитесь, что оболочка сразу прописала код присоединения рисунка к элементу меню
// // itemDelete // this.itemDelete.Image = global::StripControls.Properties.Resources.Delete;
Никаких дополнительных строк кода для загрузки рисунка указанным способом в дальнейшем не потребуется, оболочка все сделала за нас.
Замечание. Если пытаться немедленно присоединить к элементу файл рисунка через локальный ресурс в использованном нами окне Select Resource, то оболочка выкинет все ранее присоединенные файлы из этого ресурса (В нашем случае Cut и Copy ) и оставит только один непосредственно присоединяемый к элементу управления ресурс.
Способ 4. Размещение рисунка в пользовательском файле глобальных ресурсов
Загрузим рисунок Open.bmp в файл пользовательский глобальных ресурсов MyResources.resx, который нужно создать и добавить к проекту в любое место.
- В панели Solution Explorer вызовите контекстное меню для папки Resources и добавьте в нее командой Add/New Item новый файл глобальных ресурсов с именем MyResources.resx
- В панели Solution Explorer двойным щелчком на файле Resources.resx откройте его в режиме View Designer
- Переведите редактор в режим Images и командой Add Resource/Add Existing File добавьте к проекту файл Open.bmp глубиной цвета 24bitcolor из прилагаемого каталога Source точно также, как мы это делали ранее при загрузке файлов Cut.bmp и Copy.bmp в локальный ресурс Form3.resx
Оболочка физически скопирует файл Open.bmp в каталог Resources проекта и пропишет относительную ссылку на него в пользовательском XML -файле разметки MyResources.resx глобальных ресурсов
<data name="Open" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\Open.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data>
Мы точно так же, как для файла локальных ресурсов, можем отредактировать свойство ресурса и загрузить его физически в глобальный ресурс, изменив свойство Persistence, или оставить его подгружаемым в исполнимую сборку во время компиляции.
Способ 5. Загрузка пиктограммы из файла рисунка во время выполнения
Файл Save.bmp мы будем загружать в элемент itemSaveAs непосредственно во время выполнения программы. Поэтому нужно присоединить его к проекту и настроить свойства так, чтобы оболочка при компиляции копировала этот файл в место размещения исполнимой сборки.
- В панели Solution Explorer вызовите контекстное меню для папки Resources и командой Add/Existing Item добавьте в проект файл Save.bmp ( 24bitcolor ) из прилагаемого каталога Source
- Выделите скопированный файл Save.bmp и через панель Properties установите свойство Copy to Output Directory в значение Copy if newer, чтобы оболочка скопировала файл в каталог размещения исполнимой сборки
Динамическое присоединение пиктограмм к элементам меню
Итак, на предудущих этапах работы мы загрузили все нужные файлы с пиктограммами в файлы ресурсов проекта или просто в каталог Resources проекта. Ресурс файла Delete.bmp мы сразу присоединили к свойству Image элемента меню itemDelete, поэтому дальнейших действий для этого элемента никаких не требуется. Ресурсы остальных пиктограмм пропишем в коде и они будут присоединяться к элементам меню на этапе выполнения программы.
- Откройте файл Form3.cs в режиме View Em и добавьте в класс Form3 следующую функцию с именем LoadImages() для присоединения рисунков к элементам меню
// Загрузка изображений в элементы меню void LoadImages() { // Присоединяем 2 пиктограммы из // файла локальных ресурсов Form3.resx ResourceManager resources = new ResourceManager(typeof(Form3));//или (this.GetType()) itemCopy.Image = (Image)resources.GetObject("Copy"); itemCut.Image = (Image)resources.GetObject("Cut"); // Присоединяем пиктограмму из файла, // помеченного как Embedded Resource itemPaste.Image = new Bitmap(this.GetType(), // или (typeof(Form3) "Resources.Paste.bmp"); /////////////////////////////// // Пиктограмма для Delete внедрена декларативно // через стандартный файл глобальных ресурсов, // поэтому для нее ничего не делаем /////////////////////////////// // Присоединяем пиктограмму из пользовательского // файла глобальных ресурсов MyResources.resx itemOpen.Image = Resources.MyResources.Open; // Присоединяем пиктограмму непосредственно из файла рисунка itemSaveAs.Image = new Bitmap("Resources\\Save.bmp"); }Листинг 28.18. Функция загрузки изображений в элементы меню в классе Form3
- Вставьте в конструктор класса Form3 после вызова метода InitializeComponent() следующий код, выполняющий присоединение
public Form3() { InitializeComponent(); LoadImages();// Присоединяем пиктограммы }Листинг 28.19. Вызов метода LoadImages() в конструкторе класса Form3
- Запустите Упражнение 3 на выполнение и убедитесь в наличии пиктограмм для назначенных элементов меню
Обратите внимание на то, что для меню View заготовлен только узел itemView, а его коллекция DropDownItems пока пуста, поскольку ранее мы договорились наполнить ее программным способом. Вот это сейчас мы и выполним.