在设计时设置ComboBox的Text和Value属性

时间:2010-04-28 12:14:41

标签: c# .net winforms

我需要将以下项添加到组合框中。

  

值DisplayText

     

Mpost发表

     

致电呼叫

     

RScan重新扫描

这些项目是相当静态的,不会从任何数据库中检索出来......因此想到在设计时自己分配这些项目。

我无法使用Items属性,因为它只询问每个项目的一个值...你能帮忙吗。

Ps:如果您建议使用BindingSource,请举个例子。我找不到一个。

2 个答案:

答案 0 :(得分:14)

您可以使用BindingList<KeyValuePair<string, string>>

var items = new BindingList<KeyValuePair<string, string>>();

items.Add(new KeyValuePair<string, string>("Mpost", "Posted"));
items.Add(new KeyValuePair<string, string>("Call", "Calling"));
items.Add(new KeyValuePair<string, string>("RScan", "Re-Scan"));

myComboBox.DataSource = items;
myComboBox.ValueMember = "Key";
myComboBox.DisplayMember = "Value";

我认为你不会找到比这更简单或更直接的解决方案。只需将它放在表单的构造函数中(在InitializeComponent之后 - 顺便说一下,我会在代码中的之后附加你想要添加到ComboBox 的任何事件处理程序)并且你很好。

至于为什么没有一种更简单的更简单的方式:老实说,我会说这是解决方案变得越来越复杂的一个典型例子,你尝试制作它们的灵活性就越大。别误会我的意思; ComboBox是一个非常好的小控件。但事实是,它的设计目的是获取任何合法的支持源,而不仅仅是一个表,一个列表,或一个具有两个属性的项集合。由于它可以采用任何数据源,因此严格键/值配对的概念在某种程度上被剥夺了其特殊状态。因此,为添加具有两个属性的项目提供一些特殊的GUI是没有多大意义的(尽管在这种特殊情况下它可能很方便)。

答案 1 :(得分:0)

private class Data
{
    public string Name { get; set; }
    public string Value { get; set; }
}
public Form1()
{
    InitializeComponent();
    comboBox1.Items.Add(new Data{Name = "Test", Value = "Hello"});
    comboBox1.Items.Add(new Data {Name = "Test2", Value = "World"});
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "Value";
}

您可以将用于显示的属性定义为DisplayMember,将用于该值的属性定义为ValueMember。

问候丹尼尔