69085

Списки. Види списків. Загальні властивості і методи роботи зі списками

Лекция

Информатика, кибернетика и программирование

Списки є похідними класами від абстрактного класу FormatControl. До членів сімейства списків відносяться ListBox (список), ComboBox (випадаючий список), CheckedListBox (список з прапорцями) i ListView (відображає елементи в одному з 5 режимів).

Украинкский

2014-09-29

100.93 KB

4 чел.

12

ЛЕКЦІЯ 5. СПИСКИ

План

5.1. Види списків. Загальні властивості і методи роботи зі списками

5.2. Клас  ListBox

5.3. Клас ComboBox

5.4. Клас CheckedListBox

5.1. Види списків. Загальні властивості і методи роботи зі списками

Списки є похідними класами від абстрактного класу FormatControl.

До членів сімейства списків відносяться ListBox (список), ComboBox (випадаючий список), CheckedListBox (список з прапорцями) i ListView (відображає елементи в одному з 5 режимів).

Клас CheckedListBox успадковує більшість своїх можливостей від класу ListBox. Tе саме справедливо і для класу ComboBox.

5.2. Клас ListBox

Клас ListBox може містити колекцію об'єктів будь-якого типу (наприклад, рядків, зображень). В таблиці 5.1. наведено перелік основних властивостей класу ListBox, більшість з яких є і в інших типах списків.

У списку ListBox видимі декілька елементів, на відміну від випадаючого списку ComboBox, в якому видимий лише один вибраний елемент, якщо тільки властивість IsDropDownOpen не встановлена в true.

Таблиця 5.1. Основні властивості ListBox

Властивість

Призначення

Item

Елемент списку

Items

Елементи списку – колекція рядків

Items.Count

Кількість елементів у списку

ScrollAlwaysVisible

Визначає, чи буде смуга прокрутки виводитися завжди

Selectedlndex

Індекс виділеного елемента в списку (якщо такий є). Якщо жоден елемент не виділений, то повертається значення -1

SelectedIndices

Набір індексів виділених елементів в списку. Якщо не виділений жоден елемент, то повертається порожній набір

SelectedItem

Значення виділеного елемента. Якщо жоден з елементів не виділений, то повертається null

SelectedItems

Повертає колекцію значень виділених елементів (для списків, в яких допускається вибір декількох значень)

SelectionMode

Визначає число елементів, які можна вибрати в списку одночасно. Для цієї властивості використовуються значення з переліку SelectionMode

Sorted

Визначає, чи будуть елементи в списку впорядковані (за абеткою) чи ні

TopIndex

Повертає індекс першого видимого елемента в списку

Властивість SelectionMode визначає, чи можна виділяти в списку ListBox декілька елементів одночасно.

У таблиці 5.2. описана поведінка цих значень.

Таблиця 5.1. Можливі значення властивості SelectionMode

Значення

Опис

One 

Можна вибрати одночасно лише один елемент (встановлене за замовчуванням).

MultiSimple

Можна вибрати декілька елементів, не утримуючи клавішу модифікатора.

MultiExtended 

Можна вибрати декілька послідовних елементів, утримуючи клавішу SHIFT, або непослідовних елементів, утримуючи клавішу CTRL і клацаючи елементи.

Таблиця 5.2 - Основні методи роботи з ListBox

Метод

Призначення

Items.Add

Додає елемент до списку елементів

Items.Clear()

Видаляє елементи із списку

Заповнення списку

Є різні способи заповнення списку даними (елементами).

1. Заповнення списку під час проектування форми (статичне).

Для цього потрібно виділити список на формі і у вікні властивостей заповнити значеннями властивість Items у вікні редактора рядків списку. Введені значення зразу відображаються у списку.

Такий спосіб можна використовувати тільки для відображення і вибору елементів списку, але не для редагування.

Приклад 5.1.

В цьому прикладі список ListBox1 заповнюється назвами днів тижня.

