1

コンボボックスがあり、1から40までの数字を入力しますが、データトラフコードを挿入しようとしても、10-19より1、20-29より2などと表示されます。

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

ComboBoxは常に、「文字列へ」関数によって追加したオブジェクトを追加およびソートします。

常にできることは、数字の前に空の文字列を追加することです

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

次に、それを取得するときに、整数として解析します。(本来あるべきほど安定していませんが、良いスタートです)。

于 2012-08-17T19:39:40.353 に答える
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 に答える
-1

試す:-

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

これを試して :

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