Improve Article
Save Article
Improve Article
Save Article
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. In ListBox, you are allowed to set the height and width of the ListBox in pixels using Size Property of the ListBox which makes your ListBox more attractive. You can set this property in two different ways:
1. Design-Time: It is the easiest way to set the size of the 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: Drag the ListBox control from the ToolBox and drop it on the windows form. You are allowed to place a ListBox control anywhere on the windows form according to your need.
- Step 3: After drag and drop you will go to the properties of the ListBox control to set the size of the ListBox.
Output:
2. RunTime: It is a little bit trickier than the above method. In this method, you can set the size of the ListBox control programmatically with the help of given syntax:
public System.Drawing.Size Size { get; set; }
Here, Size indicates the height and width of the ListBox in pixels. The following steps show how to set the size of the ListBox dynamically:
- Step 1: Create a list box using the ListBox() constructor is provided by the ListBox class.
// Creating ListBox using ListBox class constructor ListBox mylist = new ListBox();
- Step 2: After creating ListBox, set the Size property of the ListBox provided by the ListBox class.
// Setting the size of the ListBox mylist.Size = new Size(120, 95);
- Step 3: And last add this ListBox control to the form using Add() method.
// Add this ListBox 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:
Improve Article
Save Article
Improve Article
Save Article
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. In ListBox, you are allowed to set the height and width of the ListBox in pixels using Size Property of the ListBox which makes your ListBox more attractive. You can set this property in two different ways:
1. Design-Time: It is the easiest way to set the size of the 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: Drag the ListBox control from the ToolBox and drop it on the windows form. You are allowed to place a ListBox control anywhere on the windows form according to your need.
- Step 3: After drag and drop you will go to the properties of the ListBox control to set the size of the ListBox.
Output:
2. RunTime: It is a little bit trickier than the above method. In this method, you can set the size of the ListBox control programmatically with the help of given syntax:
public System.Drawing.Size Size { get; set; }
Here, Size indicates the height and width of the ListBox in pixels. The following steps show how to set the size of the ListBox dynamically:
- Step 1: Create a list box using the ListBox() constructor is provided by the ListBox class.
// Creating ListBox using ListBox class constructor ListBox mylist = new ListBox();
- Step 2: After creating ListBox, set the Size property of the ListBox provided by the ListBox class.
// Setting the size of the ListBox mylist.Size = new Size(120, 95);
- Step 3: And last add this ListBox control to the form using Add() method.
// Add this ListBox 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:
Soft17 5 / 5 / 3 Регистрация: 15.01.2017 Сообщений: 690 |
||||
1 |
||||
16.01.2019, 20:50. Показов 8422. Ответов 11 Метки нет (Все метки)
Как сделать: Пробую сделать… не получается..
Миниатюры
__________________
0 |
Aferuga 635 / 522 / 322 Регистрация: 20.05.2015 Сообщений: 1,455 |
||||||||||||
17.01.2019, 04:18 |
2 |
|||||||||||
Решение
Пробую сделать… не получается.. Потому что для начала надо поменять
в коде, либо в дизайнере.
1. Увеличить высоту строки (item) или расстояние между «item». Это есть у вас 46 строке.
2. Увеличить высоту шрифта. Проще конечно просто в дизайнере поменять, но можно и как-то так:
3. Сделать чтобы если строка содержит: Кликните здесь для просмотра всего текста
1 |
5 / 5 / 3 Регистрация: 15.01.2017 Сообщений: 690 |
|
17.01.2019, 08:39 [ТС] |
3 |
Проще конечно просто в дизайнере поменять, но можно и как-то так: Не могли бы вы прислать скрин или более подробнее описать? Я пробую изменить: «ItemHeight». Миниатюры
0 |
10365 / 5096 / 1824 Регистрация: 11.01.2015 Сообщений: 6,226 Записей в блоге: 34 |
|
17.01.2019, 09:05 |
4 |
Я пробую изменить: «ItemHeight». Это потому, что высота Item зависит от шрифта. Увеличьте размер шрифта, и увеличится размер ItemHeight. А вообще, если это для проф разработки, то я бы рекомендовал использовать альтернативные реализации ListBox. Например FastList.
2 |
Soft17 5 / 5 / 3 Регистрация: 15.01.2017 Сообщений: 690 |
||||
17.01.2019, 12:21 [ТС] |
5 |
|||
Aferuga, Не могли бы вы немного подкорректировать код, чтобы получить описанный ниже результат Я взял пример отсюда — ссылка. Кликните здесь для просмотра всего текста
Но получаю результат — см. рисунок 2
А вообще, если это для проф разработки, то я бы рекомендовал использовать альтернативные реализации ListBox. Например FastList. Буду пробовать. Изображения
0 |
Aferuga 635 / 522 / 322 Регистрация: 20.05.2015 Сообщений: 1,455 |
||||
18.01.2019, 08:21 |
6 |
|||
Решение
Не могли бы вы прислать скрин или более подробнее описать? Я же в самом начале написал что надо DrawMode поменять, если поменяете его в дизайнере, то сможете изменять ItemHeight там же в дизайнере.
Условие: Тогда так: Кликните здесь для просмотра всего текста
2 |
3 / 3 / 0 Регистрация: 14.07.2014 Сообщений: 13 |
|
27.03.2019, 13:26 |
7 |
Тогда так: Извините, а не подскажите, как бы теперь убрать перенос строк по словам? Скрин:
1 |
Aferuga 635 / 522 / 322 Регистрация: 20.05.2015 Сообщений: 1,455 |
||||
01.04.2019, 03:39 |
8 |
|||
но из-за этого(наверное из-за этого) строки, не из-за этого, а из-за указанного размера ItemHeight, если нужно чтобы размер итема изменялся в зависимости от количества строк в нём, то можно сделать как-то так: Кликните здесь для просмотра всего текста
2 |
3 / 3 / 0 Регистрация: 14.07.2014 Сообщений: 13 |
|
01.04.2019, 11:28 |
9 |
Здорово, спасибо! listBox1.HorizontalScrollbar = true; http://skrinshoter.ru/s/010419/3FXrmpd7?a
1 |
Aferuga 635 / 522 / 322 Регистрация: 20.05.2015 Сообщений: 1,455 |
||||
02.04.2019, 04:35 |
10 |
|||
Почему ползунки не работают? Мой код выше подразумевает, что будет перенос строки и не будет горизонтальной строки прокрутки. Добавлено через 5 часов 4 минуты Кликните здесь для просмотра всего текста
1 |
3 / 3 / 0 Регистрация: 14.07.2014 Сообщений: 13 |
|
02.04.2019, 14:59 |
11 |
Извиняюсь, полоса прокрутки есть(была и до этого), а вот ползунок появляться не хочет…
1 |
635 / 522 / 322 Регистрация: 20.05.2015 Сообщений: 1,455 |
|
03.04.2019, 05:33 |
12 |
Извиняюсь, полоса прокрутки есть(была и до этого), Да это понятно выше я имел ввиду рабочую полосу прокрутки.
а вот ползунок появляться не хочет… В моём предыдущем комментарии я уже написал решение.
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
03.04.2019, 05:33 |
12 |
В Windows Forms элемент управления ListBox используется для отображения нескольких элементов в списке, из которого пользователь может выбрать один или несколько элементов, и элементы обычно отображаются в нескольких столбцах. В ListBox вам разрешено устанавливать высоту и ширину ListBox в пикселях, используя свойство Size ListBox, что делает ваш ListBox более привлекательным. Вы можете установить это свойство двумя разными способами:
1. Design-Time: It is the easiest way to set the size of the ListBox as shown in the following steps:
2. RunTime: It is a little bit trickier than the above method. In this method, you can set the size of the ListBox control programmatically with the help of given syntax:
public System.Drawing.Size Size { get; set; }
Here, Size indicates the height and width of the ListBox in pixels. The following steps show how to set the size of the ListBox dynamically:
- Step 1: Create a list box using the ListBox() constructor is provided by the ListBox class.
// Creating ListBox using ListBox class constructor ListBox mylist = new ListBox();
- Step 2: After creating ListBox, set the Size property of the ListBox provided by the ListBox class.
// Setting the size of the ListBox mylist.Size = new Size(120, 95);
- Step 3: And last add this ListBox control to the form using Add() method.
// Add this ListBox 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:
Последнее обновление: 31.10.2015
Элемент ListBox представляет собой простой список. Ключевым свойством этого элемента является свойство Items, которое как раз и хранит набор
всех элементов списка.
Элементы в список могут добавляться как во время разработки, так и программным способом. В Visual Studio в окне Properties (Свойства) для
элемента ListBox мы можем найти свойство Items. После двойного щелчка на свойство нам отобразится окно для добавления элементов в список:
В пустое поле мы вводим по одному элементу списка — по одному на каждой строке. После этого все добавленные нами элементы окажутся
в списке, и мы сможем ими управлять:
Программное управление элементами в 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); } }
В данном случае по выбору элемента списка будет отображаться сообщение с выделенным элементом.
grig Пользователь Сообщений: 160 |
я смотрел информацию по этому вопросу. Есть варианты как изменить размер формы мышкой, наверное с привязкой к форме можно изменить размер ListBox-а, а к чему привязаться чтобы можно было(автоматически) задать сколько строк в ListBox показывать при изменении размеров формы. Может я не заметил обсуждений,подскажите |
Jungl Пользователь Сообщений: 830 |
grig, не совсем понятен вопрос относящийся к названию темы. Ну и примера нет(хоть картинкой, главное понять как ВЫ это видите/хотите). |
Юрий М Модератор Сообщений: 60394 Контакты см. в профиле |
Я понял так: меняем размер формы — меняется ВЫСОТА ЛистБокса. И, соответственно, количество видимых строк в нём. |
grig Пользователь Сообщений: 160 |
все правильно и главное — автоматически |
Юрий М Модератор Сообщений: 60394 Контакты см. в профиле |
#5 27.12.2016 23:45:05
А привязываться не нужно: изменение размера ЛистБокса повлечёт за собой изменение количества видимых строк. |
||
grig Пользователь Сообщений: 160 |
#6 28.12.2016 00:31:53 я имел в виду, чтобы процедура, которая отвечает за количество видимых строк — понимала, сколько строк надо вывести
|
||
Юрий М Модератор Сообщений: 60394 Контакты см. в профиле |
#7 28.12.2016 00:37:12
Не нужно никакой процедуры. Да и нет такой: сколько в окно ЛистБокса поместится строк, столько и будет. |
||
grig Пользователь Сообщений: 160 |
процедура в listBox выдает 20 строк(из массива на 20 значений). Если в listBox и на форме видно 20 строк, а после уменьшения формы и бокса будет видно только 5(остальные по идее будут или в скролле или не видны). Хотелось бы чтобы процедура после уменьшения формы понимала, что будет видно только 5 строк и массив превращается в массив на 5 значений и их выдает, а после увеличения формы и бокса выдавала — 20(массив превращается в массив на 20 значений). 5 и 20 это неважно(мне кажется это удобно — 5 это минимум,а 20 максимум). Можно плавно можно скачком. Главное при уменьшении показывает меньше значений(но все), а при увеличении тоже все и чтобы не было пустого места в listbox-е(форму уменьшают чтобы удобнее было работать, большая мешает). Я не упомянул про массив, поэтому наверно не очень было понятно |
vikttur Пользователь Сообщений: 47199 |
#9 28.12.2016 01:05:33
Совершенно не понимаю, зачем такие извращения? Если список не помещается в поле, то появляется полоса прокрутки. Да и «гуляние» размеров ListBox… Со сколькими формами работал, но ни разу не возникала такая потребность. Иногда задействовалось изменение высоты формы, чтобы скрыть/показать чего-нибудь (например, блок информации/подсказок). Но менять поля и резать списки… |
||
grig Пользователь Сообщений: 160 |
#10 28.12.2016 01:13:29
Вы исходите из того, что все 20 значений необходимы и они не так часто нужны, чтобы их выискивать с помощью полосы прокрутки. У меня другая ситуация. Желательно без полос прокрутки, а при желании увеличить количество строк в listbox-e Я не список режу я изменяю размер массива. Информация в массиве может изменяться быстрее, тогда(если надо) я увеличиваю размер массива(размером ListBox) или информация приходит медленнее и мне 5 строк хватает Изменено: grig — 28.12.2016 01:17:57 |
||
С.М. Пользователь Сообщений: 934 |
#11 28.12.2016 04:45:41
Прикрепленные файлы
|
|
grig Пользователь Сообщений: 160 |
С.М. Если я уменьшу форму, то у меня значения не пропадут т.к. значение массива уменьшится(было 20, а станет 10(5)), но все равно вся информация будет через массив проходить |
Юрий М Модератор Сообщений: 60394 Контакты см. в профиле |
#13 28.12.2016 12:02:05
grig, Вы никак не поймёте: у ЛистБокса нет свойства ListRows. У КомбоБокса есть, а у ЛистБокс нет. Количество отображаемых строк будет зависить от высоты ЛистБокса. Ну и от размера шрифта, разумеется. |
||
grig Пользователь Сообщений: 160 |
значит будем переходить на КомбоБокс |
Юрий М Модератор Сообщений: 60394 Контакты см. в профиле |
В целом замысел не очень понятен, но можно подменять ЛистБокс его дубликатом (меньшей высоты), поместив его в ту же позицию: когда размер формы большой — дубликат скрыт, и отображается основной ЛистБокс. Если размер маленький — основной скрываем, отображаем дублёр и в него отбираем нужное количество строк из основного массива. |
vikttur Пользователь Сообщений: 47199 |
#16 28.12.2016 16:34:26
? |
||
grig Пользователь Сообщений: 160 |
там вроде есть режим — простой список, а кнопку можно убрать в свойствах |
Юрий М Модератор Сообщений: 60394 Контакты см. в профиле |
#18 28.12.2016 19:17:23
Раскрывать КомбоБокс как будете? Программно? |
||
grig Пользователь Сообщений: 160 |
#19 28.12.2016 20:15:10
тоже вариант,сделать несколько форм, отслеживать по высоте и выбирать нужную форму. Я сейчас перешел на не модальную форму(своя специфика). Определюсь что важнее, а там видно будет |
||
Юрий М Модератор Сообщений: 60394 Контакты см. в профиле |
#20 28.12.2016 20:18:42
Я не говорил про несколько ФОРМ )) |
||
grig Пользователь Сообщений: 160 |
|
AAF Пользователь Сообщений: 1000 |
#22 28.12.2016 22:23:45 Кому-то я уже подобное отправлял… Но эта фишка по сути своей костыль костылем, но работает… Но работает с внешним запуском (я использовал MouseMove), т. к. некое свойство ListBox.IntegralHeight, отвечающее за подгонку ТОЛЬКО ОДНОЙ строки (с округлением по высоте вниз до ближайшей целой), отрабатывает свою задачу ТОЛЬКО по выходу из процедуры. Сколько надо строк, столько запусков. Может, конечно и есть какие-нибудь задачи в которых такое требуется, но это больше на прикол смахивает…
Прикрепленные файлы
|
||
grig Пользователь Сообщений: 160 |
#23 29.12.2016 04:19:32
не знаю, у вас в программе она отрабатывает на то количество строк, что задано и если исходить из того что размеры задавать должен массив — то большего и не надо. Но у меня размерность задаю я, поэтому ее надо переделать, но благодаря вам есть с чем работать. Большое спасибо |
||
AAF Пользователь Сообщений: 1000 |
#24 29.12.2016 09:57:31
Задаете Вы. Кроме того можете ограничивать высоту, но при этом уже знать кол-во строк. И последнее… Если у Вас есть посторонний и постоянный источник событий, то и MouseMove Вам не нужен… |
||
grig Пользователь Сообщений: 160 |
#25 29.12.2016 11:01:48
Я это понял, но неправильно написал. Если размер массива не меняется, то и ваша программа не нужна, а если меняется, то ваша программа очень удобна, но ее надо подстроить под свои нужды. Вашу программу мне удобно под себя подстроить, но только я сейчас нахожусь еще в поиске(установил себе multipage, чтобы на второй странице установить настройки(привязывать или нет к активной ячейке и др), каких размеров формы мне нужны, какие настройки в них нужны. Когда я программу обкатаю тогда и приступлю к окончательной доводке. Еще раз спасибо за программу Изменено: grig — 29.12.2016 12:34:40 |
||
С.М. Пользователь Сообщений: 934 |
#26 29.12.2016 14:05:30
Прикрепленные файлы
|
|
AAF Пользователь Сообщений: 1000 |
#27 29.12.2016 15:38:06 Работает… А где можно получить значения констант?
|
||
С.М. Пользователь Сообщений: 934 |
AAF, я применил Ваш файл (спасибо !) для расчёта зависимости высоты листбокса от числа его элементов. |
AAF Пользователь Сообщений: 1000 |
Ну вот… |
Jungl Пользователь Сообщений: 830 |
#30 29.12.2016 23:47:49 Вариант со SpinButton. Размеры шрифта не мешают. Прикрепленные файлы
|