При натисненні кнопки Вибрати (button1) в поле label2 виводиться текст:

Сьогодні у нас <день> 

Значення вибраного елемента визначається властивістю SelectedItem.

Якщо вибрана неділя, в поле label2 виводиться текст:

Ура! Сьогодні у нас <день>

Номер вибраного елемента визначається властивістю Selectedlndex. Нумерація елементів починається з 0.  

При натисненні кнопки Очистити елементи видаляються без можливості відновлення.

namespace Lab4_ListBox

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void button1_Click(object sender, EventArgs e)

       {

           if (listBox1.SelectedItem != null)

           {

               if (listBox1.SelectedIndex == 6)

                   label2.Text = "Ура! Сьогодні у нас  " + listBox1.SelectedItem;

               else

                   label2.Text = "Сьогодні у нас  " + listBox1.SelectedItem;

           }

           else

               MessageBox.Show("Елемент не вибраний із списку","Помилка");

       }

       private void button2_Click(object sender, EventArgs e)

       {

           listBox1.Items.Clear();

       }

   }

}

Рис. 5.1. Результат роботи форми.

2. Заповнення списку під час завантаження форми

Цей спосіб подібний до попереднього, але заповнення списку виконується при завантаженні форми (подія Form_Load).

Приклад 5.2.

В цьому прикладі при завантаженні форми список заповнюється трьома елементами, назвами кольорів. При натисненні кнопки Додати (button1) в список додається решта кольорів. При натисненні кнопки Очистити button2 всі елементи видаляються. При подальшому натисканні кнопки Додати в список додаються тільки елементи, додавання яких реалізовано в обробнику кнопки.

namespace ListBox_2

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void Form1_Load(object sender, EventArgs e)

       {

           listBox1.Items.Add("Червоний");

           listBox1.Items.Add("Помаранчовий");

           listBox1.Items.Add("Жовтий");

       }

      private void button1_Click(object sender, EventArgs e)

       {

           listBox1.Items.Add("Зелений");

           listBox1.Items.Add("Голубий");

           listBox1.Items.Add("Синій");

           listBox1.Items.Add("Фіолетовий");

       }

      private void button2_Click(object sender, EventArgs e)

      {

          listBox1.Items.Clear();

      }

   }

}

3. Заповнення списку із джерела даних

Елементи управління ListBox часто використовуються з прив'язкою даних. Джерелом даних може бути масив, поле бази даних, колекції даних, файл, тощо. При цьому вже не можна додавати елементи у список при натисненні на кнопку, через те, що джерело даних не можна змінювати.

Приклад 5.3.

В цьому прикладі джерелом даних є масив шифрів груп. Прив'язка до масиву виконується в методі Form1_Load.

namespace ListBox_2

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       public string[] listData = { "K-01", "K-91", "K-81", "K-71", "MK-01", "MK-91" };

       private void Form1_Load(object sender, EventArgs e)

       {

           listBox1.DataSource= listData;

       }

   }

}

4. Динамічне створення списків

Як і будь-які елементи, списки можна створювати динамічно в коді. Це можна зробити в будь-якому методі форми.

Приклад 5.4.

В цьому прикладі в режимі дизайнера створюється форма, на якій розміщується одна кнопка. При завантаженні форми в події Form1_Load створюється два списки, перший з яких містить назви міст. Для заповнення списку використовується метод Add(). При натисненні кнопки Вибрати в другий список вноситься вибране місто.

namespace ListBox_4_4

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void Form1_Load(object sender, EventArgs e)

       {

           Text = "Приклад динамічного списку";

           list = new ListBox();  //створення об'єкту list

           list.Location = new Point(15, 15);

           list.Size = new Size(100, 100);

           this.Controls.Add(list);

           list.Items.Add("Київ");

           list.Items.Add("Суми");

           list.Items.Add("Львів");

           //створюємо другий список

           list1 = new ListBox();  //створення об'єкту list

           list1.Location = new Point(200, 15);

           list1.Size = new Size(100, 50);

           this.Controls.Add(list1);

       }

