[C#] ListBoxの基本的な使い方と実装方法

ListBoxはC#のWindows Formsアプリケーションで使用されるコントロールで、ユーザーにアイテムのリストを表示し、選択を可能にします。

基本的な使い方としては、フォームデザイナーでListBoxを配置し、プロパティウィンドウでアイテムを追加するか、コードでItems.Addメソッドを使用してアイテムを追加します。

選択されたアイテムはSelectedItemプロパティで取得できます。

イベントハンドラーを使用して、アイテムが選択されたときの動作を定義することも可能です。

例えば、SelectedIndexChangedイベントを利用して、選択が変更された際に特定の処理を実行できます。

ListBoxはシンプルなUI要素ですが、データバインディングを活用することで、より複雑なデータセットを扱うこともできます。

この記事でわかること
  • ListBoxの基本的な使い方
  • プロパティの設定方法
  • イベントの活用法
  • カスタマイズのテクニック
  • 応用例の実装方法

目次から探す

ListBoxの概要

ListBoxは、Windowsフォームアプリケーションにおいて、複数のアイテムをリスト形式で表示するためのコントロールです。

ユーザーはリストから1つまたは複数のアイテムを選択することができ、選択されたアイテムに基づいてアプリケーションの動作を変更することが可能です。

ListBoxは、データの表示や選択を簡単に行えるため、ユーザーインターフェースの構築において非常に便利な要素です。

また、ListBoxはアイテムの追加や削除、選択状態の管理が容易で、さまざまなイベントを通じてユーザーの操作に応じた処理を実装することができます。

ListBoxの基本的な使い方

ListBoxの配置方法

ListBoxをフォームに配置するには、Visual Studioのデザイナーを使用します。

以下の手順で配置できます。

  1. ツールボックスから ListBox を選択します。
  2. フォーム上にドラッグ&ドロップします。
  3. プロパティウィンドウで、ListBoxのサイズや位置を調整します。

サンプルコードは以下の通りです。

partial class MyForm : Form
{
    private ListBox myListBox;
    public MyForm()
    {
        InitializeComponent();
        
        myListBox = new ListBox(); // ListBoxのインスタンスを作成
        myListBox.Location = new Point(10, 10); // 位置を設定
        myListBox.Size = new Size(200, 150); // サイズを設定
        
        this.Controls.Add(myListBox); // フォームに追加
    }
}

アイテムの追加と削除

ListBoxにアイテムを追加するには、Items.Addメソッドを使用します。

また、アイテムを削除するには、Items.RemoveメソッドItems.Clearメソッドを使用します。

以下はアイテムの追加と削除のサンプルコードです。

// アイテムの追加
myListBox.Items.Add("アイテム1"); // アイテム1を追加
myListBox.Items.Add("アイテム2"); // アイテム2を追加
// アイテムの削除
myListBox.Items.Remove("アイテム1"); // アイテム1を削除
// myListBox.Items.Clear(); // 全てのアイテムを削除

選択されたアイテムの取得

選択されたアイテムを取得するには、SelectedItemプロパティを使用します。

以下のサンプルコードでは、ボタンをクリックした際に選択されたアイテムを取得し、メッセージボックスで表示します。

private void button_Click(object sender, EventArgs e)
{
    string selectedItem = myListBox.SelectedItem as string; // 選択されたアイテムを取得
    if (selectedItem != null)
    {
        MessageBox.Show("選択されたアイテム: " + selectedItem); // メッセージボックスで表示
    }
    else
    {
        MessageBox.Show("アイテムが選択されていません。");
    }
}

イベントハンドラーの設定

ListBoxのイベントを処理するためには、イベントハンドラーを設定します。

例えば、アイテムが選択されたときに処理を行うには、SelectedIndexChangedイベントを使用します。

以下はイベントハンドラーの設定例です。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    myListBox.SelectedIndexChanged += MyListBox_SelectedIndexChanged; // イベントハンドラーを設定
    
    this.Controls.Add(myListBox);
}
private void MyListBox_SelectedIndexChanged(object sender, EventArgs e)
{
    // 選択が変更されたときの処理
    string selectedItem = myListBox.SelectedItem as string;
    MessageBox.Show("選択されたアイテム: " + selectedItem);
}

このように、ListBoxを使うことで、ユーザーの選択に応じたインタラクティブなアプリケーションを簡単に作成できます。

