【问题标题】:Can a ComboBox accommodate both numbers and text?ComboBox 可以同时容纳数字和文本吗?
【发布时间】:2012-06-13 17:31:45
【问题描述】:

我想弄清楚一些事情。我有一种方法可以将一些项目添加到名为“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();

【问题讨论】:

  • 什么时候出现异常?

标签: c# types combobox


【解决方案1】:

这是因为 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());

【讨论】:

  • 谢谢达米特。事实上,我将“items”定义为“ArrayList”来执行排序。我正在从“文本框”导入值,所以我想最好将它们保留为文本。无论如何,你的回答很有帮助。我喜欢深入到问题根源的答案。每当我无法避免拥有两种类型的数据时,它都会对我有所帮助。
【解决方案2】:

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

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

然后,您可以让 Size 类实现 IComparable,这样您就可以调用 Sort() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-05
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2010-12-27
    • 2011-05-19
    相关资源
    最近更新 更多