结构和枚举,Combobox.SelectedItem

Struct & Enum, Combobox.SelectedItem

该程序是用于产品订购目的的类似迷你数据库的东西,我将唯一的订单保存在一个结构中,并将产品名称保存在一个枚举中(基本上是为了练习)。我只有 3 个产品名称(Product0、Product1、Product2),它们被添加到组合框 (cbo_productNameEdit.DataSource = Enum.GetNames(typeof(productNames));)。

无论如何,在保存订单后,我希望这个组合框将其选择的项目更改为保存的产品名称,但它没有这样做。我用 MessageBox 检查了它,看它是否没有正确存储它...

MessageBox.Show(Orders[cbo_productID.SelectedIndex].productName.ToString());
cbo_productNameEdit.SelectedItem = Orders[cbo_productID.SelectedIndex].productName;

...消息框返回的是Product2,确实是正确的,但是选中的商品停留在Product0。

您可以做的一件事是在组合框中设置 SelectedIndex 而不是 SelectedItem 属性。默认情况下,枚举是从 0 开始的整数,因此索引将与枚举的值对应。

cbo_productNameEdit.SelectedIndex = (int)Enum.Parse(typeof(productNames),
                             Orders[cbo_productID.SelectedIndex].productName.ToString());

因为您使用 .DataSource 属性 填充 ComboBox 项目
您需要使用.SelectedValue来设置选择项

cbo_productNameEdit.SelectedValue = Orders[cbo_productID.SelectedIndex].productName;

来自 MSDN:ComboBox.SelectedValue