ListBoxのプロパティ

Itemsプロパティ

Itemsプロパティは、ListBoxに表示されるアイテムのコレクションを管理します。

このプロパティを使用することで、アイテムの追加、削除、クリアなどの操作が可能です。

以下は、Itemsプロパティを使用したサンプルコードです。

// アイテムの追加
myListBox.Items.Add("アイテム1");
myListBox.Items.Add("アイテム2");
// アイテムの削除
myListBox.Items.Remove("アイテム1");
// 全てのアイテムをクリア
myListBox.Items.Clear();

SelectedItemプロパティ

SelectedItemプロパティは、ListBoxで現在選択されているアイテムを取得または設定するために使用します。

このプロパティを利用することで、ユーザーが選択したアイテムに基づいて処理を行うことができます。

以下は、SelectedItemプロパティの使用例です。

string selectedItem = myListBox.SelectedItem as string; // 選択されたアイテムを取得
if (selectedItem != null)
{
    MessageBox.Show("選択されたアイテム: " + selectedItem);
}

SelectionModeプロパティ

SelectionModeプロパティは、ListBoxでのアイテム選択の方法を指定します。

このプロパティには、以下のような選択モードがあります。

スクロールできます
モード名説明
One1つのアイテムのみ選択可能
MultiSimple複数のアイテムを選択可能(Ctrlキーで選択)
MultiExtended複数のアイテムを選択可能(Shiftキーで範囲選択)

以下は、SelectionModeプロパティを設定するサンプルコードです。

myListBox.SelectionMode = SelectionMode.MultiExtended; // 複数選択を許可

DataSourceプロパティ

DataSourceプロパティは、ListBoxにデータをバインドするために使用します。

このプロパティを設定することで、データソースから自動的にアイテムを表示することができます。

例えば、リストや配列、データテーブルなどをバインドすることが可能です。

以下は、DataSourceプロパティを使用したサンプルコードです。

List<string> items = new List<string> { "アイテム1", "アイテム2", "アイテム3" };
myListBox.DataSource = items; // データソースを設定

このように、ListBoxのプロパティを活用することで、より柔軟で使いやすいユーザーインターフェースを構築することができます。

ListBoxのイベント

SelectedIndexChangedイベント

SelectedIndexChangedイベントは、ListBox内の選択されたアイテムのインデックスが変更されたときに発生します。

このイベントを利用することで、ユーザーが異なるアイテムを選択した際に特定の処理を実行することができます。

以下は、SelectedIndexChangedイベントのサンプルコードです。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    myListBox.SelectedIndexChanged += MyListBox_SelectedIndexChanged; // イベントハンドラーを設定
    
    this.Controls.Add(myListBox);
}
private void MyListBox_SelectedIndexChanged(object sender, EventArgs e)
{
    // 選択が変更されたときの処理
    string selectedItem = myListBox.SelectedItem as string;
    MessageBox.Show("選択されたアイテム: " + selectedItem);
}

Clickイベント

Clickイベントは、ListBox内のアイテムがクリックされたときに発生します。

このイベントを使用することで、ユーザーがアイテムを選択した際に特定のアクションを実行することができます。

以下は、Clickイベントのサンプルコードです。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    myListBox.Click += MyListBox_Click; // イベントハンドラーを設定
    
    this.Controls.Add(myListBox);
}
private void MyListBox_Click(object sender, EventArgs e)
{
    // アイテムがクリックされたときの処理
    string selectedItem = myListBox.SelectedItem as string;
    if (selectedItem != null)
    {
        MessageBox.Show("クリックされたアイテム: " + selectedItem);
    }
}

DoubleClickイベント

DoubleClickイベントは、ListBox内のアイテムがダブルクリックされたときに発生します。

このイベントを利用することで、ユーザーがアイテムをダブルクリックした際に特定の処理を実行することができます。

以下は、DoubleClickイベントのサンプルコードです。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    myListBox.DoubleClick += MyListBox_DoubleClick; // イベントハンドラーを設定
    
    this.Controls.Add(myListBox);
}
private void MyListBox_DoubleClick(object sender, EventArgs e)
{
    // アイテムがダブルクリックされたときの処理
    string selectedItem = myListBox.SelectedItem as string;
    if (selectedItem != null)
    {
        MessageBox.Show("ダブルクリックされたアイテム: " + selectedItem);
    }
}

