Зміст

Елемент CheckBox

Елемент представляє собою перемикач, який може перебувати в одному з двох станів: вибраний або невибраний.

Основні властивості

ВластивістьЗначення за замовчуваннямОпис
NamecheckBox1, checkBox2,...Імена об'єктів
BackColorControlКолір фону
Font Microsoft Sans Serif; 8,25pt Шрифт
ForeColorControlTextКолір шрифту
TextcheckBox1, checkBox2,... Текст, що знаходиться справа від прапорця
Checked False =true, якщо прапорець вибраний, =false, якщо прапорець не вибраний
Enabled True Активний елемент або ні

Для кожного елемента CheckBox можна задати свої властивості.

Будь-які властивості (які є на панелі або яких немає на панелі) можна змінити або перевірити програмно.

Наприклад:

Якщо вибрано елемент checkBox1, то вивести на екран зміст його надпису:
if (checkBox1.Checked) {MessageBox.Show(checkBox1.Text);}

Вибрати елемент checkBox1:
checkBox1.Checked=true;

Основні події

ПодіяКоли виникає
CheckedChangedПодія відбувається при зміні властивості Checked, тобто при початковому виборі елемента, а також при зміні вибраного елемента

CheckedListBox в C#

Полное руководство по работе с компонентом выбора элементов

Введение

CheckedListBox - это компонент Windows Forms, который отображает список элементов с флажками для выбора. Пользователь может выбрать несколько элементов одновременно.

Основное применение: выбор нескольких элементов из списка, настройки приложения, фильтрация данных.

Основные свойства

  • Items
    Коллекция элементов списка
  • CheckedItems
    Коллекция выбранных элементов
  • CheckedIndices
    Коллекция индексов выбранных элементов
  • CheckOnClick
    Выделение по одному клику
  • SelectionMode
    Режим выбора элементов

Создание и настройка

Добавление элементов

// Программное создание
private CheckedListBox checkedListBox1 = new CheckedListBox();

// Добавление элементов
checkedListBox1.Items.Add("Элемент 1");
checkedListBox1.Items.Add("Элемент 2");
checkedListBox1.Items.Add("Элемент 3");

// Массовое добавление
checkedListBox1.Items.AddRange(new string[] {
    "C# Programming",
    "Database Design",
    "Web Development"
});

// Настройка поведения
checkedListBox1.CheckOnClick = true;
checkedListBox1.MultiColumn = false;

Обработка событий

ItemCheck - изменение состояния

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
    string item = checkedListBox1.Items[e.Index].ToString();
    
    if (e.NewValue == CheckState.Checked) {
        MessageBox.Show($"Выбран: {item}");
    } else {
        MessageBox.Show($"Снят выбор: {item}");
    }
}

SelectedIndexChanged - выбор элемента

private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) {
    if (checkedListBox1.SelectedIndex != -1) {
        string selectedItem = checkedListBox1.SelectedItem.ToString();
        label1.Text = $"Выбран элемент: {selectedItem}";
    }
}

Работа с выбранными элементами

Получение выбранных элементов

// Через CheckedItems
foreach (var item in checkedListBox1.CheckedItems) {
    listBoxResults.Items.Add($"Выбран: {item}");
}

// Через CheckedIndices
foreach (int index in checkedListBox1.CheckedIndices) {
    string item = checkedListBox1.Items[index].ToString();
    listBoxResults.Items.Add($"Индекс {index}: {item}");
}

// С помощью LINQ
var selectedItems = checkedListBox1.CheckedItems
    .Cast<string>().ToList();

Управление состоянием

// Выделить все
for (int i = 0; i < checkedListBox1.Items.Count; i++) {
    checkedListBox1.SetItemChecked(i, true);
}

// Снять все
for (int i = 0; i < checkedListBox1.Items.Count; i++) {
    checkedListBox1.SetItemChecked(i, false);
}

// Инвертировать выделение
for (int i = 0; i < checkedListBox1.Items.Count; i++) {
    bool isChecked = checkedListBox1.GetItemChecked(i);
    checkedListBox1.SetItemChecked(i, !isChecked);
}

Пользовательские объекты

public class Product {
    public string Name { get; set; }
    public decimal Price { get; set; }
    
    public override string ToString() {
        return $"{Name} - {Price:C}";
    }
}

// Использование
var products = new List<Product> {
    new Product { Name = "Ноутбук", Price = 50000 },
    new Product { Name = "Мышь", Price = 1500 }
};

checkedListBox1.DataSource = products;
checkedListBox1.DisplayMember = "Name";

Практические примеры

Фильтрация элементов

// Поиск элемента
string searchText = textBoxSearch.Text.Trim().ToLower();
for (int i = 0; i < checkedListBox1.Items.Count; i++) {
    string item = checkedListBox1.Items[i].ToString().ToLower();
    if (item.Contains(searchText)) {
        checkedListBox1.SelectedIndex = i;
        break;
    }
}

Динамическое добавление

private void buttonAddItem_Click(object sender, EventArgs e) {
    string newItem = textBoxNewItem.Text.Trim();
    if (!string.IsNullOrEmpty(newItem) &&
        !checkedListBox1.Items.Contains(newItem)) {
        checkedListBox1.Items.Add(newItem);
        textBoxNewItem.Clear();
    }
}

Лучшие практики и советы

Важно: При удалении элементов всегда начинайте с конца списка, чтобы индексы не сбивались.
// Правильное удаление выбранных элементов
var indicesToRemove = checkedListBox1.CheckedIndices
    .Cast<int>()
    .OrderByDescending(i => i)
    .ToList();

foreach (int index in indicesToRemove) {
    checkedListBox1.Items.RemoveAt(index);
}
Производительность: При работе с большими списками используйте BeginUpdate() и EndUpdate() для предотвращения мерцания.
checkedListBox1.BeginUpdate();
// Массовые операции с элементами
for (int i = 0; i < 1000; i++) {
    checkedListBox1.Items.Add($"Элемент {i}");
}
checkedListBox1.EndUpdate();

Зміст