Программирование >>  Программирование с использованием ajax 

1 ... 150 151 152 [ 153 ] 154 155 156 ... 396


управления Label, установите значение его свойства AutoSize равным False. Сделайте ширину элемента управления Labe 1 равной ширине элемента управления ListView.

labelCufTenlPa h lislViewFdesAndFolders

View Mode

О radioButtonLargdcon О radюeuttonSmaШcon О radioButlonbsl О radjoButronDetarfs О radioButlonTte

bUtonBack

Рис. 15.20. Форма приложения ListView

3. Назовите элементы управления в соответствие с рис. 15.20. ListView не будет отображать свое имя, как показано на рисунке. Дополнительный элемент был добавлен лишь для того, чтобы отобразить имя в этом примере - его добавление не обязательно.

4. Измените свойство Text переключателей и кнопки, чтобы оно совпадало с именами, за исключением наименования элементов управления, а в качестве свойства Text формы установите ListView.

5. Очистите свойство Text надписи.

6. Добавьте в форму два элемента управления ImageList, дважды щелкнув на пиктограмме этого элемента в панели инструментов - она находится в разделе Components (Компоненты). Переименуйте элементы управления на

imageListSmall и imageListLarge.

7. Измените значение свойства Size (Размер) элемента управления ImageList с именем imageListLarge на 32, 32.

8. Щелкните на кнопке, расположенной справа от свойства Images списка изображений imageListLarge, чтобы открыть диалоговое окно, где можно будет перейти к изображениям, которые желательно вставить.

9. Щелкните на кнопке Add (Добавить) и перейдите к папке ListView в каталоге кода этой главы. Нужные файлы - Folder 32x32 . ico и Text 32x32 . ico.

10. Удостоверьтесь, что значок папки находится в верхней части списка.

11. Повторите шаги 8 и 9 для компонента imageListSmall, выбирая версии значков с размерами 16x16.

12. Установите значение свойства Checked переключателя radioButtonDetails равным true.

13. Установите свойства представления в виде списка, как указано в табл. 15.20.



Таблица 15.20. Значения свойств представления

Свойство

Значение

LargelmageList

imageListLarge

SmalllmageList

imageListSmall

View

Details

Описание полученных результатов

Перед первым из двух блоков foreach мы вызываем метод BeginUpdate () применительно к элементу управления ListView. Помните, что метод BeginUpdate () элемента управления ListView указывает ему о необходимости прекратить обновление видимой области до момента вызова метода EndUpdate (). Отказ от вызова этого метода привел бы замедлению заполнения представления в виде списка и возможному мерцанию при добавлении элементов. Сразу после второго блока foreach мы вызываем метод EndUpdate (), который вынуждает элемент управления ListView прорисовать элементы, которыми он был заполнен.

Оба блока foreach содержат код, который представляет интерес. Мы начинаем с создания нового экземпляра ListViewItem, а затем устанавливаем свойство Text в соответствии с именем файла или папки, которую собираемся вставить. Свойство Imagelndex объекта ListViewItem ссылается на индекс элемента в одном из списков изображений. Поэтому важно, чтобы значки имели одинаковые индексы в обоих списках изображений. Для сохранения полностью определенного пути к папкам и файлам мы используем свойство Tag, которые будут использоваться, когда пользователь дважды щелкнет на элементе.

Затем мы создаем два подэлемента. Им просто присваивается текст, предназначенный для отображения, а затем они добавляются в коллекцию Sub It ems компонента ListViewItem.

И, наконец, ListViewItem, добавляется в коллекцию Items элемента управления ListView. Элемент управления ListView достаточно интеллектуален , чтобы просто игнорировать под элементы, если режим просмотра отличается от Details, поэтому мы добавляем подэлементы, независимо от текущего режима просмотра.

Обратите внимание, что некоторые аспекты кода остались без внимания - а именно, строки, которые действительно получают информацию о файлах:

Получение информаци о корневой папке. Directorylnfo dir = new Directoryinfо(root);

Извлечение файлов и папок из корневой папки. Directorylnfo[] dirs = dir.GetDirectories(); Папки

FileInfo[] files = dir.GetFilesО; Файлы

Эти строки используют для доступа к файлам классы из пространства имен System. 10, поэтому в верхнюю часть кода нужно добавить следующий раздел using:

using System;

using System.Collections.Generic-using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; using System. 10;

Подробнее доступ к файлам и пространство имен System. 10 описаны в главе 24.



Но, чтобы вы могли получить представление о происходящем, отметим, что метод GetDirectories () объекта Directoryinf о возвращает коллекцию объектов, которые представляют папки в просматриваемом каталоге, а метод GetFiles () возвращает коллекцию объектов, представляющих файлы в текущем каталоге. В этих коллекциях можно выполнить циклический просмотр, как это только что было сделано, используя свойство Name объекта для возврата имени соответствующего каталога или файла и создания объекта ListViewitem для хранения этой строки.

Чтобы элемент управления ListView отобразил корневую папку, остается только вызвать две функции в конструкторе формы. Одновременно инициализируем коллекцию folderColStringCollection корневой папкой:

InitializeComponent() ;

Инициализация элемента управления ListView и коллекции папок folderCol = new System.Collections.Specialized.StringCollection(); CreateHeadersAndFillListView(); PaintListView(@ C:\ ); folderCol.Add(@ C:\ ) ;

Чтобы пользователи имели возможность дважды щелкать на элементе в компоненте ListView для осуществления просмотра папок, необходимо подписаться на событие ItemActivate. Выберите ListView в окне конструктора и дважды щелкните на событии ItemActivate в списке Events окна Properties.

Соответствующий обработчик события имеет следующий вид:

private void listViewFilesAndFolders ItemActivate(object sender, EventArgs e) {

Приводит объект-отправитель к типу ListView и извлекает свойство Tag первого выбранного элемента.

System. Windows . Forms . ListView Iw = (System. Windows . Forms . ListView) senders-string filename = Iw.Selectedltems[0].Tag.ToString (); if (Iw.Selectedltems[0].Imagelndex !=0)

Попытка выполнения файла.

System.Diagnostics.Process.Start(filename);

catch

Если попытка неудачна - просто выход из метода, returns-

else

Вставка элементов. PaintListView(filename) folderCol.Add(filename)

Свойство Tag выбранного элемента содержит полностью определенный путь к файлу или папке, где был выполнен двойной щелчок. Известно, что изображение с индексом О - папка, поэтому по этому индексу можно определить, является элемент файлом или папкой. Если он - файл, предпринимается попытка загрузки файла. Если он - папка, мы вызываем метод PaintListView () с новой папкой, а затем добавляем новую папку в коллекцию folderCol.



1 ... 150 151 152 [ 153 ] 154 155 156 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика