Порядок выполнения лабораторной работы. В данном разделе будет представлена последовательность действий для создания небольшого приложения для хранения списка студентов в коллекции 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 - Схема получения и использования сборки