[C#][Windows Formsアプリ][ComboBox] Items.Add / Items.Insertでアイテムを追加する

スポンサーリンク

はじめに

ComboBox の項目を動的に追加したいときに使うのが Items.AddItems.Insert です。
どちらも似ていますが、挙動や使いどころは明確に異なります。

💡 **重要な前提**
DataSource を設定している場合、Items.Add / Items.Insert は使用できません。
(DataSource と Items は併用不可)

 

Items.Add と Items.Insert の違い

メソッド 説明 使いどころ
Items.Add(object item) リストの最後に項目を追加する 普通の追加 / 動的追加全般
Items.Insert(int index, object item) 指定した位置(index)に項目を挿入する 特定位置への挿入 / 並び順を制御したいとき

簡単なイメージ

  • Add → 最後尾に「足す」
  • Insert → 指定位置に「差し込む」

 

Items.Add の使い方

// ComboBox に項目を追加(末尾に追加)
comboBox1.Items.Add("Python");
comboBox1.Items.Add("C#");
comboBox1.Items.Add("Java");

オブジェクトも追加できる

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

comboBox1.Items.Add(new City { Id = 1, Name = "東京" });
comboBox1.Items.Add(new City { Id = 2, Name = "大阪" });

ToString() の結果が表示されるため、表示名と内部値を持つデータも扱えます。

 

Items.Insert の使い方

指定した位置に項目を挿入する場合に使用します。

// リストの 0番目に「最優先」項目を追加する
comboBox1.Items.Insert(0, "最優先");

すでにデータが入っている場合にも、その位置に割り込ませることができます。

例:優先項目を先頭に入れたい場合

comboBox1.Items.Add("通常A");
comboBox1.Items.Add("通常B");
comboBox1.Items.Insert(0, "重要な項目");

実際の並び:

1. 重要な項目
2. 通常A
3. 通常B

 

Sorted = true のときの Add / Insert の挙動

comboBox1.Sorted = true; を設定している場合、
Add でも Insert でも並び順は「強制的に昇順ソート」されます。

⚠️ **Insert(index) の index は無視されます**
Sorted = true のときは、指定した位置に挿入されず
「文字列の並び順」で自動的に整列されます。

例:Sorted = true の場合

comboBox1.Sorted = true;

comboBox1.Items.Add("C");
comboBox1.Items.Insert(0, "A"); // 0 に入らない
comboBox1.Items.Add("B");

最終的な並びは:

A
B
C

この挙動は、Insert を使うときに誤解しやすいので注意してください。

 

DataSource が設定されている場合の注意

ComboBox に DataSource をセットすると、

  • Items.Add
  • Items.Insert
  • Items.Clear

などの操作は無効になります。

// NG例:DataSource設定中は Items を直接操作できない
comboBox1.DataSource = myList;
comboBox1.Items.Add("追加項目"); // InvalidOperationException

正しい追加方法

データ元(List, DataTable など)に追加して、再バインドする必要があります。

myList.Add("新しい項目");
comboBox1.DataSource = null;
comboBox1.DataSource = myList;

 

Add / Insert の実用例

例1:ユーザーが入力した文字を末尾に追加

private void btnAdd_Click(object sender, EventArgs e)
{
    comboBox1.Items.Add(textBoxInput.Text);
}

例2:先頭に「選択してください」項目を入れる

comboBox1.Items.Insert(0, "選択してください");
comboBox1.SelectedIndex = 0;

例3:AddRange と Insert の組み合わせ

comboBox1.Items.AddRange(new[] { "A", "B", "C" });
comboBox1.Items.Insert(0, "--- 選択 ---");

 

パフォーマンス最適化(BeginUpdate / EndUpdate)

大量に Add / Insert する場合は、ちらつきを防ぐために
BeginUpdate() / EndUpdate() を使うのがおすすめです。

comboBox1.BeginUpdate();

for (int i = 1; i <= 1000; i++)
{
    comboBox1.Items.Add($"項目 {i}");
}

comboBox1.EndUpdate();

描画更新が抑えられ、処理がスムーズになります。

 

まとめ

  • Items.Add … 項目を末尾に追加する。
  • Items.Insert … 指定した位置に挿入する(ただし Sorted=true なら位置無視)。
  • Sorted=true の場合、Add/Insert はソート順に強制整列される。
  • DataSource 使用中は Items を直接操作できない。
  • 大量追加は BeginUpdate / EndUpdate で高速化。

動的に項目を追加する機能は、ユーザー入力フォームや検索補助などでよく使います。
Add と Insert の違いを押さえて、状況に応じて適切に使い分けてください!

Please follow and like us:

コメント

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