これらのイベントを活用することで、ListBoxのインタラクションをより豊かにし、ユーザーの操作に応じた柔軟なアプリケーションを構築することができます。

ListBoxのカスタマイズ

アイテムのスタイル変更

ListBoxのアイテムのスタイルを変更するには、DrawItemイベントを利用します。

このイベントを使用することで、アイテムの描画方法をカスタマイズできます。

まず、ListBoxのDrawModeプロパティをOwnerDrawFixedまたはOwnerDrawVariableに設定し、次にDrawItemイベントハンドラーを実装します。

以下は、アイテムのスタイルを変更するサンプルコードです。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    myListBox.DrawMode = DrawMode.OwnerDrawFixed; // 描画モードを設定
    myListBox.DrawItem += MyListBox_DrawItem; // イベントハンドラーを設定
    
    myListBox.Items.Add("アイテム1");
    myListBox.Items.Add("アイテム2");
    myListBox.Items.Add("アイテム3");
    
    this.Controls.Add(myListBox);
}
private void MyListBox_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground(); // 背景を描画
    // アイテムのスタイルを変更
    if (e.Index >= 0)
    {
        e.Graphics.DrawString(myListBox.Items[e.Index].ToString(), 
            e.Font, Brushes.Blue, e.Bounds); // 青色で描画
    }
    e.DrawFocusRectangle(); // フォーカスの矩形を描画
}

複数選択の設定

ListBoxで複数のアイテムを選択できるようにするには、SelectionModeプロパティを設定します。

SelectionMode.MultiSimpleまたはSelectionMode.MultiExtendedを選択することで、ユーザーが複数のアイテムを選択できるようになります。

以下は、複数選択を設定するサンプルコードです。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    myListBox.SelectionMode = SelectionMode.MultiExtended; // 複数選択を許可
    
    myListBox.Items.Add("アイテム1");
    myListBox.Items.Add("アイテム2");
    myListBox.Items.Add("アイテム3");
    
    this.Controls.Add(myListBox);
}

スクロールバーの表示

ListBoxには、アイテムが多くなると自動的にスクロールバーが表示されますが、必要に応じてスクロールバーの表示をカスタマイズすることもできます。

ListBoxのサイズを小さく設定することで、アイテムがはみ出した場合にスクロールバーが表示されます。

以下は、スクロールバーの表示を確認するためのサンプルコードです。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(100, 100); // サイズを小さく設定
    
    // 多くのアイテムを追加
    for (int i = 1; i <= 20; i++)
    {
        myListBox.Items.Add("アイテム" + i);
    }
    
    this.Controls.Add(myListBox);
}

このように、ListBoxのカスタマイズを行うことで、ユーザーインターフェースをより使いやすく、視覚的に魅力的にすることができます。

ListBoxの応用例

データバインディングの活用

ListBoxは、データバインディングを使用して、コレクションやデータソースから自動的にアイテムを表示することができます。

これにより、データの変更がListBoxに反映されるため、効率的なデータ管理が可能です。

以下は、データバインディングを活用したサンプルコードです。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    // データソースとしてリストを作成
    List<string> items = new List<string> { "アイテム1", "アイテム2", "アイテム3" };
    myListBox.DataSource = items; // データソースを設定
    
    this.Controls.Add(myListBox);
}

フィルタリング機能の実装

ListBoxに表示されるアイテムをフィルタリングする機能を実装することで、ユーザーが特定の条件に合ったアイテムを簡単に見つけられるようになります。

テキストボックスを使用して、ユーザーが入力した文字列に基づいてListBoxのアイテムをフィルタリングします。

以下は、フィルタリング機能の実装例です。

private TextBox filterTextBox;
public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 40);
    myListBox.Size = new Size(200, 150);
    
    // 初期アイテムを追加
    myListBox.Items.AddRange(new string[] { "アイテム1", "アイテム2", "アイテム3", "特別アイテム" });
    
    filterTextBox = new TextBox();
    filterTextBox.Location = new Point(10, 10);
    filterTextBox.TextChanged += FilterTextBox_TextChanged; // イベントハンドラーを設定
    
    this.Controls.Add(myListBox);
    this.Controls.Add(filterTextBox);
}
private void FilterTextBox_TextChanged(object sender, EventArgs e)
{
    string filter = filterTextBox.Text.ToLower(); // フィルタ文字列を取得
    myListBox.Items.Clear(); // 現在のアイテムをクリア
    
    // フィルタリングされたアイテムを再追加
    foreach (string item in new string[] { "アイテム1", "アイテム2", "アイテム3", "特別アイテム" })
    {
        if (item.ToLower().Contains(filter))
        {
            myListBox.Items.Add(item); // フィルタに合致するアイテムを追加
        }
    }
}

