Порядок выполнения лабораторной работы. В данном разделе будет представлена последовательность действий для создания небольшого приложения для хранения списка студентов в коллекции List.
В данном разделе будет представлена последовательность действий для создания небольшого приложения для хранения списка студентов в коллекции List.
1. Откройте MS Visual Studio 2008 или более позднюю версию.
2. Создайте новое приложение Windows Forms.
Рисунок 1.1 – Окно создания проекта
Появится конструктор формы, изображенный на рисунке 1.2
Рисунок 1.2 – Конструктор формы
3. Выделите форму и в свойствах попробуйте изменить ее название и цвет (название – свойство Text, цвет - BackColor).
4. Установите на форму панель SplitContainer c раздела «Контейнеры». Это обеспечить разделение формы на 2 части. Одна из частей будет использоваться для ввода данных, а другая для их отображения. Результат будет выглядеть примерно как на рисунке 1.3.
Рисунок 1.3 – Внешний вид формы после размещения компонента SplitContainer
5. Разместите в областях Panel1 и Panel2 два компонента Panel c раздела «Контейнеры», и установите у панелей свойство Dock в значение Fill. Левая часть формы будет использоваться для отображения данных, а правая – для ввода данных. Для отображения списка студентов будет использован компонент DataGridView с раздела «Данные».
6. Разместите в левой области формы компонент DataGridView и установите у него свойство Dock в значение Fill. С правой стороны разместите несколько элементов ввода, например TextBox и кнопку Button. Дайте название кнопке «Добавить». Элементы ввода можно озаглавливать компонентом Label. Окончательный внешний вид интерфейса представлен на рисунке 1.4.
Рисунок 1.4 – Окончательный внешний вид интерфейса программы
7. Поскольку наша программа будет работать со списком студентов, то необходимо разработать класс студента. Создайте класс Student (выберите в контекстном меню проекта Добавить => Создать элемент, и выберете параметры как показано на рисунке 1.5).
Рисунок 1.5 – Окно создания нового класса
Примерный текст класса студента приведен ниже:
namespace lab1
{
class Student
{
private string name;
private string surname;
private string recordBookNumber;
public Student(string name, string surname, string recordBookNumber)
{
this.name = name;
this.surname = surname;
this.recordBookNumber = recordBookNumber;
}
public string getName()
{
return this.name;
}
public string getSurname()
{
return this.surname;
}
public string getRecordBookNumber()
{
return this.recordBookNumber;
}
public void setName(string name)
{
this.name = name;
}
public void setSurname(string surname)
{
this.surname = surname;
}
public void setRecordBookNumber(string recordBookNumber)
{
this.recordBookNumber = recordBookNumber;
}
}
}
8. Установите на форму компонент ContextMenuStip (контекстное меню), добавте у него одно поле «Удалить» и в свойстве ContextMenuStip компонента DataGridView выберите contextMenuStip1. Таким образом у компонента DataGridView появится собственное контекстное меню.
9. Настройте свойства компонента DataGridView следующим образом: ReadOnly – True, MultiSelect – False, RowHeadersVisible – False, SelectionMode – FullRowSelect.
10. Компонент DataGridView состоит из колонок DataGridViewColumn и строк DataGridViewRow. Для того, чтобы добавлять в DataGridView строки необходимо, чтобы в ней уже были колонки. Поэтому при инициализации формы необходимо добавить в DataGridView необходимое количество колонок. Поскольку студент содержит три поля, то и колонок в таблице тоже должно быть три.
Откройте форму в режиме кода (нажмите на Form1.cs в обозревателе решений и вызовите контекстное меню, выберете пункт «Открыть с помощью…», в появившемся диалоговом окне выберете «Редактор CSharp»).
Добавьте перед конструктором три поля – ссылки на колонки таблицы:
//Колонки таблицы
private DataGridViewColumn dataGridViewColumn1 = null;
private DataGridViewColumn dataGridViewColumn2 = null;
private DataGridViewColumn dataGridViewColumn3 = null;
Добавьте четыре метода приведенные ниже:
//Инициализация таблицы
private void initDataGridView()
{
dataGridView1.DataSource = null;
dataGridView1.Columns.Add(getDataGridViewColumn1());
dataGridView1.Columns.Add(getDataGridViewColumn2());
dataGridView1.Columns.Add(getDataGridViewColumn3());
dataGridView1.AutoResizeColumns();
}
//Динамическое создание первой колонки в таблице
private DataGridViewColumn getDataGridViewColumn1()
{
if (dataGridViewColumn1 == null)
{
dataGridViewColumn1 = new DataGridViewTextBoxColumn();
dataGridViewColumn1.Name = "";
dataGridViewColumn1.HeaderText = "Имя";
dataGridViewColumn1.ValueType = typeof(string);
dataGridViewColumn1.Width = dataGridView1.Width / 3;
}
return dataGridViewColumn1;
}
//Динамическое создание второй колонки в таблице
private DataGridViewColumn getDataGridViewColumn2()
{
if (dataGridViewColumn2 == null)
{
dataGridViewColumn2 = new DataGridViewTextBoxColumn();
dataGridViewColumn2.Name = "";
dataGridViewColumn2.HeaderText = "Фамилия";
dataGridViewColumn2.ValueType = typeof(string);
dataGridViewColumn2.Width = dataGridView1.Width / 3;
}
return dataGridViewColumn2;
}
//Динамическое создание третей колонки в таблице
private DataGridViewColumn getDataGridViewColumn3()
{
if (dataGridViewColumn3 == null)
{
dataGridViewColumn3 = new DataGridViewTextBoxColumn();
dataGridViewColumn3.Name = "";
dataGridViewColumn3.HeaderText = "Зачетка";
dataGridViewColumn3.ValueType = typeof(string);
dataGridViewColumn3.Width = dataGridView1.Width / 3;
}
return dataGridViewColumn3;
}
Первый метод добавляет в dataGridView1 три колонки, а последние три создают эти колонки.
Добавте в конструктор вызов метода initDataGridView:
public Form1()
{
InitializeComponent();
initDataGridView();
}
11. Добавьте перед конструктором поле – ссылку на коллекцию, в которой будут храниться записи о студентах:
//Колекция List
private IList<Student> studentList = new List<Student>();
12. Добавьте методы для добавления и удаления студентов в коллекцию и из коллекции и для отображения коллекции в DataGridView:
//Добавление студента в колекцию
private void addStudent(string name, string surname, string
recordBookNumber)
{
Student s = new Student(name, surname, recordBookNumber);
studentList.Add(s);
textBox1.Text = "";
textBox2.Text = "";
textBox2.Text = "";
showListInGrid();
}
//Удаление студента с колекции
private void deleteStudent(int elementIndex)
{
studentList.RemoveAt(elementIndex);
showListInGrid();
}
//Отображение колекции в таблице
private void showListInGrid()
{
dataGridView1.Rows.Clear();
foreach (Student s in studentList)
{
DataGridViewRow row = new DataGridViewRow();
DataGridViewTextBoxCell cell1 = new
DataGridViewTextBoxCell();
DataGridViewTextBoxCell cell2 = new
DataGridViewTextBoxCell();
DataGridViewTextBoxCell cell3 = new
DataGridViewTextBoxCell();
cell1.ValueType = typeof(string);
cell1.Value = s.getName();
cell2.ValueType = typeof(string);
cell2.Value = s.getSurname();
cell3.ValueType = typeof(string);
cell3.Value = s.getRecordBookNumber();
row.Cells.Add(cell1);
row.Cells.Add(cell2);
row.Cells.Add(cell3);
dataGridView1.Rows.Add(row);
}
}
13. Добавте обработчики собыйтий на кнопку добавления студента и на кнопку меню удаления студента:
//Обработчик нажатия на кнопку добавления
private void button1_Click(object sender, EventArgs e)
{
addStudent(textBox1.Text, textBox2.Text, textBox3.Text);
}
//Обработчик нажатия на удалить
private void удалитьToolStripMenuItem_Click(object sender,
EventArgs e)
{
int selectedRow = dataGridView1.SelectedCells[0].RowIndex;
DialogResult dr = MessageBox.Show("Удалить студента?", "",
MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
try
{
deleteStudent(selectedRow);
}
catch (Exception)
{
}
}
}
Окончательный вариант приложения представлен на рисунке 1.6.
Рисунок 1.6 – Окончательный вариант приложения
Задание на лабораторную работу
Изменить приложение, описанное в порядке выполнения лабораторной работы в соответствии с вариантом задания.
Приложение должно обеспечивать добавление элементов в коллекцию, удаление элементов из коллекции и отображение элементов коллекции. Варианты заданий, с которых необходимо выбрать объект предметной области и коллекцию, приведены в таблице 1.2. Для объекта предметной области необходимо придумать не менее 5-ти разнотипных полей содержащих информацию. Номер варианта необходимо выбирать по последней цифре зачетной книжки.
Следует обратить внимание на разработку интерфейса приложения. Интерфейс не должен быть переполнен элементами управления, но в тоже время должен предоставлять наибольшую функциональность.
Таблица 1.2 – Варианты заданий
Последняя цифра зачетки | Объект предметной области | Коллекция |
Книга | HashSet<T> | |
Гражданин государства | LinkedList<T> | |
Автомобиль | Dictionary<TKey, TValue> | |
Студент | Queue<T> | |
Компьютер | SortedDictionary<TKey, TValue> | |
Костюм | SortedList<TKey, TValue> | |
Измерительный прибор | SortedSet<T> | |
Дом | Stack<T> | |
Мобильный телефон | HashSet<T> | |
Мебель | LinkedList<T> |
Содержание отчета
- фамилия и имя исполнителя лабораторной работы;
- номер и название лабораторной работы;
- цель лабораторной работы;
- краткие теоретические сведенья на одну страницу;
- ход работы (листинги программ, скриншоты программ);
- выводы о проделанной работе.
Контрольные вопросы
1. Что такое платформа?
2. Из каких частей состоит платформа .NET?
3. Что такое коллекция?
4. Какие коллекции вы знаете?
5. Какие обобщенные коллекции вы знаете?
2 Лабораторная работа № 2
Рефлексия
Цель работы
Изучить возможности рефлексии в C#, получить практические навыки по работе с рефлексией в С#.
Теоретические сведенья
Понятие сборки
Сборка (assembly) - базовый строительный блок приложения в .NET Framework и представляет собой двоичный файл, который содержит логическую группу из одного или нескольких управляемых модулей или файлов ресурсов, таких как растровые изображения и строки. Сборка содержит в себе:
- номер версии;
- метаданные;
- инструкции IL.
Когда компилятор платформы .NET создает .exe или .dll модуль, содержимое этого модуля является сборкой. Таким образом, сборка может быть либо исполняемым приложением (при этом она размещается в файле с расширением .exe), либо библиотечным модулем (в файле с расширением .dll). При этом ничего общего с исполняемыми приложениями и библиотечными модулями старого образца сборка не имеет.
Сборка - это полностью самодостаточный и, скорее, логический, нежели физический элемент. Это значит, что он может быть сохранен в более чем одном файле (хотя динамические сборки хранятся в памяти, а вовсе не в файлах). Если сборка хранится в более чем одном файле, то должны быть один главный файл, содержащий точку входа и описывающий остальные файлы.
Следует отметить, что одна и та же структура сборки используется как для исполняемого кода, так и для кода библиотек. Единственное реальное отличие исполняемой сборки заключается в том, что она содержит главную точку входа программ, тогда как библиотечная сборка - нет.
Управляемые модули в составе сборок исполняются в среде времени выполнения CLR.
Схема получения и использования сборки показана на рисунке 2.1.
Рисунок 2.1 - Схема получения и использования сборки