//створення змінних типу ListBox

       private ListBox list;

       private ListBox list1;

       private void button1_Click(object sender, EventArgs e)

       {

           if (list.SelectedItem != null)

               //якщо місто вибране - вноcимj у другий список його назву

               list1.Items.Add(list.SelectedItem);

           else

               list1.Items.Add("Нічого не вибрано!");

       }

   }

}

6. Заповнення списку файлами з каталогів

В .Net є класи для роботи з каталогами файлової системи. Наступний приклад демонструє заповнення списку файлами з каталогу.

Приклад 5.5.

Як і в попередньому прикладі, створимо форму. В конструкторі форми створимо список, в який виведемо імена файлів, розміщених у вказаному каталозі. Для роботи з файлами потрібно підключити простір імен System.IO.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace ListBox_4._5

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

           Text = "Заповнення списку каталогами";

           list = new ListBox();

           list.Location = new Point(15, 15);

           list.Size = new Size(200, 200);

           this.Controls.Add(list);

           DirectoryInfo fds = new DirectoryInfo("D:\\Distribut");

           FileInfo[] files = fds.GetFiles();

           foreach (FileInfo file in files)

           {

               list.Items.Add(file);

           }

       }

           private ListBox list;

   }

      

}

Вибір декількох елементів списку.

Наступний приклад демонструє використання властивості SelectionMode значенням для вибору кількох елементів списку.

Приклад 5.6.  

Створимо форму і в режимі проектування розмістимо два списки. Перший список заповнимо при завантаженні форми днями тижня з масиву. В другий список будемо додавати вибрані елементи.

При натисненні на кнопку > вибрані елементи додамо до другого списку.

Обов'язково потрібно очищати другий список, щоб елементи не дублювалися.

namespace ListBox_4._6

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       public string[] Day = { "Понеділк", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя" };

       private void Form1_Load(object sender, EventArgs e)

       {

         //прив'язка списку до масиву

           listBox1.DataSource = Day;  

         //встановлення режиму вибору кількох елементів

           listBox1.SelectionMode = SelectionMode.MultiSimple;

       }

       private void button1_Click(object sender, EventArgs e)

       {

           listBox2.Items.Clear();

           if (listBox1.SelectedItems != null)

           {

               foreach (string item in listBox1.SelectedItems)

                   listBox2.Items.Add(item);

           }

       }

   }

}

5.3. Клас ComboBox

Клас ComboBox реалізує випадаючий список, в якому користувач може не тільки вибрати значення із списку, але і ввести своє власне. Клас ComboBox успадковує більшість своїх можливостей від класу ListBox, проте має і власні важливі властивості, наведені в таблиці 5.3.

Як і в ListBox, ці властивості можна задати у вікні властивостей при проектуванні форми або динамічно в коді.

Таблиця 5.3 – Основні властивості ComboBox

Властивості

Призначення

DroppedDown

"Розкривається вниз": визначає, чи буде список випадаючим (встановлене за замовчанням)

MaxDropDownltems

Визначає максимальну кількість елементів, яка буде показана в нижній частині спадаючого списку. Допустимі значення - від 1 до 100

MaxLength

Визначає максимальну довжину тексту, який користувач може ввести в ComboBox

Selectedlndex

Визначає індекс виділеного елемента ComboBox. Якщо жоден елемент не виділений, повертається значення -1

Selectedltem

Повертає посилання на об'єкт виділеного елемента ComboBox

SelectedText

Повертає виділений текст в полі редагування ComboBox

SelectionLength

Визначає довжину (в символах) виділеного тексту в полі редагування ComboBox

Style

Дозволяє отримати або встановити стиль ComboBox. Для цієї властивості використовуються значення з переліку ComboBoxStyle

Text

Дозволяє отримати доступ до тексту в полі редагування. При роботі з ComboBox ця властивість використовується частіше всіх інших

