Как вывести в листбокс c
Элемент 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); >>
В данном случае по выбору элемента списка будет отображаться сообщение с выделенным элементом.
List Box. Selected Item Свойство
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает или задает выбранный в настоящий момент элемент в поле со списком ListBox.
public: property System::Object ^ SelectedItem < System::Object ^ get(); void set(System::Object ^ value); >;
[System.ComponentModel.Bindable(true)] [System.ComponentModel.Browsable(false)] public object SelectedItem
[System.ComponentModel.Bindable(true)] [System.ComponentModel.Browsable(false)] public object? SelectedItem
[] [] member this.SelectedItem : obj with get, set
Public Property SelectedItem As Object
Значение свойства
Объект, представляющий текущую выбранную позицию в элементе управления.
Примеры
В следующем примере кода показано, как использовать SelectedIndexChanged событие для поиска и выбора элемента в другом ListBox элементе управления. В примере событие используется для SelectedIndexChanged определения того, когда изменяется выбранный ListBox элемент в . Затем пример кода считывает текст элемента с помощью SelectedItem свойства и вызывает FindString метод для другого ListBox объекта, используя текст, возвращенный SelectedItem в первом ListBox. Если элемент найден в другом ListBox, он выбирается. В этом примере требуется, чтобы в форму были добавлены два ListBox элемента управления с именем listBox1 и listBox2 , а оба ListBox элемента управления содержат идентичные элементы. В этом примере также требуется, чтобы метод обработки событий, определенный в примере, был подключен к событию SelectedIndexChanged listBox1 .
private: void listBox1_SelectedIndexChanged( Object^ /*sender*/, System::EventArgs^ /*e*/ ) < // Get the currently selected item in the ListBox. String^ curItem = listBox1->SelectedItem->ToString(); // Find the string in ListBox2. int index = listBox2->FindString( curItem ); // If the item was not found in ListBox 2 display a message box, // otherwise select it in ListBox2. if ( index == -1 ) MessageBox::Show( "Item is not available in ListBox2" ); else listBox2->SetSelected( index, true ); >
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e) < // Get the currently selected item in the ListBox. string curItem = listBox1.SelectedItem.ToString(); // Find the string in ListBox2. int index = listBox2.FindString(curItem); // If the item was not found in ListBox 2 display a message box, otherwise select it in ListBox2. if(index == -1) MessageBox.Show("Item is not available in ListBox2"); else listBox2.SetSelected(index,true); >
Private Sub listBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles listBox1.SelectedIndexChanged ' Get the currently selected item in the ListBox. Dim curItem As String = listBox1.SelectedItem.ToString() ' Find the string in ListBox2. Dim index As Integer = listBox2.FindString(curItem) ' If the item was not found in ListBox 2 display a message box, otherwise select it in ListBox2. If index = -1 Then MessageBox.Show("Item is not available in ListBox2") Else listBox2.SetSelected(index, True) End If End Sub
Комментарии
Для стандартного ListBoxможно использовать это свойство, чтобы определить, какой элемент выбран в ListBox. SelectionMode Если для свойства ListBox задано значение SelectionMode.MultiSimple или SelectionMode.MultiExtended (что указывает на множественный выборListBox) и в списке выбрано несколько элементов, это свойство может возвращать любой выбранный элемент.
Чтобы получить коллекцию, содержащую все выбранные элементы при множественном выборе ListBoxSelectedItems , используйте свойство . Если вы хотите получить позицию индекса выбранного в данный момент элемента в ListBox, используйте SelectedIndex свойство . Кроме того, можно использовать SelectedIndices свойство , чтобы получить все выбранные индексы в множественном выборе ListBox.
Как вывести элементы из Listbox
Имеется ComboBox , из которого пользователь выбирает строки, которые после этого отображаются на ListBox . Хочу эти выбранные элементы вывести через запятую. Такой вариант:
string.Join(", ", listBox1.SelectedItems)
выдаёт System.Windows.Forms.ListBox+SelectedObjectCollection .
Пытаюсь обратиться к конкретному объекту ListBox по индексу:
listBox1.Items[1].ToString()
получаю простанство имен.имякласса , вместо значения, которое хранится по индексу 1.
Что не так?
Отслеживать
15.7k 2 2 золотых знака 28 28 серебряных знаков 52 52 бронзовых знака
задан 1 ноя 2020 в 19:13
11 3 3 бронзовых знака
Это Winforms? Добавьте тег winforms тогда.
1 ноя 2020 в 19:30
Я так понимаю в listBox1.Items некие объекты ? т.е. не просто string ? тогда если хотите заюзать .ToString() переопределите его в ваше классе, объекты которого грузите в Items, а иначе он по дефолту выдает имя типа вашего класса
1 ноя 2020 в 19:32
тогда будет можно по идее string.Join(«, «, listBox1.Items)
1 ноя 2020 в 19:34
string.Join(«, «, listBox1.SelectedItems) => string.Join(«, «, listBox1.SelectedItems.Cast<НужныйТипОбъекта>()) (привет WinForms’у и его ужасным костылям). В случае с listBox1.Items[1].ToString() — если у вас там класс, то так и должно быть, обращайтесь значит к свойствам этого класса ( listBox1.Items[1].Свойство ), если у вас там тип по типу string , то такого не должно быть.НужныйТипОбъекта>
1 ноя 2020 в 20:01
@PavelPopov Вы вместо удаления вопроса, лучше бы его подправили, ведь по поводу listBox1.Items[1].ToString() у вас одно из решений задачи, описали бы почему так, дописали бы как можно без переопределения ToString() поступить и норм, а про string.Join() всего лишь надо про каст упомянуть.
Как вывести в ListBox WPF список состоящий из объектов класса?
Здравствуйте! Подскажите пожалуйста как это сделать. Дан класс состоящий из двух полей (желание и процент его выполнения). Создается список из объектов класса. И нужно обращаясь к полям этих объектов заполнить ListBox.
И там где completion должен быть ProgressBar. Сейчас у меня просто видны 3 ProgressBar длинной 100 и ничего больше
Код MainWindow.xaml
" Grid.Column="0"/> " Grid.Column="2"/>
class Wish1
public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); this.Loaded += MainWindow_Loaded; >private void MainWindow_Loaded(object sender, RoutedEventArgs e) < MyLB.ItemsSource = new[] < new Wish1() < title = "перейти на 2 курс", Completion = 100>, new Wish1() < title = "новый ноут", Completion = 50 >, new Wish1() < title = "познать в чем смысл жизни", Completion = 0 >>; > >
- Вопрос задан более двух лет назад
- 387 просмотров
3 комментария
Простой 3 комментария