Каркас.NET Framework предоставляет технологию сериализации. Сериализация преобразовывает объекты, такие как классы, структуры и массивы в поток байтов. При преобразовании из последовательной формы в параллельную поток байтов преобразовывается обратно в объекты.
Чтобы информировать каркас, что класс может быть преобразован в последовательную форму, нужно пометить класс атрибутом [Serializable]. Любое поле или свойство, которые не должны быть преобразованы в последовательную форму, могут быть отмечены атрибутом [ NonSerialized ].
[Serializable] // Пример сериализации объекта класса Personage
public class Personage{
public Personage(string name, int age) {
this.name = name; this.age = age;
}
//поля класса
static int wishes;
public string name, status, wealth;
int age;
public Personage couple;
//методы класса
void SaveState(){ //сериализация в бинарном формате
BinaryFormatter bf = new BinaryFormatter();
FileStream fs = new FileStream ("State.bin",FileMode.Create, FileAccess.Write);
bf.Serialize(fs,this);
fs.Close();
}
void BackState(ref Personage fisher){ //десериализация в бинарном формате
BinaryFormatter bf = new BinaryFormatter();
FileStream fs = new FileStream ("State.bin",FileMode.Open, FileAccess.Read);
|
|
fisher = (Personage)bf.Deserialize(fs);
fs.Close();
}
}
Создание многооконного приложения
Разберем создание MDI приложений на примере разработки программы «Блокнот».
1. Создайте новое приложение (программа 5) и назовите его NotepadC#. Установите следующие свойства формы:
Form1, форма, Свойство | Значение |
Name | Frmmain |
Icon | Путь C:\Program Files\Microsoft Visual Studio 9\Common7\VS2008ImageLibrary.... |
Text | NotepadC# |
WindowState | Maximized |
2. Создайте меню приложения. Для этого перетащите элемент управления menuStrip, расположенный на панели инструментов ToolBox, на форму и заполните строки меню следующими пунктами (рис. 4.1).
Для этого вызовите контекстное меню, установив курсор мыши на компоненте menuStrip1, расположенной на панели невидимых компонент, и выберите пункт Edit Items. Каждый пункт главного меню имеет свое окно свойств, в котором, подобно другим элементам управления, задаются значения свойств Name и Text (рис. 4.2). В поле Text перед словом New стоит знак & — так называемый амперсанд, указывающий, что N должно быть подчеркнута и будет частью встроенного клавиатурного интерфейса Windows. Когда пользователь на клавиатуре нажимает клавишу Alt и затем N, выводится подменю New.
Рисунок 4.1 - Пункты главного меню приложения NotepadC#
Рисунок 4.2 - Свойства пункта меню New
В Windows есть еще интерфейс для работы с так называемыми быстрыми клавишами, или акселераторами. Сочетание клавиш указывают из перечисления Shortcut. Следует назначать стандартным пунктам общепринятые сочетания клавиш. Горизонтальная разделительная линия используется в тех случаях, когда надо визуально отделить сходные группы задач; для ее появления в свойстве Text пункта меню просто вводим знак тире. Для использования пунктов меню в коде, им также назначают имена (свойство Name), которые особенно важны, т.к. пунктов меню обычно бывает много. Свойства пунктов меню в приложении NotepadC# приводятся в таблице 4.1.
|
|
Таблица 4.1. Пункты главного меню приложения NotepadC#
Name | Text | Shortcut |
mnuFile | &File | |
mnuNew | &New | CtrlN |
mnuOpen | &Open | CtrlO |
mnuSave | &Save | CtrlS |
menuItem5 | - | |
mnuExit | &Exit | AltF4 |
mnuEdit | &Edit | |
mnuCut | Cu&t | CtrlX |
mnuCopy | &Copy | CtrlC |
mnuPaste | &Paste | CtrlV |
mnuDelete | &Delete | Del |
mnuSelectAll | &SelectAll | CtrlA |
mnuFormat | F&ormat | |
mnuFont | Font… | |
mnuColor | Color… | |
mnuWindow | &Window | |
mnuArrangeIcons | Arrange Icons | |
mnuCascade | Cascade | |
mnuTileHorizontal | Tile Horizontal | |
mnuTileVertical | Tile Vertical | |
mnuHelp | ? | |
mnuAbout | About Programm... |
3. В MDI-приложениях главная форма содержит в себе несколько документов, каждый из которых является холстом в графических программах или полем для текста в редакторах. В окне Solution Explorer щелкаем правой кнопкой на имени проекта и в появившемся контекстном меню выбираем Add/ New Item/ Windows Form. В появившемся окне называем форму – blank.h. В нашем проекте появилась новая форма — будем называть ее дочерней. В режиме дизайна перетаскиваем на нее элемент управления RichTextBox: в отличие от элемента textBox, размер содержимого текста в нем не ограничивается 64 Кб; кроме того, RichTextBox позволяет редактировать цвет текста, добавлять изображения. Свойству Dock этого элемента устанавливаем значение Fill.
Переходим в режим дизайна формы frmmain и устанавливаем свойству IsMdiContainer значение true. Цвет формы при этом становится темно-серым. Новые документы будут у нас появляться при нажатии пункта меню New, поэтому дважды щелкаем в этом пункте и переходим в код.
При создании нескольких документов, например в Microsoft Word, они называются ДокументN, где N — номер документа. Переключаемся в код формы blank, и в классе blank объявляем переменную public String DocName;
Переключаемся в код формы frmmain и в классе frmmain объявляем переменную private int openDoc;
Присваиваем переменной DocName часть названия по шаблону, в который включен счетчик числа открываемых документов, затем это значение передаем свойству Text создаваемой формы frm:
private void mnunew_Click(object sender, EventArgs e) {
frm = new blank();
frm.DocName = "Untitled " + ++openDoc;
frm.Text = frm.DocName;
frm.MdiParent = this;
frm.Show();
}