Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обработчик события AfterSelect

Алгоритм наполнения списка

Наполнение списка ListView

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

Алгоритм наполнения списка достаточно прост. Прежде всего, необходимо очистить список от предыдущего содержимого, т.к. наполнение одного и того же списка может происходить неоднократно. Эта операция выполняется с помощью метода Clear свойства Items списка:

listView1.Items.Clear();

Далее для добавления элемента в список нужно создать новый элемент как объект класса ListViewItem:

ListViewItem lvi = new ListViewItem("myfile.txt");

В качестве параметра конструктору передается текстовая строка имени файла. Она отображается в первом столбце детализированной таблицы.

Далее нужно добавить атрибуты элемента. Данная операция выполняется с помощью метода SubItems.Add:

lvi.SubItems.Add("1024");
lvi.SubItems.Add("10-05-2003");

Здесь мы добавляем к элементу два атрибута, первый из которых представляет собой размер файла, а второй — дату его создания.

Если к элементу управления ListView добавлены списки изображений значков, то при создании элемента списка необходимо указать индекс нужного значка. Это делается с помощью свойства ImageIndex:

lvi.ImageIndex = 4;

После того как все атрибуты элемента определены, Вы можете добавить элемент в список при помощи метода Add:

listView1.Items.Add(lvi);

В нашем приложении FramesApp наполнение списка будет происходить в цикле.

Теперь нашей задачей будет наполнить функциональностью список ListView. Когда пользователь выделяет диск или каталог в дереве просмотра TreeView, создается событиеAfterSelect. Обработчик этого события должен определить, какой диск или какой каталог был выделен, а затем наполнить окно списка ListView именами каталогов и файлов, расположенных на этом диске или в этом каталоге.

Создайте обработчик события AfterSelect в таком виде, как это показано ниже:

private void treeView1_OnAfterSelect(object sender,
System.Windows.Forms.TreeViewEventArgs e)
{
TreeNode selectedNode = e.Node;
fullPath = selectedNode.FullPath;

DirectoryInfo di = new DirectoryInfo(fullPath);
FileInfo[] fiArray;
DirectoryInfo[] diArray;

try
{
fiArray = di.GetFiles();
diArray = di.GetDirectories();
}
catch
{
return;
}

listView1.Items.Clear();

foreach(DirectoryInfo dirInfo in diArray)
{
ListViewItem lvi = new ListViewItem(dirInfo.Name);
lvi.SubItems.Add("0");
lvi.SubItems.Add(dirInfo.LastWriteTime.ToString());
lvi.ImageIndex = 0;

listView1.Items.Add(lvi);
}


foreach(FileInfo fileInfo in fiArray)
{
ListViewItem lvi = new ListViewItem(fileInfo.Name);
lvi.SubItems.Add(fileInfo.Length.ToString());
lvi.SubItems.Add(fileInfo.LastWriteTime.ToString());

string filenameExtension =
Path.GetExtension(fileInfo.Name).ToLower();

switch (filenameExtension)
{
case ".com":
{
lvi.ImageIndex = 2;
break;
}
case ".exe":
{
lvi.ImageIndex = 2;
break;
}
case ".hlp":
{
lvi.ImageIndex = 3;
break;
}
case ".txt":
{
lvi.ImageIndex = 4;
break;
}
case ".doc":
{
lvi.ImageIndex = 5;
break;
}
default:
{
lvi.ImageIndex = 1;
break;
}
}

listView1.Items.Add(lvi);
}
}

Расскажем о том, как работает этот обработчик событий.

Прежде всего, метод извлекает ссылку на узел дерева, выделенный пользователем, из свойства Node параметра обработчика событий treeView1_OnAfterSelect.

TreeNode selectedNode = e.Node;

Далее, полный путь к выделенному узлу записывается в поле fullPath класса string (Вам необходимо создать такое поле в классе Form1):

fullPath = selectedNode.FullPath;

Так как наше дерево содержит только обозначения дисков и каталогов, то это будет путь либо к корневому каталогу диска, либо к одному из подкаталогов.

Далее мы создаем объект класса DirectoryInfo и получаем списки всех файлов и каталогов, располагающихся в каталоге, выделенном пользователем в дереве:

DirectoryInfo di = new DirectoryInfo(fullPath);
FileInfo[] fiArray;
DirectoryInfo[] diArray;

try
{
fiArray = di.GetFiles();
diArray = di.GetDirectories();
}
catch
{
return;
}

Для выполнения этих операций применяются методы GetFiles и GetDirectories. Перечень файлов обработчик события сохраняет в массиве fiArray, а перечень каталогов — в массивеdiArray.

Вооружившись перечнями файлов и каталогов, мы приступим к добавлению элементов к нашему списку ListView, очистив предварительно содержимое списка методом Clear:

listView1.Items.Clear();

Наполнение списка именами каталогов выполняется в цикле foreach:

foreach(DirectoryInfo dirInfo in diArray)
{
ListViewItem lvi = new ListViewItem(dirInfo.Name);
lvi.SubItems.Add("0");
lvi.SubItems.Add(dirInfo.LastWriteTime.ToString());
lvi.ImageIndex = 0;

listView1.Items.Add(lvi);
}

Все выполняемые здесь действия были описаны ранее. С помощью конструктора классаListViewItem мы создаем элемент списка, а затем задаем значения атрибутов этого элемента. Длина каталогов считается равной нулю, а время последнего изменения каталога извлекается при помощи метода LastWriteTime и преобразуется в текстовую строку методом ToString.

В свойство lvi.ImageIndex записывается нулевое значение — индекс значка в списке изображений imageList2 с изображением закрытой папки.

После заполнения всех атрибутов элемента списка этот элемент добавляется в список методом listView1.Items.Add.

На следующем этапе в список добавляются имена файлов, расположенных в выделенном каталоге. Эти имена тоже добавляются в цикле

foreach(FileInfo fileInfo in fiArray)
{
ListViewItem lvi = new ListViewItem(fileInfo.Name);
lvi.SubItems.Add(fileInfo.Length.ToString());
lvi.SubItems.Add(fileInfo.LastWriteTime.ToString());

string filenameExtension =
Path.GetExtension(fileInfo.Name).ToLower();

switch (filenameExtension)
{
case ".com":
{
lvi.ImageIndex = 2;
break;
}

case ".doc":
{
lvi.ImageIndex = 5;
break;
}
default:
{
lvi.ImageIndex = 1;
break;
}
}

listView1.Items.Add(lvi);
}

Размер очередного файла мы получаем с помощью свойства Length, а дату последнего изменения — с помощью свойства LastWriteTime (как и для каталогов).

Что же касается значков, то тут алгоритм немного сложнее. Нам нужно определить тип текущего файла, проанализировав расширение его имени, а затем выбрать и записать в свойство lvi.ImageIndex индекс соответствующего значка. Расширение имени файла извлекается из полного имени методом Path.GetExtension, а затем все его буквы преобразуется в прописные методом ToLower. Непосредственный выбор значка выполняется при помощи оператора switch.

Подготовленный элемент списка, описывающий текущий файл, добавляется в список методом listView1.Items.Add.

<== предыдущая лекция | следующая лекция ==>
Подключение значков к списку | Отображение содержимого текстовых файлов
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 516; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.032 сек.