【问题标题】:Struct & Enum, Combobox.SelectedItem结构和枚举,Combobox.SelectedItem
【发布时间】:2015-07-09 11:57:43
【问题描述】:

该程序是一个用于产品订购目的的小型数据库,我将唯一的订单保存在一个结构中,并将 productNames 保存在一个枚举中(基本上是为了练习)。我只有 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。

【问题讨论】:

    标签: c# winforms struct combobox enums


    【解决方案1】:

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

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

    【讨论】:

    • 1. 枚举不是基于 0 的整数。您可以使用带有负整数的枚举值,或者值可以从其他数字开始,然后是 0。2. 假设 SelectedIndex 将始终与所选枚举的值相同,这远非良好的解决方案。跨度>
    • 1.默认情况下,这就是我的意思。 2. 他想要给出问题的答案,这个解决方案有效。我同意这不是最好的方法
    • 例如,如果他的枚举值为{0, 1, 4, 5},您的解决方案将不起作用。很抱歉,但是从短语 Enums are 0 based integers 很难理解这只是默认情况下:)
    • 我知道在这种情况下它不会起作用。这很公平:)我是新来的,我想在解释时必须习惯细节
    【解决方案2】:

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

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

    来自 MSDN:ComboBox.SelectedValue

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2015-09-23
      • 1970-01-01
      • 2019-02-07
      相关资源
      最近更新 更多