Розглянемо приклад використання ComboBox з можливістю додавання елементів у список.

Приклад 5.7.

В цьому прикладі створюється форма, на якій розміщується випадаючий список міст, відсортований за абеткою. Для сортування в коді встановимо властивість comboBox1.Sorted = true. На формі розмістимо два текстових поля і три програмні кнопки. В перше поле буде виводитися назва улюбленого міста, вибрана у списку при натисненні кнопки Вибрати.

Для додавання елементу у список потрібно ввести назву міста в текстове поле списку і натиснути кнопку Додати. При цьому не перевіряється, чи є таке місто у списку і можливе дублювання.

Для пошуку  елементу у списку потрібно ввести потрібну назву міста у друге текстове поле і натиснути кнопку Знайти.

Рис. 5.2. Вигляд форми при виконанні

Код форми

namespace Lab4_ComboBox_4.7

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void Form1_Load(object sender, EventArgs e)

       {

           //Заповнення списку кількома елементами

           comboBox1.Items.AddRange(new object[] {"Київ",

                       "Ахтирка",

                       "Львів",

                       "Одеса",

                       "Харків"});

           comboBox1.Sorted = true;

       }

       private void button1_Click(object sender, EventArgs e)

       {

           if (comboBox1.Text.Length != 0)

               comboBox1.Items.Add(comboBox1.Text);

           else

               MessageBox.Show("Нічого не введено");

       }

       private void button2_Click(object sender, EventArgs e)

       {

           if (comboBox1.Text.Length != 0)

               textBox1.Text = comboBox1.Text;

           else

               MessageBox.Show("Нічого не введено");

       }

       private void button3_Click(object sender, EventArgs e)

       {

           int index = comboBox1.FindString(textBox2.Text);

           comboBox1.SelectedIndex = index;

           if (index == -1)

               MessageBox.Show("Елемент не знайдено у списку");

       }

   }

}

5.4. Клас CheckedListBox

Елемент CheckedListBox (список з прапорцями) дозволяє поміщати звичайні прапорці усередині поля зі смугами прокрутки.

Крім того, в елементі CheckedListBox передбачена можливість використання декількох стовпчиків. Для цього достатньо встановити значення true для властивості Multiline.

CheckedListBox успадковує більшість своїх можливостей від типу ListBox, але має і власні властивості і методи (табл. 5.4).

Таблиця 5.4 – Деякі властивості CheckedListBox

Властивості

Призначення

CheckOnClick

Отримує або задає значення, яке вказує  чи потрібно перемкнути прапорець, коли вибирається елемент. Приймає значення  true або false

CheckedIndices

Колекція відмічених індексів в CheckedListBox

CheckedItems

Колекція відмічених елементів в CheckedListBox.

CheckedItems.Count

Кількість відмічених елементів в колекції

Таблиця 5.5 – Деякі методи CheckedListBox і Items

Метод

Призначення

Items.AddRange

Доддає колекцію елементів

Items.Add(textBox1.Text, CheckState.Checked)

Додає один елемент

CheckedItems.Contains

Набуває значення, що показує, чи є вказаний елемент дочірнім елементом. 

Розглянемо приклад використання CheckedListBox

Приклад 5.8.

Форма для замовлення піци. На ній розміщено список CheckedListBox, текстове поле textBox1 для додавання елементу в CheckedListBox, список ListBox1 і дві кнопки: Додати (button1) і Показати замовлення (button2).

В конструкторі форми список CheckedListBox заповнюється трьома елементами.

Встановлюється властивість

     checkedListBox1.CheckOnClick = true;

Рис. 5.3. Форма для замовлення піцци

Для додавання елементу в  CheckedListBox потрібно ввести значення в текстове поле і натиснути кнопку Додати. Ця кнопка активізується, якщо в текстове поле вводиться текст.

