【问题标题】:C# - How to retrieve a reference to an object from a combo box?C# - 如何从组合框中检索对对象的引用?
【发布时间】:2010-02-26 17:45:57
【问题描述】:

我在 C# 中从一个类的实例填充一个 ComboBox。 如何通过检索对相应对象的引用来获取所选项目? 我已经使用了 SelectedValue、SelectedItem、SelectedIndex,但它们都返回了我的对象的字符串表示形式..

谢谢

[编辑]

一段代码,显示我正在尝试做的事情:

填充部分:

foreach (Business.IAuteur auteur in _livreManager.GetAuthors())
            {
                comboAuthor.Items.Add(auteur);
            }

检索部分,点击保存按钮时激活:

 private void btnSave_Click(object sender, EventArgs e)
        {
            Business.IAuteur auteur = new Business.Auteur();

            auteur = (Business.IAuteur)comboAuthor.SelectedValue;

            // A short verification that my item has been correctly
            // retrieved
            toolStripStatusLabel1.Text = auteur.Nom;
        }

错误信息,指向这里:toolStripStatusLabel1.Text = auteur.Nom;

对象引用未设置为 对象的实例。

【问题讨论】:

  • 请说明您如何将项目添加到组合框中。当然,如果你给它添加字符串,你只会得到字符串。

标签: c# winforms combobox


【解决方案1】:

如果SelectedItem 返回一个string 对象,那么您正在使用字符串填充您的组合框。如果您在 POCO 中覆盖 ToString,ComboBox 将自动显示该值,同时使用 SelectedItem 返回所需的对象。

MSDN 中所述,您还应该在 POCO 中覆盖 Equals,以便在必要时可以在 Items 集合中找到它。

编辑:解决您的代码。
在添加到 ComboBox 时丢失 .ToString() 调用并按照我上面的建议。

【讨论】:

  • 好的,它正在使用 SelectedItem。毕竟不需要覆盖 Equals !谢谢!
  • 如果你想设置 SelectedItem,你需要覆盖Equals。我现在倾向于将其作为一种习惯,以避免将来出现意外。
猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
相关资源
最近更新 更多