无法使用对象在组合框中设置SelectedValue

时间:2012-07-15 06:01:27

标签: c# winforms

我有以下代码:

public partial class ModificarAlimento : Form
{
    private Alimento alim;
    private Dictionary<string, Nutriente> nutrientes;

    public ModificarAlimento(Alimento a, Dictionary<string, Nutriente> nut)
    {
        InitializeComponent();
        this.nutrientes = nut;
        alim = a;

        int i = 0;
        foreach (KeyValuePair<string, CantidadNutrientes> x in alim.Nutrientes) 
        {
            ComboBox n = new ComboBox();
            n.DropDownStyle = ComboBoxStyle.DropDownList;
            n.Location = new Point(12, 25 * (i + 1) + 80);
            n.DataSource = new BindingSource(nutrientes, null);
            n.DisplayMember = "Key";
            n.ValueMember = "Value";
            TextBox cNuts = new TextBox();
            cNuts.Location = new Point(150, 25 * (i + 1) + 80);
            cNuts.Size = new Size(50, cNuts.Size.Height);
            cNuts.Text = x.Value.Cantidad.ToString();
            this.Controls.Add(n);
            this.Controls.Add(cNuts);
            i++;
            n.SelectedValue = x.Value.Nutriente;
        }
    }

    private void ModificarAlimento_Load(object sender, EventArgs e)
    {

    }
}

现在。问题出在这里:

n.SelectedValue = x.Value.Nutriente;

每个Alimento(食物)都有一个CantidadNutrientes字典集,它存储一个双精度值和一个Nutriente(营养素),后者又存储一个名称。所以,致电

x.Value.Nutriente

将检索存储在x。

中的CantidadNutrientes中的Nutriente

为什么这不起作用?任何帮助表示赞赏。

编辑:我也在尝试这个

n.SelectedIndex = n.FindStringExact(x.Key);
//and
n.SelectedValue = n.FindStringExact(x.Value.Nutriente.Nombre);

然而,由于一些奇怪的原因,它在我调试时有效,但是如果我不通过换行,它根本不起作用。

3 个答案:

答案 0 :(得分:2)

您必须使用ComboBox.TextComboBox.SelectedIndex

combox.SelectedIndex = combox.FindStringExact("yourItem");

combox.Text = "yourIetmText";

请注意:

ComboBox.FindStringExact Method可以帮助您找到与指定字符串完全匹配的项索引。

答案 1 :(得分:1)

尝试放

n.CreateControl();
在此之前

.Controls.Add(),然后输入

n.SelectedItem = 
  n.Items
   .Cast<KeyValuePair<string, Nutriente>>()
   .SingleOrDefault(o => o.Key == x.Key);

调用this.Controls.Add()

之后

答案 2 :(得分:0)

请使用comboBox1.SelectedText代替此设置项目并在组合中加号显示为已编辑的文字