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

Обработка события ColumnClick

6. Чтобы определить набор подэлементов для сортировки, необходимо знать, когда пользователь щелкает по заголовку столбца для подэлемента. Для этого требуется создать метод обработки события ColumnClick элемента управления ListView. Поместите метод обработки события как член формы

7. Соедините метод обработки события с элементом управления ListView, добавив код к конструктору формы

8. Добавьте следующий код к методу обработки события ColumnClick

Код, добавленный к методу обработки события, устанавливает свойство ListViewItemSorter элемента управления ListView с помощью нового экземпляра класса ListViewItemComparer (который будет определен далее) и присваивает столбец, выбираемый в данных момент щелчком мыши. Выбираемый щелчком мыши столбец передается как часть параметров события. После установки свойства ListViewItemSorter вызывается метод Sort, выполняющий ручную сортировку.

Создание класса ListViewItemComparer

Ключом к пользовательской сортировке в элементе управления ListView является создание класса, реализующего интерфейс System.Collections.IComparer. Именно этот класс предоставляет возможность сортировки элементов. В этом примере класс ListViewItemComparer определен и добавлен как вложенный класс данной формы. ListViewItemComparer выполняет основную сортировку по возрастанию для указанного столбца, который передается в конструктор класса.

8. Добавьте к классу Form1 следующий код

Сортировка выполняется в требуемом методе интерфейса IComparer, называющемся Compare. Этот метод принимает два объекта как параметры, в которых будут содержаться два сравниваемых элемента. Когда метод Sort вызывается в методе обработки события ColumnClick элемента управления ListView, метод Sort использует объект ListViewItemComparer, определенный и присвоенный свойству ListViewItemSorter, и вызывает его метод Compare. Когда объект ListViewItemComparer создан, он присваивается индексу столбца, выбранного щелчком мыши. Этот индекс столбца используется для обращения к подэлементам столбца, который требуется отсортировать. Затем подэлементы передаются в метод String.Compare, который сравнивает элементы и возвращает один из трех результатов. Если элемент в параметре x меньше элемента в параметре y, возвращается значение меньше нуля. Если элементы идентичны, возвращается нуль. Наконец, если элемент в параметре x больше элемента в параметре y, возвращается значение больше нуля. Значение, возвращенное методом Compare, передается назад в метод Sort, определяющий местоположение каждого сравниваемого элемента в столбце. Метод Sort вызывает метод Compare требуемое число раз, чтобы отсортировать все подэлементы в выбранном столбце.

Сортировка по возрастанию или по убыванию

Пользователям элемента управления ListView потребуется сортировка элементов по возрастанию и убыванию. Чтобы облегчить эту задачу, в предыдущий пример необходимо внести некоторые изменения, чтобы метод Compare мог идентифицировать элементы для сортировки.

Изменения в форме

Как правило, чтобы переключиться между сортировкой по возрастанию и убыванию, необходимо щелкнуть заголовок столбца еще раз. Пользователи ожидают, что при первом щелчке заголовка столбца происходит сортировка, а при последующем щелчке – изменение порядка сортировки. Предыдущий пример кода должен уметь определять, что на столбце щелкнули больше одного раза. Для этого добавьте закрытую переменную типа integer к классу Form. Эта переменная хранит последний столбец, который был выбран щелчком мыши. Метод обработки события ColumnClick использует эту переменную, чтобы сравнить последний столбец со столбцом, выбираемым щелчком мыши в данный момент, и определить, совпадают столбцы или нет.

9. Добавьте следующее определение члена к классу Form.