Перейти к содержимому

Textbox c и listbox в чем разница

  • автор:

Textbox c и listbox в чем разница

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

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

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

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

Элемент ListBox в Windows Forms

Программное управление элементами в 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); >>

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

Использование textBox как listBox

Привет.
У меня проблема. Мне нужно выводить в отдельное окно как в чате, строки по отдельности которые туда поступают. Можно ли сделать в textBox аналог listBox.Items.Add. Т.е. что бы прошлая строка не удалялась, а новая была с новой строки. Заранее спасибо

Добавлено через 59 секунд
Кхм не textBox, а Label

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Работа с DataGrid: использование информации из TextBox’ов и ListBox’ов
Есть две формы, можно ли сделать так, чтобы при вводе данных в TextBoхы, половина TextBoхов.

Как добавить слово из textBox в listBox?
Уважаемые форумчане! Такой вопрос! Есть listbox, есть textbox, под текстбоксом есть кнопка add.

Как текст из listbox перекинуть в textbox
подскажите как текст из listbox перекинуть в textbox для того чтоб его можно было отредактировать?

Как вывести список из ListBox в TextBox?
Здравствуйте, помогите вывести список и листбокса в текстбокс. Есть код: public.

Регистрация: 14.01.2017
Сообщений: 99

сделай в свойствах multiLine и все

А если Label в конце каждой строки добавляй перенос строки \n

Элемент управления ListBox

В последней статье мы получили представление о ItemsControl, представляющий собой простейший список в WPF. ListBox является следующем элементом управления по этому направлению, который имеет немного расширенную функциональность. Одним из главных отличий является факт что элемент управления ListBox позволяет произвести различные варианты выбора — позволяет конечному пользователю выбрать один или несколько элементов списка и автоматически получить визуальный отклик на данное действие.

Ниже приведен пример очень простого использования элемента управления ListBox:

   ListBox Item #1 ListBox Item #2 ListBox Item #3   

Если кратко: Мы декларируем элемент управления ListBox, внутри его определяем три элемента (ListBoxItem’s) с своим текстом. Несмотря на то, что ListBoxItem является ContentControl, мы можем переопределить его содержание:

      ListBox Item #1     ListBox Item #2     ListBox Item #3     

Для каждого ListBoxItem мы сейчас добавили StackPanel, в которой мы добавили элементы Image и TextBlock, что предоставило полное управление содержанием такое как визуализация текста, как вы можете увидеть на скриншоте, где различные цвета используются для каждого числа.

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

Привязка данных к ListBox

Установка элементов списка ListBox вручную годится для первого примера, но в большинстве случаев ваш ListBox будет заполнятся элементами из источника данных через привязку. По умолчанию, привязанные к ListBox элементы отображаются с помощью их метода ToString(). Но этот вариант не всегда подходит, поэтому мы можем объявить шаблон, который будет использоваться для представления каждого элемента списка.

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

using System; using System.Windows; using System.Collections.Generic; namespace WpfTutorialSamples.ListBox_control < public partial class ListBoxDataBindingSample : Window < public ListBoxDataBindingSample() < InitializeComponent(); Listitems = new List(); items.Add(new TodoItem() < Title = "Complete this WPF tutorial", Completion = 45 >); items.Add(new TodoItem() < Title = "Learn C#", Completion = 80 >); items.Add(new TodoItem() < Title = "Wash the car", Completion = 0 >); lbTodoList.ItemsSource = items; > > public class TodoItem < public string Title < get; set; >public int Completion < get; set; >> >

Вся магия происходит в шаблоне ItemTemplate, который мы определили для ListBox. Здесь мы указали, что каждый элемент ListBox должен состоять из Grid’а, разделенного на две колонки. TextBlock в первой колонке для названия и ProgressBar во второй для статуса. Чтобы установить их значения, используется очень простая привязка данных (подробно рассмотрено в части о привязках этой статьи).

В файле с исходным кодом мы объявили очень простой класс TodoItem для хранения каждого из наших элементов TODO. В конструкторе класса ListBoxDataBindingSample мы инициализировали List и добавили в него три объекта TodoItem, а затем назначили этот List как источник данных для элемента интерфейса ListBox, названного «lbTodoList» в XAML коде. Комбинация ItemsSource и ItemTemplate, которую мы указали в части XAML, — это все, что нужно WPF для отображения всех элементов ListBox в виде списка задач.

Обратите внимание на свойство HorizontalContentAlignment, которое установлено в Stretch для ListBox. Выравнивание по умолчанию для ListBox всегда Left, что означает, что ширина элемента зависит от его содержимого. Результат? Хм, не совсем то, что мы хотели:

При использовании Stretch выравнивания, каждый элемент растягивается и занимает все доступное пространство, как это показано на предыдущем скриншоте.

