To musi być bardzo łatwe, ale utknąłem. Mam listbox z elementami X. Każda pozycja ma opis tekstowy (który pojawia się w liście list) i jego wartość (numeryczną). Chcę móc uzyskać wartość właściwości elementu, używając indeksu numeru pozycji.Uzyskaj wartość pozycji listbox według indeksu
Odpowiedz
Działa to dla mnie:
ListBox x = new ListBox();
x.Items.Add(new ListItem("Hello", "1"));
x.Items.Add(new ListItem("Bye", "2"));
Console.Write(x.Items[0].Value);
O ile mi wiadomo, 'ListBox.Items' jest typu' System.Windows.Forms.ListBox.ObjectCollection' co oznacza, że 'ListBox.Items [index]' jest obiektem, który nie ma właściwości Value !! –
To była odpowiedź dla WebForms, ponieważ odnosi się on do Ustawień a Tekst i Wartość, co spowodowało, że założyłem WebForms, a nie WinForms. – DaveShaw
Załóżmy, że chcemy wartość pierwszego elementu.
ListBox list = new ListBox();
Console.Write(list.Items[0].Value);
Jeśli pracujesz na Windows Forms projektu można spróbować wykonać następujące czynności:
dodać elementy do ListBox
jak KeyValuePair
obiektów:
listBox.Items.Add(new KeyValuePair(key, value);
Potem będzie można je odzyskać w następujący sposób:
KeyValuePair keyValuePair = listBox.Items[index];
var value = keyValuePair.Value;
Używam Bind ingSource z SqlDataReader za nim i żaden z powyższych nie działa dla mnie.
Pytanie dla Microsoft: Dlaczego to działa:
? lst.SelectedValue
Ale to nie robi?
? lst.Items[80].Value
znajdę muszę wrócić do do obiektu BindingSource, rzucić go jako System.Data.Common.DbDataRecord, a następnie zapoznać się z jego nazwy kolumny:
? ((System.Data.Common.DbDataRecord)_bsBlocks[80])["BlockKey"]
Teraz to tylko śmieszny.
Alternatywnie, myślę, że mógłbym iterować poprzez kolekcję Items, wybierając każdy element, a następnie otrzymując SelectedValue, ale nie powinienem był tego robić, i tak czy inaczej jest to kludge –
. Zbiór pozycji 'ListBox' jest obiektem typu i nie ma właściwości' Value' .Przedmiotem może być 'DataRowView', a obiekt złożony lub podstawowy. Wartość należy obliczyć za pomocą właściwości 'ValueMember', w taki sam sposób działa funkcja' SelectedValue'. –
Byłoby
String MyStr = ListBox.items[5].ToString();
Elementy mogą być 'DataRowView' lub złożonym obiektem lub innymi typami. Wartość bazowa pozycji powinna być obliczona na podstawie "ValueMember". –
Tu nie widzę nawet jednej poprawnej odpowiedzi na to pytanie (w tagu WinForms) i jest to dziwne dla tak częste pytanie.
Elementami kontrolki mogą być DataRowView
, złożone obiekty, typy anonimowe, typy podstawowe i inne typy. Wartość bazowa pozycji powinna być obliczona na podstawie ValueMember
.
ListBox
Sterowanie ma GetItemText
, co pomaga uzyskać tekst pozycji niezależnie od typu obiektu dodanego jako pozycja. Naprawdę potrzebuje takiej metody GetItemValue
.
GetItemValue Extension Metoda
Możemy stworzyć GetItemValue
extension method uzyskać wartość elementu, który działa jak 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);
}
}
Stosując powyższe metody nie trzeba się martwić o ustawienia ListBox
i to zwróci oczekiwany Value
dla przedmiotu.Działa z List<T>
, Array
, , DataTable
, listą typów anonimowych, listą typów podstawowych i wszystkimi innymi listami, których można użyć jako źródła danych. Oto przykład użycia:.
//Gets underlying value at index 2 based on settings
this.listBox1.GetItemValue(this.listBox1.Items[2]);
Ponieważ stworzyliśmy metodę GetItemValue
jako metodę rozszerzenia, gdy chcesz użyć metody, nie zapomnij podać przestrzeń nazw, które można umieścić klasę w
Ta metoda ma również zastosowanie w przypadku ComboBox
i CheckedListBox
.
prostu spróbować ListBox jest lista i yu jest veriable do wich wartość na indeksie 0 będzie przypisany
string yu = listBox1.Items[0].ToString();
MessageBox.Show(yu);
- 1. Uzyskiwanie pozycji listy według indeksu
- 2. Uzyskaj wartość pozycji przewijania
- 3. Uzyskaj ciąg znaków według indeksu - Java
- 4. Uzyskaj kluczową wartość słownika według indeksu w jQuery
- 5. listbox; liczba wybranych pozycji
- 6. Uzyskaj wartość pozycji w OnItemClick Listview
- 7. Utwórz elementy ListBox mają inną wartość niż tekst pozycji
- 8. Ustawianie pozycji paska przewijania ListBox
- 9. Orientacja pozycji listbox na poziomą
- 10. Podłoża NSIS według indeksu
- 11. Słownik iteracji Pythona według indeksu
- 12. Animacja slajdów ListBox na nowej pozycji Dodano
- 13. jquery znaleźć według indeksu na liście
- 14. Znajdź dziecko według indeksu jQuery
- 15. Usunięcie tablicy as3 według indeksu
- 16. Uzyskaj indeksu $ wybranej opcji kątowej
- 17. GridView: Wyświetl widok według pozycji
- 18. Uzyskaj pozycji myszy na zwoju
- 19. SQL Uzyskaj znak na pozycji w polu
- 20. Ustawianie wybranej pozycji w polu ListBox bez zapętlenia
- 21. carving 2D numpy array według indeksu
- 22. Używanie indeksu do uzyskania pozycji, Python
- 23. Delphi - znajdź znak danej pozycji/indeksu
- 24. AngularJS - Uzyskaj dane według ID
- 25. Konserwacja zwiniętej pozycji przewijania ListBox WPF po zmianie kolekcji
- 26. Próba indeksu lokalnego (wartość boolowska)
- 27. Pandy KeyError: wartość indeksu nie
- 28. CSS - maksymalna wartość indeksu Z
- 29. Niepoprawna wartość indeksu tablic indeksowych
- 30. Jak grupować elementy według indeksu? C# LINQ
WPF WinForms, ASP.NET lub Silverlight? –
Dodaj tagi szczegółowo opisujące, czego używasz, jak powiedział Daniel Hilgarth powyżej. –
Czy pracujesz nad aplikacją _windows formula_? –