Полное руководство по ListBox в C#

Полное руководство по работе с ListBox в Windows Forms и WPF

ListBox (список) - один из наиболее часто используемых элементов управления в C# приложениях. Он позволяет отображать список элементов, из которых пользователь может выбирать один или несколько вариантов.

Основные возможности ListBox

  • Отображение списка текстовых или сложных элементов
  • Поддержка одиночного и множественного выбора
  • Возможность привязки данных (data binding)
  • Гибкая настройка внешнего вида элементов
  • Сортировка и фильтрация элементов
  • Интеграция с базами данных

Когда использовать ListBox?

ListBox идеально подходит для ситуаций, когда нужно:

Примечание: В WPF ListBox обладает еще большей гибкостью и может отображать не только текст, но и сложные шаблоны элементов с изображениями, кнопками и другими контролами.

Основы работы с ListBox в Windows Forms

1. Добавление ListBox на форму

ListBox можно добавить на форму двумя способами:

  1. Через конструктор форм - перетащить элемент из панели инструментов
  2. Программно - создать экземпляр класса ListBox и добавить его в коллекцию Controls формы

Программное создание ListBox

// Создание экземпляра ListBox
ListBox myListBox = new ListBox();

// Настройка свойств
myListBox.Location = new Point(10, 10);
myListBox.Size = new Size(200, 150);
myListBox.Name = "myListBox";

// Добавление на форму
this.Controls.Add(myListBox);

2. Основные свойства ListBox

Свойство Описание
Items Коллекция элементов списка
SelectedIndex Индекс выбранного элемента (-1 если ничего не выбрано)
SelectedItem Выбранный элемент
SelectedItems Коллекция выбранных элементов (при MultiSelect)
SelectionMode Режим выбора (None, One, MultiSimple, MultiExtended)
Sorted Автоматическая сортировка элементов

3. Добавление и удаление элементов

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

// Добавление одного элемента
listBox1.Items.Add("Элемент 1");

// Добавление массива элементов
string[] items = { "Яблоко", "Апельсин", "Банан" };
listBox1.Items.AddRange(items);

// Добавление объекта
listBox1.Items.Add(new Product("Молоко", 50));

Удаление элементов из ListBox

// Удаление по индексу
listBox1.Items.RemoveAt(0);

// Удаление по значению
listBox1.Items.Remove("Апельсин");

// Очистка всего списка
listBox1.Items.Clear();

4. Обработка событий ListBox

Основные события ListBox:

Пример обработки SelectedIndexChanged

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listBox1.SelectedIndex != -1)
    {
        string selectedItem = listBox1.SelectedItem.ToString();
        MessageBox.Show($"Вы выбрали: {selectedItem}");
    }
}

Работа с ListBox и базами данных

1. Подключение к базе данных и загрузка данных

Для работы с базами данных в C# можно использовать Entity Framework или другие ORM. Ниже представлен пример подключения к базе данных и загрузки данных в ListBox.

Пример подключения и загрузки данных

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;

namespace твой_проект
{
    public partial class MainWindow : Window
    {
        // Подключение к БД
        сущность_бд db = new сущность_бд();

        // Глобальные коллекции
        List<Таблица1> глобальная_переменная = new List<Таблица1>();
        double переменная_расчета = 0;

        public MainWindow()
        {
            InitializeComponent();

            переменная_расчета = метод_расчета();

            глобальная_переменная = db.Таблица.ToList();

            for (int i = 0; i < глобальная_переменная.Count; i++)
            {
                твое_название_listbox.Items.Add(
                    глобальная_переменная[i].Таблица_.Столбец + " | " +
                    глобальная_переменная2[i].Столбец.PadRight(60) + переменная_расчета + "\n" +
                    "Текст: " + глобальная_переменная[i].Столбец + "\n"
                );
            }
        }

        public double метод_расчета()
        {
            глобальная_переменная = db.Таблица.ToList();
            глобальная_переменная2 = db.Таблица2.ToList();

            for (int i = 0; i < глобальная_переменная.Count; i++)
            {
                переменная_расчета = глобальная_переменная[i].Столбец *
                глобальная_переменная[i].ТаблицаВнешн_Столбец);
            }

            return переменная_расчета;
        }

        private void название_listbox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            название_окна переменная = new название_окна(название_листбокса.SelectedIndex);
            переменная.Show();
            this.Close();
        }
    }
}

Примечание: Убедитесь, что все необходимые пространства имен подключены и контекст базы данных правильно настроен.

section id="advanced-content" class="content-section">

Расширенные возможности ListBox

1. Фильтрация данных

Фильтрация данных позволяет пользователю искать и отображать только те элементы, которые соответствуют определенным критериям.

Пример фильтрации данных

private void ФильтроватьДанные(string фильтр)
{
    твое_название_listbox.Items.Clear();

    var отфильтрованныеДанные = глобальная_переменная
        .Where(элемент => элемент.Столбец.Contains(фильтр))
        .ToList();

    foreach (var элемент in отфильтрованныеДанные)
    {
        твое_название_listbox.Items.Add(
            $"{элемент.Таблица_.Столбец} | " +
            $"{элемент.Столбец.PadRight(60)} {переменная_расчета}\n" +
            $"Текст: {элемент.Столбец}\n"
        );
    }
}

2. Сортировка данных

Сортировка данных позволяет упорядочить элементы в ListBox по определенному критерию.

Пример сортировки данных

private void СортироватьДанные()
{
    var отсортированныеДанные = глобальная_переменная
        .OrderBy(элемент => элемент.Столбец)
        .ToList();

    твое_название_listbox.Items.Clear();

    foreach (var элемент in отсортированныеДанные)
    {
        твое_название_listbox.Items.Add(
            $"{элемент.Таблица_.Столбец} | " +
            $"{элемент.Столбец.PadRight(60)} {переменная_расчета}\n" +
            $"Текст: {элемент.Столбец}\n"
        );
    }
}

3. Взаимодействие с пользователем

Улучшенное взаимодействие с пользователем может включать в себя обработку событий, таких как двойной клик на элементе ListBox.

Пример обработки двойного клика

private void твое_название_listbox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    if (твое_название_listbox.SelectedIndex != -1)
    {
        var выбранныйЭлемент = глобальная_переменная[твое_название_listbox.SelectedIndex];
        MessageBox.Show($"Вы выбрали: {выбранныйЭлемент.Таблица_.Столбец}");
    }
}

Примечание: Эти примеры демонстрируют, как можно расширить функциональность ListBox для улучшения взаимодействия с пользователем и обработки данных.