ComboBox可以同时容纳数字和文本吗?

时间:2012-06-13 17:31:45

标签: c# types combobox

我想找出一些东西。我有一个方法可以将一些项添加到名为“cbSize”的ComboBox中。我意识到如果我在其中添加两种类型的数据,代码将崩溃。这是因为ComboBox只能容纳一种类型的数据吗?

items.Add(1);
items.Add(10);
items.Add(100);
items.Add(2);
items.Add(20);
items.Add(3);
items.Add(30);       //works fine if add numbers only

//items.Add("4");    //will crash if mix both numbers and text
//items.Add("2");    //works fine if add text only

//then sort them out
items.Sort();

//now clear original cbSize items
cbSize.Items.Clear();

//and add them back in sorted order
cbSize.Items.AddRange(items.ToArray());

//gotta clear ArrayList for the next time or else things will add up
items.Clear();

2 个答案:

答案 0 :(得分:2)

  

这是因为ComboBox只能容纳一种类型的数据吗?

不,尝试以下它会起作用

cbSize.Items.Add("44");
cbSize.Items.Add(44);

问题在于您的物品集合,它是类型安全的。你不能为它添加不同的类型。

尝试使用对象列表。它会工作。原因是int和string都是对象

List<object> items = new List<object>();
items.Add(1);
items.Add(30);     
items.Add("4");    
items.Add("2");    

//since you have string and int value you need to create custom comparer
items.Sort((x, y) => Convert.ToInt32(x).CompareTo(Convert.ToInt32(y)));

//now clear original cbSize items
cbSize.Items.Clear();

//and add them back in sorted order
cbSize.Items.AddRange(items.ToArray());

或者你可以使用ArrayList类(不是类型安全的,因为它可以存储任何对象)

var integers = new ArrayList();
integers.Add(1);
integers.Add(2);
integers.Add("3");
comboBox1.Items.AddRange(integers.ToArray());

答案 1 :(得分:0)

是。你可以做的是提供一个适应int和字符串的Size类:

items.Add(new Size(3));
items.Add(new Size(4));
items.Add(new Size("large"));

然后,您可以使Size类实现IComparable,以便您可以调用Sort()方法。