Listbox c windows forms

Последнее обновление: 31.10.2015

Элемент ListBox представляет собой простой список. Ключевым свойством этого элемента является свойство Items, которое как раз и хранит набор
всех элементов списка.

Элементы в список могут добавляться как во время разработки, так и программным способом. В Visual Studio в окне Properties (Свойства) для
элемента ListBox мы можем найти свойство Items. После двойного щелчка на свойство нам отобразится окно для добавления элементов в список:

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

В пустое поле мы вводим по одному элементу списка — по одному на каждой строке. После этого все добавленные нами элементы окажутся
в списке, и мы сможем ими управлять:

Программное управление элементами в ListBox

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

Итак, все элементы списка входят в свойство Items, которое представляет собой коллекцию. Для добавления нового элемента в
эту коллекцию, а значит и в список, надо использовать метод Add, например: listBox1.Items.Add("Новый элемент");.
При использовании этого метода каждый добавляемый элемент добавляется в конец списка.

Можно добавить сразу несколько элементов, например, массив. Для этого используется метод AddRange:

string[] countries = { "Бразилия", "Аргентина", "Чили", "Уругвай", "Колумбия" };
listBox1.Items.AddRange(countries);

Вставка элементов

В отличие от простого добавления вставка производится по определенному индексу списка с помощью метода Insert:

listBox1.Items.Insert(1, "Парагвай");

В данном случае вставляем элемент на вторую позицию в списке, так как отсчет позиций начинается с нуля.

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

Для удаления элемента по его тексту используется метод Remove:

listBox1.Items.Remove("Чили");

Чтобы удалить элемент по его индексу в списке, используется метод RemoveAt:

listBox1.Items.RemoveAt(1);

Кроме того, можно очистить сразу весь список, применив метод Clear:

listBox1.Items.Clear();

Доступ к элементам списка

Используя индекс элемента, можно сам элемент в списке. Например, получим первый элемент списка:

string firstElement = listBox1.Items[0];

Свойство Count возвращает количество элементов в списке:

int number = listBox1.Items.Count;

Выделение элементов списка

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

  • SelectedIndex: возвращает или устанавливает номер выделенного элемента списка. Если выделенные элементы отсутствуют, тогда
    свойство имеет значение -1

  • SelectedIndices: возвращает или устанавливает коллекцию выделенных элементов в виде набора их индексов

  • SelectedItem: возвращает или устанавливает текст выделенного элемента

  • SelectedItems: возвращает или устанавливает выделенные элементы в виде коллекции

По умолчанию список поддерживает выделение одного элемента. Чтобы добавить возможность выделения нескольких элементов,
надо установить у его свойства SelectionMode значение MultiSimple.

Чтобы выделить элемент програмно, надо применить метод SetSelected(int index, bool value),
где index — номер выделенного элемента. Если второй параметр — value имеет значение true, то элемент по указанному индексу
выделяется, если false, то выделение наоборот скрывается:

listBox1.SetSelected(2, true); // будет выделен третий элемент

Чтобы снять выделение со всех выделенных элементов, используется метод ClearSelected.

Событие SelectedIndexChanged

Из всех событий элемента ListBox надо отметить в первую очередь событие SelectedIndexChanged, которое возникает при изменении выделенного элемента:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        string[] countries = { "Бразилия", "Аргентина", "Чили",  "Уругвай", "Колумбия" };
        listBox1.Items.AddRange(countries);
        
		listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
    }

    void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string selectedCountry = listBox1.SelectedItem.ToString();
        MessageBox.Show(selectedCountry);
    }
}

В данном случае по выбору элемента списка будет отображаться сообщение с выделенным элементом.

В этой статье мы с вами посмотрим на то, как работать с элементом ListBox в C#. Стандартный элемент ListBox, предоставляемый в Windows Forms, может быть полезен в тех случаях, когда вам нужно выводить список каких-то элементов на форме и управлять этим списком элементов. Если вы работаете с проектом Windows Forms, то на панели элементов он будет представлен следующим образом:

В этой статье мы напишем простое приложение для Windows Forms, которое продемонстрирует основные возможности элемента ListBox. Ниже показан пример того, как будет выглядеть элемент ListBox на форме нашего приложения:

Создание проекта и главной формы приложения. Размещение элементов на форме

В среде разработки Microsoft Visual Studio создаём новый проект с типом «Приложение Windows Forms (.NET Framework)». В качестве имени проекта выбираем ListBoxSample, а главную форму называем FrmListBoxSample. Также переименовываем класс для главной формы на FrmListBoxSample.cs. В результате  мы должны получить следующий набор файлов и структуру нашего проекта в окне «Обозреватель решений»:

 

Для главной формы FrmListBoxSample нам нужно задать следующие свойства:

  • Text — [Allineed.Ru] Пример работы с элементом ListBox
  • Size — 694; 518
  • Name — FrmListBoxSample
  • StartPosition — CenterScreen

Теперь помещаем на форму элемент управления ListBox и устанавливаем для него следующие значения свойств:

  • Name — ListBoxElements
  • Location — 12; 12
  • Size — 247; 394

Для демонстрации основных возможностей элемента ListBox мы также организуем несколько кнопок, которые будут отвечать за добавление новых элементов в список, за удаление выбранного в списке элемента и за очистку содержимого списка (т.е. за удаление всех его элементов).

Перетащим на форму 3 кнопки (элемент управления Button на панели элементов) и зададим им следующие свойства:

1-я кнопка, для добавления элементов в список:

  • Name — ButtonAddElement
  • Size — 209; 23
  • Location — 457; 119
  • Text — &Добавить элемент в список

