1

我有一个组合框,我用 1 到 40 的数字填充它,但它显示它们为 1 比 10-19 比 2 比 20-29 等等,即使我试图通过代码插入数据

for(int i=0;i<41;i++)
Combobox.Items.Inert(i,(i+1).ToString())

也尝试了上面的代码而不转换为字符串,但它再次显示相同的结果,我认为它将它们按升序排列,但这不是我想要的请告诉我如何做到这一点,以便它按 1-40 的顺序显示数字谢谢

4

6 回答 6

3

我相信这个问题就是你要找的。您将不得不自己进行排序并关闭似乎的自定义。

从文章中,这是组合框排序的反射器代码(即私有):

public int Compare(object item1, object item2)  
{  
    if (item1 == null)  
    {  
        if (item2 == null)  
        {  
            return 0;  
        }  
        return -1;  
    }  
    if (item2 == null)  
    {  
        return 1;  
    }  
    string itemText = this.comboBox.GetItemText(item1);  
    string str2 = this.comboBox.GetItemText(item2);  
    return Application.CurrentCulture.CompareInfo.Compare(itemText, str2, CompareOptions.StringSort);  
} 

因此,它将所有内容都转换为字符串,因此关闭排序是您的最佳选择。

于 2012-08-17T19:17:52.843 回答
0

ComboBox 的排序总是按字母顺序和升序进行。

Sorted如果你不想要这种行为,那么你可以简单地通过将属性设置为来关闭它false

于 2012-08-17T19:18:39.727 回答
0

你总是可以封装它。

public class Item : IComparer
{
public Item(int value) { this.Value = value; }

   public int Value { get; set; }

       public int CompareTo(Item item)
  {
                 int ret = -1;
        if (Value < item.Value)
            ret = -1;
        else if (Value > item.Value)
            ret = 1;
        else if (Value == item.Value)
            ret = 0;
        return ret;
      }

}

那么简单...

for(int i = 0; i < 40; i++)
  comboBox.Items.Add(new Item(i));
于 2012-08-17T19:56:22.387 回答
0

ComboBox always adds and sorts objects you add by their "To String" function.

What you could always do is add an empty string prior to the numbers

if(i < 10){ (Combo.Items.Add(i.ToString(StringFormat(" i",i)))); }
else { Combo.Items.Add(i); }

Then when you retrieve it parse it as an integer. (Not as stable as it should be, but a good start).

于 2012-08-17T19:39:40.353 回答
-1

Try this :

for(int i=0;i<41;i++)
Combobox.Items.Add(i);
于 2012-08-17T19:23:08.443 回答
-1

尝试:-

for(int i=0;i<40;i++)
combobox.Items.Add((i+1).ToString("D2"));
于 2012-08-17T19:17:36.073 回答