В обробнику кнопки перевіряться наявність такого елементу в списку, і якщо елементу немає, він додається. Після цього текстове поле очищується.

Для формування замовлення потрібно відмітити в CheckedListBox елементи і натиснути кнопку Показати замовлення.  Вибрані елементи додаються в ListBox1.

Код форми

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Lab4_CheckListBox

{

   public partial class Form1 : Form

   {   

       public Form1()

       {

           InitializeComponent();

           // Заповнення списку значеннями

           string[] myPizza = { "Челентано", "Гавайська", "Tomato" };

           checkedListBox1.Items.AddRange(myPizza);

           // Змінимо режим вибору з double-click to single click.

           checkedListBox1.CheckOnClick = true;

           this.Text = "Замовлення піци";

       }

       private void button1_Click(object sender, EventArgs e)

       {

           //Якщо поле textBox1 не пусте і якщо таке значення відстутнє у списку, додає його до списку

           if (textBox1.Text != "")

           {

             if (checkedListBox1.CheckedItems.Contains(textBox1.Text) == false)

                 checkedListBox1.Items.Add(textBox1.Text, CheckState.Checked);

             textBox1.Text = "";

           }

       }

       private void textBox1_TextChanged(object sender, EventArgs e)

       {

           //Активізує і деактивізує кнопку Додати

           if (textBox1.Text == "")

           {

               button1.Enabled = false;

           }

           else

           {

               button1.Enabled = true;

           }

       }

       private void button2_Click(object sender, EventArgs e)

       {

           //показати замовлення

           listBox1.Items.Clear();

           for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)

           {

               listBox1.Items.Add(checkedListBox1.CheckedItems[i]);

           }

       }

  

       // Activates the move button if there are checked items.

       private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)

       {

           if (e.NewValue == CheckState.Unchecked)

           {

               if (checkedListBox1.CheckedItems.Count == 1)

               {

                   button2.Enabled = false;

               }

           }

           else

           {

               button2.Enabled = true;

           }

       }

     }

}

Рис. 5.4. Форма в процесі виконання

Висновки

Для зручності вибору елементів на формі є різні типи списків. Всі вони походять від абстрактного класу FormatControl, тому мають багато спільних властивостей і методів. Властивості можна встановити в режимі дизайну форми чи динамічно, в коді. Є різні способи заповнення списків елементами, які можуть використовуватися відповідно до логіки роботи програми.

Контрольні питання і завдання для самостійного виконання

1. Яка різниця між ListBox і CheckedListBox?

2. Як задати для ComboBox можливість вибору кількох елементів одночасно?

3. Як підрахувати кількість елементів у списку?

4. Як заповнити список через зв'язування з даними?

5. Який метод  дозволяє додати одразу декілька елементів до списку?

6. Що означає команда:

          list = new ListBox();  //створення об'єкту list

7.  Що означає команда:

       private ListBox list;

8. Що потрібно зробити, що елементи, які додаються у список, не дублювалися?

9. Модифікувати приклад  4.7. так, щоб елементи при додаванні до списку не дублювалися.

10. Розробити форму для роботи з ListView


 

А также другие работы, которые могут Вас заинтересовать

42802. Расчетная АСР 258.49 KB
  При автоматизации технологических объектов управления ТОУ широко применяют одноконтурные системы регулирования АСР обеспечивающие стабилизацию выходных координат объектов. Проектирование таких АСР предполагает знание статических и динамических характеристик ТОУ позволяющих произвести расчет системы регулирования – определить структуру регулятора и найти параметры его настройки. Тогда по аналогии с критерием Найквиста можно сформулировать следующее условие: если разомкнутая АСР имеет степень колебательности...
42803. Электроиндуцированные упругие деформации в кристаллах ниобата лития 329.46 KB
  Точечная группа симметрии: 3m. Приложено электрическое поле В см под углом 600 к главной оси симметрии. Область науки в задачу которой входит описание и объяснение структуры кристаллов на основе законов симметрии и пространственных соотношений расстояний между атомами называется кристаллографией. Поскольку в данном кристалле имеется ось симметрии третьего порядка то использование метода прямой проверки в декартовых координатах невозможно.
