[C#][Windows Formsアプリ][ComboBox] Sortedプロパティで項目を並べ替える

スポンサーリンク

はじめに

Sorted プロパティは、ComboBox内の項目を自動的に昇順ソートするための設定です。
リストに項目を追加した順ではなく、文字列順(アルファベット順/五十音順)で自動整列されます。

 

Sortedプロパティとは?

ComboBox.Sorted プロパティを true に設定すると、Items コレクションに追加された要素が
自動的に文字列の昇順で並び替えられます。

💡 ポイント:
・項目の追加順は無視され、常に昇順(A→Z / あ→ん)で並びます。
・大文字と小文字は区別されずにソートされます。

 

基本構文

// ComboBoxの項目を自動でソート
comboBox1.Sorted = true;

この設定は、Items.Add()Items.AddRange() で項目を追加する前でも後でも有効です。
ただし、追加直後にソートが自動的に再計算されるため、追加速度が若干低下する場合があります。

 

実用例:ソートあり/なしの違い

using System;
using System.Windows.Forms;

namespace ComboBoxSortedSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            comboBox1.Items.AddRange(new string[] 
            { 
                "バナナ", "りんご", "みかん", "ぶどう", "もも"
            });

            // 並び順を昇順に自動ソート
            comboBox1.Sorted = true;
        }
    }
}

上記の設定を行うと、リストは自動的に次のように並び替えられます。

Sorted = false Sorted = true
バナナ
りんご
みかん
ぶどう
もも
ぶどう
バナナ
みかん
もも
りんご

 

注意点

  • データバインド(DataSource)を設定している場合、Sortedは無視されます。
  • 文字列としてソートされるため、「10」「2」は「10」「2」の順に並ぶ(数値順ではない)。
  • Sortedtrue にした後で Items.Insert() を使うと、指定インデックスは無視され、ソート順に再配置されます。
  • 並び順を制御したい場合は、自前でソートしてから AddRange() で追加する方が安定します。
⚠️ 数値リストを扱うときの落とし穴:
「1」「10」「2」→ ソート結果は「1」「10」「2」。
数値順にしたい場合は List<int> をソートしてから文字列化して追加しましょう。

 

応用例:手動ソートとの比較

自動ソートを使う場合

comboBox1.Sorted = true;
comboBox1.Items.AddRange(new[] { "Tokyo", "Nagoya", "Osaka", "Fukuoka" });

手動でソートする場合

string[] cities = { "Tokyo", "Nagoya", "Osaka", "Fukuoka" };
Array.Sort(cities);
comboBox1.Items.AddRange(cities);

自動ソートは便利ですが、制御が効かない場面では自分で配列やリストを並べ替えてから追加するのが安全です。

 

カスタムオブジェクトを扱う場合

Sorted は文字列の ToString() 結果をもとに並び替えます。
オブジェクトを追加する場合は、ToString() をオーバーライドしておくと意図通りに並びます。

public class City
{
    public string Name { get; set; }
    public override string ToString() => Name;
}

// 使用例
comboBox1.Items.AddRange(new City[]
{
    new City { Name = "大阪" },
    new City { Name = "東京" },
    new City { Name = "名古屋" }
});

comboBox1.Sorted = true; // ToString()の結果で昇順に並ぶ

 

まとめ

  • Sortedtrue にすると、Items の項目が自動で昇順ソートされる
  • 文字列順で比較され、数値やオブジェクトは ToString() ベースで判定
  • データバインド(DataSource)を使用している場合は無効
  • 表示順を自由に制御したいときは自前でソートする
Please follow and like us:

コメント

タイトルとURLをコピーしました