Работа с выделением в ListBox

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

       ListBox selection               " />     
using System; using System.Windows; using System.Collections.Generic; namespace WpfTutorialSamples.ListBox_control < public partial class ListBoxSelectionSample : Window < public ListBoxSelectionSample() < InitializeComponent(); Listitems = new List(); items.Add(new TodoItem() < Title = "Complete this WPF tutorial", Completion = 45 >); items.Add(new TodoItem() < Title = "Learn C#", Completion = 80 >); items.Add(new TodoItem() < Title = "Wash the car", Completion = 0 >); lbTodoList.ItemsSource = items; > private void lbTodoList_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) < if(lbTodoList.SelectedItem != null) this.Title = (lbTodoList.SelectedItem as TodoItem).Title; >private void btnShowSelectedItem_Click(object sender, RoutedEventArgs e) < foreach(object o in lbTodoList.SelectedItems) MessageBox.Show((o as TodoItem).Title); >private void btnSelectLast_Click(object sender, RoutedEventArgs e) < lbTodoList.SelectedIndex = lbTodoList.Items.Count - 1; >private void btnSelectNext_Click(object sender, RoutedEventArgs e) < int nextIndex = 0; if((lbTodoList.SelectedIndex >= 0) && (lbTodoList.SelectedIndex < (lbTodoList.Items.Count - 1))) nextIndex = lbTodoList.SelectedIndex + 1; lbTodoList.SelectedIndex = nextIndex; >private void btnSelectCSharp_Click(object sender, RoutedEventArgs e) < foreach(object o in lbTodoList.Items) < if((o is TodoItem) && ((o as TodoItem).Title.Contains("C#"))) < lbTodoList.SelectedItem = o; break; >> > private void btnSelectAll_Click(object sender, RoutedEventArgs e) < foreach(object o in lbTodoList.Items) lbTodoList.SelectedItems.Add(o); >> public class TodoItem < public string Title < get; set; >public int Completion < get; set; >> >

Как вы можете видеть, я определил несколько кнопок справа от ListBox, и для получения или для управления выбранного элементом списка. Я также изменил обычный режим (SelectionMode) в расширенный (Extended), который позволил выбирать несколько элементов из списка. Это может быть сделано или программным способом, как я и сделал в этом примере, или самим пользователем, удерживая клавишу [Ctrl] или [Shift]при выборе элементов списка (щелкая мышкой на соответствующем элементе списка)

Для каждой кнопки я определил обработчик события Click. Каждое действие вполне объяснимо, используемый C# код достаточно простой, но если вам что-то непонятно, попробуйте запустить этот пример у себя и протестируйте все возможные варианты.

Заключение

ListBox очень похож на ItemsControl и он может использоваться в нескольких случаях точно также. Однако ListBox предоставляет больше возможностей относительно ItemsControl, особенно в случае необходимости выбора элемента. Если необходим расширенный функционал, как например наличие заголовков у колонок, вам необходимо взглянуть на ListView элемент, описание которого будет позже в руководстве и содержащее несколько статей объясняющие полный функционал ListView.

This article has been fully translated into the following languages:

Is your preferred language not on the list? Click here to help us translate this article into your language!

Форум пользователей Visio

При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя . !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.

VBA Listbox

Заголовок сообщения: VBA Listbox
Добавлено: 11 авг 2015, 11:03

Вопросы по Listbox:
1.Для наполнения значениями использую перечень команд

With ListBox
For i = 1 To UBound(strVar, 1)
.AddItem CStr(i) + «. » + strVar(i)
Next i
End With
Т.о. заполнить данными получается только один столбец. Каким образом можно заполнить второй, третий. столбики?
В свойствах объекта указывается количество столбцов, но как их наполнить — не нашел.

2. Можно ли как-нибудь изменять значения «визуально», т.е. нажал мышкой на строку, подредактировал? Я созрел только до:
в отдельном текстовом поле вводишь значение, затем щелкаешь на необходимую строчку, нажимаешь на кнопку чтоб изменения
применились.

Заголовок сообщения: Re: VBA Listbox
Добавлено: 11 авг 2015, 11:49
сам до этого не заморачивался на тему нескольких столбцов.
почитал статейку — заработало
Владимир Баталий в статье Класс ListBox — создание простого списка в VBA писал(а):

Класс ListBox — создание простого списка в VBA
Элемент управления ListBox vba позволяет добавлять список с данными на форму. В отличии от комбинированного списка ComboBox, ListBox имеет следующие отличия:

Тут нельзя вводить собственные значения, а лишь любоваться теми, что были добавлены изначально
Есть возможность выбирать сразу несколько значений
Подробнее…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *