如何为ComboBox项添加值,所以我可以像这个comboBox.SelectedIndex = myInt一样选择它?

时间:2012-10-03 15:15:12

标签: c# .net winforms

假设我有这些项目:

        comboBox.Items.Add("Access"); // make it equal to 31
        comboBox.Items.Add("Create"); // make it equal to 34
        comboBox.Items.Add("Delete"); // make it equal to 36
        comboBox.Items.Add("Modify"); // make it equal to 38

现在,我打电话给

comboBox.SelectedIndex = 34; // want to "Create" item has been chosen

最简单的方法是什么?

5 个答案:

答案 0 :(得分:1)

不幸的是,winforms没有像ASP.NET那样的ListItem类,所以你必须自己编写:

public class cbxItem
{
public string text {get;set;}
public int id {get;set;}

 public override string ToString() 
 { 
      return text;
 }
// you need this override, else your combobox items are gonna look like 
// "Winforms.Form1 + cbxItem"
}

然后将项目添加到您的组合框中,如下所示:

cbxItem item = new cbxItem();
item.text = "Access";
item.id = 31;    
comboBox.Items.Add(item); 

要获取“id”或“value”,或者您想要调用它:

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       var cbxMember = comboBox1.Items[comboBox1.SelectedIndex] as cbxItem;

      if (cbxMember != null) // safety check
       {
       var value = cbxMember.id; 
       }
    }

答案 1 :(得分:1)

这在很大程度上取决于您的数据管理方式。

如果您的项目不会在程序过程中被修改,您只需使用字典作为映射表。

comboBox.Items.Add("Access"); // make it equal to 31
comboBox.Items.Add("Create"); // make it equal to 34
comboBox.Items.Add("Delete"); // make it equal to 36
comboBox.Items.Add("Modify"); // make it equal to 38

Dictionary<int, int> mapTable = new Dictionary<int, int>();
mapTable.Add(31, 0);
mapTable.Add(34, 1);
mapTable.Add(36, 2);
mapTable.Add(38, 3);

然后只需使用以下内容:

comboBox.SelectedIndex = mapTable[34];

您甚至可以将此逻辑放在一个继承自ComboBox的类中,以便更好地进行抽象。

答案 2 :(得分:0)

您想使用SelectedValue代替SelectedIndex。索引只是一个计数(0,1,2,3 ......)。可以指定值。

答案 3 :(得分:0)

您需要添加比简单字符串更复杂的内容来执行您想要的操作。如果您想要的只是一个int和一个关联的字符串,那么您可以使用KeyValuePair,但任何自定义对象都可以使用。然后,您需要在comboBox上设置DisplayMember和ValueMember,以便正确显示。哦,使用SelectedValue或SelectedMember而不是SelectedIndex。

这是你的补充:

comboBox.Items.Add(new KeyValuePair<int, string>(){ Key = 34, Value = "Access"});

是的,自定义对象会使这个说法更简单,但概念是相同的。

答案 4 :(得分:0)

comboBox.Items.Add(new WorkItem { Key = 31, Value = "Access" });
comboBox.Items.Add(new WorkItem { Key = 34, Value = "Create" });
comboBox.Items.Add(new WorkItem { Key = 36, Value = "Delete" });
comboBox.Items.Add(new WorkItem { Key = 38, Value = "Modify" }); 
selectItemByKey(34);

您需要添加此方法:

   private void selectItemByKey(int key)
   {
        foreach (WorkItem item in comboBox.Items)
        {
            if (item.Key.Equals(key))
                comboBox.SelectedItem = item;
        }
   }`

这样的课程:

public class WorkItem
{
    public int Key { get; set; }
    public string Value { get; set; }

    public WorkItem()
    {
    }

    public override string ToString()
    {
        return Value;
    }
}