-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

现在,我打电话

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

最简单的方法是什么?

4

5 回答 5

1

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

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; 
       }
    }
于 2012-10-03T15:21:24.523 回答
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 继承的类中,以实现更好的抽象。

于 2012-10-03T15:21:52.233 回答
0

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

于 2012-10-03T15:20:27.827 回答
0

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

这是你的补充:

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

是的,自定义对象会使这句话变得更简单,但概念是一样的。

于 2012-10-03T15:29:49.320 回答
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;
    }
}
于 2012-10-03T16:07:50.227 回答