2-я кнопка, для удаления выбранного элемента из списка:

  • Name — ButtonRemoveSelectedElement
  • Size — 247; 23
  • Location — 12; 412
  • Text — &Удалить выбранный элемент

3-я кнопка, для очистки всего списка:

  • Name — ButtonClearList
  • Size — 247; 23
  • Location — 12; 441
  • Text — &Очистить список

Далее мы поддержим простое текстовое поле, куда мы будем вбивать название добавляемых в список элементов, а также текстовое поле для логирования событий, происходящих с элементом ListBox. Для этого найдем на панели элементов TextBox и два раза перетащим его на главную форму.

Зададим этим двум текстовым полям следующие свойства:

1-е поле для новых элементов списка:

  • Text — < Введите текст для элемента списка… >
  • Location — 274; 93
  • Size — 392; 20
  • Name — TextBoxNewElement

2-е поле для логирования событий элемента ListBox:

  • ScrollBars — Vertical
  • ReadOnly — True
  • Location — 274; 180
  • Size — 392; 226
  • Multiline — True
  • Name — TextBoxEvents

Напоследок разместим ещё 3 элемента на главной форме — это будут информационные метки и поле, в которое будем писать название выбранного элемента списка.

Находим в панели элементов Label и перетаскиваем три раза на главную форму. Задаём всем трём меткам следующие свойства:

1-я метка:

  • Text — Информация о выбранном элементе списка:
  • AutoSize — True
  • Location — 271; 12
  • Name — LabelInfoSelectedElement

2-я метка:

  • Text — События списка:
  • AutoSize — True
  • Location — 271; 151
  • Name — LabelEvents

Теперь все элементы размещены на форме и можно приступать к программированию действий на форме.

Пишем код для формы

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

Давайте сразу посмотрим, как можно добавлять элементы в список ListBox. Для этого в дизайнере формы дважды кликнем на любом месте нашей главной формы — в результате откроется редактор кода и для нас сгенерируется метод FrmListBoxSample_Load, являющийся обработчиком для события Load нашей формы. Это событие вызывается при загрузке формы, поэтому это хорошее место, чтобы здесь добавить какие-то элементы в наш список.

Для добавления элементов в список нужно использовать свойство списка Items и метод Add(object item). Добавим в метод такой код:

        private void FrmListBoxSample_Load(object sender, EventArgs e) {
            ListBoxElements.Items.Add("Первый элемент списка");
            ListBoxElements.Items.Add("Второй элемент списка");
            ListBoxElements.Items.Add("Третий элемент списка");
            ListBoxElements.Items.Add("Другой элемент списка");
            ListBoxElements.Items.Add("Какой-то ещё элемент списка");
        }

Теперь можно попробовать запустить наше приложение — заметим сразу, что при загрузке приложения список заполнился этими пятью элементами.

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

Давайте ещё создадим такой метод UpdateSelectedElementInfo():

        private void UpdateSelectedElementInfo() {
            if (ListBoxElements.SelectedIndex == -1) {
                LabelInfoSelectedElementContents.Text = "Не выбран ни один элемент списка";
                return;
            }

            string selectedItem = (string)ListBoxElements.SelectedItem;
            LabelInfoSelectedElementContents.Text = "Выбран элемент списка: " + selectedItem;
        }

Этот метод использует свойство SelectedIndex списка, чтобы проверить, не равно ли оно -1. Дело в том, что когда SelectedIndex равен -1, это значит, что ни один элемент списка не выбран. Если условие выполняется, мы выводим строку «Не выбран ни один элемент списка» в информационную панель, представленную меткой (Label) с именем LabelInfoSelectedElementContents. Сразу после обновления текста в этой метке мы возвращаемся из метода с помощью оператора return и ничего не делаем.

Но если свойство SelectedIndex не равно -1, это означает, что выбран какой-то элемент списка. Поэтому в следующих двух строках мы получаем доступ к выбранному элементу, одновременно приводя его к строке (здесь мы можем использовать явное приведение к типу string, поскольку в нашем тестовом приложении мы помещаем в список именно строки, а ничто иное):

            string selectedItem = (string)ListBoxElements.SelectedItem;
            LabelInfoSelectedElementContents.Text = "Выбран элемент списка: " + selectedItem;

Как видим, в переменную selectedItem мы записали значение выбранного в списке элемента и выводим его в информационную панель.

Теперь вызовем этот новый метод при загрузке формы — добавим строку с вызовом метода сразу после добавления элементов в список:

        private void FrmListBoxSample_Load(object sender, EventArgs e) {
            ListBoxElements.Items.Add("Первый элемент списка");
            ListBoxElements.Items.Add("Второй элемент списка");
            ListBoxElements.Items.Add("Третий элемент списка");
            ListBoxElements.Items.Add("Другой элемент списка");
            ListBoxElements.Items.Add("Какой-то ещё элемент списка");

            // обновить информацию о выделенном элементе
            UpdateSelectedElementInfo();
        }
Проверка изменения индекса выбранного элемента

Далее вернёмся в конструктор для главной формы и выберем список ListBoxElements на форме. В окне «Свойства» находим иконку «молнии» и нажимаем на неё — откроется список событий для списка. Среди доступных событий в разделе «Поведение» нужно найти SelectedIndexChanged и дважды кликнуть справа от название события:

 

В результате будет сгенерирован обработчик для этого события. Также разместим в нём вызов нового метода UpdateSelectedElementInfo():

        private void ListBoxElements_SelectedIndexChanged(object sender, EventArgs e) {
            UpdateSelectedElementInfo();            
        }

Теперь запустим наше приложение и проверим работу формы. Когда форма впервые запущена, то в информационной панели видим сообщение «Не выбран ни один элемент списка»:

