- •1. Цель работы
- •2. Сведения из теории
- •2.1. Интерфейсы коллекций
- •Void CopyTo(Array target, int startIdx)
- •IEnumerator GetEnumerator()
- •Int Compare (object v1, object v2)
- •2.2. Классы коллекций
- •3. Пример выполнения работы
- •3.1. Визуальное проектирование диалогового окна
- •3.2. Проектирование программного кода
- •3.2.1. Разработка класса точки
- •3.2.2. Обработчики событий
- •4. Варианты заданий для самостоятельной работы
3. Пример выполнения работы
Задание: Дан список, содержащий точки с координатами (х, у). Создать новый список, в который попадут точки, лежащие левее оси ординат. Соответственно, в старом списке останутся точки, которые расположены справа от оси ординат. Предусмотреть возможность сортировки нового списка по возрастанию координаты х.
3.1. Визуальное проектирование диалогового окна
Внешний вид работающего приложения с описанием использованных компонентов приведен на рисунке 3.2.
Кнопка
AddButton Кнопка
SolveButton Кнопка
DelButton Кнопка
SortButton Кнопка
CloseButton Счетчик
XnumericUpDown Счетчик
YnumericUpDown Таблица
dataGridView1 Таблица
dataGridView2
Рисунок 2.2. Пример работающего приложения
Для счетчиков XnumericUpDown и YnumericUpDown устанавливаются следующие дополнительные свойства:
Свойство |
Значение |
Описание |
Minimum |
-100 |
Минимальное значение компонента |
Maximum |
100 |
Максимальное значение компонента |
Increment |
0,1 |
Шаг увеличения или уменьшения |
DecimalPlaces |
1 |
Количество знаков после запятой при отображении |
Для таблиц данных dataGridView1 и dataGridView2 устанавливаются следующие дополнительные свойства:
Свойство |
Значение |
Описание |
ColumnHeadersHeight-SizeMode |
AutoSize |
Регулирует высоту заголовков столбцов |
EditMode |
EditProgrammatically |
Режим редактирования данных (здесь – только программно) |
Columns |
редактируется |
Столбцы таблицы |
Для добавления столбцов в таблицу следует нажать кнопку свойстваColumns. Откроется диалоговое окно, где нужно добавлять и устанавливать свойства столбцов таблицы (рис. 2.3).
Рисунок 2.3. Окно редактирования столбцов таблицы
В нашем случае добавляются 2 столбца с именами х и y (свойства Name и HeaderText) и для них отменяется режим автоматической сортировки строк (свойство SortMode устанавливается равным NotSortable).
3.2. Проектирование программного кода
3.2.1. Разработка класса точки
Проектирование кода начинается с разработки класса, представляющего собой структуру точки. Чтобы добавить класс, нужно выбрать пункт меню Project->Add Class…, в появившемся диалоговом окне снова выбрать «Class» и указать имя создаваемого файла (и класса). В нашем случае класс называется «Point».
Так как в задании необходимо реализовать сортировку списка точек по одной из координат, программе (а именно методу Sort) необходимо явно указать, по какому именно признаку (по какой координате) следует производить сравнение точек при сортировке. Для этого нужно, чтобы класс реализовывал интерфейс IComparable.
Созданный класс будет содержать следующие компоненты:
два закрытых поля типа float, задающих координаты точки;
конструктор с двумя параметрами, инициализирующий эти поля;
два открытых свойства для доступа к полям (чтения и установки им значений);
реализацию открытого метода CompareTo, описанного в интерфейсе IComparable и задающего способ сравнения объектов класса. Этот метод возвращает целочисленное значение: положительное, если вызывающий объект больше объекта параметра, отрицательное, если меньше, и ноль, если объекты равны. Именно в этом методе мы указываем, что сравнение точек должно производиться по координате х.
Ниже приведен листинг описания класса Point:
//класс реализует интерфейс IComparable
class Point : IComparable
{
float X; //координаты точки
float Y;
//конструктор класса
public Point(float X, float Y)
{
this.X = X;
this.Y = Y;
}
//свойство для доступа к координате х
public float x
{
get { return X; } //получить х
set { X = value; } //установить х
}
//свойство для доступа к координате y
public float y
{
get { return Y; } //получить y
set { Y = value; } //установить y
}
//установить способ сравнения объектов-точек
public int CompareTo(object obj)
{
//преобразуем параметр obj к типу точки
Point p = (Point)obj;
if (x > p.x) //сравниваем координаты х
return 1; //и возвращаем либо положительное,
if (x == p.x)
return 0; //либо нулевое,
return -1; //либо отрицательное значение
}
}