我有comboBox组件,我正在添加comboBox1.Items.Add("Item1")
之类的项目。但我还需要了解有关此项目的其他信息。所以,如果我点击“Item1”,我需要获得"102454"
。
我可以以某种方式将102454保存到组合框上的“Item1”。
在网络应用程序中,有一个类似于
的下拉列表<select>
<option value="102454">Item1</option>
</select>
当我点击“Item1”时,我得到102454
。
我可以在带有组合框的Windows桌面应用程序中执行此操作吗?
答案 0 :(得分:3)
修改更好的解决方案:
使用KeyValuePair
和ValueMember
\ DisplayValue
:
comboBox1.ValueMember = "Key";
comboBox1.DisplayMember = "Value";
comboBox1.Items.Add(new KeyValuePair<int, string>(102454, "Item1"));
正如Kristian所指出的,这可以扩展到更灵活 - 你可以将任何你喜欢的对象放入项目列表中,并将组合框中的值和显示成员设置为你想要的任何属性路径。
要稍后取回钥匙,您可以执行以下操作:
var item = combobox1.SelectedItem;
int key = ((KeyValuePair<int, string>)item).Key;
答案 1 :(得分:0)
您可以查看SelectedItem属性。
答案 2 :(得分:0)
A创造了一个类似Mark Pim建议的类;然而,我的使用泛型。 我当然不会选择将Value属性设置为字符串类型。
public class ListItem<TKey> : IComparable<ListItem<TKey>>
{
/// <summary>
/// Gets or sets the data that is associated with this ListItem instance.
/// </summary>
public TKey Key
{
get;
set;
}
/// <summary>
/// Gets or sets the description that must be shown for this ListItem.
/// </summary>
public string Description
{
get;
set;
}
/// <summary>
/// Initializes a new instance of the ListItem class
/// </summary>
/// <param name="key"></param>
/// <param name="description"></param>
public ListItem( TKey key, string description )
{
this.Key = key;
this.Description = description;
}
public int CompareTo( ListItem<TKey> other )
{
return Comparer<String>.Default.Compare (Description, other.Description);
}
public override string ToString()
{
return this.Description;
}
}
创建非泛型变体也很容易:
public class ListItem : ListItem<object>
{
/// <summary>
/// Initializes a new instance of the <see cref="ListItem"/> class.
/// </summary>
/// <param name="key"></param>
/// <param name="description"></param>
public ListItem( object key, string description )
: base (key, description)
{
}
}