Попробуем теперь выбрать элемент «Третий элемент списка» и увидим результат — содержимое информационной панели изменилось, указывая нам на выбранный элемент:

Добавляем служебные методы для управления доступностью кнопок и логирования событий

Нам понадобится несколько служебных методов для управления доступностью кнопок формы и для добавления записей в лог событий. Добавим следующие методы в код главной формы:

        private void EnableDisableButtonAddElement() {
            ButtonAddElement.Enabled = TextBoxNewElement.Text != "" && TextBoxNewElement.ForeColor != Color.LightGray;
        }

        private void EnableDisableButtonRemoveSelectedElement() {
            ButtonRemoveSelectedElement.Enabled = ListBoxElements.Items.Count > 0 && ListBoxElements.SelectedItem != null;
        }

        private void EnableDisableButtonClearList() {
            ButtonClearList.Enabled = ListBoxElements.Items.Count > 0;
        }

        private void AddLogRecord(string logMessage) {
            TextBoxEvents.Text += logMessage + "\r\n";
        }

        private void ClearTextBox() {
            TextBoxNewElement.ForeColor = Color.LightGray;
            TextBoxNewElement.Text = "< Введите текст для элемента списка... >";
        }

Методы управляют свойством Enabled для трёх кнопок главной формы, в зависимости от разных условий.

  • Кнопка «Добавить элемент в список» (ButtonAddElement) — доступна тогда, когда текстовое поле содержит текст и его цвет шрифта не равен светло-серому
  • Кнопка «Удалить выбранный элемент» (ButtonRemoveSelectedElement) — доступна тогда, когда есть элементы в списке и в списке выбран какой-то элемент. Обратите внимание, как проверяется условие на наличие элементов в списке — ListBoxElements.Items.Count > 0. Для проверки наличия выбранного элемента используем условие ListBoxElements.SelectedItem != null
  • Кнопка «Очистить список» (ButtonClearList) — также доступна при наличии элементов в списке, при этом не обязательно проверять, чтобы какой-то элемент был выбран

Метод AddLogRecord(string logMessage) просто прибавляет к текущему тексту, содержащемуся в текстовом поле TextBoxEvents, ту строку logMessage, которую ему подают во входном параметре.

Метод ClearTextBox() устанавливает светло-серый цвет шрифта для текстового поля, куда добавляются новые элементы, а также заполняет текстовое поле шаблонным сообщением.

Программируем оставшиеся события

При загрузке формы нам нужно сразу блокировать кнопку «Добавить элемент в список», т.к. она должна быть доступна только тогда, когда цвет шрифта отличен от светло-серого, и есть какой-то текст в текстовом поле.

Для этого вызовем последовательно методы ClearTextBox() и EnableDisableButtonAddElement() в конце обработчика загрузки формы FrmListBoxSample_Load:

        private void FrmListBoxSample_Load(object sender, EventArgs e) {
            ListBoxElements.Items.Add("Первый элемент списка");
            ListBoxElements.Items.Add("Второй элемент списка");
            ListBoxElements.Items.Add("Третий элемент списка");
            ListBoxElements.Items.Add("Другой элемент списка");
            ListBoxElements.Items.Add("Какой-то ещё элемент списка");

            UpdateSelectedElementInfo();

            ClearTextBox();
            EnableDisableButtonAddElement();            
        }

Далее сделаем так, чтобы текстовое поле с именем TextBoxNewElement, которое используется для добавления нового элемента в список, затирало своё текущее содержимое при получении фокуса и переключало цвет шрифта на обычный чёрный. Также мы хотим, чтобы при потере фокуса с текстового поля — если мы ничего не ввели в поле — цвет шрифта устанавливался обратно на светло-серый и содержимое текстового поля заполнялось текстом «< Введите текст для элемента списка… >».

Для достижения этих эффектов в представлении конструктора главной формы выбираем элемент TextBoxNewElement, переходим на вкладку с событиями и дважды кликаем мышью справа от события Enter, а потом точно так же кликаем справа от события Leave. В результате для нас сгенерируется методы TextBoxNewElement_Enter и TextBoxNewElement_Leave которые мы заполняем следующим образом:

        private void TextBoxNewElement_Enter(object sender, EventArgs e) {           
            if (TextBoxNewElement.ForeColor == Color.LightGray) {
                TextBoxNewElement.Text = "";
                TextBoxNewElement.ForeColor = SystemColors.WindowText;
            }
        }

        private void TextBoxNewElement_Leave(object sender, EventArgs e) {
            if (TextBoxNewElement.Text == "") {
                ClearTextBox();
            }
        }

Мы также хотим, чтобы при наборе текста в текстовом поле TextBoxNewElement автоматически изменялась доступность кнопки «Добавить элемент в список». Для этого нам нужно сгенерировать обработчик для события TextChanged, которое вызывается при любом изменении текста в текстовом поле. Аналогично тому, как мы выше сгенерировали обработчики для событий Enter и Leave, выбираем текстовое поле на форме, затем в окне событий дважды кликаем напротив события TextChanged. Будет сгенерирован обработчик TextBoxNewElement_TextChanged, в котором мы просто пишем вызов метода EnableDisableButtonAddElement():

        private void TextBoxNewElement_TextChanged(object sender, EventArgs e) {
            EnableDisableButtonAddElement();
        }
Добавление новых элементов в список по нажатию на кнопку

Теперь мы напишем код для добавления новых элементов в список. Текст для нового элемента мы будем получать из поля TextBoxNewElement.

В представлении конструктора формы находим кнопку «Добавить элемент в список» (ButtonAddElement) и дважды кликаем на ней мышью. В результате будет сгенерирован код для метода ButtonAddElement_Click — это метод-обработчик клика на кнопке.

