У вас вопросы?
У нас ответы:) SamZan.net

Работа со списками.html

Работа добавлена на сайт samzan.net: 2016-01-17

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.4.2025

Лабораторная работа № 7. Работа со списками

Цель: формирование навыков работы со списками.

Необходимые теоретические сведения

Компоненты ListBox и checkedListBox служат для отображения списков строк, из которых одновременно можно выбрать одну или более строк. Списки следует использовать, если во время разработки неизвестно точное количество значений, из которых пользователь может осуществлять выбор (например, в списке товаров).

Таблица 1

Часто используемые свойства классов ListBox и checkedListBox

Свойство

Описание

Items

Получает коллекцию, используемую для генерирования содержимого ItemsControl

MultiColumn

Список может содержать более одного столбца

ColumnWidth

Ширина столбца

SelectedIndex

Возвращает (задает) индекс первого элемента в текущем выделении или "-1", если выделение является пустым

SelectedItem

Получает или задает первый элемент в текущем выделении или возвращает значение NULL, если выделение является пустым

SelectedItems

Получает выбранные в данное время элементы

SelectionMode

Возвращает поведение выбора для списка ListBox

SelectedValue*

Получает или задает значение свойства члена, указанного свойством ValueMembe

CheckedIndices

Коллекция отмеченных индексов в данном элементе управления CheckedListBox

CheckedItems*

Коллекция отмеченных элементов в данном элементе управления CheckedListBox

CheckOnClick *

Если =true, то элемент будет изменять свое состояние при каждом щелчке на нем

Controls*

Получает коллекцию элементов управления, содержащихся в элементе управления

Created

Получает значение, показывающее, был ли создан элемент управления

ThreeDCheckBoxes*

Получает или задает значение, указывающее чему равен для флажков объект System.Windows.Forms.ButtonState: значению Flat (плоские) или значению Normal (обычные)

Focusable

Возвращает или задает значение, указывающее, может ли элемент получать фокус

Таблица 2

Методы и события классов ListBox и checkedListBox

Метод

Описание

ClearSelected()

Очищает все выборки в элементе ListBox

FingString(А)

Находит в элементе ListBox первую строку, начинающуюся с указанной строки А

FindStringExact()

Находит в элементе ListBox первую строку, полностью совпадающую с указанной строкой А

GetSelected()

Возвращает значение, указывающее выбран элемент или нет

ToString()

Возвращает элемент, выбранный в текущий момент времени

GetItemChecked()*

Возвращает значение, указывающее выбран элемент или нет

GetItemCheckState()*

Возвращает значение, указывающее установлен флажок или нет

SetItemChecked()*

Устанавливает указанный элемент в состояние Checked

SetItemCheckState()*

Устанавливает состояние установки флажка элемента

ItemCheck*

Событие происходит при изменении состояния установки флажка одного из элементов

SelectedIndexChanged

Происходит при изменении индекса выбранного элемента

Упражнение 1. Разработать приложение, интерфейс которого представлен ниже на рисунке.

Рисунок 1. Внешний вид приложения

1. Расположить на форме компоненты checkedListBox (Name = checkedListBoxPossibleValue), ListBox (Name = listBoxSelected), Button (Name = buttonMove).

2. Для компонента checkedListBoxPossibleValue добавить первые 9 элементов, используя свойство Items. Десятый элемент добавить в коде (в конструкторе формы):

public Form1()

{

 InitializeComponent();

 // Добавляем новый элемент в checkedListBoxPossibleValue

 checkedListBoxPossibleValue.Items.Add("Десять");

}

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

private void buttonMove_Click(object sender, EventArgs e)

{ // Проверка наличия помеченных флажками элементов в списке

 // checkedListBoxPossibleValue и очистка списка ListBox

 if (checkedListBoxPossibleValue.CheckedItems.Count > 0)

 { // Циклический просмотр коллекции СheckedItems списка checkedListBox

   // и добавление элементов в список выбранных элементов

   foreach (string item in checkedListBoxPossibleValue.CheckedItems)

   {

     listBoxSelected.Items.Add(item.ToString());

   }

   //очиска всех флажков в checkedListBoxPossibleValue

   for (int i = 0; i < checkedListBoxPossibleValue.Items.Count; i++)

     checkedListBoxPossibleValue.SetItemChecked(i, false);

 }

}

ListView – список со значками – отображает список, пункты которого могут снабжаться значками или флажками.

