
- •Создание простых форм с помощью комплекса инструментальных средств разработки программ .Net sdk
- •Режимы дизайна и кода
- •Элементы управления
- •Общие свойства, события и методы элементов управления
- •Обработка событий в Windows Forms
- •События MouseDown и Keypress
- •Форматирование элементов управления
- •Создание меню
- •Закрытие формы
- •Диалоговые окна
- •Создание панели инструментов
- •Список элементов ListBox
- •Потоковые классы
- •Встроенные типы данных и потоки
- •Класс File
- •Сериализация объектов
- •Создание многооконного приложения
- •Для каждого пункта меню пишем обработчики событий, выполняющие соответсвтвующие пункту действия. Перечисление MdiLayout
- •Вырезание, копирование и вставка текстовых фрагментов
- •Контекстное меню
- •Диалоговые окна
- •Сохранение файла при закрытии формы
- •OpenFileDialog и SaveFileDialog для sdi-приложений
- •Int m, n, p; //размеры матриц
Создание панели инструментов
Кнопки панели инструментов обеспечивают пользователям более легкий доступ к возможностям, которые определены в меню. В пространстве имен System.Windows.Forms предусмотрены типы, которые облегчают работу с панелями инструментов. Первый класс, который используется для создания панелей инструментов, — это класс ToolStrip.
Для добавления объекта панель инструментов:
Перетащить объект ToolStrip с панели Toolbox.
Растянуть на форме, расположив в нужной части окна.
По умолчанию будет сформировано метка на панели для выбора типа объектов панели инструментов.
Выберите объект Button. Появится заготовка для кнопки с изображением, чтобы добавить новое изображение на кнопку, щелкнуть по созданной кнопке правой клавишей мыши и выбрать Set Image. В появившемся окне нажать кнопку Import. В диалоговом окне выбрать путь к рисунку для загрузки в качестве изображения кнопки.
Таблица 3.8 - Свойства класса ToolStrip
Свойство |
Назначение |
BorderStyle |
Определяет стиль рамки вокруг панели инструментов. Используются значения из перечисления BorderStyle |
Buttons |
Для работы с набором кнопок на панели инструментов |
ButtonSize |
Определяет размер кнопок на панели инструментов |
ImageList |
Возвращает элемент управления ImageList, в котором хранятся изображения, используемые на панели инструментов |
Для добавления обработчика события ButtonClick для кнопок объекта toolStrip1, необходимо:
щелкнуть два раза указателем мыши по кнопке;
в открывшемся окне просмотра кода ввести необходимый программный код.
Список элементов ListBox
Добавьте в проект новый класс, описывающий объект гостиница.
class Hotel {
public Hotel(String city, String name, int r, double m) {
City = city; HotelName = name;
Rooms = r; Rate = m;
}
public String City, HotelName;
public int Rooms;
public double Rate;
}
При запуске программы AdminForm в процессе инициализации метод Form1_Load осуществляет начальную загрузку списка элементов hotellist, — в него загружается список гостиниц.
public partial class Form1 : Form {
System.Collections.ArrayList list = new System.Collections.ArrayList(); // список гостиниц
public Form1() {
InitializeComponent();
}
…
private void Form1_Load(object sender, EventArgs e) {
Hotel ob1=new Hotel("Москва","Россия",200,1500);
list.Add(ob1);
Hotel ob2=new Hotel("Москва","Прага",200,3000);
list.Add(ob2);
Hotel ob3=new Hotel("Новосибирск","Объ",150,1500);
list.Add(ob3);
Hotel ob4=new Hotel("Новосибирск","Тратата",300,1200);
list.Add(ob4);
Hotel ob5=new Hotel("Москва","Измайловская",300,3500);
list.Add(ob5);
Hotel ob6=new Hotel("Тирасполь","Дружба",200,1000);
list.Add(ob6);
hotellist.Items.Clear();
if (list == null) { return; }
foreach(Hotel hotel in list) { // строка для записи в элемент ListBox hotellist
String city = hotel.City.Trim();
String name = hotel.HotelName.Trim();
String rooms = hotel.Rooms.ToString(); // гостиница
String rate = hotel.Rate.ToString();
String str = city + "," + name + "," + rooms + "," + rate;
hotellist.Items.Add(str); // Добавить элементы
}
}
}
Метод Form1_Load отображает в списке элементов hotellist список объектов, в которых хранится информация о гостиницах.
Управляющий элемент ListBox содержит свойство Items (Элементы), которое поддерживает коллекцию объектных ссылок. Сначала мы вызываем метод Items.Clear(), чтобы очистить список элементов от тех элементов, которые отображаются в нем в момент вызова метода. Потом с помощью цикла перебираем гостиницы в списке массивов и создаем строку, которая состоит из полей структуры гостиницы, разделенных запятыми. Чтобы добавить эту строку в список элементов, вызывается метод Items .Add().
Чтобы в списке элементов выбрать какой-нибудь элемент, нужно щелкнуть на нем. Выбор элемента вызовет событие SelectedIndexChanged. Доступ к выбранному элементу можно получить с помощью свойств SelectedIndex и SelectedItem. Если никакой элемент не выбран, значение SelectedItem будет равно -1. Ниже приведен код обработчика события SelectedIndexChanged.
private void hotellist_SelectedIndexChanged(object sender, EventArgs e) {
if (hotellist.SelectedIndex != -1) {
String selected = hotellist.SelectedItem.ToString(); // выбранная строка
String[] fields;
fields = selected.Split(','); // поля = выбранное разбить;
label1.Text = fields[0]; // Город = полe [0]; и т.д.
label2.Text = fields[1];
label3.Text = fields[2];
label4.Text = fields[3];
}
else {
label1.Text = "";
}
}
Поскольку в списке элементов элементы хранятся в виде объектных ссылок, мы выполняем приведение типа выбранного элемента к типу String. Для того чтобы выделить значения полей, разделенные запятыми, используется метод String.Split, затем значения сохраняются в массиве строк fields. Из массива эти значения переносятся в элементы label на форме для отображения.
Добавление объектов, вводимых на дополнительной форме AddHotelDialog, в коллекцию и элемент hotellist осуществляется в следующем коде:
private void button1_Click(object sender, EventArgs e) {
AddHotelDialog dlg = new AddHotelDialog();
dlg.ShowDialog();
if (dlg.HotelName != "") {
label1.Text = dlg.HotelName;
label2.Text=dlg.City;
label3.Text=dlg.Rooms.ToString();
label4.Text=dlg.Rate.ToString();
String s=dlg.City+"," +dlg.HotelName+"," +dlg.Rooms.ToString()+"," +dlg.Rate.ToString();
hotellist.Items.Add(s);
Hotel ob=new Hotel(dlg.City,dlg.HotelName,dlg.Rooms,dlg.Rate);
list.Add(ob);
}
else {
MessageBox.Show("Введите данные", "Hotel Broker Administration",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation) ;
return;
}
}
Задания к лабораторной работе
Создать учебные приложения Программа2 – Программа 5 и разобрать принцип их работы. Поместите в отчет примеры работы программ, их код с комментариями.
Создать SDI-приложение с элементами ввода и отображения полей класса индивидуального задания (в конце файла методических указаний). Для этого использовать различные элементы управления: текстовые поля, списки, независимые и радио- кнопки, а также панели и менеджеры компоновки.
Ввод новых данных осуществлять через дополнительную модальную форму.
При изменении данных запрашивать подтверждение через окно диалога. В случае неполных данных сообщать об ошибке.
Объекты сохранять в коллекции.
Реализовать просмотр всей коллекции объектов через список. Для редактирования выбранного объекта создать дополнительную форму модального диалога.
Добавить на форму меню, позволяющее работать с пунктами: добавить, просмотреть, удалить, редактировать, справка.
Дублировать основные операции панелью инструментов.
Занятие 2
Тема: Создание MDI-приложений. Сериализация объектов.
Использование стандартных диалогов для сохранения и
загрузки данных программы
Цель работы:
Изучить особенности MDI приложений и способы их создания в Visual Studio .Net.
Сохранение данных в файл и загрузки из файла.
Освоить механизм сериализации и десериализации объектов.
Освоить применение стандартных диалогов сохранения и загрузки данных в приложение.
Теоретические сведения
Операции ввода/вывода данных в .NЕТ
Данные могут рассматриваться как поток байтов, символов или объектов. Чтение и запись объектов называются соответственно преобразованием из последовательной формы в параллельную и преобразованием в последовательную форму (сериализацией). Сериализация объектов может осуществляться в двух форматах: бинарном и XML-формате.
В пространстве имен System.IO есть несколько классов для чтения и записи, позволяющих использовать различные устройства хранения, если только данные можно трактовать как байты или символы.
Пространство имен System.Runtime.Serialization используется для сериализации в общей системе типов (Common Type System). Пространство имен System.Xml.Serialization используется для сериализации XML-документов.