Напишем в нём следующий код:

        private void ButtonAddElement_Click(object sender, EventArgs e) {
            AddLogRecord("Добавлен новый элемент в список: " + newListElement);
            string newListElement = TextBoxNewElement.Text;
            ListBoxElements.Items.Add(newListElement);
            ClearTextBox();

            EnableDisableButtonRemoveSelectedElement();
            EnableDisableButtonClearList();
        }

Первой строкой мы добавляем в лог сообщений информацию о добавленном элементе.

В переменную newListElement мы получаем текст из текстового поля, а затем для списка вызываем метод ListBoxElement.Items.Add — точно так же, как это делали при загрузке формы. Только сейчас текст для очередного элемента мы можем вбить сами через текстовое поле формы.

Как только мы добавили элемент в список, мы очищаем текстовое поле с помощью ClearTextBox(), чтобы дать возможность сразу ввести следующий элемент. Мы также регулируем доступность кнопок «Удалить выбранный элемент» и «Очистить список» вызовами методов EnableDisableButtonRemoveSelectedElement() и EnableDisableButtonClearList(), соответственно.

Удаление выбранного элемента из списка

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

Для этого на форме находим эту кнопку и дважды кликаем на ней — будет сгенерирован обработчик клика на кнопке с именем ButtonRemoveSelectedElement_Click. Напишем в нём следующий код:

        private void ButtonRemoveSelectedElement_Click(object sender, EventArgs e) {
            if (ListBoxElements.SelectedItem != null) {
                AddLogRecord("Удалён элемент списка: " + ListBoxElements.SelectedItem);
                ListBoxElements.Items.Remove(ListBoxElements.SelectedItem);
            }

            EnableDisableButtonRemoveSelectedElement();
            EnableDisableButtonClearList();
        }

Немного разберём этот код — сначала мы проверяем, что выбранный элемент вообще существует — с помощью проверки ListBoxElements.SelectedItem != null.

Если есть выбранный элемент в списке, то мы войдем в условие if и остаётся добавить запись в лог об удалении элемента из списка — мы вызываем метод AddLogRecord и удаляем сам элемент из списка при помощи вызова ListBoxElements.Items.Remove(ListBoxElements.SelectedItem).

В конце метода идут вызовы двух методов для регулировки доступности кнопок.

Очистка всего списка

Для очистки списка и удаления всех его элементов используется метод Clear() для свойства Items списка. Давайте найдем на форме кнопку «Очистить список» и дважды кликнем на ней. Сгенерируется обработчик ButtonClearList_Click, где напишем следующий код:

        private void ButtonClearList_Click(object sender, EventArgs e) {
            ListBoxElements.Items.Clear();
            EnableDisableButtonClearList();
            EnableDisableButtonRemoveSelectedElement();
            AddLogRecord("Список полностью очищен");
        }

Как видим, при клике на кнопку мы очищаем полностью список, затем делаем вызов двух методов для регулировки доступности кнопок и, наконец, добавляем строку «Список полностью очищен» в лог.

Обработка события клика мышью на списке

Помимо того, что мы можем обрабатывать событие SelectedIndexChanged, возникающее при изменении выбранного элемента списка, мы также можем реагировать на клики мышью на списке.

Давайте вернёмся к представлению конструктора главной формы, выберем на форме наш список ListBoxElements и перейдем к его событиям (т.е. нажмём на иконку «молнии» в окне «Свойства»). Найдем в списке событие Click и дважды кликнем напротив него. В сгенерированном методе-обработчике напишем следующий код в одну строку — вызов метода AddLogRecord:

        private void ListBoxElements_MouseClick(object sender, MouseEventArgs e) {
            AddLogRecord("[MouseClick] Клик мышью: Кнопка = " + e.Button + ", Кликов = " + e.Clicks + ", Положение = " + e.Location);            
        }

Эта строка кода просто добавит в лог сообщение о том, что произошёл клик мышью на списке и выведет различную информацию о кнопке, количестве кликов и координатах щелчка мышью. Все эти параметры доступны через параметр e, имеющий тип MouseEventArgs.

Очистка лога и завершающая логика

Напоследок нужно доделать пару вещей на нашей форме — во-первых, реализуем логику удаления всех сообщений в логе. Для этого находим на форме кнопку «Очистить лог событий» и дважды кликаем на ней. Будет сгенерирован обработчик события Click, в котором напишем всего одну строку кода, очищающую наше текстовое поле с логом:

        private void ButtonClearLog_Click(object sender, EventArgs e) {
            TextBoxEvents.Text = "";
        }

И последнее, что нам осталось сделать — находим уже написанный метод ListBoxElements_SelectedIndexChanged и добавляем в его конец вызов метода EnableDisableButtonRemoveSelectedElement():

        private void ListBoxElements_SelectedIndexChanged(object sender, EventArgs e) {
            UpdateSelectedElementInfo();
            EnableDisableButtonRemoveSelectedElement();
        }

Это необходимо, чтобы при изменении индекса выбранного элемента в списке изменялась доступность кнопки «Удалить выбранный элемент».

Код нашего тестового приложения полностью написан и готов. Мы разобрали весь код главной формы приложения, и теперь пришло время её протестировать. Запускаем приложение и пробуем выполнить разные действия со списком — добавляем новые элементы в список, выбираем существующие и пробуем их удалить. Также пробуем очистить полностью список. Всё работает, а в логе «События списка» отображаются все сообщения о выполненных действиях на форме.

 

Здесь можно скачать пример готового проекта для среды Microsoft Visual Studio из данной статьи.

Спасибо за внимание и удачи! Пишите свои вопросы и отзывы в комментариях, внизу под статьёй.

