通过索引获取列表框项目的值
这一定很容易,但我被卡住了。 我有一个X项目列表框。 每个项目都有一个文本说明(出现在列表框中)及其值(数值)。 我希望能够获得项目的价值属性,使用项目的索引号。
这将是
String MyStr = ListBox.items[5].ToString();
在这里,我看不出这个问题(在WinForms标签中),即使是一个正确的答案,这对于这样一个频繁的问题来说也很奇怪。
ListBox
控件的项目可能是DataRowView
,复杂对象,匿名types,主要types和其他types。 一个项目的基础价值应根据ValueMember
计算。
ListBox
控件有一个GetItemText
,它可以帮助您获取项目文本,而不pipe您添加为项目的对象的types。 它确实需要这样的GetItemValue
方法。
GetItemValue扩展方法
我们可以创buildGetItemValue
扩展方法来获取像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
设置,它会返回一个项目的期望值。 它适用于List<T>
, Array
, ArrayList
, DataTable
,匿名types列表,主types列表以及所有其他可用作数据源的列表。 这里是一个使用的例子:
//Gets underlying value at index 2 based on settings this.listBox1.GetItemValue(this.listBox1.Items[2]);
由于我们创build了GetItemValue
方法作为扩展方法,所以当你想使用这个方法的时候,不要忘记包含你放入类的名字空间。
这个方法也适用于ComboBox
和CheckedListBox
。
如果您正在使用Windows窗体项目,则可以尝试以下操作:
将项目添加到ListBox
作为KeyValuePair
对象:
listBox.Items.Add(new KeyValuePair(key, value);
那么你将能够通过以下方式检索它们:
KeyValuePair keyValuePair = listBox.Items[index]; var value = keyValuePair.Value;
我使用了一个BindingSource和一个SqlDataReader,并且以上都不适合我。
问题为微软:为什么这个工作:
? lst.SelectedValue
但是这不?
? lst.Items[80].Value
我发现我必须返回到BindingSource对象,将其转换为System.Data.Common.DbDataRecord,然后引用其列名称:
? ((System.Data.Common.DbDataRecord)_bsBlocks[80])["BlockKey"]
现在这太荒谬了。
假设你想要第一个项目的值。
ListBox list = new ListBox(); Console.Write(list.Items[0].Value);
这适用于我:
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是你的列表,而且是一个可以赋值的索引0将被赋值
string yu = listBox1.Items[0].ToString(); MessageBox.Show(yu);