はじめに
ComboBox の項目を動的に追加したいときに使うのが Items.Add と Items.Insert です。
どちらも似ていますが、挙動や使いどころは明確に異なります。
💡 **重要な前提**
(DataSource と Items は併用不可)
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 のときは、指定した位置に挿入されず
「文字列の並び順」で自動的に整列されます。
例: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.AddItems.InsertItems.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:

コメント