Last Updated :
05 Sep, 2019

In Windows Forms, ListBox control is used to show multiple elements in a list, from which a user can select one or more elements and the elements are generally displayed in multiple columns. The ListBox class is used to represent the windows list box and also provide different types of properties, methods, and events. It is defined under System.Windows.Forms namespace. The ListBox class contains three different types of collection classes, i.e.

  • ListBox.ObjectCollection: This class holds all the elements contained in the ListBox control.
  • ListBox.SelectedObjectCollection: This class holds a collection of the selected items which is a subset of the items contained in the ListBox control.
  • ListBox.SelectedIndexCollection: This class holds a collection of the selected indexes, which is a subset of the indexes of the ListBox.ObjectCollection and these indexes specify elements that are selected.

In C# you can create a ListBox in the windows form by using two different ways:

1. Design-Time: It is the easiest way to create a ListBox as shown in the following steps:

  • Step 1: Create a windows form as shown in the below image:
    Visual Studio -> File -> New -> Project -> WindowsFormApp

  • Step 2: Next, drag and drop the ListBox control from the toolbox to the form.

  • Step 3: After drag and drop you will go to the properties of the ListBox control to modify ListBox according to your requirement.

    Output:

2. Run-Time: It is a little bit trickier than the above method. In this method, you can create a ListBox control programmatically with the help of syntax provided by the ListBox class. The following steps show how to set the create ListBox dynamically:

  • Step 1: Create a ListBox control using the ListBox() constructor is provided by the ListBox class.
    // Creating a ListBox control
    ListBox mylist = new ListBox(); 
    
  • Step 2: After creating ListBox control, set the property of the ListBox control provided by the ListBox class.
    ListBox mylist = new ListBox(); 
            mylist.Location = new Point(287, 109); 
            mylist.Size = new Size(120, 95); 
            mylist.ForeColor = Color.Purple; 
            mylist.Items.Add(123); 
            mylist.Items.Add(456); 
            mylist.Items.Add(789);
    
  • Step 3: And last add this ListBox control to the form using the following statement:
    // Adding ListBox control 
    // to the form 
    this.Controls.Add(mylist);
    

    Example:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using System.Windows.Forms;

    namespace WindowsFormsApp25 {

    public partial class Form1 : Form {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            ListBox mylist = new ListBox();

            mylist.Location = new Point(287, 109);

            mylist.Size = new Size(120, 95);

            mylist.ForeColor = Color.Purple;

            mylist.Items.Add(123);

            mylist.Items.Add(456);

            mylist.Items.Add(789);

            this.Controls.Add(mylist);

        }

    }

    }

    Output:

Constructor

Constructor Description
ListBox() This Constructors is used to initialize a new instance of the ListBox class.

Properties

Property Description
AutoSize This property is used to get or set a value that indicates whether the control resizes based on its contents.
BackColor This property is used to get or set the background color for the control.
BorderStyle This property indicates the border style for the control.
Font This property is used to get or set the font of the text displayed by the control.
ForeColor This property is used to get or set the foreground color of the control.
Height This property is used to get or set the height of the control.
Location This property is used to get or set the coordinates of the upper-left corner of the ListBox control relative to the upper-left corner of its form.
Name This property is used to get or set the name of the control.
TabStop This property is used to get or set a value that shows whether the user can press the TAB key to provide the focus to the ListBox.
Size This property is used to get or set the height and width of the control.
Text This property is used to get or set the text to be displayed in the RichTextBox control.
Visible This property is used to get or set a value indicating whether the control and all its child controls are displayed.
Width This property is used to get or set the width of the control.
ColumnWidth This property is used to get or set the width of columns in a multicolumn ListBox.
HorizontalExtent This property is used to get or set the width by which the horizontal scroll bar of a ListBox can scroll.
ItemHeight This property is used to get or set the height of an item in the ListBox.
Items This property is used to get the items of the ListBox.
PreferredHeight This property is used to get the combined height of all items in the ListBox.
SelectedIndex This property is used to get or set the zero-based index of the currently selected item in a ListBox.
SelectedItem This property is used to get or set the currently selected item in the ListBox.
SelectedIndices This property is used to get a collection that contains the zero-based indexes of all currently selected items in the ListBox.
Sorted This property is used to get or set a value indicating whether the items in the ListBox are sorted alphabetically.
TopIndex This property is used to get or set the index of the first visible item in the ListBox.

A C# ListBox control provides a user interface to display a list of items. Users can select one or more items from the list. A ListBox may be used to display multiple columns and these columns may have images and other controls.

In this tutorial, we will learn how to create a C# ListBox control at design-time as well as at run-time. We will also see how to create a multiple-column ListBox control with single and multiple selections. This article also covers most of the properties and methods of the ListBox control.

Creating a C# ListBox

There are two approaches to create a ListBox control in Windows Forms. Either we can use the Forms designer to create a control at design-time or we can use the ListBox class to create a control at run-time.

Create a ListBox at Design-time

In our first approach, we are going to create a ListBox control at design-time using the Forms designer.

To create a ListBox control at design-time, we simply drag a ListBox control from the Toolbox and drop it to a Form in Visual Studio. After you drag and drop a ListBox onto a Form, the ListBox looks as in Figure 1. Once a ListBox is on the Form, you can move it around and resize it using the mouse and set its properties and events.

ListBoxImg1.jpg

 

Figure 1

Create a ListBox Dynamically

The ListBox class represents a ListBox control in Windows Forms. To create a ListBox control at run-time, we create an instance of the ListBox class, set its properties and add a ListBox object to the Form controls.

