これは非常に簡単でなければなりませんが、私は立ち往生しています。 Xアイテムのリストボックスがあります。各アイテムには、テキストの説明(listBoxに表示される)とその値(数値)があります。アイテムのインデックス番号を使用して、アイテムのvalueプロパティを取得できるようにします。
それはそのようになります
String MyStr = ListBox.items[5].ToString();
ここでは、この質問(WinFormsタグ内)に対する正しい答えが1つも表示されず、このような頻繁な質問に対しては奇妙です。
ListBox
コントロールのアイテムには、DataRowView
、複合オブジェクト、匿名型、プライマリ型、その他の型があります。アイテムの基礎となる値は、ValueMember
に基づいて計算する必要があります。
ListBox
コントロールにはGetItemText
があり、アイテムとして追加したオブジェクトのタイプに関係なく、アイテムテキストを取得できます。本当にそのようなGetItemValue
メソッドが必要です。
GetItemValue拡張メソッド
GetItemValue
拡張メソッド を作成して、 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
および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」を試してみてください。「yu」はインデックス0の値が割り当てられる変数です。
string yu = listBox1.Items[0].ToString();
MessageBox.Show(yu);
これは私のために働く:
ListBox x = new ListBox();
x.Items.Add(new ListItem("Hello", "1"));
x.Items.Add(new ListItem("Bye", "2"));
Console.Write(x.Items[0].Value);