Полное руководство по работе с ListBox в Windows Forms и WPF
ListBox (список) - один из наиболее часто используемых элементов управления в C# приложениях. Он позволяет отображать список элементов, из которых пользователь может выбирать один или несколько вариантов.
Основные возможности ListBox
- Отображение списка текстовых или сложных элементов
- Поддержка одиночного и множественного выбора
- Возможность привязки данных (data binding)
- Гибкая настройка внешнего вида элементов
- Сортировка и фильтрация элементов
- Интеграция с базами данных
Когда использовать ListBox?
ListBox идеально подходит для ситуаций, когда нужно:
- Отобразить список файлов, товаров, пользователей и других сущностей
- Предоставить пользователю выбор из множества вариантов
- Показать результаты поиска или фильтрации
- Реализовать навигацию между разделами приложения
Примечание: В WPF ListBox обладает еще большей гибкостью и может отображать не только текст, но и сложные шаблоны элементов с изображениями, кнопками и другими контролами.
Основы работы с ListBox в Windows Forms
1. Добавление ListBox на форму
ListBox можно добавить на форму двумя способами:
- Через конструктор форм - перетащить элемент из панели инструментов
- Программно - создать экземпляр класса 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 - изменение выбранного элемента
- DoubleClick - двойной щелчок на элементе
- KeyDown/KeyUp - нажатие/отпускание клавиши
Пример обработки 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();
}
}
}
Примечание: Убедитесь, что все необходимые пространства имен подключены и контекст базы данных правильно настроен.
Расширенные возможности 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 для улучшения взаимодействия с пользователем и обработки данных.