The first step to create a dynamic ListBox is to create an instance of the ListBox class. The following code snippet creates a ListBox control object:

  1. ListBox listBox1 = new ListBox();  

In the next step, you may set the properties of a ListBox control. The following code snippet sets the location, width, height, background color, foreground color, Text, Name, and Font properties of a ListBox:

  1. listBox1.Location = new System.Drawing.Point(12, 12);  
  2. listBox1.Name = «ListBox1»;  
  3. listBox1.Size = new System.Drawing.Size(245, 200);  
  4. listBox1.BackColor = System.Drawing.Color.Orange;  
  5. listBox1.ForeColor = System.Drawing.Color.Black;  

Once the ListBox control is ready with its properties, the next step is to add the ListBox to a Form. To do so, we use the Form.Controls.Add method that adds a ListBox control to the Form controls and displays it on the Form based on the location and size of the control. The following code snippet adds a ListBox control to the current Form: 

  1. Controls.Add(listBox1);  

C# ListBox Properties

The easiest way to set properties is from the Properties Window. You can open the Properties window by pressing F4 or by right-clicking on a control and selecting the «Properties» menu item. The Properties window looks as in Figure 2.

 

Figure 2

ListBox Name Property

The Name property represents a unique name of a ListBox control. It is used to access the control in the code. The following code snippet sets and gets the name and text of a ListBox control:

  1. listBox1.Name = «ListBox1»;  

ListBox Location, Height, Width and Size Properties

The Location property takes a Point that specifies the starting position of the ListBox on a Form. You may also use the Left and Top properties to specify the location of a control from the top-left corner of the Form.  The Size property specifies the size of the control. We can also use the Width and Height properties instead of the Size property. The following code snippet sets the Location, Width, and Height properties of a ListBox control:

  1. listBox1.Location = new System.Drawing.Point(12, 12);  
  2. listBox1.Size = new System.Drawing.Size(245, 200);  

ListBox Font

The Font property represents the font of the text of a ListBox control. If you click on the Font property in Properties window, you will see the Font name, size and other font options. The following code snippet sets the Font property at run-time:

  1. listBox1.Font = new Font(«Georgia», 16);  

ListBox Background Color and Foreground Color

The BackColor and ForeColor properties are used to set the background and foreground colors of a ListBox respectively. If you click on these properties in the Properties window, then the Color Dialog pops up.

Alternatively, you can set background and foreground colors at run-time. The following code snippet sets the BackColor and ForeColor properties:

  1. listBox1.BackColor = System.Drawing.Color.Orange;  
  2. listBox1.ForeColor = System.Drawing.Color.Black;  

The new ListBox with background and foreground looks as in Figure 3.

 

Figure 3

You can also set the borders style of a ListBox by using the BorderStyle property. The BorderStyle property is represented by a BorderStyle enumeration that has three values: FixedSingle, Fixed3D, and None.The default value of the border style is Fixed3D. The following code snippet sets the border style of a ListBox to FixedSingle:

  1. listBox1.BorderStyle = BorderStyle.FixedSingle;  

ListBox Items

The Items property is used to add and work with items in a ListBox. We can add items to a ListBox at design-time from the Properties Window by clicking on the Items Collection as you can see in Figure 4.

 

Figure 4

When you click on the Collections, the String Collection Editor window will pop up where you can type strings. Each line added to this collection will become a ListBox item. I add four items as you can see from Figure 5.

ListBoxImg5.jpg

 

Figure 5

The ListBox looks as in Figure 6.

 

Figure 6

You can add the same items at run-time by using the following code snippet:

  1. listBox1.Items.Add(«Mahesh Chand»);  
  2. listBox1.Items.Add(«Mike Gold»);  
  3. listBox1.Items.Add(«Praveen Kumar»);  
  4. listBox1.Items.Add(«Raj Beniwal»);  

Getting All Items of a ListBox

To get all items, we use the Items property and loop through it to read all the items. The following code snippet loops through all items and adds item contents to a StringBuilder and displays it in a MessageBox:

  1. private void GetItemsButton_Click(object sender, EventArgs e)  
  2. {  
  3.     System.Text.StringBuilder sb = new System.Text.StringBuilder();  
  4.     foreach (object item in listBox1.Items)  
  5.     {  
  6.         sb.Append(item.ToString());  
  7.         sb.Append(» «);  
  8.     }  
  9.     MessageBox.Show(sb.ToString());  
  10. }  

Selected Text and Item of a ListBox

The Text property is used to set and get text of a ListBox. The following code snippet sets and gets the current text of a ListBox:

  1. MessageBox.Show(listBox1.Text);  

We can also get text associated with the currently selected item using the Items property: 

  1. string selectedItem = listBox1.Items[listBox1.SelectedIndex].ToString();  

Why is the value of ListBox.SelectedText Empty?

The SelectedText property gets and sets the selected text in a ListBox only when a ListBox has focus on it. If the focus moves away from a ListBox then the value of SelectedText will be an empty string. To get the current text in a ListBox when it does not have focus, use the Text property.

C# ListBox Selection Mode and Selecting Items

The SelectionMode property defines how items are selected in a ListBox. The SelectionMode value can be one of the following four SelectionMode enumeration values:

  • None: No item can be selected.
  • One: Only one item can be selected.
  • MultiSimple: Multiple items can be selected. 
  • MultiExtended: Multiple items can be selected, and the user can use the SHIFT, CTRL, and arrow keys to make selections.

To select an item in a ListBox, we can use the SetSelect method that takes an item index and a true or false value where the true value represents the item to be selected.

The following code snippet sets a ListBox to allow multiple selection and selects the second and third items in the list:

  1. listBox1.SelectionMode = SelectionMode.MultiSimple;  
  2. listBox1.SetSelected(1, true);  
  3. listBox1.SetSelected(2, true);   

