リストボックスにアイテム(要素)を追加する - C#

リストボックスにアイテムを追加するて手順を紹介します。

事前準備

Windows Formアプリケーションを新規作成し、リストボックスを配置します。

デザイン時にアイテムを追加する場合

デザイン時にリストボックスのアイテムを追加する場合はプロパティウィンドウのItemsプロパティを編集します。プロパティウィンドウのItemsプロパティの右側の[...]ボタンを押します。


文字列コレクションエディタが開きます。


アイテムの文字を入力します。1行につき1つのアイテムとなります。


入力を確定するとフォームデザイン画面にも反映されます。

実行結果

プロジェクトを実行します。アイテムが追加されたリストボックスが表示されます。

コードで追加する場合

フォームにボタンを追加します。ボタンのonClick()イベントに以下のコードを記述します。

コード

private void button1_Click(object sender, EventArgs e)
{
  listBox1.Items.Add("Line:1");
  listBox1.Items.Add("Line:2");
  listBox1.Items.Add("Line:3");
}

実行結果

プロジェクトを実行します。起動時にはリストボックスには何も表示されていません。


ボタンをクリックするとリストボックスに要素が追加されます。

UIの更新を停止して追加する - 追加する要素数が多い場合

ListBoxに追加する要素数が多い場合、UIの更新を停止して要素を追加すると高速に要素を追加できます。

UI

下図のUIを作成します。(利用するのはListBoxとAdd2, Add3 ボタンのみです)

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ListBoxDemo
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button4_Click(object sender, EventArgs e)
    {
      for (int i = 0; i < 1000; i++) {
        listBox1.Items.Add(string.Format("Line:{0:d}", i));
      }
    }

    private void button5_Click(object sender, EventArgs e)
    {
      listBox1.BeginUpdate();
      for (int i = 0; i < 1000; i++) {
        listBox1.Items.Add(string.Format("Line:{0:d}", i));
      }
      listBox1.EndUpdate();
    }
  }
}

解説

button4_Clickが[Add2]ボタン、button5_Clickが[Add3]ボタンのClickイベントハンドラになります。
[Add3]ボタンのほうは要素の追加前にListBoxのBeginUpdateメソッドを呼び出してListBoxの画面更新を停止します。要素の追加が終わったのちEndUpdateメソッドを呼び出し画面を更新します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[Add2]または[Add3]ボタンをクリックします。ListBoxに要素が1000個追加されます。


ボタンを押すごとに1000個ずつ要素が追加されますが、[Add2]ボタンより[Add3]ボタンのほうが要素を追加する速度が若干早いです。高速なPCを利用している場合はなかなか違いが判りませんが、要素数が50,000以上になると差が出てきます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2019-12-09
作成日: 2011-08-31
iPentec all rights reserverd.