C#combobox like web应用程序中的下拉列表

时间:2011-12-01 10:46:48

标签: c# winforms combobox

我有comboBox组件,我正在添加comboBox1.Items.Add("Item1")之类的项目。但我还需要了解有关此项目的其他信息。所以,如果我点击“Item1”,我需要获得"102454"。 我可以以某种方式将102454保存到组合框上的“Item1”。

在网络应用程序中,有一个类似于

的下拉列表
<select>
  <option value="102454">Item1</option>
</select>

当我点击“Item1”时,我得到102454

我可以在带有组合框的Windows桌面应用程序中执行此操作吗?

3 个答案:

答案 0 :(得分:3)

修改更好的解决方案:

使用KeyValuePairValueMember \ 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)
        {
        }
    }