Это должно быть очень просто, но я застрял. У меня есть listBox с X элементами. Каждый элемент имеет текстовое описание (которое появляется в спискеBox) и его значение (числовое). Я хочу иметь возможность получить значение свойства элемента, используя номер индекса элемента.Получите значение для элемента списка по индексу
ответ
Это работает для меня:
ListBox x = new ListBox();
x.Items.Add(new ListItem("Hello", "1"));
x.Items.Add(new ListItem("Bye", "2"));
Console.Write(x.Items[0].Value);
Насколько я знаю, 'ListBox.Items' имеет тип' System.Windows.Forms.ListBox.ObjectCollection', что означает 'ListBox.Items [index]' - это объект, у которого нет свойства Value! –
Это был ответ для WebForms, поскольку он имеет в виду настройки текста и значения, что заставило меня принять WebForms, а не WinForms. – DaveShaw
Предположим, вы хотите получить значение первого элемента.
ListBox list = new ListBox();
Console.Write(list.Items[0].Value);
Если вы работаете на окна формы проекта вы можете попробовать следующее:
Добавление элементов к ListBox
как KeyValuePair
объектов:
listBox.Items.Add(new KeyValuePair(key, value);
Тогда вы сможете получить их следующим образом:
KeyValuePair keyValuePair = listBox.Items[index];
var value = keyValuePair.Value;
Я использую привязку ingSource с SqlDataReader за ним, и ни одно из вышеперечисленных работ для меня не работает.
Вопрос для Microsoft: Почему эта работа:
? lst.SelectedValue
Но это не делает?
? lst.Items[80].Value
Я считаю, что я должен вернуться к объекту BindingSource, брось как System.Data.Common.DbDataRecord, а затем обратитесь к его имени столбца:
? ((System.Data.Common.DbDataRecord)_bsBlocks[80])["BlockKey"]
Теперь это просто смешной.
В качестве альтернативы я предполагаю, что я мог выполнять итерацию по коллекции Items, выбирая каждый элемент, а затем получая SelectedValue. Но мне не нужно было это делать, и это все равно kludge. –
Элемент ' Элемент коллекции 'ListBox' имеет объект типа и не имеет свойства' Value'. Элемент может быть «DataRowView», сложный объект или первичный тип. Значение должно рассчитываться с использованием свойства ValueMember, так же, как и 'SelectedValue'. –
Было бы
String MyStr = ListBox.items[5].ToString();
Элементы могут быть «DataRowView» или сложным объектом или другими типами. Базовое значение элемента должно рассчитываться на основе «ValueMember». –
Здесь я не могу видеть даже один правильный ответ на этот вопрос (в WinForms теге), и это странно для такого частого вопроса.
Элементы управления ListBox
могут быть DataRowView
, сложные объекты, анонимные типы, первичные типы и другие типы. Базовое значение предмета должно быть рассчитано на основе ValueMember
.
ListBox
control имеет GetItemText
, который поможет вам получить текст элемента независимо от типа объекта, который вы добавили в качестве элемента. Он действительно нуждается в таком методе GetItemValue
.
GetItemValue метод расширения
Мы можем создать GetItemValue
extension method, чтобы получить значение элемента, который работает как GetItemText
:
using System;
using System.Windows.Forms;
using System.ComponentModel;
public static class ListControlExtensions
{
public static object GetItemValue(this ListControl list, object item)
{
if (item == null)
throw new ArgumentNullException("item");
if (string.IsNullOrEmpty(list.ValueMember))
return item;
var property = TypeDescriptor.GetProperties(item)[list.ValueMember];
if (property == null)
throw new ArgumentException(
string.Format("item doesn't contain '{0}' property or column.",
list.ValueMember));
return property.GetValue(item);
}
}
Используя выше метода вам не нужно беспокоиться о настройках ListBox
и нем вернет ожидаемый Value
за товар.Он работает с List<T>
, Array
, ArrayList
, DataTable
, Список анонимных типов, список основных типов и всех других списков, которые вы можете использовать в качестве источника данных. Вот пример использования:.
//Gets underlying value at index 2 based on settings
this.listBox1.GetItemValue(this.listBox1.Items[2]);
Так как мы создали метод GetItemValue
как метод расширения, когда вы хотите использовать метод, не забывайте включать пространство имен, которое вы положили класс в
Этот метод применим также к ComboBox
и 10.
просто попробовать это ListBox ваш список и юй является veriable к которым значение по индексу 0 будет присвоен
string yu = listBox1.Items[0].ToString();
MessageBox.Show(yu);
- 1. Получение элемента списка по индексу
- 2. Изменить значение элемента по индексу
- 3. Настройка элемента списка (по индексу) font bold
- 4. поиск элемента списка по его индексу
- 5. Получите значение щелкнутого элемента пользовательского списка?
- 6. Вырезание внутреннего элемента по индексу со списком.
- 7. Проверка наличия элемента по индексу
- 8. Удалить элемент списка по индексу?
- 9. Объединить два списка по индексу
- 10. creat списки из подписок по индексу элемента
- 11. Удаление строкового элемента из списка по индексу id в Scala
- 12. Сортировка списка по упорядоченному индексу
- 13. Получить значения списка по индексу
- 14. Удаление элементов из списка, который равен индексу другого элемента списка
- 15. Удаление по индексу из двусвязного списка java
- 16. Bind значение входного компонента к элементу списка по индексу
- 17. Поиск по индексу?
- 18. Получите значение из элемента списка и назначьте элемент приложения
- 19. Получить индекс элемента/элемента по индексу в списке списков
- 20. vim присваивать значение списку по индексу
- 21. Как изменить элемент списка по заданному индексу
- 22. Отфильтровать список по индексу?
- 23. Получить массив без элемента по индексу
- 24. Idiomatic J для значения элемента по индексу n массива x
- 25. Добавить значение по данному индексу без удаления
- 26. Получите значение из двумерного списка
- 27. Лучший способ для загрузки списка элементов, подлежащих анализу на два, и вызов соответствующего элемента по индексу?
- 28. ngFor - печать элемента массива по индексу
- 29. Получите соответствующие элементы из выбранного элемента списка.
- 30. Назначение значения для элемента внутри arraylist по индексу
WPF, WinForms, Silverlight или ASP.NET? –
Добавьте несколько тегов, в которых подробно описано, что вы используете, например, Daniel Hilgarth. –
Вы работаете над приложением _windows forms_? –