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