Таблица 3

Свойства элемента управления ListView

Свойство

Описание

Activation

Способ активизирования элемента в списочном представлении: Standart (по умолчанию), OneClick, TwoClick

Alignment

Способ выравнивания элементов в представлении в виде списка: Default, Left, Top

SnapToGrid (элемент управления содержит невидимую сетку, к которой привязаны элементы)

AllowCollumnReorder = true

Допускается изменение порядка следования столбцов в представлении

AutoArrange = true

Элементы будут автоматически выстраиваться в соответствии со свойством Alignment

CheckedIndices, CheckedItems

Доступ к коллекции индексов и элементов, помеченных флажками

Columns

Количество столбцов

FullRowSelected = true

При щелчке по элементу выделяется сразу вся строка

CridLines = true

Отображение линий сетки между строками

HeaderStyle

Способ отображения заголовков столбцов: Clickable (заголовок работает подобно кнопке), NonClickable (не реагирует на щелчки мыши), None (заголовки не отображаются)

Items

Коллекция элементов списка

LabelEdit = true

Допускается редактирование первого столбца представления

LabelWrap = true

Надписи будут занимать столько строк, сколько необходимо

MultiSelect = true

Возможность выбора нескольких элементов

SelectedIndices, SelectedItems

Коллекции выбранных элементов и индексов

SmallImageList

Если View = SmallIcon, то свойство будет содержать объект ImageList, хранящий выбранные изображения

TopItem

Возвращает элемент, расположенный в верхней части списка

View

Режим представления списка: LargeIcon (большой значок), SmallIcon (маленький значок), List (список из одного столбца), Details (таблица), Tile (большой значок, справа от него информация о подэлементе)

Таблица 4

Методы и события элемента управления ListView

Метод

Описание

BeginUpdate()

Указывает представлению о необходимости прекращения прорисовки обновлений до момента вызова метода EndUpdate()

Clear()

Очистка представления, столбцы и элементы удаляются

EndUpdate()

Вызывается после метода BeginUpdate(). При его вызове представление прорисовывает все свои элементы

EnsureVisible()

Необходимость выполнения прокрутки

GetItemAt()

Возвращает объект ListViewItem в позиции x,y списка

AfterLabelEdit

Событие происходит после редактирования надписи

BeforeLabelEdit

Происходит после того, как пользователь начнет редактировать надпись

ColumnClick

Происходит при щелчке по столбцу

ItemActivate

Происходит при активизации элемента

Упражнение 2. Простейший файловый менеджер.

Рисунок 2. Внешний вид работающего приложения

1. Разместите на форме компоненты и дайте им имена в соответствии с приведенным ниже рисунком.

Рисунок 3. Внешний вид приложения в режиме конструктора

2. Очистить свойство Text надписи.

3. Добавить на форму два элемента управления ImageList (установить для них имена imageListSmall и imageListLarge).

4. Для компонента imageListLarge установить значение свойства Size = 32,32. Откройте диалоговое окно, где можно будет перейти к изображениям, которые предполагается использовать. Щелкнуть по кнопке Add и выбрать требуемые иконки соответствующего размера.

Рисунок 4. Диалоговое окно для создания коллекции иконок

5. Для компонента imageListSmall таким же образом выбрать значки с размерами 16х16.

6. Установить для компонента radioButtonDetails свойство Checked = true.

7. Свойства представления в виде списка в соответствии со следующей таблицей:

Свойство

Значение

LargeImageList

imageListLarge

SmallImageList

imageListSmall

View

Details

8. Подключить библиотеку для работы с файлами:

using System.IO;

9. Описать поле для хранения папок, по которым выполняется перемещение, чтобы к ним можно было вернуться по щелчку на кнопке "Назад"

public partial class Form1 : Form

{ // Поле для хранения ранее просматривавшихся папок

