ComboBox:向项目添加文本和值(无绑定源)

238

在C# WinApp中,我该如何将文本和值同时添加到ComboBox的项中? 我进行了搜索,通常的答案都是使用“绑定到源代码”...但在我的情况下,我的程序中没有准备好的绑定源... 我应该如何实现这样的功能:

combo1.Item[1] = "DisplayText";
combo1.Item[1].Value = "useful Value"
21个回答

0
这与其他答案类似,但更为简洁,如果您已经有一个列表,则避免将其转换为字典。
在 Windows 窗体上给定一个名为“combobox”的 ComboBox 和一个具有 string 类型属性 Name 的 SomeClass 类,
List<SomeClass> list = new List<SomeClass>();

combobox.DisplayMember = "Name";
combobox.DataSource = list;

这意味着SelectedItem是来自list的SomeClass对象,combobox中的每个项目将使用其名称显示。

真的!我以前用过 DisplayMember... 我总是忘记它的存在。我习惯了之前找到的解决方案,没有注意到这个属性,而且它并不总是有用的。并非所有的类都有 NameTag 属性,或者有一个可以任意用作显示文本的字符串属性。 - Matheus Rocha
这是一个很好的观点。如果您可以修改该类,则将其添加到类中可能值得,例如添加一个“ComboBoxText”属性(如果可用,则可以返回ToString()方法)。或者,如果该类无法修改,则可能可以创建一个派生类,在其中实现“ComboBoxText”属性。只有当您必须多次将该类添加到ComboBox中时才值得这样做。否则,像其他答案中所解释的那样,使用字典更简单。 - Alex Smith
嘿,亚历克斯,我用我通常在这些情况下使用的方法做了一个答案。我认为它非常接近你所说的,或者可能是我没有理解你所说的。我没有从类中派生,因为有些类可能需要你实现我们不想覆盖的方法(所以我们会有一堆带有简单 base.Method(); 的方法),此外,你将不得不为每个要添加到组合框或列表框中的不同类型创建一个派生类。我制作的类很灵活,你可以在不需要额外努力的情况下使用任何类型。请看下面我的答案,告诉我你的想法 :) - Matheus Rocha
我同意,你的答案肯定比为每个要添加到组合框中的类型创建一个派生类更方便。干得好!我认为将来如果我没有像“名称”这样的属性可用,我会使用类似于你的答案或字典答案的东西 :) - Alex Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接