We can clear all selected items by calling the ClearSelected method, as in:

  1. listBox1.ClearSelected();  

How to disable item selection in a ListBox?

Just set the SelectionMode property to None.

Sorting Items of a ListBox

If the Sorted property is set to true then the ListBox items are sorted. The following code snippet sorts the ListBox items:

  1. listBox1.Sorted = true;  

Find Items in a ListBox

The FindString method is used to find a string or substring in a ListBox. The following code snippet finds a string in a ListBox and selects it if found:

  1. private void FindItemButton_Click(object sender, EventArgs e)  
  2. {  
  3.     listBox1.ClearSelected();  
  4.    
  5.     int index = listBox1.FindString(textBox1.Text);  
  6.    
  7.     if (index < 0)  
  8.     {  
  9.         MessageBox.Show(«Item not found.»);  
  10.         textBox1.Text = String.Empty;  
  11.     }  
  12.     else  
  13.     {  
  14.         listBox1.SelectedIndex = index;  
  15.     }  
  16. }  

ListBox SelectedIndexChanged Event Hander

The SelectedIndexChanged event is fired when the item selection is changed in a ListBox. You can add the event handler using the Properties Widow and selecting the Event icon and double-clicking on SelectedIndexChanged as you can see in Figure 7. 

ListBoxImg7.jpg

 

Figure 7

The following code snippet defines and implements these events and their respective event handlers. You can use this same code to implement an event at run-time. 

  1. listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);   
  2.    
  3. private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)  
  4. {  
  5.     MessageBox.Show(listBox1.SelectedItem.ToString());  
  6. }  

Now every time you change the selection in the ListBox, you will see the selected item displayed in a MessageBox.

Data Binding in ListBox

The DataSource property is used to bind a collection of items to a ListBox.

The following code snippet is a simple data binding example where an ArrayList is bound to a ListBox: 

  1. private void DataBindingButton_Click(object sender, EventArgs e)  
  2. {  
  3.     ArrayList authors = new ArrayList();  
  4.     authors.Add(«Mahesh Chand»);  
  5.     authors.Add(«Mike Gold»);  
  6.     authors.Add(«Raj Kumar»);  
  7.     authors.Add(«Praveen Kumar»);  
  8.    
  9.     listBox1.Items.Clear();  
  10.     listBox1.DataSource = authors;  
  11. }   

If you are binding an object with multiple properites, you must specify which property you are displaying by using the DisplayMember property, as in:

  1. listBox1.DataSource = GetData();  
  2. listBox1.DisplayMember = «Name»;  

Summary

In this article, we discussed how to create a ListBox control in Windows Forms. After that, we saw how to use various properties and methods. See the following list of articles to learn more about the ListBox control.

Further Readings

Here are some more articles and tutorials about ListBox that you may want to read:

  • Transferring data from one ListBox to another in WPF
  • Owner Draw ListBox Control with Images
  • Editable ListBox in C#
  • Databinding in Listbox from XML file
  • Using ListBox in C#
  • Adding & Retrieving items from listbox and check list box
  • Owner Draw ListBox Control in Windows Forms and C#
  • Editable ListView Control
  • Adding Items to a ListBox
  • Checked ListBox Control In C#
  • Editable ListBox Control

кнопка

Кнопки являются одним из самых простых элементов управления и в основном используются для выполнения некоторого кода, когда пользователь хочет.

Здесь у нас действительно простой случай, показывается кнопка «Сообщение» при нажатии кнопки. Мы добавляем кнопку в форму, назовите ее cmdShowMessage используется в коде, чтобы идентифицировать объект и установить текст кнопок для отображения сообщения.

Нам просто нужно дважды щелкнуть кнопку на визуальном дизайнере, а Visual Studio создаст код для события click. Теперь нам просто нужно добавить код для MessageBox:

private void cmdShowMessage_Click(object sender, EventArgs e)
{
  MessageBox.Show("Hello world!");
}

Если мы запустим программу сейчас и нажмите кнопку, мы увидим сообщение:

Текстовое окно

Текстовые поля позволяют пользователю вводить данные в программу.

Мы собираемся изменить форму и добавить текстовое поле, чтобы окно сообщения отображало нам сообщение, которое хочет пользователь. Теперь наша форма выглядит так:

Затем измените событие нажатия кнопки, чтобы использовать текст текстового поля:

private void cmdShowMessage_Click(object sender, EventArgs e)
{
  string UserText = txtUserMessage.Text;
  MessageBox.Show(UserText);
}

Как вы можете видеть , что мы используем .Text свойство Textbox , что является текст , содержащийся в texbox.

Если мы запустим программу, мы сможем писать в текстовом поле. Когда мы нажимаем кнопку, MessageBox покажет текст, который мы написали:

Поле со списком

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

Мы собираемся изменить форму и добавить combobox, чтобы в окне сообщений отображалось сообщение, которое пользователь хочет из списка, который мы предоставим.

После добавления комбо в форму теперь добавим список опций в комбо. Для этого нам нужно изменить свойство Items :

введите описание изображения здесь

Теперь нам нужно изменить код события click:

private void cmdShowMessage_Click(object sender, EventArgs e)
{
  string OptionText = cboSelectOption.SelectedItem.ToString();
  MessageBox.Show(OptionText);
}

Как вы видите, мы используем свойство SelectedItem , оно содержит объект выбранной опции. Поскольку нам нужна строка для показа, и компилятор не знает, является ли объект строкой или нет, нам нужно использовать метод ToString() .

Если мы запустим программу, мы сможем выбрать тот вариант, который мы предпочитаем, и когда мы нажмем кнопку, появится окно сообщения:

