Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_2_Tekhnologia_programmirovania.docx
Скачиваний:
43
Добавлен:
20.03.2016
Размер:
131.42 Кб
Скачать

3.2.2. Обработчики событий

Прежде всего для работы с коллекциями в начале файла главной формы нужно подключить пространство имен System.Collections:

using System.Collections;

Далее необходимо в классе формы объявить два динамических массива: исходный массив точек points и массив-результат res. Обоим массивам следует выделить память либо в конструкторе класса, либо в обработчике события Load:

ArrayList points, res; //объявление динамических массивов

private void MainForm_Load(object sender, EventArgs e)

{

points = new ArrayList(); //выделение памяти

res = new ArrayList();

}

При нажатии кнопки «Добавить» необходимо взять текущие значения компонентов-счетчиков, создать объект класса точки с этими значениями в качестве координат, добавить этот объект в коллекцию и отобразить координаты новой точки в таблице на экране:

private void AddButton_Click(object sender, EventArgs e)

{

//берем значения из компонентов-счетчиков

float x = (float)XnumericUpDown.Value;

float y = (float)YnumericUpDown.Value;

//создаем новую точку

Point p = new Point(x,y);

//добавляем ее в коллекцию

points.Add(p);

//добавляем в таблицу на форме

dataGridView1.Rows.Add(p.x,p.y);

}

При удалении точки из списка следует сначала проверить, выбрана ли строка таблицы для удаления. Реализуется это стандартными средствами обработки исключений (операторы trycatch). Если точка выбрана, то надо получить номер соответствующей строки из таблицы, удалить точку с этим номером из коллекции и из таблицы на форме:

private void DelButton_Click(object sender, EventArgs e)

{

try

{

//получаем номер выбранной строки

int num = dataGridView1.SelectedRows[0].Index;

//удаляем точку с данным номером из коллекции

points.RemoveAt(num);

//удаляем выбранную строку из таблицы

dataGridView1.Rows.Remove(dataGridView1.SelectedRows[0]);

}

catch

{

MessageBox.Show("Выберите строку!!!");

}

}

При нажатии на кнопку «Решить задачу» должны выполняться следующие действия. Прежде всего, необходимо очистить массив-коллекцию результатов res, а также обе таблицы на форме, т.к. данные в них будут обновляться. Далее, путем использования методов Add и Remove классов коллекций добавляем и удаляем элементы массивов в соответствии с условиями задачи и отображаем эти массивы в таблицах на форме:

private void SolveButton_Click(object sender, EventArgs e)

{

//очистить коллекцию res

res.Clear();

//очистить содержимое таблиц на форме

dataGridView1.Rows.Clear();

dataGridView2.Rows.Clear();

//просматриваем исходный массив

foreach (Point p in points)

if (p.x < 0) //при выполнении условия

res.Add(p); //добавляем точку в массив-результат

foreach (Point p in res)

{

//удаляем найденные точки из исходного массива

points.Remove(p);

//отображаем 2-й массив в таблице на форме

dataGridView2.Rows.Add(p.x, p.y);

}

foreach (Point p in points)

//отображаем 1-й массив в таблице на форме

dataGridView1.Rows.Add(p.x, p.y);

}

Метод-обработчик кнопки «Отсортировать» достаточно простой. Реализация классом Point интерфейса IComparable позволяет применять к коллекции из объектов этого класса метод Sort(), после чего нужно только обновить содержимое отсортированного массива в таблице на форме:

private void Sortbutton_Click(object sender, EventArgs e)

{

//сортируем

res.Sort();

//очищаем содержимое таблицы на форме

dataGridView2.Rows.Clear();

foreach (Point p in res)

//обновляем таблицу на форме

dataGridView2.Rows.Add(p.x, p.y);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]