根据键值对设置组合框的选择项。

时间:2011-12-02 14:02:00

标签: c# winforms combobox

我有一个像这样填充的组合框:

this.reqTypeInput.Items.Add(new RequestType("Label 1", "Value1"));
this.reqTypeInput.Items.Add(new RequestType("Label 2", "value2"));
this.reqTypeInput.Items.Add(new RequestType("Label 3", "value3"));

我的RequestType类是:

class RequestType
{
    public string Text { get; set; }
    public string Value { get; set; }

    public RequestType(string text, string val)
    {
        Text = text;
        Value = val;
    }

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

我有一个值,例如“Value1”。如何将组合框的selectedItem设置为对象{Label 1,Value1}?

我试过了:

this.reqTypeInput.SelectedIndex = this.reqTypeInput.Items.IndexOf("Value1");

4 个答案:

答案 0 :(得分:5)

看起来您正在尝试查找索引,就像ComboBox只包含字符串值一样,当它实际包含RequestType个对象时。您是否尝试覆盖Equals运营商?

结帐this SO postthis one了解覆盖Equals的示例。

编辑:如另一个答案所述,一个好的做法是在ComboBox中填充您想要的对象集合,然后将该集合绑定到ComboBox 。我的答案中的第一个链接就是一个例子。

答案 1 :(得分:3)

如果请求类型没有更改,您可以先将每个RequestType对象存储在变量中,然后将ComboBox的SelectedItem属性设置为该变量。

例如:

RequestType type1 = New RequestType("Label 1", "Value 1");
RequestType type2 = New RequestType("Label 2", "Value 2");

reqTypeInput.Items.Add(type1);
reqTypeInput.Items.Add(type2);

然后,设置如下:

reqTypeInput.SelectedItem = type2;

答案 2 :(得分:1)

你可以试试这个:

RequestType type1 = New RequestType("Label 1", "Value 1");
RequestType type2 = New RequestType("Label 2", "Value 2");

reqTypeInput.Items.Add(type1);
reqTypeInput.Items.Add(type2);

this.reqTypeInput.SelectedIndex = this.reqTypeInput.Items.IndexOf(type1);

HTH。

答案 3 :(得分:0)

Lot的选择,List,SortedList,Dictionary,SortedDictionary。 但是你可以将你的RequestTypes集合保存在列表中,然后从中填充组合,如果你愿意,你甚至可以绑定。

每个RequestType的ToString方法的结果是组合管理器对你的请求类型集合的唯一要求。如果你想通过Value查找,那么Combox只会看到你输入的内容,即RequestType.ToString()