我有以下代码:
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);
然而,由于一些奇怪的原因,它在我调试时有效,但是如果我不通过换行,它根本不起作用。
答案 0 :(得分:2)
您必须使用ComboBox.Text
或ComboBox.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代替此设置项目并在组合中加号显示为已编辑的文字