 private System.Collections.Specialized.StringCollection folderCol;

10. В конструкторе формы вызвать функции для отображения элемента ListView корневой папки и одновременно инициализировать коллекцию folderColStringCollection корневой папкой. Для этого создать код:

InitializeComponent();

// Инициализация элемента управления ListView и коллекции папок

folderCol = new System.Collections.Specialized.StringCollection();

CreateHeadersAndFillListView();

PaintListView(@"C:\");

folderCol.Add(@"C:\");

11. Добавить код в обработчик события ItemActivate представления (пользователи смогут дважды щелкать на элементе в компоненте ListView):

private void listViewFilesAndFolders_ItemActivate(object sender, EventArgs e)

{ // Приводитобъект-отправитель к типу listView и извлекает

 // свойство Tag первого выбранного элемента

 System.Windows.Forms.ListView lw = (System.Windows.Forms.ListView)sender;

 string filename = lw.SelectedItems[0].Tag.ToString();

 if (lw.SelectedItems[0].ImageIndex != 0)

 {

   try

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

     System.Diagnostics.Process.Start(filename);

   }

   catch

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

       return;

   }

 }

 else

 { // Вставка элементов

   PaintListView(filename);

   folderCol.Add(filename);

 }

}

Примечание. Свойство Tag выбранного элемента содержит полностью определенный путь к файлу или папке, где был выполнен двойной щелчок. Известно, что изображение с индексом 0 – папка, поэтому по индексу можно определить, является элемент файлом или папкой.

12. Для кнопки добавить buttonBack  обработчик, который позволит вернуться к предыдущему уровню просмотра:

private void buttonBack_Click(object sender, EventArgs e)

{

 if (folderCol.Count > 1)

 { // Если коллекция folderCol содержит более одного элемента

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

   // вызвать метод PaintListView() путем перехода к предыдущей папке.

   // Последний элемент коллекции folderCol – текущая папка

   // Поэтому необходимо извлечь предпоследний элемент

   PaintListView(folderCol[folderCol.Count - 2].ToString());

   // Удаляем последний элемент коллекции и делаем последний

   // элемент текущей папкой

   folderCol.RemoveAt(folderCol.Count - 1);

 }

 else

 { // Если коллекция содержит только один элемент, то

   // вызываем метод PaintListView() с этим элементом коллекции

   PaintListView(folderCol[0].ToString());

 }

}

13. Для обеспечения возможности изменения типа просмотра элемента управления ListView добавить для переключателей соответствующие обработчики:

private void radioButtonLargeIcon_CheckedChanged(object sender, EventArgs e)

{

 RadioButton rdb = (RadioButton)sender;

 if (rdb.Checked)

   listViewFilesAndFolders.View = View.LargeIcon;

}

private void radioButtonList_CheckedChanged(object sender, EventArgs e)

{

 RadioButton rdb = (RadioButton)sender;

 if (rdb.Checked)

   listViewFilesAndFolders.View = View.List;

}

private void radioButtonSmallIcon_CheckedChanged(object sender, EventArgs e)

{

 RadioButton rdb = (RadioButton)sender;

 if (rdb.Checked)

   listViewFilesAndFolders.View = View.SmallIcon;

}

private void radioButtonDetails_CheckedChanged(object sender, EventArgs e)

{

 RadioButton rdb = (RadioButton)sender;

 if (rdb.Checked)

   listViewFilesAndFolders.View = View.Details;

}

private void radioButtonTile_CheckedChanged(object sender, EventArgs e)

{

 RadioButton rdb = (RadioButton)sender;

 if (rdb.Checked)

   listViewFilesAndFolders.View = View.Tile;

}

14. Создать метод для создания заголовков столбцов представления:

private void CreateHeadersAndFillListView()

{ // Объявляем переменную для создания заголовков столбцов

 ColumnHeader colHead;

 // Для каждого из столбцов объявляем переменную заново и присваиваем

 // ей Text, прежде чем добавить ее в коллекцию Columns элемента ListView

 // Первый заголовок

 colHead = new ColumnHeader();

 colHead.Text = "Имя файла";

 listViewFilesAndFolders.Columns.Add(colHead); // Вставка заголовка

 // Второй заголовок

 colHead = new ColumnHeader();

 colHead.Text = "Размер";

 listViewFilesAndFolders.Columns.Add(colHead); // Вставка заголовка

 // Третий заголовок

 colHead = new ColumnHeader();

 colHead.Text = "Время доступа";

 listViewFilesAndFolders.Columns.Add(colHead); // Вставка заголовка

}

15. Создаем метод для заполнения представления в виде списка файлами и папками, загруженными с жесткого диска:

private void PaintListView(string root)

{

try

 {

   // Две локальные переменные, используемые для создания элементов для вставки

   ListViewItem lvi;

   ListViewItem.ListViewSubItem lvsi;

   // Если корневая папка не существует, вставка чего-либо невозможна

   // В этом случае выходим из метода

   if (root.CompareTo("") == 0)

     return;

   // Получаем информацию о корневой папке

   DirectoryInfo dir = new DirectoryInfo(root);

   // Извлекаем файлы и папки из корневой папки

   DirectoryInfo[] dirs = dir.GetDirectories(); // папки

   FileInfo[] files = dir.GetFiles(); // файлы

   // Очищаем элемент ListView. При этом метод Clear вызывается

   // применительно к коллекции Items, а не к объекту ListView метод Clear

   // объекта ListView удаляет все, включая заголовки столбцов,

   // нам же требуется удалить только элементы из представления

   listViewFilesAndFolders.Items.Clear();

   // Устанавливаем текст надписи в соответствии с текущим путем

   labelCurrentPath.Text = root;

   // Блокируем объект ListView от обновлений

   listViewFilesAndFolders.BeginUpdate();

   // Циклически просматриваем все папки корневой папки и вставляем их

   foreach (DirectoryInfo di in dirs)

   { // Создаем главный элемент ListView

     lvi = new ListViewItem();

     lvi.Text = di.Name; // Имя папки

     lvi.ImageIndex = 0; // Значок папки имеет индекс 0

     lvi.Tag = di.FullName; // Устанавливаем свойство tag в соответствии с полным путем папки

     // создаем два подэлемента ListViewSubItems

     lvsi = new ListViewItem.ListViewSubItem();

     lvsi.Text = ""; // Размер - папка не имеет размера,

     // поэтому данный столбец пустой

     lvi.SubItems.Add(lvsi); // добавляем подэлемент в ListViewItem

     lvsi = new ListViewItem.ListViewSubItem();

     lvsi.Text = di.LastAccessTime.ToString(); // последний посещенный столбец

     lvi.SubItems.Add(lvsi); // добавляем подэлемент в ListViewItem

     //  Добавление ListView в коллекцию  Items элемента ListView

     listViewFilesAndFolders.Items.Add(lvi);

   }

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

   foreach (FileInfo fi in files)

   {// Создаем главный элемент ListViewItem

       lvi = new ListViewItem();

       lvi.Text = fi.Name; // имя файла

       lvi.ImageIndex = 1; // значок, используемый для

       // представления файла, имеет индекс 1

       lvi.Tag = fi.FullName; // Устанавливаем свойство tag в

       // соответствии с полным путем файла

       // создаем два подэлемента

       lvsi = new ListViewItem.ListViewSubItem();

       lvsi.Text = fi.Length.ToString(); // длина файла

       lvi.SubItems.Add(lvsi); // добавление в коллекцию SubItems

       lvsi = new ListViewItem.ListViewSubItem();

       lvsi.Text = fi.LastAccessTime.ToString(); // последний посещенный столбец

       lvi.SubItems.Add(lvsi); // добавление в коллекцию SubItems

       // Добавление элемента в коллекцию Items объекта  ListView

       listViewFilesAndFolders.Items.Add(lvi);

   }

   // Разблокирование элемента управления ListView

   // теперь вставленные элементы будут отображаться

   listViewFilesAndFolders.EndUpdate();

 }

 catch (System.Exception err)

 {

     MessageBox.Show("Error: " + err.Message);

 }

}

Задания для самостоятельного выполнения

1. Модернизировать приложение, разработанное в задании 1, следующим образом: должна иметься возможность перемещения элементов из одного списка в другой и обратно.

2*. В приложении, разработанном в упражнении 2, для сохранения полностью определенного пути к папкам и файлам в элементе управления ListView использовалось свойство Tag. Измените это поведение, создав новый класс, производный от ListViewItem, и используйте экземпляры этого класса в качестве элементов в элементе управления ListView. Обеспечьте хранение информации о файлах и папках в новом классе с помощью свойства FullyQualifiedPath.

 только для checkedListBox

PAGE   \* MERGEFORMAT6




1. тема Современная мировая экономика- понятие структура субъекты тенденции развития В экономической л
2. В чем сходство и различие трудового договора и договора подряда
3. Электроконвекционные явления электрофорез электроэндосмос и др
4.  Понятие организационной культуры5 1
5. Прикамье Гусевой С
6. Нобелевские лауреаты по экономике
7. На имеющую вакантную должность претендуют несколько кандидатов
8. . Обеспечение безопасности.
9. 70с.ш..преобладают гумидн
10. Етика благовіння перед життям