Свойство Items.Count отражает число элементов в списке.
Это значение всегда на единицу больше максимально возможного значения свойства SelectedIndex, поскольку для свойства SelectedIndex индексация ведется от нуля.
Чтобы добавить или удалить элементы в список ListBox, используйте методы Items.Add(), Items.Insert(), Items.Clear() или Items.Remove().
Кроме того, можно добавить элементы в список с помощью свойства Items во время разработки.
Метод Add() может принимать любой объект при добавлении элементов в ListBox. Для отображения объекта в ListBox элемент управления использует текст, возврвщаемый методом ToString() объекта, если только имя элемента в объекте не было указано в свойстве DisplayMember.
Кроме добавления позиций с помощью метода Add() класса ListBox.ObjectCollection, добавлять их можно также с помощью свойства
DataSource класса ListControl (см. ниже).
Пример 1 В следующем примере показан способ создания элемента управления
ListBox, отображающего несколько позиций в столбцах. При этом в списке элемента управления может быть выбрано более одной позиции. Код, приведенный в примере, добавляет 50 позиций в ListBox с помощью метода Add класса ListBox.ObjectCollection, а затем выбирает три позиции из списка с помощью метода SetSelected. Затем отображаются значения из коллекций ListBox.SelectedObjectCollection (с помощью свойства SelectedItems) и ListBox.SelectedIndexCollection (с помощью свойства
SelectedIndices). В примере предполагается, что код расположен в Form и вызывается оттуда же.
321
listBox1.SelectionMode = SelectionMode.MultiSimple; //в конструкторе VS
// Выделить три элемента с индексами 1, 3 и 5 listBox1.SetSelected (1, true); listBox1.SetSelected (3, true); listBox1.SetSelected (5, true);
//Отобразить второй выделенный элемент [1] и индекс первого [0] richTextBox1.Text = listBox1.SelectedItems[1] + "\n"; richTextBox1.Text += listBox1.SelectedIndices[0];
}
SetSelected() - выделяет указанную позицию в ListBox или снимает с нее выделение.
Не забудьте разрешить множественное выделение элементов.
Пример 2
Создание ListBox из объектов класса PhoneList, имеющих поля string name, phone ;
Вопрос. Что отображать, а что возвращать в случае выделения строки, если в объекте несколько полей, а отображается только одно?
322
рис.11
Список отображает строки, которые определяет свойство DisplayMember. Если это свойство не использовать, то будут отображаться строки, возвращаемые методом ToString(). В примере он возвращает номер телефона.
Примечание. Свойство DisplayMember должно получать в качестве значения строку с именем открытого свойства, а не с именем открытого поля. Если вместо свойства использовать открытое поле, то данная возможность работать не будет.
Свойство SelectedItem возвращает ссылку на объект, соответствующий выбранному значению. Используя эту ссылку, можно получить доступ ко всем открытым членам объекта.
using System;
using System.Collections.Generic; using System.Text;
Поскольку списки хранят ссылки на объекты, то необходимо приводить эту ссылку к типу объекта.
obj = (PhoneList) listBox1.SelectedItem;
ToString() можно не указывать, если значение участвует в операции со строками: +=, +.
Пример 3 В следующем примере вместо
listBox1.DisplayMember = "Name";
использовано
listBox1.DisplayMember = "Phone";
рис.12
Определение источника данных для ЭУ ListBox или ComboBox
Как быть, если данные для списка уже существуют в виде массива или таблицы?
Для элементов управления ListBox и ComboBox можно выполнить привязку к данным.
Чаще всего эти элементы управления используются для поиска сведений в базе данных, ввода новых данных или редактирования существующих.
DataSource - возвращает или задает источник данных для этого
ListControl.
ValueMember - возвращает или задает строку, указывающую свойство источника данных, значение которого извлекается.
SelectedValue - возвращает или задает значение свойства, определенного свойством ValueMember.
В следующем примере используется связывание ЭУ ListBox с динамическим массивом ArrayList с помощью свойства DataSource:
325
listBox1.DataSource = arrayList;
Для привязки списка к объекту необходимо, чтобы класс объекта реализовывал интерфейс IList. Если этот класс реализует и интерфейс IBindingList, то при обновлении объекта будет автоматически обновляться и список ListBox.
1.В отличие от предыдущего примера, метод ToString() возвращает фамилию.
2.Кроме того, используется свойство
listBox1.ValueMember = "Phone";
которое показывает, значение какого свойства класса PhoneList должно возвращать свойство SelectedValue:
3. Так как listBox1.DataSource = arrayList порождает событие SelectedIndexChanged с выборкой первого элемента, то вместо обработчика событий listBox1_SelectedIndexChanged используется listBox1_Click.
arrayList.Add (new PhoneList ("Иванов", "123-45-67")); arrayList.Add (new PhoneList ("Петров", "223-45-68")); arrayList.Add (new PhoneList ("Сидоров", "323-45-69")); arrayList.Add (new PhoneList ("Кузнецов", "423-45-00")); arrayList.Add (new PhoneList ("Рыбаков", "523-55-67")); arrayList.Add (new PhoneList ("Климов", "623-66-67")); arrayList.Add (new PhoneList ("Трушин", "723-77-67")); arrayList.Add (new PhoneList ("Зверев", "823-88-67")); arrayList.Add (new PhoneList ("Иванова", "923-99-67"));
Элементы управления Windows Forms не выполняют сортировку, если они привязаны к данным. Чтобы вывести отсортированные данные, используйте источник данных, поддерживающий сортировку данных, и выполните ее с его помощью.
Чтобы получить доступ к определенному элементу
comboBox1.Items[i].ToString();
Чтобы добавить элементы
//Добавить в конец comboBox1.Items.Add ("Tokyo");
//Вставить с индексом 0: checkedListBox1.Items.Insert (0, "Copenhagen");
//Присвоить коллекции Items полный массив: object[] ItemObject = new object[10];
for (int i = 0; i <= 9; i++) ItemObject[i] = "Item" + i;
listBox1.Items.AddRange(ItemObject);
Чтобы удалить элемент
327
//Удалить с индексом 0: comboBox1.Items.RemoveAt(0);
●либо пройти по списку с помощью метода GetItemChecked, чтобы определить, какие элементы помечены.
Метод GetItemChecked принимает номер элемента в качестве аргумента и возвращает значение true или false.
328
Свойства SelectedItems и SelectedIndices не определяют помеченные элементы: они определяют, какие элементы выделены.
Вывод помеченных элементов Пример 1
Пройдите по коллекции CheckedItems помеченных элементов, начав с 0, поскольку нумерация коллекции начинается с нуля. Обратите внимание, что этот метод выдаст номер элемента в списке помеченных элементов, а не в полном списке.
Если первый элемент списка не помечен, но помечен второй, в приведенном ниже коде отобразится текст наподобие следующего: "Помеченный элемент 1 = ЭлементСписка2".
if ( checkedListBox1.CheckedItems.Count != 0 )
{
string s = "";
for ( int x = 0; x < checkedListBox1.CheckedItems.Count ; x++)
{
s = s + "\nПомеченный элемент " + (x+1) + " = "
+ checkedListBox1.CheckedItems[x];
}
MessageBox.Show (s);
}
Пример 2
Пройдите по коллекции Items всех элементов списка, начав с 0, поскольку нумерация коллекции начинается с нуля, и вызовите метод GetItemChecked() для каждого элемента. Обратите внимание, что этот метод выдаст номер элемента в полном списке; поэтому если первый элемент списка не помечен, но помечен второй, будет выведен текст наподобие следующего: "Помеченный элемент 2 = ЭлементСписка2".
string s = "Отмеченые элементы:\n" ;
for ( int i = 0; i < checkedListBox1.Items.Count ; i++ )
{
if ( checkedListBox1.GetItemChecked(i) == true)
s = s + "\nПомеченный элемент " + (i+1) + " = " + checkedListBox1.Items[i] ;
}
MessageBox.Show (s);
4. DomainUpDown
Элемент управления DomainUpDown отображает отдельное строковое значение, выделенное в коллекции Object путем нажатия на кнопки передвижения вверх/вниз по элементам коллекции.
329
рис.14
Пользователь также может вводить в элемент управления текст, если свойство ReadOnly имеет значение false (вводимая строка должна соответствовать элементу в коллекции, чтобы быть допустимой).
Доступ к элементам коллекции:
Вся коллекция объектов доступна через свойство Items.
Свойство SelectedIndex - получает или задает значение индекса для выделенного элемента.
Свойство SelectedItem - получает или задает текстовое представление выделенного элемента, основываясь на значении индекса элемента, выделенного в коллекции.