Чтобы получать уведомление, когда пользователь выбирает элемент из поля со списком, используйте событие SelectionChangeCommitted . Мы могли бы использовать событие SelectedIndexChanged , но это также возникает, когда мы программным образом меняем элемент select в combobox.

CheckBox

Флажок — это элемент управления, который позволяет пользователю получать boolean значения от пользователя по специальному вопросу типа «Все в порядке?». ,

Имеет событие под названием CheckedChanged , которое происходит всякий раз, когда свойство check изменяется.

Вот CheckBox, на который есть вопрос «Проверено?». ,

Мы получили этот MessageBox из события CheckedChanged ,

private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            bool IsChecked = checkBox1.Checked; 
            MessageBox.Show(IsChecked.ToString());
        }

Если CheckBox IsChecked переменная IsChecked будет true .

Если CheckBox не установлен — переменная IsChecked будет false .

ListBox

Listbox — это элемент управления, который может содержать коллекцию объектов. Listbox похож на Combobox но в Combobox ; Только избранные элементы видны пользователю. В Listbox ; все элементы видны пользователю.

Как добавить элементы в ListBox?

private void Form3_Load(object sender, EventArgs e)
        {
            string test = "Trial";
            string test2 = "45";
            int numberTest = 43;
            decimal decimalTest = 130;
            
            listBox1.Items.Add(test);
            listBox1.Items.Add(test2);
            listBox1.Items.Add(numberTest);
            listBox1.Items.Add(decimalTest);
        }

Выход ;

Или могут быть предоставлены datasources данных,

private void Form3_Load(object sender, EventArgs e)
        {
            List<string> TestList = new List<string> { "test1", "test2", "test3", "44", "55" };
            listBox1.DataSource = TestList;
        }

Выход;

private void Form3_Load(object sender, EventArgs e)
        {
            SqlConnection Connection = new SqlConnection("Server=serverName;Database=db;Trusted_Connection=True;"); //Connetion to MS-SQL(RDBMS)
            Connection.Open(); //Connection open
            SqlDataAdapter Adapter = new SqlDataAdapter("Select * From TestTable", Connection); // Get all records from TestTable.
            DataTable DT = new DataTable();
            Adapter.Fill(DT); // Fill records to DataTable.
            listBox1.DataSource = DT; // DataTable is the datasource.
            listBox1.ValueMember = "TestID"; 
            listBox1.DisplayMember= "TestName";
        }

Правильный вывод ;

введите описание изображения здесь

Предоставление внешнего источника данных sql для listbox требуется, ValueMember и DisplayMember

Если НЕ будет выглядеть так,

Полезные события;

SelectedIndex_Changed;

Определить список для предоставления источника данных

private void Form3_Load(object sender, EventArgs e)
        {
            List<string> DataList = new List<string> {"test1" , "test2" , "test3" , "44" , "45" };
            listBox1.DataSource = TestList;
        }

В дизайне формы выберите « Listbox и нажмите F4, или с правой стороны щелкните значок подсветки.

Visual studio будет генерировать listBox1_SelectedIndexChanged для codebehind.

 private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int Index = listBox1.SelectedIndex;
            label1.Text = Index.ToString();
        }

Результат SelectedIndex_Changed ; (метка внизу показывает индекс каждого выбранного элемента)

SelectedValue_Changed; (Источник данных такой же, как и сверху, и вы можете сгенерировать это событие, например SelectedIndex_Changed)

private void listBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            label1.Text = listBox1.SelectedValue.ToString();
        }

Выход ;

NumericUpDown

NumericUpDown — это элемент управления, который выглядит как TextBox. Этот элемент управления позволяет пользователю отображать / выбирать номер из диапазона. Стрелки вверх и вниз обновляют значение текстового поля.

Контроль выглядит;

В диапазоне Form_Load можно установить.

private void Form3_Load(object sender, EventArgs e)
    {
        numericUpDown1.Maximum = 10;
        numericUpDown1.Minimum = -10; 
    }

Выход;

UpDownAlign будет устанавливать положение стрелок;

 private void Form3_Load(object sender, EventArgs e)
        {
            numericUpDown1.UpDownAlign = LeftRightAlignment.Left;
            
        }

Выход;

UpButton() увеличивает количество элементов управления. (можно вызывать из любого места. Я использовал button чтобы позвонить).

private void button1_Click(object sender, EventArgs e)
        {
            numericUpDown1.UpButton();
        }

**Выход

DownButton() уменьшает количество элементов управления. (можно вызывать из любого места. Я использовал button чтобы вызвать ее снова.)

 private void button2_Click(object sender, EventArgs e)
        {
            numericUpDown1.DownButton();
        }

Выход;

Полезные события


ValueChanged;

Это событие будет работать при нажатии стрелки вверх или вниз.

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            decimal result = numericUpDown1.Value; // it will get the current value
            if (result == numericUpDown1.Maximum) // if value equals Maximum value that we set in Form_Load.
            {
                label1.Text = result.ToString() + " MAX!"; // it will add "MAX" at the end of the label 
            }
            else if (result == numericUpDown1.Minimum) //  if value equals Minimum value that we set in Form_Load.
            {
                label1.Text = result.ToString() + " MIN!"; // it will add "MIN" at the end of the label 
            }
            else
            {
                label1.Text = result.ToString(); // If Not Max or Min, it will show only the number.
            }
        }

Выход ;

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Не удается найти usb накопитель windows 11 программа установки
  • Fonelab код активации для windows
  • Как поменять иконку меню пуск в windows 10
  • Код ошибки 30015 11 при установке office windows 10
  • Как переустановить драйвера на windows 10 pro