ドラッグアンドドロップの実装

ListBoxにドラッグアンドドロップ機能を実装することで、ユーザーがアイテムを簡単に移動できるようになります。

この機能を実装するには、DragEnterDragDropMouseDownイベントを使用します。

以下は、ドラッグアンドドロップ機能の実装例です。

public MyForm()
{
    InitializeComponent();
    
    myListBox = new ListBox();
    myListBox.Location = new Point(10, 10);
    myListBox.Size = new Size(200, 150);
    
    myListBox.Items.AddRange(new string[] { "アイテム1", "アイテム2", "アイテム3" });
    
    myListBox.MouseDown += MyListBox_MouseDown; // ドラッグ開始イベントを設定
    myListBox.DragEnter += MyListBox_DragEnter; // ドラッグエンタイベントを設定
    myListBox.DragDrop += MyListBox_DragDrop; // ドロップイベントを設定
    
    this.Controls.Add(myListBox);
}
private void MyListBox_MouseDown(object sender, MouseEventArgs e)
{
    if (myListBox.SelectedItem != null)
    {
        myListBox.DoDragDrop(myListBox.SelectedItem, DragDropEffects.Move); // ドラッグ開始
    }
}
private void MyListBox_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.StringFormat))
    {
        e.Effect = DragDropEffects.Move; // ドラッグエンタ効果を設定
    }
}
private void MyListBox_DragDrop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.StringFormat))
    {
        string item = (string)e.Data.GetData(DataFormats.StringFormat); // ドロップされたアイテムを取得
        myListBox.Items.Add(item); // ListBoxにアイテムを追加
    }
}

これらの応用例を通じて、ListBoxの機能を拡張し、ユーザーにとって使いやすいインターフェースを提供することができます。

よくある質問

ListBoxに大量のデータを表示するには?

ListBoxに大量のデータを表示する場合、パフォーマンスを考慮する必要があります。

以下の方法を検討してください。

  • データバインディング: データソースをバインドすることで、ListBoxが自動的にデータを管理します。
  • 仮想化: 大量のデータを扱う場合、仮想化を使用して表示されているアイテムのみを描画することで、パフォーマンスを向上させます。
  • ページング: 一度に表示するアイテムの数を制限し、ページングを実装することで、ユーザーが必要なデータにアクセスしやすくします。

ListBoxの選択をプログラムで変更するには?

ListBoxの選択をプログラムで変更するには、SelectedIndexプロパティやSelectedItemプロパティを使用します。

以下のように設定できます。

  • 特定のアイテムを選択: myListBox.SelectedItem = "アイテム名";
  • インデックスで選択: myListBox.SelectedIndex = 0; // 最初のアイテムを選択

例:myListBox.SelectedIndex = 1;とすることで、2番目のアイテムを選択できます。

ListBoxのアイテムを動的に更新するには?

ListBoxのアイテムを動的に更新するには、Itemsコレクションを操作します。

以下の方法でアイテムを追加、削除、または変更できます。

  • アイテムの追加: myListBox.Items.Add("新しいアイテム");
  • アイテムの削除: myListBox.Items.Remove("削除するアイテム");
  • アイテムの更新: myListBox.Items[index] = "更新されたアイテム"; // 指定したインデックスのアイテムを更新

これにより、ユーザーの操作やアプリケーションの状態に応じてListBoxの内容を動的に変更できます。

まとめ

この記事では、C#のWindowsフォームにおけるListBoxの基本的な使い方から、プロパティやイベント、カスタマイズ方法、さらには応用例まで幅広く解説しました。

ListBoxは、ユーザーインターフェースにおいて非常に便利なコントロールであり、データの表示や選択を効率的に行うことができます。

これを機に、ListBoxを活用して、よりインタラクティブで使いやすいアプリケーションを作成してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す