- •Лекція 5. Списки
- •5.1. Види списків. Загальні властивості і методи роботи зі списками
- •5.2. Клас ListBox
- •1. Заповнення списку під час проектування форми (статичне).
- •2. Заповнення списку під час завантаження форми
- •3. Заповнення списку із джерела даних
- •4. Динамічне створення списків
- •6. Заповнення списку файлами з каталогів
- •5.3. Клас ComboBox
- •5.4. Клас CheckedListBox
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