42804. Разработка программного обеспечения, ведение базы данных “Прокат видеокассет” 2.21 MB
  Видеотека Имя поля Тип данных Названиеописание Длина поля Код кассеты Numeric Указывается код видеокассеты. 5 Жанр Numeric Указывается жанр фильма. 10 Наименование Chrcter Указывается название кассеты. 18 Режиссер Chrcter Указывается режиссер данной видеокассеты.
42805. Сравнительная характеристика автоматической двухшпиндельной вакуум-закаточной машины 2.16 MB
  1 СВЕДЕНИЯ ОБ ОБЬЕКТЕ ОБРАБОТКИ Для производства жестяных банок необходима жесть уплотняющие материалы. При производстве цельно штамповочных банок требуется жесть уплотняющие материалы и материал для смазки жести перед штамповкой банок. Кроме того для производства консервных банок используют белую лакированную жесть электролитического лужения она более экономична так как толщина оловянного покрытия составляет 061мКр. Жесть черная рулонная лакированная применяют для...
42806. Использование переходных металлов и их соединений в технологии сенсорных микро-наносистем 313.59 KB
  Настоятельная необходимость отслеживать все аспекты состояния окружающей среды в реальном времени постоянно растет, и это вызвано возрастающими связями загрязнения окружающей среды с нашим здоровьем и безопасностью. Необходимо также иметь возможность определять содержание основных компонентов и примесей в различных средах.
42807. Анализ конструкции мобильного телефона Samsung i8910 HD с использованием методик FMEA и FTA 7.54 MB
  Попытки научного подхода к оценке качества предпринимались давно. Так, еще в 1930 г. немецкий доктор-инженер К. Комментц установил для кораблей, предназначенных для мелководья, что всякое уменьшение осадки судов на 1 % приводит к повышению цены на 0,6%. Несколько более сложным у него оказалось влияние вместимости судна и других параметров качества.
42808. Технология швейного производства на примере РУП «БХПО» 2.6 MB
  Совершенствование швейного производства предусматривает внедрение высокопроизводительного оборудования поточных линий расширение ассортимента и улучшение качества одежды выпуск изделий пользующихся повышенным спросом. Технология современного швейного производства все более становится механической ее эффективность в первую очередь зависит от применяемого оборудования. Выбор швейного оборудования зависит от особенностей обрабатываемых изделий и материалов. Механизация и автоматизация производства приводит к расширению перечня используемого...
42809. Система управления перемещением механизма 1.74 MB
  Функциональная схема установки На функциональной схеме введены следующие обозначения: КВ КН контакторы движения: вперёд и назад; S1 S2 S3 сигнал с конечным выключателем положений 1 2 3; S4 сигнал с кнопки; S5 сигнал с кнопки “Стоп†в режиме автомат; S6 сигнал выбора режима автомат или наладка; S7 сигнал движения вперёд в режиме наладка; S8 сигнал движения назад в режиме наладка; ПУУ проектирующие управляющие устройство; УВВ устройство выдержки времени; Хв сигнал управления контактором движения вперёд; Хн сигнал...
42810. Расчет районной электрической сети 471.49 KB
  1 Расчет баланса мощности 6 1.1 Расчет баланса мощности 1 Определение полной мощности для каждого потребителя: Таблица 1: Сведения о потребителях N P МВт cosϕ Uн кВ 1 33 094 10 2 34 092 10 3 134 078 6 4 34 085 10 2 Определение реактивной мощности для каждого потребителя: 3 Определение потерь активной мощности: Принимаем что они равны 5 от активной мощности iго потребителя 4 Определение реактивных потерь: Зарядную мощность линий а также потери реактивной мощности в линии не учитываем. Принимаем что они составляют 6 от...